按照eino文档, 使用tool的方式接入deepseek-r1:8b, 结果一直报错
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)
}
}
报错内容是不允许添加tool吗? deepseek r1目前不支持tool call