eino icon indicating copy to clipboard operation
eino copied to clipboard

按照eino文档, 使用tool的方式接入deepseek-r1:8b, 结果一直报错

Open yangmeng6-tal opened this issue 9 months ago • 1 comments

package main

import ( "context" "fmt" "log"

"github.com/beego/beego/logs"
"github.com/cloudwego/eino-ext/components/model/ollama"
"github.com/cloudwego/eino/components/tool"
"github.com/cloudwego/eino/compose"
"github.com/cloudwego/eino/schema"

)

type ListTool struct{}

func (t *ListTool) Info(ctx context.Context) (*schema.ToolInfo, error) { return &schema.ToolInfo{ Name: "weather", }, nil }

func (t *ListTool) InvokableRun(ctx context.Context, argumentsInJSON string, opts ...tool.Option) (string, error) { logs.Info("============================== args : %s", argumentsInJSON) return {"city": "深圳1", "date": "tomorrow1"}, nil }

func (t *ListTool) StreamableRun(ctx context.Context, argumentsInJSON string, opts ...tool.Option) (*schema.StreamReader[string], error) { return schema.StreamReaderFromArray([]string{"1", "2", "3", "4"}), nil }

func main() { // 创建工具节点 ctx := context.TODO() // Mock LLM 输出作为输入 input := &schema.Message{ Role: schema.Assistant, ToolCalls: []schema.ToolCall{ { Function: schema.FunctionCall{ Name: "weather", Arguments: {"city": "深圳", "date": "tomorrow"}, }, }, }, }

chatModel, err := ollama.NewChatModel(ctx, &ollama.ChatModelConfig{
	BaseURL: "http://localhost:11434", // Ollama 服务地址
	Model:   "deepseek-r1:8b",         // 模型名称
})
if err != nil {
	logs.Error("new chatmodel err : %s", err.Error())
	return
}
todoTools := []tool.BaseTool{
	&ListTool{}, // 实现Tool接口
}

toolInfos := make([]*schema.ToolInfo, 0, len(todoTools))
for _, tool := range todoTools {
	info, err := tool.Info(ctx)
	if err != nil {
		log.Fatal(err)
	}
	toolInfos = append(toolInfos, info)
	fmt.Println("==========================")
}
chain := compose.NewChain[[]*schema.Message, []*schema.Message]()
err = chatModel.BindTools(toolInfos)
if err != nil {
	log.Fatal(err)
}
todoToolsNode, err := compose.NewToolNode(context.Background(), &compose.ToolsNodeConfig{
	Tools: todoTools,
})
if err != nil {
	log.Fatal(err)
}

chain.AppendChatModel(chatModel, compose.WithNodeName("chat_model"))
chain.AppendToolsNode(todoToolsNode, compose.WithNodeName("tools"))

agent, err := chain.Compile(ctx)
if err != nil {
	log.Fatal(err)
}

// 运行示例
out, err := agent.Invoke(ctx, []*schema.Message{input})
if err != nil {
	log.Fatal(err)
}

for _, m := range out {
	fmt.Printf("content : %s\n", m.Content)
}

}

yangmeng6-tal avatar Mar 02 '25 15:03 yangmeng6-tal

报错内容是不允许添加tool吗? deepseek r1目前不支持tool call

meguminnnnnnnnn avatar Mar 04 '25 03:03 meguminnnnnnnnn