From 1fdef60117a07aca3d8ce448596b1b9c7c028a49 Mon Sep 17 00:00:00 2001 From: "shentong.martin" Date: Mon, 25 May 2026 14:04:11 +0800 Subject: [PATCH 1/2] docs(eino): sync chinese docs from feishu --- .../components/agentic_chat_model_guide.md | 1259 ++++------------- .../components/agentic_chat_template_guide.md | 457 +++--- .../components/agentic_tools_node_guide.md | 554 ++++---- .../img/eino/RHFww5teMhOfEybBazKcMpWynIb.png | Bin 0 -> 342760 bytes 4 files changed, 793 insertions(+), 1477 deletions(-) create mode 100644 static/img/eino/RHFww5teMhOfEybBazKcMpWynIb.png diff --git a/content/zh/docs/eino/core_modules/components/agentic_chat_model_guide.md b/content/zh/docs/eino/core_modules/components/agentic_chat_model_guide.md index 55b36bf4cb..bed0ad685a 100644 --- a/content/zh/docs/eino/core_modules/components/agentic_chat_model_guide.md +++ b/content/zh/docs/eino/core_modules/components/agentic_chat_model_guide.md @@ -1,6 +1,6 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] title: AgenticModel 使用说明[Beta] @@ -8,1184 +8,449 @@ weight: 10 --- > 💡 -> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。 +> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。本文以当前 main 分支源码为准,代码位置主要包括 `components/model/interface.go`、`components/model/option.go` 与 `schema/agentic_message.go`。 ## 基本介绍 -AgenticModel 是一种以 “目标驱动的自主执行” 为核心的模型能力抽象。随着缓存、内置工具等能力在 OpenAI Responses API、Claude API 等先进厂商的 API 中得到原生支持,模型正在从 “一次性问答引擎” 升级为 “面向用户目标的自主行动体”:能够围绕目标进行闭环规划、调用工具与迭代执行,从而完成更复杂的任务。 +`AgenticModel` 是 Eino 面向 agentic provider API 的模型组件抽象。它使用 `*schema.AgenticMessage` 作为消息载体,通过有序的 `ContentBlock` 表达文本、reasoning、多模态内容、函数工具调用、服务端内置工具调用、MCP 工具调用和审批结果。 -### 与 ChatModel 差异 +与传统 `ChatModel` 相比,`AgenticModel` 更适合直接承接 OpenAI Responses API、Claude API、Gemini API 等 provider 原生的 agentic 能力:一次模型请求中可能包含多段 reasoning、多次工具调用、服务端工具结果或 MCP 审批信息。Eino 不再把这些内容压平成单一文本字段,而是保留为结构化块。 + +## 与 ChatModel 的关系 - - - - - + + + + + + +
AgenticModelChatModel
定位基于 AgenticMessage 的 Model 组件抽象基于 Message 的 Model 组件抽象
核心实体
  • AgenticMessage
  • ContentBlock
  • Message
    能力
  • 模型多轮对话生成
  • 会话缓存
  • 支持调用多种内置工具
  • 支持调用 MCP 工具
  • 更好的模型适配性
  • 模型单轮对话生成
  • 会话缓存
  • 支持调用简单的内置工具
  • 相关组件
  • AgenticTemplate
  • AgenticToolsNode
  • ChatTemplate
  • ToolsNode
  • 维度AgenticModelChatModel
    基础接口
    model.BaseModel[*schema.AgenticMessage]
    model.BaseModel[*schema.Message]
    类型别名
    type AgenticModel = BaseModel[*schema.AgenticMessage]
    type BaseChatModel = BaseModel[*schema.Message]
    消息结构
    AgenticMessage.ContentBlocks
    Message.Content
    ToolCalls
    ToolCallID
    等字段
    工具绑定调用时通过
    model.WithTools(...)
    model.WithAgenticToolChoice(...)
    传入
    ToolCallingChatModel.WithTools(...)
    或调用时 Option
    表达能力reasoning、多模态输入输出、function tool、server tool、MCP tool、approval传统 chat completion 消息与 tool call
    下游执行器
    compose.AgenticToolsNode
    compose.ToolsNode
    -Server-side tool(如 web_search)、MCP tool 在模型提供商得到了原生支持,继而一次接口请求响应中可能会包含多次推理-行动的结果。以使用联网搜索这个能力举例 - -- 基于 ChatModel 实现,需要预先自定义实现联网搜索工具。一次推理-行动过程如下: - 1. 模型生成 tool call 参数 - 2. 用户侧执行工具 - 3. 给模型返回 tool result -- 基于 AgenticModel 实现,可以直接配置由模型提供商提供的原生联网搜索工具。一次接口请求过程如下: - 1. 模型根据用户问题自行调用联网搜索工具,并在模型服务端完成多次工具调用,即会产生多次推理-行动结果,直到完成用户任务。 - 2. 用户侧只管接收结果。 +> 💡 +> `AgenticModel` 没有 `WithTools` 方法。`WithTools` 是 `ToolCallingChatModel` 的实例方法;agentic 路径的工具信息通过 `model.WithTools(tools)` 作为请求级 Option 传入。 ## 组件定义 -### 接口定义 +### BaseModel 与 AgenticModel -> 代码位置:[https://github.com/cloudwego/eino/tree/main/components/model/interface.go](https://github.com/cloudwego/eino/tree/main/components/model/interface.go) +代码位置:`components/model/interface.go` ```go -type AgenticModel interface { - Generate(ctx context.Context, input []*schema.AgenticMessage, opts ...Option) (*schema.AgenticMessage, error) - Stream(ctx context.Context, input []*schema.AgenticMessage, opts ...Option) (*schema.StreamReader[*schema.AgenticMessage], error) - - // WithTools returns a new Model instance with the specified tools bound. - // This method does not modify the current instance, making it safer for concurrent use. - WithTools(tools []*schema.ToolInfo) (AgenticModel, error) +// BaseModel is the generic base model interface parameterized by message type M. +type BaseModel[M any] interface { + Generate(ctx context.Context, input []M, opts ...Option) (M, error) + Stream(ctx context.Context, input []M, opts ...Option) (*schema.StreamReader[M], error) } -``` - -#### Generate 方法 - -- 功能:生成完整的模型响应 -- 参数: - - ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager - - input:输入消息列表 - - opts:可选参数,用于配置模型行为 -- 返回值: - - `*schema.AgenticMessage`:模型生成的响应消息 - - error:生成过程中的错误信息 - -#### Stream 方法 - -- 功能:以流式方式生成模型响应 -- 参数:与 Generate 方法相同 -- 返回值: - - `*schema.StreamReader[*schema.AgenticMessage]`:模型响应的流式读取器 - - error:生成过程中的错误信息 - -#### WithTools 方法 - -- 功能:为模型绑定可用的工具 -- 参数: - - tools:工具信息列表 -- 返回值: - - Model: 绑定了 tools 的 AgenticModel 新实例 - - error:绑定过程中的错误信息 - -### AgenticMessage 结构体 -> 代码位置:[https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go](https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go) - -`AgenticMessage` 是与模型交互的基本单元。模型的一次完整响应被封装成一个 `AgenticMessage` ,它通过包含一组有序的 `ContentBlock` 来承载复杂的复合内容。`AgenticMessage` 对比 `Message` 最大的差异就是引入了 `ContentBlock` 数组的概念,能够承载 `AgenticModel` 的多次推理-行动输出。定义如下: - -```go -type AgenticMessage struct { - // Role is the message role. - Role AgenticRoleType - - // ContentBlocks is the list of content blocks. - ContentBlocks []*ContentBlock - - // ResponseMeta is the response metadata. - ResponseMeta *AgenticResponseMeta - - // Extra is the additional information. - Extra map[string]any -} +// AgenticModel is a type alias for BaseModel specialized with +// *schema.AgenticMessage. +type AgenticModel = BaseModel[*schema.AgenticMessage] ``` -`ContentBlock` 是 `AgenticMessage` 的基本组成单元,用于承载消息的具体内容。它被设计成一个多态结构,通过 `Type` 字段来标识当前块包含了哪种具体类型的数据,并持有对应的非空指针字段。`ContentBlock` 使得一条消息可以包含混合类型的富媒体内容或结构化数据,例如“文本 + 图片”或“推理过程 + 工具调用”,定义如下: - -```go -type ContentBlockType string - -const ( - ContentBlockTypeReasoning ContentBlockType = "reasoning" - ContentBlockTypeUserInputText ContentBlockType = "user_input_text" - ContentBlockTypeUserInputImage ContentBlockType = "user_input_image" - ContentBlockTypeUserInputAudio ContentBlockType = "user_input_audio" - ContentBlockTypeUserInputVideo ContentBlockType = "user_input_video" - ContentBlockTypeUserInputFile ContentBlockType = "user_input_file" - ContentBlockTypeAssistantGenText ContentBlockType = "assistant_gen_text" - ContentBlockTypeAssistantGenImage ContentBlockType = "assistant_gen_image" - ContentBlockTypeAssistantGenAudio ContentBlockType = "assistant_gen_audio" - ContentBlockTypeAssistantGenVideo ContentBlockType = "assistant_gen_video" - ContentBlockTypeFunctionToolCall ContentBlockType = "function_tool_call" - ContentBlockTypeFunctionToolResult ContentBlockType = "function_tool_result" - ContentBlockTypeServerToolCall ContentBlockType = "server_tool_call" - ContentBlockTypeServerToolResult ContentBlockType = "server_tool_result" - ContentBlockTypeMCPToolCall ContentBlockType = "mcp_tool_call" - ContentBlockTypeMCPToolResult ContentBlockType = "mcp_tool_result" - ContentBlockTypeMCPListToolsResult ContentBlockType = "mcp_list_tools_result" - ContentBlockTypeMCPToolApprovalRequest ContentBlockType = "mcp_tool_approval_request" - ContentBlockTypeMCPToolApprovalResponse ContentBlockType = "mcp_tool_approval_response" -) - -type ContentBlock struct { - Type ContentBlockType - - // Reasoning contains the reasoning content generated by the model. - Reasoning *Reasoning - - // UserInputText contains the text content provided by the user. - UserInputText *UserInputText - - // UserInputImage contains the image content provided by the user. - UserInputImage *UserInputImage - - // UserInputAudio contains the audio content provided by the user. - UserInputAudio *UserInputAudio - - // UserInputVideo contains the video content provided by the user. - UserInputVideo *UserInputVideo - - // UserInputFile contains the file content provided by the user. - UserInputFile *UserInputFile - - // AssistantGenText contains the text content generated by the model. - AssistantGenText *AssistantGenText - - // AssistantGenImage contains the image content generated by the model. - AssistantGenImage *AssistantGenImage - - // AssistantGenAudio contains the audio content generated by the model. - AssistantGenAudio *AssistantGenAudio - - // AssistantGenVideo contains the video content generated by the model. - AssistantGenVideo *AssistantGenVideo - - // FunctionToolCall contains the invocation details for a user-defined tool. - FunctionToolCall *FunctionToolCall - - // FunctionToolResult contains the result returned from a user-defined tool call. - FunctionToolResult *FunctionToolResult - - // ServerToolCall contains the invocation details for a provider built-in tool executed on the model server. - ServerToolCall *ServerToolCall - - // ServerToolResult contains the result returned from a provider built-in tool executed on the model server. - ServerToolResult *ServerToolResult - - // MCPToolCall contains the invocation details for an MCP tool managed by the model server. - MCPToolCall *MCPToolCall - - // MCPToolResult contains the result returned from an MCP tool managed by the model server. - MCPToolResult *MCPToolResult - - // MCPListToolsResult contains the list of available MCP tools reported by the model server. - MCPListToolsResult *MCPListToolsResult - - // MCPToolApprovalRequest contains the user approval request for an MCP tool call when required. - MCPToolApprovalRequest *MCPToolApprovalRequest - - // MCPToolApprovalResponse contains the user's approval decision for an MCP tool call. - MCPToolApprovalResponse *MCPToolApprovalResponse - - // StreamingMeta contains metadata for streaming responses. - StreamingMeta *StreamingMeta - - // Extra contains additional information for the content block. - Extra map[string]any -} -``` +### Generate -`AgenticResponseMeta` 是模型响应返回的元信息数据,其中 `TokenUsage` 是所有模型提供商都会返回的元信息。 `OpenAIExtension` 、`GeminiExtension` 、`ClaudeExtension` 分别是 OpenAI 、Gemini 、Claude 模型独有的扩展字段定义;其他模型提供商的扩展信息统一放在 `Extension` 中,具体定义由 **eino-ext** 中对应组件实现提供。 +`Generate` 阻塞直到模型返回完整响应。 ```go -type AgenticResponseMeta struct { - // TokenUsage is the token usage. - TokenUsage *TokenUsage - - // OpenAIExtension is the extension for OpenAI. - OpenAIExtension *openai.ResponseMetaExtension - - // GeminiExtension is the extension for Gemini. - GeminiExtension *gemini.ResponseMetaExtension - - // ClaudeExtension is the extension for Claude. - ClaudeExtension *claude.ResponseMetaExtension - - // Extension is the extension for other models, supplied by the component implementer. - Extension any -} +Generate(ctx context.Context, input []*schema.AgenticMessage, opts ...model.Option) (*schema.AgenticMessage, error) ``` -#### Reasoning - -Reasoning 类型用于表示模型的推理过程和思考内容。某些高级模型能够在生成最终回答之前进行内部推理,这些推理内容可以通过该类型进行传递。 +参数说明: -- 定义 - -```go -type Reasoning struct { - // Text is either the thought summary or the raw reasoning text itself. - Text string + + + + + +
    参数说明
    ctx
    请求上下文,也承载 callback manager 等运行时信息
    input
    按时间顺序排列的 agentic message 列表
    opts
    请求级模型配置,例如温度、工具、tool choice、模型名等
    - // Signature contains encrypted reasoning tokens. - // Required by some models when passing reasoning text back. - Signature string -} -``` +### Stream -- 示例 +`Stream` 返回增量消息流。调用方负责读取并关闭 `StreamReader`。 ```go -reasoning := &schema.Reasoning{ - Text: "用户现在需要我解决...", - Signature: "asjkhvipausdgy23oadlfdsf" -} +Stream(ctx context.Context, input []*schema.AgenticMessage, opts ...model.Option) (*schema.StreamReader[*schema.AgenticMessage], error) ``` -#### UserInputText - -UserInputText 是最基础的内容类型,用于传递纯文本输入。它是用户与模型交互的主要方式,适用于自然语言对话、指令传递和问题提问等场景。 - -- 定义 - ```go -type UserInputText struct { - // Text is the text content. - Text string +reader, err := m.Stream(ctx, messages) +if err != nil { + return err } -``` +defer reader.Close() -- 示例 - -```go -textInput := &schema.UserInputText{ - Text: "请帮我分析这段代码的性能瓶颈", +for { + chunk, err := reader.Recv() + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return err + } + // handle chunk } - -// 或使用便捷函数创建消息 -textInput := schema.UserAgenticMessage("请帮我分析这段代码的性能瓶颈") -textInput := schema.SystemAgenticMessage("你是一个智能助理") -textInput := schema.DeveloperAgenticMessage("你是一个智能助理") ``` -#### UserInputImage - -UserInputImage 用于向模型提供图像内容。支持通过 URL 引用或 Base64 编码的方式传递图像数据,适用于视觉理解、图像分析和多模态对话等场景。 - -- 定义 - -```go -type UserInputImage struct { - // URL is the HTTP/HTTPS link. - URL string +> 💡 +> `schema.StreamReader` 只能消费一次。如需多个消费者读取同一个流,应在读取前复制 reader,而不是在消费后复用。 - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string +## 请求级 Option - // MIMEType is the mime type, e.g. "image/png". - MIMEType string +代码位置:`components/model/option.go` - // Detail is the quality of the image url. - Detail ImageURLDetail -} -``` + + + + + + + +
    Option适用范围说明
    model.WithTools(tools)
    通用,agentic 路径常用设置本次请求可被模型调用的工具定义;
    nil
    会被规范化为空切片
    model.WithDeferredTools(tools)
    AgenticModel注册可被模型内置 tool search 延迟加载的工具;不要同时放入
    WithTools
    model.WithToolSearchTool(tool)
    AgenticModel注册模型用于检索 deferred tools 的 tool search 工具;不要放入
    WithTools
    model.WithAgenticToolChoice(choice)
    AgenticModel控制 agentic 模型如何选择 function/MCP/server tool
    model.WithToolChoice(choice, names...)
    ChatModel仅适用于 ChatModel 的 tool choice
    -- 示例 +`AgenticToolChoice` 定义在 `schema/tool.go`: ```go -// 使用 URL 方式 -imageInput := &schema.UserInputImage{ - URL: "https://example.com/chart.png", - MIMEType: "image/png", - Detail: schema.ImageURLDetailHigh, +type AgenticToolChoice struct { + Type ToolChoice + Allowed *AgenticAllowedToolChoice + Forced *AgenticForcedToolChoice } -// 使用 Base64 编码方式 -imageInput := &schema.UserInputImage{ - Base64Data: "iVBORw0KGgoAAAANSUhEUgAAAAUA...", - MIMEType: "image/png", +type AllowedTool struct { + FunctionName string + MCPTool *AllowedMCPTool + ServerTool *AllowedServerTool } ``` -#### UserInputAudio - -UserInputAudio 用于向模型提供音频内容。适用于语音识别、音频分析和多模态理解等场景。 +## AgenticMessage -- 定义 +代码位置:`schema/agentic_message.go` ```go -type UserInputAudio struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "audio/wav". - MIMEType string -} -``` +type AgenticRoleType string -- 示例 +const ( + AgenticRoleTypeSystem AgenticRoleType = "system" + AgenticRoleTypeUser AgenticRoleType = "user" + AgenticRoleTypeAssistant AgenticRoleType = "assistant" +) -```go -audioInput := &schema.UserInputAudio{ - URL: "https://example.com/voice.wav", - MIMEType: "audio/wav", +type AgenticMessage struct { + Role AgenticRoleType + ContentBlocks []*ContentBlock + ResponseMeta *AgenticResponseMeta + Extra map[string]any } ``` -#### UserInputVideo - -UserInputVideo 用于向模型提供视频内容。适用于视频理解、场景分析和动作识别等高级视觉任务。 - -- 定义 - -```go -type UserInputVideo struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "video/mp4". - MIMEType string -} -``` +`AgenticMessage` 只有 `system`、`user`、`assistant` 三类 role。工具调用和工具结果不是独立 role,而是由 `ContentBlock` 表达。 -- 示例 +### ResponseMeta ```go -videoInput := &schema.UserInputVideo{ - URL: "https://example.com/demo.mp4", - MIMEType: "video/mp4", +type AgenticResponseMeta struct { + TokenUsage *TokenUsage + OpenAIExtension *openai.ResponseMetaExtension + GeminiExtension *gemini.ResponseMetaExtension + ClaudeExtension *claude.ResponseMetaExtension + Extension any } ``` -#### UserInputFile - -UserInputFile 用于向模型提供文件内容。适用于文档分析、数据提取和知识理解等场景。 - -- 定义 +`TokenUsage` 是通用 token 统计;OpenAI、Gemini、Claude 的 provider 扩展使用专门字段;其他模型实现可以放入 `Extension`。 -```go -type UserInputFile struct { - // URL is the HTTP/HTTPS link. - URL string - - // Name is the filename. - Name string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "application/pdf". - MIMEType string -} -``` +## ContentBlock -- 示例 +`ContentBlock` 是 `AgenticMessage` 的最小内容单元。一个 message 可以包含多个有序 block,用于表达一次响应中的多段 reasoning、文本、多模态输出和工具事件。 ```go -fileInput := &schema.UserInputFile{ - URL: "https://example.com/report.pdf", - Name: "report.pdf", - MIMEType: "application/pdf", -} -``` +type ContentBlock struct { + Type ContentBlockType -#### AssistantGenText + Reasoning *Reasoning -AssistantGenText 是模型生成的文本内容,是最常见的模型输出形式。针对不同模型提供商,扩展字段的定义有所区分:OpenAI 模型使用 `OpenAIExtension`,Claude 模型使用 `ClaudeExtension`;其他模型提供商的扩展信息统一放在 `Extension` 中,具体定义由 **eino-ext** 中对应组件实现提供。 + UserInputText *UserInputText + UserInputImage *UserInputImage + UserInputAudio *UserInputAudio + UserInputVideo *UserInputVideo + UserInputFile *UserInputFile -- 定义 + AssistantGenText *AssistantGenText + AssistantGenImage *AssistantGenImage + AssistantGenAudio *AssistantGenAudio + AssistantGenVideo *AssistantGenVideo -```go -import ( - "github.com/cloudwego/eino/schema/claude" - "github.com/cloudwego/eino/schema/openai" -) + FunctionToolCall *FunctionToolCall + FunctionToolResult *FunctionToolResult -type AssistantGenText struct { - // Text is the generated text. - Text string + ToolSearchFunctionToolResult *ToolSearchFunctionToolResult - // OpenAIExtension is the extension for OpenAI. - OpenAIExtension *openai.AssistantGenTextExtension + ServerToolCall *ServerToolCall + ServerToolResult *ServerToolResult - // ClaudeExtension is the extension for Claude. - ClaudeExtension *claude.AssistantGenTextExtension + MCPToolCall *MCPToolCall + MCPToolResult *MCPToolResult + MCPListToolsResult *MCPListToolsResult + MCPToolApprovalRequest *MCPToolApprovalRequest + MCPToolApprovalResponse *MCPToolApprovalResponse - // Extension is the extension for other models. - Extension any + StreamingMeta *StreamingMeta + Extra map[string]any } ``` -- 示例 - - - 创建响应 - - ```go - textGen := &schema.AssistantGenText{ - Text: "根据您的需求,我建议采用以下方案...", - Extension: &AssistantGenTextExtension{ - Annotations: []*TextAnnotation{annotation}, - }, - } - ``` - - - 解析响应 - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticark" - ) - - // 断言成具体实现定义 - ext := textGen.Extension.(*agenticark.AssistantGenTextExtension) - ``` - -#### AssistantGenImage - -AssistantGenImage 是模型生成的图像内容。某些模型具备图像生成能力,可以根据文本描述创建图像,输出结果通过该类型传递。 - -- 定义 - -```go -type AssistantGenImage struct { - // URL is the HTTP/HTTPS link. - URL string + + + + + + + + + + + +
    类型常量对应字段说明
    reasoning
    ContentBlockTypeReasoning
    Reasoning
    模型 reasoning 摘要或原始 reasoning 文本
    用户输入
    ContentBlockTypeUserInputText/Image/Audio/Video/File
    UserInput*
    用户侧文本与多模态输入
    模型输出
    ContentBlockTypeAssistantGenText/Image/Audio/Video
    AssistantGen*
    模型生成的文本或多模态内容
    函数工具调用
    ContentBlockTypeFunctionToolCall
    FunctionToolCall
    provider 生成的本地 function tool call
    函数工具结果
    ContentBlockTypeFunctionToolResult
    FunctionToolResult
    用户侧执行 function tool 后返回给模型的结果
    tool search 结果
    ContentBlockTypeToolSearchResult
    ToolSearchFunctionToolResult
    客户端 tool search 发现并加载的工具定义
    服务端工具
    ContentBlockTypeServerToolCall/Result
    ServerToolCall/Result
    provider 服务端执行的内置工具,例如 web search
    MCP 工具
    ContentBlockTypeMCPToolCall/Result/ListToolsResult
    MCP*
    provider 侧托管的 MCP 工具调用、结果与工具列表
    MCP 审批
    ContentBlockTypeMCPToolApprovalRequest/Response
    MCPToolApproval*
    MCP 工具执行前的人类审批请求和响应
    - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string +> 💡 +> 当前 `ToolSearchFunctionToolResult` 字段的 JSON tag 是 `tool_search_function_tool_result`,但 `ContentBlockTypeToolSearchResult` 的字符串值是 `tool_search_result`。文档和业务逻辑应以源码定义为准。 - // MIMEType is the mime type, e.g. "image/png". - MIMEType string -} -``` +## 常用内容结构 -- 示例 +### Reasoning ```go -imageGen := &schema.AssistantGenImage{ - URL: "https://api.example.com/generated/image123.png", - MIMEType: "image/png", +type Reasoning struct { + Text string + Signature string } ``` -#### AssistantGenAudio - -AssistantGenAudio 是模型生成的音频内容。某些模型具备音频生成的能力,输出的音频数据通过该类型传递。 +`Signature` 用于某些 provider 的加密 reasoning token 回传场景。 -- 定义 +### 用户输入内容 ```go -type AssistantGenAudio struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "audio/wav". - MIMEType string +type UserInputText struct { + Text string } -``` -- 示例 - -```go -audioGen := &schema.AssistantGenAudio{ - URL: "https://api.example.com/generated/audio123.wav", - MIMEType: "audio/wav", +type UserInputImage struct { + URL string + Base64Data string + MIMEType string + Detail ImageURLDetail } -``` -#### AssistantGenVideo - -AssistantGenVideo 是模型生成的视频内容。某些模型具备视频生成的能力,输出的视频数据通过该类型传递。 - -- 定义 - -```go -type AssistantGenVideo struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. +type UserInputFile struct { + URL string + Name string Base64Data string - - // MIMEType is the mime type, e.g. "video/mp4". - MIMEType string + MIMEType string } ``` -- 示例 +`UserInputAudio` 与 `UserInputVideo` 同样支持 `URL`、`Base64Data`、`MIMEType`。 + +### 模型生成内容 ```go -audioGen := &schema.AssistantGenAudio{ - URL: "https://api.example.com/generated/audio123.wav", - MIMEType: "audio/wav", +type AssistantGenText struct { + Text string + OpenAIExtension *openai.AssistantGenTextExtension + ClaudeExtension *claude.AssistantGenTextExtension + Extension any } ``` -#### FunctionToolCall - -FunctionToolCall 表示模型发起的用户自定义函数工具调用。当模型需要执行特定功能时,会生成工具调用请求,包含工具名称和参数,由用户侧负责实际执行。 +`AssistantGenImage`、`AssistantGenAudio`、`AssistantGenVideo` 支持 `URL`、`Base64Data`、`MIMEType`。 -- 定义 +### Function tool call ```go type FunctionToolCall struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Arguments is the JSON string arguments for the function tool call. + CallID string + Name string Arguments string } ``` -- 示例 - -```go -toolCall := &schema.FunctionToolCall{ - CallID: "call_abc123", - Name: "get_weather", - Arguments: `{"location": "北京", "unit": "celsius"}`, -} -``` - -#### FunctionToolResult +`Arguments` 是 JSON 字符串,由模型生成并交给 `AgenticToolsNode` 执行。 -FunctionToolResult 表示用户自定义函数工具的执行结果。在用户侧执行完工具调用后,通过该类型将结果返回给模型,使模型继续生成响应。 +### Function tool result -- 定义 +当前实现中,`FunctionToolResult` 不再使用 `Result string`,而是使用 `Content []*FunctionToolResultContentBlock`,以统一承载文本和多模态工具结果。 ```go type FunctionToolResult struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Result is the function tool result returned by the user - Result string + CallID string + Name string + Content []*FunctionToolResultContentBlock } -``` - -- 示例 -```go -toolResult := &schema.FunctionToolResult{ - CallID: "call_abc123", - Name: "get_weather", - Result: `{"temperature": 15, "condition": "晴朗"}`, +type FunctionToolResultContentBlock struct { + Type FunctionToolResultContentBlockType + Text *UserInputText + Image *UserInputImage + Audio *UserInputAudio + Video *UserInputVideo + File *UserInputFile + Extra map[string]any } - -// 或使用便捷函数创建消息 -msg := schema.FunctionToolResultAgenticMessage( - "call_abc123", - "get_weather", - `{"temperature": 15, "condition": "晴朗"}`, -) ``` -#### ServerToolCall - -ServerToolCall 表示模型服务端内置工具的调用。某些模型提供商在服务端集成了特定工具(如网页搜索、代码执行器),模型可以自主调用这些工具,无需用户介入。`Arguments` 是模型调用服务端内置工具的参数,具体定义由 **eino-ext** 中对应组件实现提供。 - -- 定义 +### Server tool ```go type ServerToolCall struct { - // Name specifies the server-side tool invoked. - // Supplied by the model server (e.g., `web_search` for OpenAI, `googleSearch` for Gemini). - Name string - - // CallID is the unique identifier for the tool call. - // Empty if not provided by the model server. - CallID string - - // Arguments are the raw inputs to the server-side tool, - // supplied by the component implementer. + Name string + CallID string Arguments any } -``` - -- 示例 - - - 创建响应 - - ```go - serverCall := &schema.ServerToolCall{ - Name: "web_search", - CallID: "search_123", - Arguments: &ServerToolCallArguments{ - WebSearch: &WebSearchArguments{ - ActionType: WebSearchActionSearch, - Search: &WebSearchQuery{ - Query: "北京今天的天气", - }, - }, - }, - } - ``` - - - 解析响应 - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - ) - // 断言成具体实现定义 - args := serverCall.Arguments.(*agenticopenai.ServerToolCallArguments) - ``` - -#### ServerToolResult - -ServerToolResult 表示服务端内置工具的执行结果。模型服务端执行完工具调用后,将通过该类型返回结果。`Result` 是模型调用服务端内置工具的结果,具体定义由 **eino-ext** 中对应组件实现提供。 - -- 定义 - -```go type ServerToolResult struct { - // Name specifies the server-side tool invoked. - // Supplied by the model server (e.g., `web_search` for OpenAI, `googleSearch` for Gemini). - Name string - - // CallID is the unique identifier for the tool call. - // Empty if not provided by the model server. - CallID string - - // Result refers to the raw output generated by the server-side tool, - // supplied by the component implementer. - Result any + Name string + CallID string + Content any } ``` -- 示例 - - - 创建响应 - - ```go - serverResult := &schema.ServerToolResult{ - Name: "web_search", - CallID: "search_123", - Result: &ServerToolResult{ - WebSearch: &WebSearchResult{ - ActionType: WebSearchActionSearch, - Search: &WebSearchQueryResult{ - Sources: sources, - }, - }, - }, - } - ``` - - - 解析响应 - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - ) - - // 断言成具体实现定义 - args := serverResult.Result.(*agenticopenai.ServerToolResult) - ``` +Server tool 由模型服务端执行,`Arguments` 与 `Content` 的具体结构由组件实现和 provider 协议决定。 -#### MCPToolCall - -MCPToolCall 表示模型发起的 MCP (Model Context Protocol) 工具调用。某些模型允许配置 MCP 工具并自主调用,无需用户介入。 - -- 定义 +### MCP tool ```go type MCPToolCall struct { - // ServerLabel is the MCP server label used to identify it in tool calls - ServerLabel string - - // ApprovalRequestID is the approval request ID. + ServerLabel string ApprovalRequestID string - - // CallID is the unique ID of the tool call. - CallID string - - // Name is the name of the tool to run. - Name string - - // Arguments is the JSON string arguments for the tool call. - Arguments string -} -``` - -- 示例 - -```go -mcpCall := &schema.MCPToolCall{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Arguments: `{"sql": "SELECT * FROM users LIMIT 10"}`, + CallID string + Name string + Arguments string } -``` - -#### MCPToolResult -MCPToolResult 表示模型返回的 MCP 工具执行结果。模型自主完成 MCP 工具调用后,结果或错误信息会通过该类型返回。 - -- 定义 - -```go type MCPToolResult struct { - // ServerLabel is the MCP server label used to identify it in tool calls - ServerLabel string - - // CallID is the unique ID of the tool call. - CallID string - - // Name is the name of the tool to run. - Name string - - // Result is the JSON string with the tool result. - Result string - - // Error returned when the server fails to run the tool. - Error *MCPToolCallError -} - -type MCPToolCallError struct { - // Code is the error code. - Code *int64 - - // Message is the error message. - Message string -} -``` - -- 示例 - -```go -// MCP 工具调用成功 -mcpResult := &schema.MCPToolResult{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Result: `{"rows": [...], "count": 10}`, -} - -// MCP 工具调用失败 -errorCode := int64(500) -mcpError := &schema.MCPToolResult{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Error: &schema.MCPToolCallError{ - Code: &errorCode, - Message: "数据库连接失败", - }, -} -``` - -#### MCPListToolsResult - -MCPListToolsResult 表示模型返回的 MCP 服务器可用工具列表的查询结果。支持配置 MCP 工具的模型,可以向 MCP 服务器自主发起可用工具列表查询请求,查询结果将通过该类型返回。 - -- 定义 - -```go -type MCPListToolsResult struct { - // ServerLabel is the MCP server label used to identify it in tool calls. ServerLabel string - - // Tools is the list of tools available on the server. - Tools []*MCPListToolsItem - - // Error returned when the server fails to list tools. - Error string -} - -type MCPListToolsItem struct { - // Name is the name of the tool. - Name string - - // Description is the description of the tool. - Description string - - // InputSchema is the JSON schema that describes the tool input parameters. - InputSchema *jsonschema.Schema + CallID string + Name string + Content string + Error *MCPToolCallError } ``` -- 示例 - -```go -toolsList := &schema.MCPListToolsResult{ - ServerLabel: "database-server", - Tools: []*schema.MCPListToolsItem{ - { - Name: "execute_query", - Description: "执行 SQL 查询", - InputSchema: &jsonschema.Schema{...}, - }, - { - Name: "create_table", - Description: "创建数据表", - InputSchema: &jsonschema.Schema{...}, - }, - }, -} -``` - -#### MCPToolApprovalRequest - -MCPToolApprovalRequest 表示需要用户批准的 MCP 工具调用请求。在模型自主调用 MCP 工具流程中,某些敏感或高风险操作(如数据删除、外部支付等)需要用户明确授权才能执行。部分模型支持配置 MCP 工具调用审批策略,模型每次调用高危 MCP 工具前,会通过该类型返回调用授权请求。 - -- 定义 +MCP 审批相关结构: ```go type MCPToolApprovalRequest struct { - // ID is the approval request ID. - ID string - - // Name is the name of the tool to run. - Name string - - // Arguments is the JSON string arguments for the tool call. - Arguments string - - // ServerLabel is the MCP server label used to identify it in tool calls. + ID string + Name string + Arguments string ServerLabel string } -``` - -- 示例 - -```go -approvalReq := &schema.MCPToolApprovalRequest{ - ID: "approval_20260112_001", - Name: "delete_records", - Arguments: `{"table": "users", "condition": "inactive=true", "estimated_count": 150}`, - ServerLabel: "database-server", -} -``` - -#### MCPToolApprovalResponse - -MCPToolApprovalResponse 表示用户对 MCP 工具调用的审批决策。在收到 MCPToolApprovalRequest 后,用户需要审查操作详情并做出决策,用户可以选择批准或拒绝操作,并可选提供决策理由。 -- 定义 - -```go type MCPToolApprovalResponse struct { - // ApprovalRequestID is the approval request ID being responded to. ApprovalRequestID string - - // Approve indicates whether the request is approved. - Approve bool - - // Reason is the rationale for the decision. - // Optional. - Reason string -} -``` - -- 示例 - -```go -approvalResp := &schema.MCPToolApprovalResponse{ - ApprovalRequestID: "approval_789", - Approve: true, - Reason: "已确认删除非活跃用户", -} -``` - -#### StreamingMeta - -StreamingMeta 用于流式响应场景,标识内容块在最终响应中的位置。在流式生成过程中,内容可能以多个块的形式逐步返回,通过索引可以正确组装完整响应。 - -- 定义 - -```go -type StreamingMeta struct { - // Index specifies the index position of this block in the final response. - Index int + Approve bool + Reason string } ``` -- 示例 - -```go -textGen := &schema.AssistantGenText{Text: "这是第一部分"} -meta := &schema.StreamingMeta{Index: 0} -block := schema.NewContentBlockChunk(textGen, meta) -``` - -### 公共 Option - -AgenticModel 与 ChatModel 复用一套公共 Option 用于配置模型行为。此外,AgenticModel 还提供了一些仅面向自身的专属配置项。 - -> 代码位置:[https://github.com/cloudwego/eino/tree/main/components/model/option.go](https://github.com/cloudwego/eino/tree/main/components/model/option.go) - - - - - - - - - - - - -
    AgenticModelChatModel
    Temperature支持支持
    Model支持支持
    TopP支持支持
    Tools支持支持
    ToolChoice支持支持
    MaxTokens支持支持
    AllowedToolNames不支持支持
    Stop部分组件实现支持支持
    AllowedTools支持不支持
    +## 构造辅助函数 -相应地,AgenticModel 新增了以下方法设置 Option +### 快捷消息 ```go -// WithAgenticToolChoice is the option to set tool choice for the agentic model. -func WithAgenticToolChoice(toolChoice schema.ToolChoice, allowedTools ...*schema.AllowedTool) Option {} +msg := schema.SystemAgenticMessage("You are a helpful assistant.") +msg := schema.UserAgenticMessage("Analyze this file.") ``` -#### 组件实现自定义 Option +`SystemAgenticMessage` 与 `UserAgenticMessage` 都会创建一个带 `UserInputText` block 的 `AgenticMessage`。 -WrapImplSpecificOptFn 方法为组件实现提供注入自定义 Option 的能力。开发者需要在具体实现中定义专属的 Option 类型,并提供对应的 Option 配置方法。 +### NewContentBlock ```go -type openaiOptions struct { - maxToolCalls *int - maxOutputTokens *int64 -} - -func WithMaxToolCalls(maxToolCalls int) model.Option { - return model.WrapImplSpecificOptFn(func(o *openaiOptions) { - o.maxToolCalls = &maxToolCalls - }) -} +block := schema.NewContentBlock(&schema.AssistantGenText{ + Text: "done", +}) -func WithMaxOutputTokens(maxOutputTokens int64) model.Option { - return model.WrapImplSpecificOptFn(func(o *openaiOptions) { - o.maxOutputTokens = &maxOutputTokens - }) -} +chunk := schema.NewContentBlockChunk( + &schema.AssistantGenText{Text: "partial"}, + &schema.StreamingMeta{Index: 0}, +) ``` -## 使用方式 +`NewContentBlock` 会根据传入的具体内容类型自动设置 `ContentBlock.Type` 与对应字段;不支持的类型会返回 `nil`。 -### 单独使用 +## 与 AgenticToolsNode 的协作 -- 非流式调用 +`AgenticModel` 生成本地函数工具调用时,会在 assistant message 中产生 `FunctionToolCall` block。`compose.AgenticToolsNode` 会读取这些 block,执行对应 `tool.BaseTool`,再把结果转换成 role 为 `user` 的 `FunctionToolResult` block 返回给模型。 ```go -import ( - "context" - - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - "github.com/cloudwego/eino/schema" - openaischema "github.com/cloudwego/eino/schema/openai" - "github.com/eino-contrib/jsonschema" - "github.com/openai/openai-go/v3/responses" - "github.com/wk8/go-ordered-map/v2" -) - -func main() { - ctx := context.Background() - - am, _ := agenticopenai.New(ctx, &agenticopenai.Config{}) - - input := []*schema.AgenticMessage{ - schema.UserAgenticMessage("what is the weather like in Beijing"), - } - - am_, _ := am.WithTools([]*schema.ToolInfo{ - { - Name: "get_weather", - Desc: "get the weather in a city", - ParamsOneOf: schema.NewParamsOneOfByJSONSchema(&jsonschema.Schema{ - Type: "object", - Properties: orderedmap.New[string, *jsonschema.Schema]( - orderedmap.WithInitialData( - orderedmap.Pair[string, *jsonschema.Schema]{ - Key: "city", - Value: &jsonschema.Schema{ - Type: "string", - Description: "the city to get the weather", - }, - }, - ), - ), - Required: []string{"city"}, - }), - }, - }) - - msg, _ := am_.Generate(ctx, input) +input := &schema.AgenticMessage{ + Role: schema.AgenticRoleTypeAssistant, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolCall{ + CallID: "call_1", + Name: "get_weather", + Arguments: `{"city":"Beijing"}`, + }), + }, } -``` - -- 流式调用 - -```go -import ( - "context" - "errors" - "io" - - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - "github.com/cloudwego/eino/components/model" - "github.com/cloudwego/eino/schema" - "github.com/openai/openai-go/v3/responses" -) - -func main() { - ctx := context.Background() - - am, _ := agenticopenai.New(ctx, &agenticopenai.Config{}) - - serverTools := []*agenticopenai.ServerToolConfig{ - { - WebSearch: &responses.WebSearchToolParam{ - Type: responses.WebSearchToolTypeWebSearch, - }, - }, - } - - allowedTools := []*schema.AllowedTool{ - { - ServerTool: &schema.AllowedServerTool{ - Name: string(agenticopenai.ServerToolNameWebSearch), - }, - }, - } - - opts := []model.Option{ - model.WithToolChoice(schema.ToolChoiceForced, allowedTools...), - agenticopenai.WithServerTools(serverTools), - } - - input := []*schema.AgenticMessage{ - schema.UserAgenticMessage("what's cloudwego/eino"), - } - - resp, _ := am.Stream(ctx, input, opts...) - - var msgs []*schema.AgenticMessage - for { - msg, err := resp.Recv() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - } - msgs = append(msgs, msg) - } - concatenated, _ := schema.ConcatAgenticMessages(msgs) -} +results, err := toolsNode.Invoke(ctx, input) ``` -### 在编排中使用 +输出结构示意: ```go -import ( - "github.com/cloudwego/eino/schema" - "github.com/cloudwego/eino/compose" -) - -func main() { - /* 初始化 AgenticModel - * am, err := xxx - */ - - // 在 Chain 中使用 - c := compose.NewChain[[]*schema.AgenticMessage, *schema.AgenticMessage]() - c.AppendAgenticModel(am) - - - // 在 Graph 中使用 - g := compose.NewGraph[[]*schema.AgenticMessage, *schema.AgenticMessage]() - g.AddAgenticModelNode("model_node", cm) +&schema.AgenticMessage{ + Role: schema.AgenticRoleTypeUser, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolResult{ + CallID: "call_1", + Name: "get_weather", + Content: []*schema.FunctionToolResultContentBlock{ + { + Type: schema.FunctionToolResultContentBlockTypeText, + Text: &schema.UserInputText{Text: "sunny"}, + }, + }, + }), + }, } ``` -## Option 和 Callback 使用 - -### Option 使用 - -```go -import "github.com/cloudwego/eino/components/model" - -response, err := am.Generate(ctx, messages, - model.WithTemperature(0.7), - model.WithModel("gpt-5"), -) -``` - -### Callback 使用 +## 最小调用示例 ```go -import ( - "context" - - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/components/model" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" - callbacksHelper "github.com/cloudwego/eino/utils/callbacks" -) - -// 创建 callback handler -handler := &callbacksHelper.AgenticModelCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *model.AgenticCallbackInput) context.Context { - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *model.AgenticCallbackOutput) context.Context { - return ctx - }, - OnError: func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context { - return ctx - }, - OnEndWithStreamOutput: func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[*model.AgenticCallbackOutput]) context.Context { - defer output.Close() - - for { - chunk, err := output.Recv() - if errors.Is(err, io.EOF) { - break - } - ... - } - - return ctx - }, +messages := []*schema.AgenticMessage{ + schema.SystemAgenticMessage("You are a concise assistant."), + schema.UserAgenticMessage("Search recent Go release notes and summarize them."), } -// 使用 callback handler -helper := callbacksHelper.NewHandlerHelper(). - AgenticModel(handler). - Handler() - -/*** compose a chain -* chain := NewChain -* chain.Appendxxx(). -* Appendxxx(). -* ... -*/ - -// 在运行时使用 -runnable, err := chain.Compile() +resp, err := m.Generate(ctx, messages, + model.WithTools([]*schema.ToolInfo{searchToolInfo}), + model.WithAgenticToolChoice(&schema.AgenticToolChoice{ + Type: schema.ToolChoiceAllowed, + }), +) if err != nil { return err } -result, err := runnable.Invoke(ctx, messages, compose.WithCallbacks(helper)) + +for _, block := range resp.ContentBlocks { + if block.Type == schema.ContentBlockTypeAssistantGenText && block.AssistantGenText != nil { + fmt.Println(block.AssistantGenText.Text) + } +} ``` -## 官方实现 +## 使用建议 -待补充 +- 优先使用 `schema.NewContentBlock` 构造 block,避免 `Type` 与内容字段不一致。 +- 工具结果应使用 `FunctionToolResult.Content` 表达,避免把多模态结果压平成字符串。 +- Provider 专属响应信息应放入对应扩展字段或 `Extension`,不要写入主结构的通用字段。 +- 流式输出中可以通过 `StreamingMeta.Index` 表示当前 chunk 对应最终响应中的 block 索引。 +- 文档和业务代码中不要假设存在 `tool` role;agentic 路径的工具事件由 `ContentBlock` 承载。 diff --git a/content/zh/docs/eino/core_modules/components/agentic_chat_template_guide.md b/content/zh/docs/eino/core_modules/components/agentic_chat_template_guide.md index 6c57ec69a4..1a5e3759df 100644 --- a/content/zh/docs/eino/core_modules/components/agentic_chat_template_guide.md +++ b/content/zh/docs/eino/core_modules/components/agentic_chat_template_guide.md @@ -1,6 +1,6 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] title: AgenticChatTemplate 使用说明[Beta] @@ -8,21 +8,17 @@ weight: 11 --- > 💡 -> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。 +> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。本文以当前 main 分支源码为准,代码位置主要包括 `components/prompt`、`schema/agentic_message.go` 与 `compose`。 -## **基本介绍** +## 基本介绍 -Prompt 组件是一个用于处理和格式化提示模板的组件,其中 AgenticChatTemplate 是专为 AgenticMessage 定义组件抽象,定义与用法与现存的 ChatTemplate 抽象基本相同。它的主要作用是将用户提供的变量值填充到预定义的消息模板中,生成用于与语言模型交互的标准消息格式。这个组件可用于以下场景: +`AgenticChatTemplate` 是面向 `*schema.AgenticMessage` 的 Prompt 组件抽象,用于把 `map[string]any` 中的变量填充到 agentic message 模板中,并输出 `[]*schema.AgenticMessage` 供 `AgenticModel` 或后续编排节点使用。 -- 构建结构化的系统提示 -- 处理多轮对话的模板 (包括 history) -- 实现可复用的提示模式 +它与已有 `ChatTemplate` 的设计基本一致,但消息类型从 `*schema.Message` 切换为 `*schema.AgenticMessage`,并且模板渲染只作用于用户输入类内容块。 -## **组件定义** +## 组件定义 -### **接口定义** - -> 代码位置:[https://github.com/cloudwego/eino/tree/main/components/prompt/interface.go](https://github.com/cloudwego/eino/tree/main/components/prompt/interface.go) +代码位置:`components/prompt/interface.go` ```go type AgenticChatTemplate interface { @@ -30,293 +26,314 @@ type AgenticChatTemplate interface { } ``` -#### **Format 方法** +`Format` 参数说明: + + + + + + +
    参数说明
    ctx
    请求上下文,也承载 callback manager 等运行时信息
    vs
    模板变量表,key 为占位符名称,value 为实际值
    opts
    Prompt 组件 Option,支持实现侧自定义扩展
    + +返回值: + + + + + +
    返回值说明
    []*schema.AgenticMessage
    渲染后的 agentic message 列表
    error
    缺少变量、变量类型不匹配或模板渲染失败时返回错误
    + +## 构造方式 + +### FromAgenticMessages + +代码位置:`components/prompt/agentic_chat_template.go` + +```go +func FromAgenticMessages(formatType schema.FormatType, templates ...schema.AgenticMessagesTemplate) *DefaultAgenticChatTemplate +``` + +`FromAgenticMessages` 不返回 `error`。它接收模板格式和一组 `schema.AgenticMessagesTemplate`,返回默认实现 `*DefaultAgenticChatTemplate`。 -- 功能:将变量值填充到消息模板中 -- 参数: - - ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager - - vs:变量值映射,用于填充模板中的占位符 - - opts:可选参数,用于配置格式化行为 -- 返回值: - - `[]*schema.AgenticMessage`:格式化后的消息列表 - - error:格式化过程中的错误信息 +```go +template := prompt.FromAgenticMessages(schema.FString, + schema.SystemAgenticMessage("You are a {role}."), + schema.AgenticMessagesPlaceholder("history", true), + schema.UserAgenticMessage("Please help me {task}."), +) +``` -### **内置模板化方式** +### 支持的 FormatType -Prompt 组件内置支持三种模板化方式: + + + + + +
    格式常量占位符示例适用场景
    FString
    schema.FString
    {role}
    简单变量替换
    GoTemplate
    schema.GoTemplate
    {{.role}}
    需要 Go
    text/template
    能力的场景
    Jinja2
    schema.Jinja2
    {{ role }}
    需要 Jinja2 语法的场景
    -1. FString 格式 (schema.FString) +## AgenticMessagesTemplate - - 使用 `{variable}` 语法进行变量替换 - - 简单直观,适合基础文本替换场景 - - 示例:`"你是一个{role},请帮我{task}。"` -2. GoTemplate 格式 (schema.GoTemplate) +代码位置:`schema/agentic_message.go` - - 使用 Go 标准库的 text/template 语法 - - 支持条件判断、循环等复杂逻辑 - - 示例:`"{{if .expert}}作为专家{{end}}请{{.action}}"` -3. Jinja2 格式 (schema.Jinja2) +```go +type AgenticMessagesTemplate interface { + Format(ctx context.Context, vs map[string]any, formatType FormatType) ([]*AgenticMessage, error) +} +``` + +当前常用实现包括: - - 使用 Jinja2 模板语法 - - 示例:`"{% if level == 'expert' %}以专家的角度{% endif %}分析{{topic}}"` + + + + + + +
    构造方式说明
    &schema.AgenticMessage{...}
    AgenticMessage
    自身实现了
    AgenticMessagesTemplate
    schema.SystemAgenticMessage(text)
    构造
    system
    role 消息
    schema.UserAgenticMessage(text)
    构造
    user
    role 消息
    schema.AgenticMessagesPlaceholder(key, optional)
    从变量表中插入一组历史 agentic messages
    -### **公共 Option** +### 模板渲染范围 -AgenticChatTemplate 与 ChatTemplate 共用一组公共 Option 。 +`AgenticMessage.Format` 只格式化用户输入类 block: -## **使用方式** +- `ContentBlockTypeUserInputText` +- `ContentBlockTypeUserInputImage` +- `ContentBlockTypeUserInputAudio` +- `ContentBlockTypeUserInputVideo` +- `ContentBlockTypeUserInputFile` -AgenticChatTemplate 一般用于 AgenticModel 之前做上下文准备的。 +模型输出、reasoning、tool call、tool result、MCP 和 server tool 相关 block 不作为 prompt 模板内容渲染。 -### 创建方法 +> 💡 +> 推荐用 `schema.SystemAgenticMessage`、`schema.UserAgenticMessage` 和 `schema.NewContentBlock` 构造模板,避免手动设置 `ContentBlock.Type` 时与内容字段不一致。 -- `prompt.FromAgenticMessages()` - - 用于把多个 message 变成一个 agentic chat template。 -- `schema.AgenticMessage{}` - - schema.AgenticMessage 是实现了 Format 接口的结构体,因此可直接构建 `schema.AgenticMes``sa``ge{}` 作为 template -- `schema.DeveloperAgenticMessage()` - - 此方法是构建 role 为 "developer" 的 message 快捷方法 -- `schema.SystemAgenticMessage()` - - 此方法是构建 role 为 "system" 的 message 快捷方法 -- `schema.UserAgenticMessage()` - - 此方法是构建 role 为 "user" 的 message 快捷方法 -- `schema.FunctionToolResultAgenticMessage()` - - 此方法是构建 role 为 "user" 的 tool call message 快捷方法 -- `schema.AgenticMessagesPlaceholder()` - - 可用于把一个 `[]*schema.AgenticMessage` 插入到 message 列表中,常用于插入历史对话 +## Placeholder -### **单独使用** +代码位置:`schema/agentic_message.go` ```go -import ( - "github.com/cloudwego/eino/components/prompt" - "github.com/cloudwego/eino/schema" -) +func AgenticMessagesPlaceholder(key string, optional bool) AgenticMessagesTemplate +``` -// 创建模板 -template := prompt.FromAgenticMessages(schema.FString, - schema.SystemAgenticMessage("你是一个{role}。"), - schema.AgenticMessagesPlaceholder("history_key", false), - schema.UserAgenticMessage("请帮我{task}") -) +行为规则: + + + + + + + +
    场景行为
    vs[key]
    存在且类型为
    []*schema.AgenticMessage
    原样插入该消息列表
    vs[key]
    不存在且
    optional=true
    返回空切片,不报错
    vs[key]
    不存在且
    optional=false
    返回错误
    vs[key]
    类型不是
    []*schema.AgenticMessage
    返回错误
    -// 准备变量 -variables := map[string]any{ - "role": "专业的助手", - "task": "写一首诗", - "history_key": []*schema.AgenticMessage{ - { - Role: schema.AgenticRoleTypeUser, - ContentBlocks: []*schema.ContentBlock{ - schema.NewContentBlock(&schema.UserInputText{Text: "告诉我油画是什么?"}), - }, - }, - { - Role: schema.AgenticRoleTypeAssistant, - ContentBlocks: []*schema.ContentBlock{ - schema.NewContentBlock(&schema.AssistantGenText{Text: "油画是xxx"}), - }, - }, +示例: + +```go +history := []*schema.AgenticMessage{ + schema.UserAgenticMessage("What is oil painting?"), + { + Role: schema.AgenticRoleTypeAssistant, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.AssistantGenText{Text: "Oil painting is ..."}), + }, }, } -// 格式化模板 -messages, err := template.Format(context.Background(), variables) +messages, err := template.Format(ctx, map[string]any{ + "role": "professional assistant", + "task": "write a short poem", + "history": history, +}) +if err != nil { + return err +} ``` -### **在编排中使用** +## 单独使用 ```go -import ( - "github.com/cloudwego/eino/components/prompt" - "github.com/cloudwego/eino/schema" - "github.com/cloudwego/eino/compose" +template := prompt.FromAgenticMessages(schema.FString, + schema.SystemAgenticMessage("You are a {role}."), + schema.AgenticMessagesPlaceholder("history", true), + schema.UserAgenticMessage("Please help me {task}."), ) -// 在 Chain 中使用 -chain := compose.NewChain[map[string]any, []*schema.AgenticMessage]() -chain.AppendAgenticChatTemplate(template) - -// 编译并运行 -runnable, err := chain.Compile() +messages, err := template.Format(ctx, map[string]any{ + "role": "concise assistant", + "task": "summarize the following requirement", + "history": []*schema.AgenticMessage{ + schema.UserAgenticMessage("Previous question"), + }, +}) if err != nil { return err } -result, err := runnable.Invoke(ctx, variables) - -// 在 Graph 中使用 -graph := compose.NewGraph[map[string]any, []*schema.AgenticMessage]() -graph.AddAgenticChatTemplateNode("template_node", template) ``` -### 从前驱节点的输出中获取数据 +## 在编排中使用 + +### Chain -在 AddNode 时,可以通过添加 WithOutputKey 这个 Option 来把节点的输出转成 Map: +代码位置:`compose/chain.go` ```go -// 这个节点的输出,会从 string 改成 map[string]any, -// 且 map 中只有一个元素,key 是 your_output_key,value 是实际的的节点输出的 string -graph.AddLambdaNode("your_node_key", compose.InvokableLambda(func(ctx context.Context, input []*schema.AgenticMessage) (str string, err error) { - // your logic - return -}), compose.WithOutputKey("your_output_key")) +func (c *Chain[I, O]) AppendAgenticChatTemplate(node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *Chain[I, O] ``` -把前驱节点的输出转成 map[string]any 并设置好 key 后,在后置的 AgenticChatTemplate 节点中使用该 key 对应的 value。 - -## **Option 和 Callback 使用** - -### **Callback 使用示例** - ```go -import ( - "context" +chain := compose.NewChain[map[string]any, *schema.AgenticMessage]() +chain.AppendAgenticChatTemplate(template) +chain.AppendAgenticModel(model) +``` - callbackHelper "github.com/cloudwego/eino/utils/callbacks" - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/components/prompt" -) +### Graph -// 创建 callback handler -handler := &callbackHelper.AgenticPromptCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *prompt.AgenticCallbackInput) context.Context { - fmt.Printf("开始格式化模板,变量: %v\n", input.Variables) - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *prompt.AgenticCallbackOutput) context.Context { - fmt.Printf("模板格式化完成,生成消息数量: %d\n", len(output.Result)) - return ctx - }, -} +代码位置:`compose/graph.go` -// 使用 callback handler -helper := callbackHelper.NewHandlerHelper(). - AgenticPrompt(handler). - Handler() +```go +func (g *graph) AddAgenticChatTemplateNode(key string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) error +``` -// 在运行时使用 -runnable, err := chain.Compile() +```go +graph := compose.NewGraph[map[string]any, *schema.AgenticMessage]() +err := graph.AddAgenticChatTemplateNode("prompt", template) if err != nil { return err } -result, err := runnable.Invoke(ctx, variables, compose.WithCallbacks(helper)) ``` -## **自行实现参考** +### Workflow + +代码位置:`compose/workflow.go` + +```go +func (wf *Workflow[I, O]) AddAgenticChatTemplateNode(key string, chatTemplate prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *WorkflowNode +``` + +### Parallel 与 ChainBranch + +Agentic prompt 也可以放入 `Parallel` 或 `ChainBranch`: -### Option **机制** +```go +func (p *Parallel) AddAgenticChatTemplate(outputKey string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *Parallel + +func (cb *ChainBranch) AddAgenticChatTemplate(key string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *ChainBranch +``` -若有需要,组件实现者可实现自定义 prompt option: +## 从前驱节点获取变量 + +`AgenticChatTemplate.Format` 需要 `map[string]any`。如果前驱节点输出不是 map,可以在加节点时使用 `compose.WithOutputKey` 把输出包装为单字段 map。 ```go -import ( - "github.com/cloudwego/eino/components/prompt" +graph.AddLambdaNode("query", + compose.InvokableLambda(func(ctx context.Context, input string) (string, error) { + return input, nil + }), + compose.WithOutputKey("task"), ) -// 定义 Option 结构体 -type MyPromptOptions struct { - StrictMode bool - DefaultValues map[string]string -} +graph.AddAgenticChatTemplateNode("prompt", template) +``` -// 定义 Option 函数 -func WithStrictMode(strict bool) prompt.Option { - return prompt.WrapImplSpecificOptFn(func(o *MyPromptOptions) { - o.StrictMode = strict - }) -} +包装后的 map 形如: -func WithDefaultValues(values map[string]string) prompt.Option { - return prompt.WrapImplSpecificOptFn(func(o *MyPromptOptions) { - o.DefaultValues = values - }) +```go +map[string]any{ + "task": previousNodeOutput, } ``` -### **Callback 处理** +## Callback -Prompt 实现需要在适当的时机触发回调,以下结构是组件定义好的: +### 组件级 callback payload -> 代码位置:[github.com/cloudwego/eino/tree/main/components/prompt/agentic_callback_extra.go](http://github.com/cloudwego/eino/tree/main/components/prompt/agentic_callback_extra.go) +代码位置:`components/prompt/agentic_callback_extra.go` ```go -// AgenticCallbackInput is the input for the callback. type AgenticCallbackInput struct { - // Variables is the variables for the callback. Variables map[string]any - // Templates is the agentic templates for the callback. Templates []schema.AgenticMessagesTemplate - // Extra is the extra information for the callback. - Extra map[string]any + Extra map[string]any } -// AgenticCallbackOutput is the output for the callback. type AgenticCallbackOutput struct { - // Result is the agentic result for the callback. - Result []*schema.AgenticMessage - // Templates is the agentic templates for the callback. + Result []*schema.AgenticMessage Templates []schema.AgenticMessagesTemplate - // Extra is the extra information for the callback. - Extra map[string]any + Extra map[string]any } + +func ConvAgenticCallbackInput(src callbacks.CallbackInput) *AgenticCallbackInput +func ConvAgenticCallbackOutput(src callbacks.CallbackOutput) *AgenticCallbackOutput ``` -### **完整实现示例** +`DefaultAgenticChatTemplate.Format` 会在开始和结束时触发 callback,并传递上述 agentic payload。 + +### utils/callbacks helper + +代码位置:`utils/callbacks/template.go` + +当前 `AgenticPromptCallbackHandler` 的公开签名如下: ```go -type MyPrompt struct { - templates []schema.AgenticMessagesTemplate - formatType schema.FormatType - strictMode bool - defaultValues map[string]string +type AgenticPromptCallbackHandler struct { + OnStart func(ctx context.Context, runInfo *callbacks.RunInfo, input *prompt.CallbackInput) context.Context + OnEnd func(ctx context.Context, runInfo *callbacks.RunInfo, output *prompt.CallbackOutput) context.Context + OnError func(ctx context.Context, runInfo *callbacks.RunInfo, err error) context.Context } +``` -func NewMyPrompt(config *MyPromptConfig) (*MyPrompt, error) { - return &MyPrompt{ - templates: config.Templates, - formatType: config.FormatType, - strictMode: config.DefaultStrictMode, - defaultValues: config.DefaultValues, - }, nil -} +使用 helper 注册: -func (p *MyPrompt) Format(ctx context.Context, vs map[string]any, opts ...prompt.Option) ([]*schema.AgenticMessage, error) { - // 1. 处理 Option - options := &MyPromptOptions{ - StrictMode: p.strictMode, - DefaultValues: p.defaultValues, - } - options = prompt.GetImplSpecificOptions(options, opts...) - - // 2. 获取 callback manager - cm := callbacks.ManagerFromContext(ctx) - - // 3. 开始格式化前的回调 - ctx = cm.OnStart(ctx, info, &prompt.AgenticCallbackInput{ - Variables: vs, - Templates: p.templates, - }) - - // 4. 执行格式化逻辑 - messages, err := p.doFormat(ctx, vs, options) - - // 5. 处理错误和完成回调 - if err != nil { - ctx = cm.OnError(ctx, info, err) - return nil, err - } - - ctx = cm.OnEnd(ctx, info, &prompt.AgenticCallbackOutput{ - Result: messages, - Templates: p.templates, - }) - - return messages, nil +```go +handler := callbackHelper.NewHandlerHelper(). + AgenticPrompt(&callbackHelper.AgenticPromptCallbackHandler{ + OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *prompt.CallbackInput) context.Context { + if input != nil { + fmt.Printf("variables: %v\n", input.Variables) + } + return ctx + }, + OnError: func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context { + fmt.Printf("prompt error: %v\n", err) + return ctx + }, + }). + Handler() + +result, err := runnable.Invoke(ctx, variables, compose.WithCallbacks(handler)) +``` + +> 💡 +> 如果需要直接处理 `*prompt.AgenticCallbackInput` 或 `*prompt.AgenticCallbackOutput`,应使用组件级 callback payload 和 `prompt.ConvAgenticCallbackInput/Output`。`utils/callbacks.AgenticPromptCallbackHandler` 当前公开签名仍复用 `prompt.CallbackInput/Output`。 + +## 自定义实现 + +实现自定义 `AgenticChatTemplate` 只需要满足接口: + +```go +type MyAgenticPrompt struct { + templates []schema.AgenticMessagesTemplate + formatType schema.FormatType } -func (p *MyPrompt) doFormat(ctx context.Context, vs map[string]any, opts *MyPromptOptions) ([]*schema.AgenticMessage, error) { - // 实现自己定义逻辑 - return messages, nil +func (p *MyAgenticPrompt) Format(ctx context.Context, vs map[string]any, opts ...prompt.Option) ([]*schema.AgenticMessage, error) { + result := make([]*schema.AgenticMessage, 0, len(p.templates)) + for _, tpl := range p.templates { + msgs, err := tpl.Format(ctx, vs, p.formatType) + if err != nil { + return nil, err + } + result = append(result, msgs...) + } + return result, nil } ``` + +如需支持自定义 option,可通过 `prompt.WrapImplSpecificOptFn` 和 `prompt.GetImplSpecificOptions` 实现。 + +## 使用建议 + +- `FromAgenticMessages` 不返回 `error`,示例中不应写成 `template, err := ...`。 +- `AgenticMessagesPlaceholder` 的变量值必须是 `[]*schema.AgenticMessage`。 +- 模板变量命名应稳定一致,缺失变量会在运行时返回错误。 +- 对历史对话使用 `AgenticMessagesPlaceholder("history", true)`,可以在无历史时自然返回空列表。 +- 在 Graph/Chain 中,确保 Agentic prompt 后接收的是 `[]*schema.AgenticMessage` 类型的节点,例如 `AgenticModel`。 diff --git a/content/zh/docs/eino/core_modules/components/agentic_tools_node_guide.md b/content/zh/docs/eino/core_modules/components/agentic_tools_node_guide.md index a9f6438c4c..8ef3041a0a 100644 --- a/content/zh/docs/eino/core_modules/components/agentic_tools_node_guide.md +++ b/content/zh/docs/eino/core_modules/components/agentic_tools_node_guide.md @@ -1,6 +1,6 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] title: AgenticToolsNode&Tool 使用说明[Beta] @@ -8,371 +8,405 @@ weight: 12 --- > 💡 -> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。 +> 本功能在 [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2) 版本开始提供。本文以当前 main 分支源码为准,代码位置主要包括 `compose/agentic_tools_node.go`、`compose/tool_node.go`、`components/tool/interface.go` 与 `schema/tool.go`。 -## **基本介绍** +## 基本介绍 -`Tool` 在 eino 框架中的定义是“AgenticModel 能够选择调用的外部能力”,包括本地函数,MCP server tool 等。 +`AgenticToolsNode` 是 Eino 在 agentic message 路径上的工具执行节点。它接收 `*schema.AgenticMessage`,从其中的 `FunctionToolCall` content block 提取工具调用,复用 `ToolsNode` 的执行能力完成本地工具执行,再把结果转换为 `FunctionToolResult` content block 返回。 -`AgenticToolsNode` 是 eino 框架指定的“Tool 执行器”,执行工具的方法定义如下: +它不负责“决定调用哪个工具”。工具选择由上游 `AgenticModel` 完成;`AgenticToolsNode` 只根据输入消息中的 function tool call 执行对应工具。 -> 代码位置:[https://github.com/cloudwego/eino/tree/main/compose/agentic_tools_node.go](https://github.com/cloudwego/eino/tree/main/compose/agentic_tools_node.go) +> 💡 +> `AgenticToolsNode` 是 `ToolsNode` 的 agentic 包装层,因此复用 `ToolsNodeConfig`、`ToolsNodeOption`、工具别名、异常处理、执行顺序、参数处理器和 tool middleware 等能力。 + +## AgenticToolsNode 定义 + +代码位置:`compose/agentic_tools_node.go` ```go -func (a *AgenticToolsNode) Invoke(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) ([]*schema.AgenticMessage, error) {} +func NewAgenticToolsNode(ctx context.Context, conf *ToolsNodeConfig) (*AgenticToolsNode, error) -func (a *AgenticToolsNode) Stream(ctx context.Context, input *schema.AgenticMessage, - opts ...ToolsNodeOption) (*schema.StreamReader[[]*schema.AgenticMessage], error) {} +type AgenticToolsNode struct { + inner *ToolsNode +} + +func (a *AgenticToolsNode) Invoke(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) ([]*schema.AgenticMessage, error) + +func (a *AgenticToolsNode) Stream(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) (*schema.StreamReader[[]*schema.AgenticMessage], error) ``` -AgenticToolsNode 与 ToolsNode 复用同一套配置,用法相同,如配置执行时序、异常处理、入参处理、middleware 扩展等。 +输入输出规则: + + + + + +
    方法输入输出
    Invoke
    assistant message,包含一个或多个
    FunctionToolCall
    block
    多个 user message,每个包含一个
    FunctionToolResult
    ToolSearchFunctionToolResult
    block
    Stream
    assistant message,包含一个或多个
    FunctionToolCall
    block
    StreamReader
    ,每个 chunk 是
    []*schema.AgenticMessage
    -> 代码位置:[https://github.com/cloudwego/eino/tree/main/compose/tool_node.go](https://github.com/cloudwego/eino/tree/main/compose/tool_node.go) +## 执行流程 + + + +核心转换逻辑: + +- 只处理 `ContentBlockTypeFunctionToolCall` 且 `FunctionToolCall != nil` 的 block。 +- `FunctionToolCall.CallID` 会转换为 `schema.ToolCall.ID`,用于关联工具结果。 +- 标准工具输出会转换为 `FunctionToolResult.Content` 中的 text block。 +- enhanced 工具输出会转换为 `FunctionToolResult.Content` 中的 text/image/audio/video/file block。 +- tool search 结果会转换为 `ToolSearchFunctionToolResult` block。 +- 输出 message 的 role 为 `schema.AgenticRoleTypeUser`。 + +## ToolsNodeConfig + +代码位置:`compose/tool_node.go` ```go type ToolsNodeConfig struct { - // Tools specify the list of tools can be called which are BaseTool but must implement InvokableTool or StreamableTool. - Tools []tool.BaseTool - - // UnknownToolsHandler handles tool calls for non-existent tools when LLM hallucinates. - // This field is optional. When not set, calling a non-existent tool will result in an error. - // When provided, if the LLM attempts to call a tool that doesn't exist in the Tools list, - // this handler will be invoked instead of returning an error, allowing graceful handling of hallucinated tools. - // Parameters: - // - ctx: The context for the tool call - // - name: The name of the non-existent tool - // - input: The tool call input generated by llm - // Returns: - // - string: The response to be returned as if the tool was executed - // - error: Any error that occurred during handling - UnknownToolsHandler func(ctx context.Context, name, input string) (string, error) - - // ExecuteSequentially determines whether tool calls should be executed sequentially (in order) or in parallel. - // When set to true, tool calls will be executed one after another in the order they appear in the input message. - // When set to false (default), tool calls will be executed in parallel. - ExecuteSequentially bool - - // ToolArgumentsHandler allows handling of tool arguments before execution. - // When provided, this function will be called for each tool call to process the arguments. - // Parameters: - // - ctx: The context for the tool call - // - name: The name of the tool being called - // - arguments: The original arguments string for the tool - // Returns: - // - string: The processed arguments string to be used for tool execution - // - error: Any error that occurred during preprocessing + Tools []tool.BaseTool + ToolAliases map[string]ToolAliasConfig + UnknownToolsHandler func(ctx context.Context, name, input string) (string, error) + ExecuteSequentially bool ToolArgumentsHandler func(ctx context.Context, name, arguments string) (string, error) - - // ToolCallMiddlewares configures middleware for tool calls. - // Each element can contain Invokable and/or Streamable middleware. - // Invokable middleware only applies to tools implementing InvokableTool interface. - // Streamable middleware only applies to tools implementing StreamableTool interface. - ToolCallMiddlewares []ToolMiddleware + ToolCallMiddlewares []ToolMiddleware } ``` -AgenticToolsNode 如何“决策”应该执行哪个 Tool?它不决策,而是依据输入的 `*schema.AgenticMessage` 来执行。AgenticModel 生成要调用的 FunctionToolCall(包含 ToolName,Argument 等),放到 *schema.AgenticMessage 中传给 AgenticToolsNode。AgenticToolsNode 针对每个 FunctionToolCall 实际执行一次调用。 - -如果配置了 ExecuteSequentially,则 AgenticToolsNode 会按照 []*ContentBlock 中的先后顺序来执行工具。 + + + + + + + + +
    字段说明
    Tools
    可执行工具列表。每个工具必须实现
    tool.BaseTool
    ,并至少实现一种执行接口
    ToolAliases
    工具名别名和参数别名配置,用于兼容模型生成的非标准名称
    UnknownToolsHandler
    处理模型幻觉出的未知工具;未设置时未知工具会报错
    ExecuteSequentially
    true
    表示按 tool call 顺序串行执行;默认
    false
    并行执行
    ToolArgumentsHandler
    参数别名处理后、工具执行前调用,可做参数清洗或补全
    ToolCallMiddlewares
    工具执行 middleware,支持标准与 enhanced、非流式与流式工具
    -每个 FunctionToolCall 调用完成后的结果,又会封装为 *schema.AgenticMessage,作为 AgenticToolsNode 输出的一部分。 +### ToolsNodeOption ```go -// https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go +type ToolsNodeOption func(o *toolsNodeOptions) -type AgenticMessage struct { - // role should be 'assistant' for tool call message - Role AgenticRoleType - - // ContentBlocks is the list of content blocks. - ContentBlocks []*ContentBlock +func WithToolOption(opts ...tool.Option) ToolsNodeOption +func WithToolList(tool ...tool.BaseTool) ToolsNodeOption +func WithToolAliases(toolAliases map[string]ToolAliasConfig) ToolsNodeOption +``` - // other fields... -} +`WithToolList` 和 `WithToolAliases` 是调用级覆盖配置: -type ContentBlock struct { - Type ContentBlockType +- `WithToolList`:为本次调用替换工具列表。 +- `WithToolAliases` 搭配 `WithToolList`:为动态工具列表配置 alias。 +- `WithToolAliases` 单独使用:替换全局 alias 配置,但保留原工具列表。 - // FunctionToolCall contains the invocation details for a user-defined tool. - FunctionToolCall *FunctionToolCall +## Tool alias - // FunctionToolResult contains the result returned from a user-defined tool call. - FunctionToolResult *FunctionToolResult +代码位置:`compose/tool_node.go` - // other fields... +```go +type ToolAliasConfig struct { + NameAliases []string + ArgumentsAliases map[string][]string } +``` -// FunctionToolCall is the function call in a message. -// It's used in assistant message. -type FunctionToolCall struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Arguments is the JSON string arguments for the function tool call. - Arguments string -} +语义说明: -// FunctionToolResult is the function call result in a message. -// It's used in user message. -type FunctionToolResult struct { - // CallID is the unique identifier for the tool call. - CallID string + + + + +
    配置说明
    NameAliases
    工具名别名。模型返回别名时,会解析为 canonical tool name
    ArgumentsAliases
    参数别名。key 为 canonical 参数名,value 为别名列表
    - // Name specifies the function tool invoked. - Name string +示例: - // Result is the function tool result returned by the user - Result string -} +```go +toolsNode, err := compose.NewAgenticToolsNode(ctx, &compose.ToolsNodeConfig{ + Tools: []tool.BaseTool{searchTool}, + ToolAliases: map[string]compose.ToolAliasConfig{ + "search": { + NameAliases: []string{"web_search", "lookup"}, + ArgumentsAliases: map[string][]string{ + "query": {"q", "keyword"}, + "limit": {"count", "max_results"}, + }, + }, + }, +}) ``` -## **Tool 定义** +参数 alias 处理规则: + +- 只处理顶层 JSON object 的 key。 +- 空字符串、非 object、JSON 解析失败时原样返回。 +- canonical key 已存在时,不用 alias 覆盖 canonical value。 +- alias remap 发生在 `ToolArgumentsHandler` 之前。 +- alias 配置会校验空别名、空 canonical key、canonical key 包含 `.`、alias 与 schema property 冲突,以及同一 alias 映射到多个 canonical 的情况。 -### **接口定义** +## Tool 接口 -Tool 组件提供了三个层次的接口: +Eino 当前没有导出名为 `Tool` 的统一接口。工具能力由 `components/tool` 包中的以下接口组成。 -> 代码位置:[https://github.com/cloudwego/eino/components/tool/interface.go](https://github.com/cloudwego/eino/components/tool/interface.go) +代码位置:`components/tool/interface.go` ```go -// BaseTool get tool info for ChatModel intent recognition. type BaseTool interface { Info(ctx context.Context) (*schema.ToolInfo, error) } -// InvokableTool the tool for ChatModel intent recognition and ToolsNode execution. type InvokableTool interface { BaseTool InvokableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (string, error) } -// StreamableTool the stream tool for ChatModel intent recognition and ToolsNode execution. type StreamableTool interface { BaseTool StreamableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (*schema.StreamReader[string], error) } -``` - -#### **Info 方法** -- 功能:获取工具的描述信息 -- 参数: - - ctx:上下文对象 -- 返回值: - - `*schema.ToolInfo`:工具的描述信息 - - error:获取信息过程中的错误 +type EnhancedInvokableTool interface { + BaseTool + InvokableRun(ctx context.Context, toolArgument *schema.ToolArgument, opts ...Option) (*schema.ToolResult, error) +} -#### **InvokableRun 方法** +type EnhancedStreamableTool interface { + BaseTool + StreamableRun(ctx context.Context, toolArgument *schema.ToolArgument, opts ...Option) (*schema.StreamReader[*schema.ToolResult], error) +} +``` -- 功能:同步执行工具 -- 参数: - - ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager - - `argumentsInJSON`:JSON 格式的参数字符串 - - opts:工具执行的选项 -- 返回值: - - string:执行结果 - - error:执行过程中的错误 +接口分层: -#### **StreamableRun 方法** + + + + + + + +
    接口用途
    BaseTool
    提供工具元信息,可传给模型用于识别工具
    InvokableTool
    非流式执行,入参为 JSON 字符串,返回字符串
    StreamableTool
    流式执行,入参为 JSON 字符串,返回字符串流
    EnhancedInvokableTool
    非流式 enhanced 工具,入参为
    *schema.ToolArgument
    ,返回多模态
    *schema.ToolResult
    EnhancedStreamableTool
    流式 enhanced 工具,返回
    *schema.ToolResult
    -- 功能:以流式方式执行工具 -- 参数: - - ctx:上下文对象,用于传递请求级别的信息,同时也用于传递 Callback Manager - - `argumentsInJSON`:JSON 格式的参数字符串 - - opts:工具执行的选项 -- 返回值: - - `*schema.StreamReader[string]`:流式执行结果 - - error:执行过程中的错误 +> 💡 +> 如果一个工具同时实现标准接口和 enhanced 接口,`ToolsNode` 会优先使用 enhanced 接口,以保留结构化多模态结果。 -### **ToolInfo 结构体** +## ToolInfo -> 代码位置:[https://github.com/cloudwego/eino/components/tool/interface.go](https://github.com/cloudwego/eino/components/tool/interface.go) +代码位置:`schema/tool.go` ```go type ToolInfo struct { - // 工具的唯一名称,用于清晰地表达其用途 - Name string - // 用于告诉模型如何/何时/为什么使用这个工具 - // 可以在描述中包含少量示例 - Desc string - // 工具接受的参数定义 - // 可以通过两种方式描述: - // 1. 使用 ParameterInfo:schema.NewParamsOneOfByParams(params) - // 2. 使用 JSONSchema:schema.NewParamsOneOfByJSONSchema(jsonschema) + Name string + Desc string + Extra map[string]any *ParamsOneOf } ``` -### **公共 Option** +字段说明: + + + + + + + +
    字段说明
    Name
    工具唯一名称,应简洁且在工具集合内唯一
    Desc
    告诉模型何时、为何、如何使用该工具;可以包含少量示例
    Extra
    额外元信息,由组件实现或业务自定义
    ParamsOneOf
    参数定义,可通过
    schema.NewParamsOneOfByParams
    schema.NewParamsOneOfByJSONSchema
    构造;为
    nil
    表示无参数
    + +## ToolArgument 与 ToolResult + +Enhanced 工具使用结构化入参与多模态输出。 + +```go +type ToolArgument struct { + Text string +} + +type ToolResult struct { + Parts []ToolOutputPart +} +``` + +`ToolOutputPart` 可表示 text、image、audio、video、file 和 tool search result。`AgenticToolsNode` 会将 enhanced output 转换为 `FunctionToolResult.Content` 中的多模态 block。 + +## FunctionToolCall 与 FunctionToolResult + +`AgenticToolsNode` 的输入来自 `schema.AgenticMessage` 中的 `FunctionToolCall` block: + +```go +type FunctionToolCall struct { + CallID string + Name string + Arguments string +} +``` + +工具执行结果会被转换为 `FunctionToolResult`: -Tool 组件使用 ToolOption 来定义可选参数, AgenticToolsNode 没有抽象公共的 option。每个具体的实现可以定义自己的特定 Option,通过 WrapToolImplSpecificOptFn 函数包装成统一的 ToolOption 类型。 +```go +type FunctionToolResult struct { + CallID string + Name string + Content []*FunctionToolResultContentBlock +} +``` -## **使用方式** +`FunctionToolResultContentBlock` 支持 text、image、audio、video、file 五类内容。当前实现不再使用 `Result string` 字段。 -ToolsNode 通常不会被单独使用,一般用于编排之中接在 AgenticModel 之后。 +## 单独使用示例 ```go -import ( - "github.com/cloudwego/eino/components/tool" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" -) - -// 创建工具节点 -toolsNode := compose.NewAgenticToolsNode([]tool.Tool{ - searchTool, // 搜索工具 - weatherTool, // 天气查询工具 - calculatorTool, // 计算器工具 +toolsNode, err := compose.NewAgenticToolsNode(ctx, &compose.ToolsNodeConfig{ + Tools: []tool.BaseTool{weatherTool}, }) +if err != nil { + return err +} -// Mock LLM 输出作为输入 input := &schema.AgenticMessage{ Role: schema.AgenticRoleTypeAssistant, ContentBlocks: []*schema.ContentBlock{ - { - Type: schema.ContentBlockTypeFunctionToolCall, - FunctionToolCall: &schema.FunctionToolCall{ - CallID: "1", - Name: "get_weather", - Arguments: `{"city": "深圳", "date": "tomorrow"}`, - }, - }, + schema.NewContentBlock(&schema.FunctionToolCall{ + CallID: "call_1", + Name: "get_weather", + Arguments: `{"city":"Shenzhen","date":"tomorrow"}`, + }), }, } -toolMessages, err := toolsNode.Invoke(ctx, input) +messages, err := toolsNode.Invoke(ctx, input) +if err != nil { + return err +} ``` -### **在编排中使用** +输出示意: ```go -import ( - "github.com/cloudwego/eino/components/tool" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" -) - -// 创建工具节点 -toolsNode := compose.NewAgenticToolsNode([]tool.Tool{ - searchTool, // 搜索工具 - weatherTool, // 天气查询工具 - calculatorTool, // 计算器工具 -}) +[]*schema.AgenticMessage{ + { + Role: schema.AgenticRoleTypeUser, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolResult{ + CallID: "call_1", + Name: "get_weather", + Content: []*schema.FunctionToolResultContentBlock{ + { + Type: schema.FunctionToolResultContentBlockTypeText, + Text: &schema.UserInputText{Text: "sunny"}, + }, + }, + }), + }, + }, +} +``` + +## 在编排中使用 + +### Chain + +代码位置:`compose/chain.go` + +```go +func (c *Chain[I, O]) AppendAgenticToolsNode(node *AgenticToolsNode, opts ...GraphAddNodeOpt) *Chain[I, O] +``` -// 在 Chain 中使用 +```go chain := compose.NewChain[*schema.AgenticMessage, []*schema.AgenticMessage]() chain.AppendAgenticToolsNode(toolsNode) - -// graph 中 -graph := compose.NewGraph[*schema.AgenticMessage, []*schema.AgenticMessage]() -graph.AddAgenticToolsNode(toolsNode) ``` -## **Option 机制** +### Graph -自定义 Tool 可根据自己需要实现特定的 Option: +代码位置:`compose/graph.go` ```go -import "github.com/cloudwego/eino/components/tool" +func (g *graph) AddAgenticToolsNode(key string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) error +``` -// 定义 Option 结构体 -type MyToolOptions struct { - Timeout time.Duration - MaxRetries int - RetryInterval time.Duration +```go +graph := compose.NewGraph[*schema.AgenticMessage, []*schema.AgenticMessage]() +err := graph.AddAgenticToolsNode("tools", toolsNode) +if err != nil { + return err } +``` -// 定义 Option 函数 -func WithTimeout(timeout time.Duration) tool.Option { - return tool.WrapImplSpecificOptFn(func(o *MyToolOptions) { - o.Timeout = timeout - }) -} +### Workflow、Parallel、ChainBranch + +```go +func (wf *Workflow[I, O]) AddAgenticToolsNode(key string, tools *AgenticToolsNode, opts ...GraphAddNodeOpt) *WorkflowNode + +func (p *Parallel) AddAgenticToolsNode(outputKey string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) *Parallel + +func (cb *ChainBranch) AddAgenticToolsNode(key string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) *ChainBranch ``` -## **Option 和 Callback 使用** +## Callback -### **Callback 使用示例** +代码位置:`utils/callbacks/template.go` ```go -import ( - "context" - - callbackHelper "github.com/cloudwego/eino/utils/callbacks" - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/components/tool" -) - -// 创建 callback handler -handler := &callbackHelper.ToolCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *tool.CallbackInput) context.Context { - fmt.Printf("开始执行工具,参数: %s\n", input.ArgumentsInJSON) - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *tool.CallbackOutput) context.Context { - fmt.Printf("工具执行完成,结果: %s\n", output.Response) - return ctx - }, - OnEndWithStreamOutput: func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[*tool.CallbackOutput]) context.Context { - fmt.Println("工具开始流式输出") - go func() { - defer output.Close() - - for { - chunk, err := output.Recv() - if errors.Is(err, io.EOF) { - return - } - if err != nil { - return - } - fmt.Printf("收到流式输出: %s\n", chunk.Response) - } - }() - return ctx - }, +type AgenticToolsNodeCallbackHandlers struct { + OnStart func(ctx context.Context, info *callbacks.RunInfo, input *schema.AgenticMessage) context.Context + OnEnd func(ctx context.Context, info *callbacks.RunInfo, input []*schema.AgenticMessage) context.Context + OnEndWithStreamOutput func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[[]*schema.AgenticMessage]) context.Context + OnError func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context } +``` + +注册示例: -// 使用 callback handler -helper := callbackHelper.NewHandlerHelper(). - Tool(handler). +```go +handler := callbackHelper.NewHandlerHelper(). + AgenticToolsNode(&callbackHelper.AgenticToolsNodeCallbackHandlers{ + OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *schema.AgenticMessage) context.Context { + fmt.Printf("tool call blocks: %d\n", len(input.ContentBlocks)) + return ctx + }, + OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output []*schema.AgenticMessage) context.Context { + fmt.Printf("tool results: %d\n", len(output)) + return ctx + }, + }). Handler() - -/*** compose a chain -* chain := NewChain -* chain.appendxxx(). -* appendxxx(). -* ... -*/ - -// 在运行时使用 -runnable, err := chain.Compile() -if err != nil { - return err -} -result, err := runnable.Invoke(ctx, input, compose.WithCallbacks(helper)) + +result, err := runnable.Invoke(ctx, input, compose.WithCallbacks(handler)) ``` -## 如何获取 ToolCallID +## 获取 ToolCallID + +代码位置:`compose/tool_node.go` + +```go +func GetToolCallID(ctx context.Context) string +``` + +在工具函数体或 tool callback handler 中,可以通过 `compose.GetToolCallID(ctx)` 获取当前 tool call id。 + +```go +func (t *MyTool) InvokableRun(ctx context.Context, args string, opts ...tool.Option) (string, error) { + callID := compose.GetToolCallID(ctx) + // callID 为空表示当前 ctx 不在 tool call 执行上下文中,或上下文值类型不匹配。 + return callID, nil +} +``` -在 tool 函数体、tool callback handler 中,都可以通过 `compose.GetToolCallID(ctx)` 函数获取当前 Tool 的 ToolCallID。 +## 使用建议 -## **已有实现** +- 文档和代码中应称为 `tool.BaseTool`、`InvokableTool`、`StreamableTool`、`EnhancedInvokableTool`、`EnhancedStreamableTool`,不要写成源码中不存在的导出 `Tool` 接口。 +- 如果工具可能返回图片、音频、视频或文件,优先实现 enhanced 接口,避免把多模态结果压平成字符串。 +- 多个 tool call 默认并行执行;需要保持顺序或工具间有副作用依赖时,设置 `ExecuteSequentially: true`。 +- 使用 `ToolArgumentsHandler` 做参数清洗时,要注意它在参数 alias remap 之后执行。 +- `UnknownToolsHandler` 适合兜底模型幻觉出的工具名,但不应掩盖真实配置错误。 -1. Google Search Tool: 基于 Google 搜索的工具实现 [Tool - Googlesearch](/zh/docs/eino/ecosystem_integration/tool/tool_googlesearch) -2. duckduckgo search tool: 基于 duckduckgo 搜索的工具实现 [Tool - DuckDuckGoSearch](/zh/docs/eino/ecosystem_integration/tool/tool_duckduckgo_search) -3. MCP: 把 mcp server 作为 tool[Eino Tool - MCP](/zh/docs/eino/ecosystem_integration/tool/tool_mcp) +## 已有实现 -## **工具实现方式** +1. Google Search Tool:基于 Google 搜索的工具实现 [Tool - Googlesearch](/zh/docs/eino/ecosystem_integration/tool/tool_googlesearch) +2. DuckDuckGo Search Tool:基于 DuckDuckGo 搜索的工具实现 [Tool - DuckDuckGoSearch](/zh/docs/eino/ecosystem_integration/tool/tool_duckduckgo_search) +3. MCP:把 MCP server 作为 tool [Eino Tool - MCP](/zh/docs/eino/ecosystem_integration/tool/tool_mcp) -工具的实现方式有多种,可以参考如下方式: +## 工具实现方式 -- 基于 HTTP API 的 tool 实现: [如何使用 openapi 创建 tool/function call ?](https://bytedance.larkoffice.com/wiki/FjXzwf3exijtKyk2hh7cAmnZn1g) -- 基于 gRPC 的 tool 实现: [如何使用 proto3 创建 tool/function call ? ](https://bytedance.larkoffice.com/wiki/EPkawUVbdiGwxCkWCJTcAMQonbh) -- 基于 thrift 的 tool 实现: [如何使用 thrift idl 创建 tool/function call ? ](https://bytedance.larkoffice.com/wiki/PcHfwo6x0iOrXxkIjJecez8xnNg) -- 基于本地函数的工具实现: [如何创建一个 tool ?](/zh/docs/eino/core_modules/components/tools_node_guide/how_to_create_a_tool) -- …… +- 基于 HTTP API 的 tool 实现:[如何使用 openapi 创建 tool/function call ?](https://bytedance.larkoffice.com/wiki/FjXzwf3exijtKyk2hh7cAmnZn1g) +- 基于 gRPC 的 tool 实现:[如何使用 proto3 创建 tool/function call ? ](https://bytedance.larkoffice.com/wiki/EPkawUVbdiGwxCkWCJTcAMQonbh) +- 基于 thrift 的 tool 实现:[如何使用 thrift idl 创建 tool/function call ? ](https://bytedance.larkoffice.com/wiki/PcHfwo6x0iOrXxkIjJecez8xnNg) +- 基于本地函数的工具实现:[如何创建一个 tool ?](/zh/docs/eino/core_modules/components/tools_node_guide/how_to_create_a_tool) diff --git a/static/img/eino/RHFww5teMhOfEybBazKcMpWynIb.png b/static/img/eino/RHFww5teMhOfEybBazKcMpWynIb.png new file mode 100644 index 0000000000000000000000000000000000000000..95f4923187dd7eb91440427ff07887a172bee12e GIT binary patch literal 342760 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%0Ae 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 z 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 A*#H0l literal 0 HcmV?d00001 From b4706f06fd528f4224ab26474abf67835a2b561f Mon Sep 17 00:00:00 2001 From: "shentong.martin" Date: Mon, 25 May 2026 14:06:34 +0800 Subject: [PATCH 2/2] docs(eino): sync english translations --- .../components/agentic_chat_model_guide.md | 1261 ++++------------- .../components/agentic_chat_template_guide.md | 455 +++--- .../components/agentic_tools_node_guide.md | 542 +++---- 3 files changed, 787 insertions(+), 1471 deletions(-) diff --git a/content/en/docs/eino/core_modules/components/agentic_chat_model_guide.md b/content/en/docs/eino/core_modules/components/agentic_chat_model_guide.md index 0090ee9e55..10889529bd 100644 --- a/content/en/docs/eino/core_modules/components/agentic_chat_model_guide.md +++ b/content/en/docs/eino/core_modules/components/agentic_chat_model_guide.md @@ -1,1191 +1,456 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] -title: 'Eino: AgenticModel User Guide [Beta]' +title: AgenticModel User Guide [Beta] weight: 10 --- > 💡 -> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). +> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). This document is based on the current main branch source code, with code primarily located in `components/model/interface.go`, `components/model/option.go`, and `schema/agentic_message.go`. ## Introduction -AgenticModel is an abstraction of model capabilities centered on "goal-driven autonomous execution". As capabilities like caching and built-in tools become natively supported in APIs from advanced providers like OpenAI Responses API and Claude API, models are evolving from "one-shot Q&A engines" to "user goal-oriented autonomous agents": capable of closed-loop planning around objectives, invoking tools, and iterative execution to accomplish more complex tasks. +`AgenticModel` is Eino's model component abstraction for agentic provider APIs. It uses `*schema.AgenticMessage` as the message carrier and represents text, reasoning, multimodal content, function tool calls, server-side built-in tool calls, MCP tool calls, and approval results through ordered `ContentBlock`s. -### Differences from ChatModel +Compared to the traditional `ChatModel`, `AgenticModel` is more suitable for directly leveraging the native agentic capabilities of provider APIs such as OpenAI Responses API, Claude API, and Gemini API: a single model request may contain multiple reasoning segments, multiple tool calls, server tool results, or MCP approval information. Eino no longer flattens these into a single text field but preserves them as structured blocks. + +## Relationship with ChatModel - - - - - + + + + + + +
    AgenticModelChatModel
    PositioningModel component abstraction based on AgenticMessageModel component abstraction based on Message
    Core Entities
  • AgenticMessage
  • ContentBlock
  • Message
    Capabilities
  • Multi-turn model conversation generation
  • Session caching
  • Support for various built-in tools
  • Support for MCP tools
  • Better model adaptability
  • Single-turn model conversation generation
  • Session caching
  • Support for simple built-in tools
  • Related Components
  • AgenticTemplate
  • AgenticToolsNode
  • ChatTemplate
  • ToolsNode
  • DimensionAgenticModelChatModel
    Base Interface
    model.BaseModel[*schema.AgenticMessage]
    model.BaseModel[*schema.Message]
    Type Alias
    type AgenticModel = BaseModel[*schema.AgenticMessage]
    type BaseChatModel = BaseModel[*schema.Message]
    Message Structure
    AgenticMessage.ContentBlocks
    Message.Content
    ,
    ToolCalls
    ,
    ToolCallID
    , etc.
    Tool BindingPassed at call time via
    model.WithTools(...)
    ,
    model.WithAgenticToolChoice(...)
    ToolCallingChatModel.WithTools(...)
    or call-time Option
    Expressivenessreasoning, multimodal input/output, function tool, server tool, MCP tool, approvalTraditional chat completion messages and tool calls
    Downstream Executor
    compose.AgenticToolsNode
    compose.ToolsNode
    -Server-side tools (like web_search) and MCP tools are natively supported by model providers, meaning a single API request/response may contain results from multiple reasoning-action cycles. Taking web search capability as an example: - -- Implemented with ChatModel: requires pre-defining a custom web search tool. One reasoning-action process is as follows: - 1. Model generates tool call parameters - 2. User-side executes the tool - 3. Returns tool result to the model -- Implemented with AgenticModel: can directly configure native web search tools provided by the model provider. One API request process is as follows: - 1. The model autonomously calls the web search tool based on the user's question and completes multiple tool calls on the model server side, generating multiple reasoning-action results until the user's task is completed. - 2. The user side only needs to receive the results. +> 💡 +> `AgenticModel` does not have a `WithTools` method. `WithTools` is an instance method of `ToolCallingChatModel`; in the agentic path, tool information is passed via `model.WithTools(tools)` as a request-level Option. ## Component Definition -### Interface Definition +### BaseModel and AgenticModel -> Code location: [https://github.com/cloudwego/eino/tree/main/components/model/interface.go](https://github.com/cloudwego/eino/tree/main/components/model/interface.go) +Code location: `components/model/interface.go` ```go -type AgenticModel interface { - Generate(ctx context.Context, input []*schema.AgenticMessage, opts ...Option) (*schema.AgenticMessage, error) - Stream(ctx context.Context, input []*schema.AgenticMessage, opts ...Option) (*schema.StreamReader[*schema.AgenticMessage], error) - - // WithTools returns a new Model instance with the specified tools bound. - // This method does not modify the current instance, making it safer for concurrent use. - WithTools(tools []*schema.ToolInfo) (AgenticModel, error) +// BaseModel is the generic base model interface parameterized by message type M. +type BaseModel[M any] interface { + Generate(ctx context.Context, input []M, opts ...Option) (M, error) + Stream(ctx context.Context, input []M, opts ...Option) (*schema.StreamReader[M], error) } -``` - -#### Generate Method - -- Function: Generate a complete model response -- Parameters: - - ctx: Context object for passing request-level information and Callback Manager - - input: Input message list - - opts: Optional parameters for configuring model behavior -- Return values: - - `*schema.AgenticMessage`: The response message generated by the model - - error: Error information during generation - -#### Stream Method - -- Function: Generate model response in streaming mode -- Parameters: Same as Generate method -- Return values: - - `*schema.StreamReader[*schema.AgenticMessage]`: Stream reader for model response - - error: Error information during generation - -#### WithTools Method - -- Function: Bind available tools to the model -- Parameters: - - tools: List of tool information -- Return values: - - Model: A new AgenticModel instance with tools bound - - error: Error information during binding - -### AgenticMessage Struct -> Code location: [https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go](https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go) - -`AgenticMessage` is the basic unit for interacting with the model. A complete response from the model is encapsulated as an `AgenticMessage`, which carries complex composite content through an ordered set of `ContentBlock`s. The biggest difference between `AgenticMessage` and `Message` is the introduction of the `ContentBlock` array concept, which can carry multiple reasoning-action outputs from the `AgenticModel`. Definition: - -```go -type AgenticMessage struct { - // Role is the message role. - Role AgenticRoleType - - // ContentBlocks is the list of content blocks. - ContentBlocks []*ContentBlock - - // ResponseMeta is the response metadata. - ResponseMeta *AgenticResponseMeta - - // Extra is the additional information. - Extra map[string]any -} +// AgenticModel is a type alias for BaseModel specialized with +// *schema.AgenticMessage. +type AgenticModel = BaseModel[*schema.AgenticMessage] ``` -`ContentBlock` is the basic building unit of `AgenticMessage`, used to carry the specific content of a message. It's designed as a polymorphic structure that identifies what type of data the current block contains through the `Type` field and holds the corresponding non-null pointer field. `ContentBlock` allows a message to contain mixed rich media content or structured data, such as "text + image" or "reasoning process + tool call". Definition: - -```go -type ContentBlockType string - -const ( - ContentBlockTypeReasoning ContentBlockType = "reasoning" - ContentBlockTypeUserInputText ContentBlockType = "user_input_text" - ContentBlockTypeUserInputImage ContentBlockType = "user_input_image" - ContentBlockTypeUserInputAudio ContentBlockType = "user_input_audio" - ContentBlockTypeUserInputVideo ContentBlockType = "user_input_video" - ContentBlockTypeUserInputFile ContentBlockType = "user_input_file" - ContentBlockTypeAssistantGenText ContentBlockType = "assistant_gen_text" - ContentBlockTypeAssistantGenImage ContentBlockType = "assistant_gen_image" - ContentBlockTypeAssistantGenAudio ContentBlockType = "assistant_gen_audio" - ContentBlockTypeAssistantGenVideo ContentBlockType = "assistant_gen_video" - ContentBlockTypeFunctionToolCall ContentBlockType = "function_tool_call" - ContentBlockTypeFunctionToolResult ContentBlockType = "function_tool_result" - ContentBlockTypeServerToolCall ContentBlockType = "server_tool_call" - ContentBlockTypeServerToolResult ContentBlockType = "server_tool_result" - ContentBlockTypeMCPToolCall ContentBlockType = "mcp_tool_call" - ContentBlockTypeMCPToolResult ContentBlockType = "mcp_tool_result" - ContentBlockTypeMCPListToolsResult ContentBlockType = "mcp_list_tools_result" - ContentBlockTypeMCPToolApprovalRequest ContentBlockType = "mcp_tool_approval_request" - ContentBlockTypeMCPToolApprovalResponse ContentBlockType = "mcp_tool_approval_response" -) - -type ContentBlock struct { - Type ContentBlockType - - // Reasoning contains the reasoning content generated by the model. - Reasoning *Reasoning - - // UserInputText contains the text content provided by the user. - UserInputText *UserInputText - - // UserInputImage contains the image content provided by the user. - UserInputImage *UserInputImage - - // UserInputAudio contains the audio content provided by the user. - UserInputAudio *UserInputAudio - - // UserInputVideo contains the video content provided by the user. - UserInputVideo *UserInputVideo - - // UserInputFile contains the file content provided by the user. - UserInputFile *UserInputFile - - // AssistantGenText contains the text content generated by the model. - AssistantGenText *AssistantGenText - - // AssistantGenImage contains the image content generated by the model. - AssistantGenImage *AssistantGenImage - - // AssistantGenAudio contains the audio content generated by the model. - AssistantGenAudio *AssistantGenAudio - - // AssistantGenVideo contains the video content generated by the model. - AssistantGenVideo *AssistantGenVideo - - // FunctionToolCall contains the invocation details for a user-defined tool. - FunctionToolCall *FunctionToolCall - - // FunctionToolResult contains the result returned from a user-defined tool call. - FunctionToolResult *FunctionToolResult - - // ServerToolCall contains the invocation details for a provider built-in tool executed on the model server. - ServerToolCall *ServerToolCall - - // ServerToolResult contains the result returned from a provider built-in tool executed on the model server. - ServerToolResult *ServerToolResult - - // MCPToolCall contains the invocation details for an MCP tool managed by the model server. - MCPToolCall *MCPToolCall - - // MCPToolResult contains the result returned from an MCP tool managed by the model server. - MCPToolResult *MCPToolResult - - // MCPListToolsResult contains the list of available MCP tools reported by the model server. - MCPListToolsResult *MCPListToolsResult - - // MCPToolApprovalRequest contains the user approval request for an MCP tool call when required. - MCPToolApprovalRequest *MCPToolApprovalRequest - - // MCPToolApprovalResponse contains the user's approval decision for an MCP tool call. - MCPToolApprovalResponse *MCPToolApprovalResponse - - // StreamingMeta contains metadata for streaming responses. - StreamingMeta *StreamingMeta - - // Extra contains additional information for the content block. - Extra map[string]any -} -``` +### Generate -`AgenticResponseMeta` is the metadata returned in model responses, where `TokenUsage` is common metadata returned by all model providers. `OpenAIExtension`, `GeminiExtension`, and `ClaudeExtension` are extension field definitions specific to OpenAI, Gemini, and Claude models respectively; extension information from other model providers is placed in `Extension`, with specific definitions provided by the corresponding component implementations in **eino-ext**. +`Generate` blocks until the model returns a complete response. ```go -type AgenticResponseMeta struct { - // TokenUsage is the token usage. - TokenUsage *TokenUsage - - // OpenAIExtension is the extension for OpenAI. - OpenAIExtension *openai.ResponseMetaExtension - - // GeminiExtension is the extension for Gemini. - GeminiExtension *gemini.ResponseMetaExtension - - // ClaudeExtension is the extension for Claude. - ClaudeExtension *claude.ResponseMetaExtension - - // Extension is the extension for other models, supplied by the component implementer. - Extension any -} +Generate(ctx context.Context, input []*schema.AgenticMessage, opts ...model.Option) (*schema.AgenticMessage, error) ``` -#### Reasoning - -The Reasoning type represents the model's reasoning process and thinking content. Some advanced models can perform internal reasoning before generating the final answer, and this reasoning content can be conveyed through this type. +Parameter description: -- Definition - -```go -type Reasoning struct { - // Text is either the thought summary or the raw reasoning text itself. - Text string + + + + + +
    ParameterDescription
    ctx
    Request context, also carries runtime information such as callback manager
    input
    Chronologically ordered list of agentic messages
    opts
    Request-level model configuration, such as temperature, tools, tool choice, model name, etc.
    - // Signature contains encrypted reasoning tokens. - // Required by some models when passing reasoning text back. - Signature string -} -``` +### Stream -- Example +`Stream` returns an incremental message stream. The caller is responsible for reading and closing the `StreamReader`. ```go -reasoning := &schema.Reasoning{ - Text: "The user now needs me to solve...", - Signature: "asjkhvipausdgy23oadlfdsf" -} +Stream(ctx context.Context, input []*schema.AgenticMessage, opts ...model.Option) (*schema.StreamReader[*schema.AgenticMessage], error) ``` -#### UserInputText - -UserInputText is the most basic content type for conveying plain text input. It's the primary way users interact with models, suitable for natural language dialogue, instruction delivery, and question asking. - -- Definition - ```go -type UserInputText struct { - // Text is the text content. - Text string +reader, err := m.Stream(ctx, messages) +if err != nil { + return err } -``` +defer reader.Close() -- Example - -```go -textInput := &schema.UserInputText{ - Text: "Please help me analyze the performance bottleneck of this code", +for { + chunk, err := reader.Recv() + if errors.Is(err, io.EOF) { + break + } + if err != nil { + return err + } + // handle chunk } - -// Or use convenience functions to create messages -textInput := schema.UserAgenticMessage("Please help me analyze the performance bottleneck of this code") -textInput := schema.SystemAgenticMessage("You are an intelligent assistant") -textInput := schema.DeveloperAgenticMessage("You are an intelligent assistant") ``` -#### UserInputImage - -UserInputImage is used to provide image content to the model. It supports passing image data via URL reference or Base64 encoding, suitable for visual understanding, image analysis, and multimodal dialogue scenarios. - -- Definition - -```go -type UserInputImage struct { - // URL is the HTTP/HTTPS link. - URL string +> 💡 +> `schema.StreamReader` can only be consumed once. If multiple consumers need to read the same stream, the reader should be copied before reading, rather than reused after consumption. - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string +## Request-Level Options - // MIMEType is the mime type, e.g. "image/png". - MIMEType string +Code location: `components/model/option.go` - // Detail is the quality of the image url. - Detail ImageURLDetail -} -``` + + + + + + + +
    OptionApplicable ScopeDescription
    model.WithTools(tools)
    General, commonly used in agentic pathSets the tool definitions that can be called by the model for this request;
    nil
    is normalized to an empty slice
    model.WithDeferredTools(tools)
    AgenticModelRegisters tools that can be lazily loaded by the model's built-in tool search; do not also place them in
    WithTools
    model.WithToolSearchTool(tool)
    AgenticModelRegisters the tool search tool used by the model to retrieve deferred tools; do not place it in
    WithTools
    model.WithAgenticToolChoice(choice)
    AgenticModelControls how the agentic model selects function/MCP/server tools
    model.WithToolChoice(choice, names...)
    ChatModelTool choice only applicable to ChatModel
    -- Example +`AgenticToolChoice` is defined in `schema/tool.go`: ```go -// Using URL method -imageInput := &schema.UserInputImage{ - URL: "https://example.com/chart.png", - MIMEType: "image/png", - Detail: schema.ImageURLDetailHigh, +type AgenticToolChoice struct { + Type ToolChoice + Allowed *AgenticAllowedToolChoice + Forced *AgenticForcedToolChoice } -// Using Base64 encoding method -imageInput := &schema.UserInputImage{ - Base64Data: "iVBORw0KGgoAAAANSUhEUgAAAAUA...", - MIMEType: "image/png", +type AllowedTool struct { + FunctionName string + MCPTool *AllowedMCPTool + ServerTool *AllowedServerTool } ``` -#### UserInputAudio - -UserInputAudio is used to provide audio content to the model. It's suitable for speech recognition, audio analysis, and multimodal understanding scenarios. +## AgenticMessage -- Definition +Code location: `schema/agentic_message.go` ```go -type UserInputAudio struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "audio/wav". - MIMEType string -} -``` +type AgenticRoleType string -- Example +const ( + AgenticRoleTypeSystem AgenticRoleType = "system" + AgenticRoleTypeUser AgenticRoleType = "user" + AgenticRoleTypeAssistant AgenticRoleType = "assistant" +) -```go -audioInput := &schema.UserInputAudio{ - URL: "https://example.com/voice.wav", - MIMEType: "audio/wav", +type AgenticMessage struct { + Role AgenticRoleType + ContentBlocks []*ContentBlock + ResponseMeta *AgenticResponseMeta + Extra map[string]any } ``` -#### UserInputVideo - -UserInputVideo is used to provide video content to the model. It's suitable for video understanding, scene analysis, and action recognition advanced visual tasks. - -- Definition - -```go -type UserInputVideo struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "video/mp4". - MIMEType string -} -``` +`AgenticMessage` only has three role types: `system`, `user`, and `assistant`. Tool calls and tool results are not independent roles but are expressed through `ContentBlock`. -- Example +### ResponseMeta ```go -videoInput := &schema.UserInputVideo{ - URL: "https://example.com/demo.mp4", - MIMEType: "video/mp4", +type AgenticResponseMeta struct { + TokenUsage *TokenUsage + OpenAIExtension *openai.ResponseMetaExtension + GeminiExtension *gemini.ResponseMetaExtension + ClaudeExtension *claude.ResponseMetaExtension + Extension any } ``` -#### UserInputFile - -UserInputFile is used to provide file content to the model. It's suitable for document analysis, data extraction, and knowledge understanding scenarios. - -- Definition +`TokenUsage` provides universal token statistics; OpenAI, Gemini, and Claude provider extensions use dedicated fields; other model implementations can use `Extension`. -```go -type UserInputFile struct { - // URL is the HTTP/HTTPS link. - URL string - - // Name is the filename. - Name string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "application/pdf". - MIMEType string -} -``` +## ContentBlock -- Example +`ContentBlock` is the smallest content unit of `AgenticMessage`. A message can contain multiple ordered blocks to express multiple reasoning segments, text, multimodal output, and tool events within a single response. ```go -fileInput := &schema.UserInputFile{ - URL: "https://example.com/report.pdf", - Name: "report.pdf", - MIMEType: "application/pdf", -} -``` +type ContentBlock struct { + Type ContentBlockType -#### AssistantGenText + Reasoning *Reasoning -AssistantGenText is the text content generated by the model, the most common form of model output. Extension field definitions differ for different model providers: OpenAI models use `OpenAIExtension`, Claude models use `ClaudeExtension`; extension information from other model providers is placed in `Extension`, with specific definitions provided by corresponding component implementations in **eino-ext**. + UserInputText *UserInputText + UserInputImage *UserInputImage + UserInputAudio *UserInputAudio + UserInputVideo *UserInputVideo + UserInputFile *UserInputFile -- Definition + AssistantGenText *AssistantGenText + AssistantGenImage *AssistantGenImage + AssistantGenAudio *AssistantGenAudio + AssistantGenVideo *AssistantGenVideo -```go -import ( - "github.com/cloudwego/eino/schema/claude" - "github.com/cloudwego/eino/schema/openai" -) + FunctionToolCall *FunctionToolCall + FunctionToolResult *FunctionToolResult -type AssistantGenText struct { - // Text is the generated text. - Text string + ToolSearchFunctionToolResult *ToolSearchFunctionToolResult - // OpenAIExtension is the extension for OpenAI. - OpenAIExtension *openai.AssistantGenTextExtension + ServerToolCall *ServerToolCall + ServerToolResult *ServerToolResult - // ClaudeExtension is the extension for Claude. - ClaudeExtension *claude.AssistantGenTextExtension + MCPToolCall *MCPToolCall + MCPToolResult *MCPToolResult + MCPListToolsResult *MCPListToolsResult + MCPToolApprovalRequest *MCPToolApprovalRequest + MCPToolApprovalResponse *MCPToolApprovalResponse - // Extension is the extension for other models. - Extension any + StreamingMeta *StreamingMeta + Extra map[string]any } ``` -- Example - - - Creating a response - - ```go - textGen := &schema.AssistantGenText{ - Text: "Based on your requirements, I suggest the following approach...", - Extension: &AssistantGenTextExtension{ - Annotations: []*TextAnnotation{annotation}, - }, - } - ``` - - - Parsing a response - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticark" - ) - - // Assert to concrete implementation definition - ext := textGen.Extension.(*agenticark.AssistantGenTextExtension) - ``` - -#### AssistantGenImage - -AssistantGenImage is the image content generated by the model. Some models have image generation capabilities and can create images based on text descriptions, with output results conveyed through this type. - -- Definition - -```go -type AssistantGenImage struct { - // URL is the HTTP/HTTPS link. - URL string + + + + + + + + + + + +
    TypeConstantCorresponding FieldDescription
    reasoning
    ContentBlockTypeReasoning
    Reasoning
    Model reasoning summary or raw reasoning text
    User Input
    ContentBlockTypeUserInputText/Image/Audio/Video/File
    UserInput*
    User-side text and multimodal input
    Model Output
    ContentBlockTypeAssistantGenText/Image/Audio/Video
    AssistantGen*
    Text or multimodal content generated by the model
    Function Tool Call
    ContentBlockTypeFunctionToolCall
    FunctionToolCall
    Local function tool call generated by the provider
    Function Tool Result
    ContentBlockTypeFunctionToolResult
    FunctionToolResult
    Result returned to the model after user-side execution of a function tool
    Tool Search Result
    ContentBlockTypeToolSearchResult
    ToolSearchFunctionToolResult
    Tool definitions discovered and loaded by client-side tool search
    Server Tool
    ContentBlockTypeServerToolCall/Result
    ServerToolCall/Result
    Provider server-side executed built-in tools, e.g., web search
    MCP Tool
    ContentBlockTypeMCPToolCall/Result/ListToolsResult
    MCP*
    Provider-side hosted MCP tool calls, results, and tool lists
    MCP Approval
    ContentBlockTypeMCPToolApprovalRequest/Response
    MCPToolApproval*
    Human approval requests and responses before MCP tool execution
    - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string +> 💡 +> Currently, the JSON tag of the `ToolSearchFunctionToolResult` field is `tool_search_function_tool_result`, but the string value of `ContentBlockTypeToolSearchResult` is `tool_search_result`. Documentation and business logic should follow the source code definitions. - // MIMEType is the mime type, e.g. "image/png". - MIMEType string -} -``` +## Common Content Structures -- Example +### Reasoning ```go -imageGen := &schema.AssistantGenImage{ - URL: "https://api.example.com/generated/image123.png", - MIMEType: "image/png", +type Reasoning struct { + Text string + Signature string } ``` -#### AssistantGenAudio - -AssistantGenAudio is the audio content generated by the model. Some models have audio generation capabilities, with output audio data conveyed through this type. +`Signature` is used for scenarios where certain providers require encrypted reasoning tokens to be passed back. -- Definition +### User Input Content ```go -type AssistantGenAudio struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. - Base64Data string - - // MIMEType is the mime type, e.g. "audio/wav". - MIMEType string +type UserInputText struct { + Text string } -``` -- Example - -```go -audioGen := &schema.AssistantGenAudio{ - URL: "https://api.example.com/generated/audio123.wav", - MIMEType: "audio/wav", +type UserInputImage struct { + URL string + Base64Data string + MIMEType string + Detail ImageURLDetail } -``` -#### AssistantGenVideo - -AssistantGenVideo is the video content generated by the model. Some models have video generation capabilities, with output video data conveyed through this type. - -- Definition - -```go -type AssistantGenVideo struct { - // URL is the HTTP/HTTPS link. - URL string - - // Base64Data is the binary data in Base64 encoded string format. +type UserInputFile struct { + URL string + Name string Base64Data string - - // MIMEType is the mime type, e.g. "video/mp4". - MIMEType string + MIMEType string } ``` -- Example +`UserInputAudio` and `UserInputVideo` similarly support `URL`, `Base64Data`, and `MIMEType`. + +### Model Generated Content ```go -audioGen := &schema.AssistantGenAudio{ - URL: "https://api.example.com/generated/audio123.wav", - MIMEType: "audio/wav", +type AssistantGenText struct { + Text string + OpenAIExtension *openai.AssistantGenTextExtension + ClaudeExtension *claude.AssistantGenTextExtension + Extension any } ``` -#### FunctionToolCall - -FunctionToolCall represents a user-defined function tool call initiated by the model. When the model needs to execute a specific function, it generates a tool call request containing the tool name and parameters, with actual execution handled by the user side. +`AssistantGenImage`, `AssistantGenAudio`, and `AssistantGenVideo` support `URL`, `Base64Data`, and `MIMEType`. -- Definition +### Function tool call ```go type FunctionToolCall struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Arguments is the JSON string arguments for the function tool call. + CallID string + Name string Arguments string } ``` -- Example - -```go -toolCall := &schema.FunctionToolCall{ - CallID: "call_abc123", - Name: "get_weather", - Arguments: `{"location": "Beijing", "unit": "celsius"}`, -} -``` - -#### FunctionToolResult +`Arguments` is a JSON string generated by the model and passed to `AgenticToolsNode` for execution. -FunctionToolResult represents the execution result of a user-defined function tool. After the user side executes a tool call, the result is returned to the model through this type, allowing the model to continue generating responses. +### Function tool result -- Definition +In the current implementation, `FunctionToolResult` no longer uses `Result string` but instead uses `Content []*FunctionToolResultContentBlock` to uniformly carry text and multimodal tool results. ```go type FunctionToolResult struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Result is the function tool result returned by the user - Result string + CallID string + Name string + Content []*FunctionToolResultContentBlock } -``` - -- Example -```go -toolResult := &schema.FunctionToolResult{ - CallID: "call_abc123", - Name: "get_weather", - Result: `{"temperature": 15, "condition": "sunny"}`, +type FunctionToolResultContentBlock struct { + Type FunctionToolResultContentBlockType + Text *UserInputText + Image *UserInputImage + Audio *UserInputAudio + Video *UserInputVideo + File *UserInputFile + Extra map[string]any } - -// Or use convenience function to create message -msg := schema.FunctionToolResultAgenticMessage( - "call_abc123", - "get_weather", - `{"temperature": 15, "condition": "sunny"}`, -) ``` -#### ServerToolCall - -ServerToolCall represents the invocation of a model server-side built-in tool. Some model providers integrate specific tools (like web search, code executor) on the server side, and the model can autonomously call these tools without user intervention. `Arguments` are the parameters for the model to call the server-side built-in tool, with specific definitions provided by corresponding component implementations in **eino-ext**. - -- Definition +### Server tool ```go type ServerToolCall struct { - // Name specifies the server-side tool invoked. - // Supplied by the model server (e.g., `web_search` for OpenAI, `googleSearch` for Gemini). - Name string - - // CallID is the unique identifier for the tool call. - // Empty if not provided by the model server. - CallID string - - // Arguments are the raw inputs to the server-side tool, - // supplied by the component implementer. + Name string + CallID string Arguments any } -``` - -- Example - - - Creating a response - - ```go - serverCall := &schema.ServerToolCall{ - Name: "web_search", - CallID: "search_123", - Arguments: &ServerToolCallArguments{ - WebSearch: &WebSearchArguments{ - ActionType: WebSearchActionSearch, - Search: &WebSearchQuery{ - Query: "Beijing weather today", - }, - }, - }, - } - ``` - - - Parsing a response - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - ) - // Assert to concrete implementation definition - args := serverCall.Arguments.(*agenticopenai.ServerToolCallArguments) - ``` - -#### ServerToolResult - -ServerToolResult represents the execution result of a server-side built-in tool. After the model server executes a tool call, the result is returned through this type. `Result` is the result of the model calling the server-side built-in tool, with specific definitions provided by corresponding component implementations in **eino-ext**. - -- Definition - -```go type ServerToolResult struct { - // Name specifies the server-side tool invoked. - // Supplied by the model server (e.g., `web_search` for OpenAI, `googleSearch` for Gemini). - Name string - - // CallID is the unique identifier for the tool call. - // Empty if not provided by the model server. - CallID string - - // Result refers to the raw output generated by the server-side tool, - // supplied by the component implementer. - Result any + Name string + CallID string + Content any } ``` -- Example - - - Creating a response - - ```go - serverResult := &schema.ServerToolResult{ - Name: "web_search", - CallID: "search_123", - Result: &ServerToolResult{ - WebSearch: &WebSearchResult{ - ActionType: WebSearchActionSearch, - Search: &WebSearchQueryResult{ - Sources: sources, - }, - }, - }, - } - ``` - - - Parsing a response - - ```go - import ( - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - ) - - // Assert to concrete implementation definition - args := serverResult.Result.(*agenticopenai.ServerToolResult) - ``` +Server tools are executed by the model server side. The specific structure of `Arguments` and `Content` is determined by the component implementation and provider protocol. -#### MCPToolCall - -MCPToolCall represents an MCP (Model Context Protocol) tool call initiated by the model. Some models allow configuring MCP tools and calling them autonomously without user intervention. - -- Definition +### MCP tool ```go type MCPToolCall struct { - // ServerLabel is the MCP server label used to identify it in tool calls - ServerLabel string - - // ApprovalRequestID is the approval request ID. + ServerLabel string ApprovalRequestID string - - // CallID is the unique ID of the tool call. - CallID string - - // Name is the name of the tool to run. - Name string - - // Arguments is the JSON string arguments for the tool call. - Arguments string -} -``` - -- Example - -```go -mcpCall := &schema.MCPToolCall{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Arguments: `{"sql": "SELECT * FROM users LIMIT 10"}`, + CallID string + Name string + Arguments string } -``` - -#### MCPToolResult -MCPToolResult represents the MCP tool execution result returned by the model. After the model autonomously completes an MCP tool call, the result or error information is returned through this type. - -- Definition - -```go type MCPToolResult struct { - // ServerLabel is the MCP server label used to identify it in tool calls - ServerLabel string - - // CallID is the unique ID of the tool call. - CallID string - - // Name is the name of the tool to run. - Name string - - // Result is the JSON string with the tool result. - Result string - - // Error returned when the server fails to run the tool. - Error *MCPToolCallError -} - -type MCPToolCallError struct { - // Code is the error code. - Code *int64 - - // Message is the error message. - Message string -} -``` - -- Example - -```go -// MCP tool call succeeded -mcpResult := &schema.MCPToolResult{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Result: `{"rows": [...], "count": 10}`, -} - -// MCP tool call failed -errorCode := int64(500) -mcpError := &schema.MCPToolResult{ - ServerLabel: "database-server", - CallID: "mcp_call_456", - Name: "execute_query", - Error: &schema.MCPToolCallError{ - Code: &errorCode, - Message: "Database connection failed", - }, -} -``` - -#### MCPListToolsResult - -MCPListToolsResult represents the query result for available tools from an MCP server returned by the model. Models that support configuring MCP tools can autonomously query the MCP server for available tools, with the query result returned through this type. - -- Definition - -```go -type MCPListToolsResult struct { - // ServerLabel is the MCP server label used to identify it in tool calls. ServerLabel string - - // Tools is the list of tools available on the server. - Tools []*MCPListToolsItem - - // Error returned when the server fails to list tools. - Error string -} - -type MCPListToolsItem struct { - // Name is the name of the tool. - Name string - - // Description is the description of the tool. - Description string - - // InputSchema is the JSON schema that describes the tool input parameters. - InputSchema *jsonschema.Schema + CallID string + Name string + Content string + Error *MCPToolCallError } ``` -- Example - -```go -toolsList := &schema.MCPListToolsResult{ - ServerLabel: "database-server", - Tools: []*schema.MCPListToolsItem{ - { - Name: "execute_query", - Description: "Execute SQL query", - InputSchema: &jsonschema.Schema{...}, - }, - { - Name: "create_table", - Description: "Create database table", - InputSchema: &jsonschema.Schema{...}, - }, - }, -} -``` - -#### MCPToolApprovalRequest - -MCPToolApprovalRequest represents an MCP tool call request that requires user approval. In the model's autonomous MCP tool calling process, certain sensitive or high-risk operations (like data deletion, external payments) require explicit user authorization before execution. Some models support configuring MCP tool call approval policies, and before each high-risk MCP tool call, the model returns an authorization request through this type. - -- Definition +MCP approval-related structures: ```go type MCPToolApprovalRequest struct { - // ID is the approval request ID. - ID string - - // Name is the name of the tool to run. - Name string - - // Arguments is the JSON string arguments for the tool call. - Arguments string - - // ServerLabel is the MCP server label used to identify it in tool calls. + ID string + Name string + Arguments string ServerLabel string } -``` - -- Example - -```go -approvalReq := &schema.MCPToolApprovalRequest{ - ID: "approval_20260112_001", - Name: "delete_records", - Arguments: `{"table": "users", "condition": "inactive=true", "estimated_count": 150}`, - ServerLabel: "database-server", -} -``` - -#### MCPToolApprovalResponse - -MCPToolApprovalResponse represents the user's approval decision for an MCP tool call. After receiving an MCPToolApprovalRequest, the user needs to review the operation details and make a decision, choosing to approve or reject the operation, with an optional reason for the decision. -- Definition - -```go type MCPToolApprovalResponse struct { - // ApprovalRequestID is the approval request ID being responded to. ApprovalRequestID string - - // Approve indicates whether the request is approved. - Approve bool - - // Reason is the rationale for the decision. - // Optional. - Reason string -} -``` - -- Example - -```go -approvalResp := &schema.MCPToolApprovalResponse{ - ApprovalRequestID: "approval_789", - Approve: true, - Reason: "Confirmed deletion of inactive users", -} -``` - -#### StreamingMeta - -StreamingMeta is used in streaming response scenarios to identify the position of a content block in the final response. During streaming generation, content may be returned in multiple chunks, and the index allows for correctly assembling the complete response. - -- Definition - -```go -type StreamingMeta struct { - // Index specifies the index position of this block in the final response. - Index int + Approve bool + Reason string } ``` -- Example - -```go -textGen := &schema.AssistantGenText{Text: "This is the first part"} -meta := &schema.StreamingMeta{Index: 0} -block := schema.NewContentBlockChunk(textGen, meta) -``` - -### Common Options - -AgenticModel and ChatModel share a common set of Options for configuring model behavior. Additionally, AgenticModel provides some exclusive configuration options. - -> Code location: [https://github.com/cloudwego/eino/tree/main/components/model/option.go](https://github.com/cloudwego/eino/tree/main/components/model/option.go) - - - - - - - - - - - - -
    AgenticModelChatModel
    TemperatureSupportedSupported
    ModelSupportedSupported
    TopPSupportedSupported
    ToolsSupportedSupported
    ToolChoiceSupportedSupported
    MaxTokensSupportedSupported
    AllowedToolNamesNot SupportedSupported
    StopSupported by some implementationsSupported
    AllowedToolsSupportedNot Supported
    +## Helper Functions -Correspondingly, AgenticModel has added the following method for setting Options: +### Shortcut Messages ```go -// WithAgenticToolChoice is the option to set tool choice for the agentic model. -func WithAgenticToolChoice(toolChoice schema.ToolChoice, allowedTools ...*schema.AllowedTool) Option {} +msg := schema.SystemAgenticMessage("You are a helpful assistant.") +msg := schema.UserAgenticMessage("Analyze this file.") ``` -#### Implementation-Specific Custom Options +Both `SystemAgenticMessage` and `UserAgenticMessage` create an `AgenticMessage` with a `UserInputText` block. -The WrapImplSpecificOptFn method provides component implementations the ability to inject custom Options. Developers need to define implementation-specific Option types and provide corresponding Option configuration methods. +### NewContentBlock ```go -type openaiOptions struct { - maxToolCalls *int - maxOutputTokens *int64 -} - -func WithMaxToolCalls(maxToolCalls int) model.Option { - return model.WrapImplSpecificOptFn(func(o *openaiOptions) { - o.maxToolCalls = &maxToolCalls - }) -} +block := schema.NewContentBlock(&schema.AssistantGenText{ + Text: "done", +}) -func WithMaxOutputTokens(maxOutputTokens int64) model.Option { - return model.WrapImplSpecificOptFn(func(o *openaiOptions) { - o.maxOutputTokens = &maxOutputTokens - }) -} +chunk := schema.NewContentBlockChunk( + &schema.AssistantGenText{Text: "partial"}, + &schema.StreamingMeta{Index: 0}, +) ``` -## Usage +`NewContentBlock` automatically sets the `ContentBlock.Type` and corresponding field based on the specific content type passed in; unsupported types return `nil`. -### Standalone Usage +## Collaboration with AgenticToolsNode -- Non-streaming call +When `AgenticModel` generates local function tool calls, it produces `FunctionToolCall` blocks in the assistant message. `compose.AgenticToolsNode` reads these blocks, executes the corresponding `tool.BaseTool`, and converts the results into `FunctionToolResult` blocks with role `user` to return to the model. ```go -import ( - "context" - - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - "github.com/cloudwego/eino/schema" - openaischema "github.com/cloudwego/eino/schema/openai" - "github.com/eino-contrib/jsonschema" - "github.com/openai/openai-go/v3/responses" - "github.com/wk8/go-ordered-map/v2" -) - -func main() { - ctx := context.Background() - - am, _ := agenticopenai.New(ctx, &agenticopenai.Config{}) - - input := []*schema.AgenticMessage{ - schema.UserAgenticMessage("what is the weather like in Beijing"), - } - - am_, _ := am.WithTools([]*schema.ToolInfo{ - { - Name: "get_weather", - Desc: "get the weather in a city", - ParamsOneOf: schema.NewParamsOneOfByJSONSchema(&jsonschema.Schema{ - Type: "object", - Properties: orderedmap.New[string, *jsonschema.Schema]( - orderedmap.WithInitialData( - orderedmap.Pair[string, *jsonschema.Schema]{ - Key: "city", - Value: &jsonschema.Schema{ - Type: "string", - Description: "the city to get the weather", - }, - }, - ), - ), - Required: []string{"city"}, - }), - }, - }) - - msg, _ := am_.Generate(ctx, input) +input := &schema.AgenticMessage{ + Role: schema.AgenticRoleTypeAssistant, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolCall{ + CallID: "call_1", + Name: "get_weather", + Arguments: `{"city":"Beijing"}`, + }), + }, } -``` - -- Streaming call - -```go -import ( - "context" - "errors" - "io" - - "github.com/cloudwego/eino-ext/components/model/agenticopenai" - "github.com/cloudwego/eino/components/model" - "github.com/cloudwego/eino/schema" - "github.com/openai/openai-go/v3/responses" -) - -func main() { - ctx := context.Background() - - am, _ := agenticopenai.New(ctx, &agenticopenai.Config{}) - - serverTools := []*agenticopenai.ServerToolConfig{ - { - WebSearch: &responses.WebSearchToolParam{ - Type: responses.WebSearchToolTypeWebSearch, - }, - }, - } - - allowedTools := []*schema.AllowedTool{ - { - ServerTool: &schema.AllowedServerTool{ - Name: string(agenticopenai.ServerToolNameWebSearch), - }, - }, - } - - opts := []model.Option{ - model.WithToolChoice(schema.ToolChoiceForced, allowedTools...), - agenticopenai.WithServerTools(serverTools), - } - - input := []*schema.AgenticMessage{ - schema.UserAgenticMessage("what's cloudwego/eino"), - } - - resp, _ := am.Stream(ctx, input, opts...) - - var msgs []*schema.AgenticMessage - for { - msg, err := resp.Recv() - if err != nil { - if errors.Is(err, io.EOF) { - break - } - } - msgs = append(msgs, msg) - } - concatenated, _ := schema.ConcatAgenticMessages(msgs) -} +results, err := toolsNode.Invoke(ctx, input) ``` -### Usage in Orchestration +Output structure illustration: ```go -import ( - "github.com/cloudwego/eino/schema" - "github.com/cloudwego/eino/compose" -) - -func main() { - /* Initialize AgenticModel - * am, err := xxx - */ - - // Use in Chain - c := compose.NewChain[[]*schema.AgenticMessage, *schema.AgenticMessage]() - c.AppendAgenticModel(am) - - - // Use in Graph - g := compose.NewGraph[[]*schema.AgenticMessage, *schema.AgenticMessage]() - g.AddAgenticModelNode("model_node", cm) +&schema.AgenticMessage{ + Role: schema.AgenticRoleTypeUser, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolResult{ + CallID: "call_1", + Name: "get_weather", + Content: []*schema.FunctionToolResultContentBlock{ + { + Type: schema.FunctionToolResultContentBlockTypeText, + Text: &schema.UserInputText{Text: "sunny"}, + }, + }, + }), + }, } ``` -## Option and Callback Usage - -### Option Usage - -```go -import "github.com/cloudwego/eino/components/model" - -response, err := am.Generate(ctx, messages, - model.WithTemperature(0.7), - model.WithModel("gpt-5"), -) -``` - -### Callback Usage +## Minimal Usage Example ```go -import ( - "context" - - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/components/model" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" - callbacksHelper "github.com/cloudwego/eino/utils/callbacks" -) - -// Create callback handler -handler := &callbacksHelper.AgenticModelCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *model.AgenticCallbackInput) context.Context { - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *model.AgenticCallbackOutput) context.Context { - return ctx - }, - OnError: func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context { - return ctx - }, - OnEndWithStreamOutput: func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[*model.AgenticCallbackOutput]) context.Context { - defer output.Close() - - for { - chunk, err := output.Recv() - if errors.Is(err, io.EOF) { - break - } - ... - } - - return ctx - }, +messages := []*schema.AgenticMessage{ + schema.SystemAgenticMessage("You are a concise assistant."), + schema.UserAgenticMessage("Search recent Go release notes and summarize them."), } -// Use callback handler -helper := callbacksHelper.NewHandlerHelper(). - AgenticModel(handler). - Handler() - -/*** compose a chain -* chain := NewChain -* chain.Appendxxx(). -* Appendxxx(). -* ... -*/ - -// Use at runtime -runnable, err := chain.Compile() +resp, err := m.Generate(ctx, messages, + model.WithTools([]*schema.ToolInfo{searchToolInfo}), + model.WithAgenticToolChoice(&schema.AgenticToolChoice{ + Type: schema.ToolChoiceAllowed, + }), +) if err != nil { return err } -result, err := runnable.Invoke(ctx, messages, compose.WithCallbacks(helper)) + +for _, block := range resp.ContentBlocks { + if block.Type == schema.ContentBlockTypeAssistantGenText && block.AssistantGenText != nil { + fmt.Println(block.AssistantGenText.Text) + } +} ``` -## Official Implementations +## Best Practices -To be added +- Prefer using `schema.NewContentBlock` to construct blocks to avoid inconsistency between `Type` and content fields. +- Tool results should be expressed using `FunctionToolResult.Content`; avoid flattening multimodal results into strings. +- Provider-specific response information should be placed in the corresponding extension fields or `Extension`; do not write them into the general fields of the main structure. +- In streaming output, `StreamingMeta.Index` can be used to indicate the block index in the final response that the current chunk corresponds to. +- Do not assume a `tool` role exists in documentation and business code; tool events in the agentic path are carried by `ContentBlock`. diff --git a/content/en/docs/eino/core_modules/components/agentic_chat_template_guide.md b/content/en/docs/eino/core_modules/components/agentic_chat_template_guide.md index 5724d07ad9..ad482e4606 100644 --- a/content/en/docs/eino/core_modules/components/agentic_chat_template_guide.md +++ b/content/en/docs/eino/core_modules/components/agentic_chat_template_guide.md @@ -1,28 +1,24 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] -title: 'Eino: AgenticChatTemplate Guide [Beta]' +title: AgenticChatTemplate Guide [Beta] weight: 11 --- > 💡 -> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). +> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). This document is based on the current main branch source code, with code primarily located in `components/prompt`, `schema/agentic_message.go`, and `compose`. ## Introduction -The Prompt component is used for processing and formatting prompt templates. AgenticChatTemplate is a component abstraction specifically designed for AgenticMessage, with definitions and usage essentially the same as the existing ChatTemplate abstraction. Its main purpose is to fill user-provided variable values into predefined message templates, generating standardized message formats for interacting with language models. This component can be used in the following scenarios: +`AgenticChatTemplate` is a Prompt component abstraction designed for `*schema.AgenticMessage`. It fills variables from a `map[string]any` into agentic message templates and outputs `[]*schema.AgenticMessage` for use by `AgenticModel` or subsequent orchestration nodes. -- Building structured system prompts -- Processing multi-turn dialogue templates (including history) -- Implementing reusable prompt patterns +Its design is essentially the same as the existing `ChatTemplate`, but the message type is switched from `*schema.Message` to `*schema.AgenticMessage`, and template rendering only applies to user input content blocks. ## Component Definition -### Interface - -> Code: [https://github.com/cloudwego/eino/tree/main/components/prompt/interface.go](https://github.com/cloudwego/eino/tree/main/components/prompt/interface.go) +Code location: `components/prompt/interface.go` ```go type AgenticChatTemplate interface { @@ -30,293 +26,314 @@ type AgenticChatTemplate interface { } ``` -#### Format Method +`Format` parameter description: + + + + + + +
    ParameterDescription
    ctx
    Request context, also carries runtime information such as the callback manager
    vs
    Template variable map, where the key is the placeholder name and value is the actual value
    opts
    Prompt component Option, supports implementation-side custom extensions
    -- Purpose: Fill variable values into the message template -- Params: - - ctx: Context object for passing request-level information, also used to pass the Callback Manager - - vs: Variable value mapping used to fill placeholders in the template - - opts: Optional parameters for configuring formatting behavior -- Returns: - - `[]*schema.AgenticMessage`: Formatted message list - - error: Error information during formatting +Return values: -### Built-in Templating Methods + + + + +
    Return ValueDescription
    []*schema.AgenticMessage
    The rendered agentic message list
    error
    Returns an error when variables are missing, variable types don't match, or template rendering fails
    -The Prompt component has built-in support for three templating methods: +## Construction Methods -1. FString Format (schema.FString) +### FromAgenticMessages - - Uses `{variable}` syntax for variable substitution - - Simple and intuitive, suitable for basic text replacement scenarios - - Example: `"You are a {role}, please help me {task}."` -2. GoTemplate Format (schema.GoTemplate) +Code location: `components/prompt/agentic_chat_template.go` - - Uses Go standard library's text/template syntax - - Supports conditional statements, loops, and other complex logic - - Example: `"{{if .expert}}As an expert{{end}} please {{.action}}"` -3. Jinja2 Format (schema.Jinja2) +```go +func FromAgenticMessages(formatType schema.FormatType, templates ...schema.AgenticMessagesTemplate) *DefaultAgenticChatTemplate +``` - - Uses Jinja2 template syntax - - Example: `"{% if level == 'expert' %}From an expert perspective{% endif %} analyze {{topic}}"` +`FromAgenticMessages` does not return an `error`. It accepts a template format and a set of `schema.AgenticMessagesTemplate`, and returns the default implementation `*DefaultAgenticChatTemplate`. -### Common Options +```go +template := prompt.FromAgenticMessages(schema.FString, + schema.SystemAgenticMessage("You are a {role}."), + schema.AgenticMessagesPlaceholder("history", true), + schema.UserAgenticMessage("Please help me {task}."), +) +``` -AgenticChatTemplate shares a common set of Options with ChatTemplate. +### Supported FormatTypes -## Usage + + + + + +
    FormatConstantPlaceholder ExampleApplicable Scenarios
    FString
    schema.FString
    {role}
    Simple variable substitution
    GoTemplate
    schema.GoTemplate
    {{.role}}
    Scenarios requiring Go
    text/template
    capabilities
    Jinja2
    schema.Jinja2
    {{ role }}
    Scenarios requiring Jinja2 syntax
    -AgenticChatTemplate is typically used before AgenticModel to prepare context. +## AgenticMessagesTemplate -### Creation Methods +Code location: `schema/agentic_message.go` -- `prompt.FromAgenticMessages()` - - Used to combine multiple messages into an agentic chat template. -- `schema.AgenticMessage{}` - - schema.AgenticMessage is a struct that implements the Format interface, so you can directly construct `schema.AgenticMessage{}` as a template -- `schema.DeveloperAgenticMessage()` - - A shortcut method for building a message with role "developer" -- `schema.SystemAgenticMessage()` - - A shortcut method for building a message with role "system" -- `schema.UserAgenticMessage()` - - A shortcut method for building a message with role "user" -- `schema.FunctionToolResultAgenticMessage()` - - A shortcut method for building a tool call message with role "user" -- `schema.AgenticMessagesPlaceholder()` - - Can be used to insert a `[]*schema.AgenticMessage` into the message list, commonly used for inserting conversation history +```go +type AgenticMessagesTemplate interface { + Format(ctx context.Context, vs map[string]any, formatType FormatType) ([]*AgenticMessage, error) +} +``` -### Standalone Usage +Common implementations include: + + + + + + + +
    Construction MethodDescription
    &schema.AgenticMessage{...}
    AgenticMessage
    itself implements
    AgenticMessagesTemplate
    schema.SystemAgenticMessage(text)
    Constructs a
    system
    role message
    schema.UserAgenticMessage(text)
    Constructs a
    user
    role message
    schema.AgenticMessagesPlaceholder(key, optional)
    Inserts a set of historical agentic messages from the variable map
    + +### Template Rendering Scope + +`AgenticMessage.Format` only formats user input blocks: + +- `ContentBlockTypeUserInputText` +- `ContentBlockTypeUserInputImage` +- `ContentBlockTypeUserInputAudio` +- `ContentBlockTypeUserInputVideo` +- `ContentBlockTypeUserInputFile` + +Model output, reasoning, tool call, tool result, MCP, and server tool related blocks are not rendered as prompt template content. + +> 💡 +> It is recommended to use `schema.SystemAgenticMessage`, `schema.UserAgenticMessage`, and `schema.NewContentBlock` to construct templates, avoiding inconsistencies between `ContentBlock.Type` and content fields when setting them manually. + +## Placeholder + +Code location: `schema/agentic_message.go` ```go -import ( - "github.com/cloudwego/eino/components/prompt" - "github.com/cloudwego/eino/schema" -) +func AgenticMessagesPlaceholder(key string, optional bool) AgenticMessagesTemplate +``` -// Create template -template := prompt.FromAgenticMessages(schema.FString, - schema.SystemAgenticMessage("You are a {role}."), - schema.AgenticMessagesPlaceholder("history_key", false), - schema.UserAgenticMessage("Please help me {task}") -) +Behavior rules: -// Prepare variables -variables := map[string]any{ - "role": "professional assistant", - "task": "write a poem", - "history_key": []*schema.AgenticMessage{ - { - Role: schema.AgenticRoleTypeUser, - ContentBlocks: []*schema.ContentBlock{ - schema.NewContentBlock(&schema.UserInputText{Text: "Tell me what is oil painting?"}), - }, - }, - { - Role: schema.AgenticRoleTypeAssistant, - ContentBlocks: []*schema.ContentBlock{ - schema.NewContentBlock(&schema.AssistantGenText{Text: "Oil painting is xxx"}), - }, - }, + + + + + + +
    ScenarioBehavior
    vs[key]
    exists and type is
    []*schema.AgenticMessage
    Inserts the message list as-is
    vs[key]
    does not exist and
    optional=true
    Returns an empty slice without error
    vs[key]
    does not exist and
    optional=false
    Returns an error
    vs[key]
    type is not
    []*schema.AgenticMessage
    Returns an error
    + +Example: + +```go +history := []*schema.AgenticMessage{ + schema.UserAgenticMessage("What is oil painting?"), + { + Role: schema.AgenticRoleTypeAssistant, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.AssistantGenText{Text: "Oil painting is ..."}), + }, }, } -// Format template -messages, err := template.Format(context.Background(), variables) +messages, err := template.Format(ctx, map[string]any{ + "role": "professional assistant", + "task": "write a short poem", + "history": history, +}) +if err != nil { + return err +} ``` -### In Orchestration +## Standalone Usage ```go -import ( - "github.com/cloudwego/eino/components/prompt" - "github.com/cloudwego/eino/schema" - "github.com/cloudwego/eino/compose" +template := prompt.FromAgenticMessages(schema.FString, + schema.SystemAgenticMessage("You are a {role}."), + schema.AgenticMessagesPlaceholder("history", true), + schema.UserAgenticMessage("Please help me {task}."), ) -// Use in Chain -chain := compose.NewChain[map[string]any, []*schema.AgenticMessage]() -chain.AppendAgenticChatTemplate(template) - -// Compile and run -runnable, err := chain.Compile() +messages, err := template.Format(ctx, map[string]any{ + "role": "concise assistant", + "task": "summarize the following requirement", + "history": []*schema.AgenticMessage{ + schema.UserAgenticMessage("Previous question"), + }, +}) if err != nil { return err } -result, err := runnable.Invoke(ctx, variables) - -// Use in Graph -graph := compose.NewGraph[map[string]any, []*schema.AgenticMessage]() -graph.AddAgenticChatTemplateNode("template_node", template) ``` -### Pull Data from Predecessor Node Output +## Usage in Orchestration + +### Chain -When using AddNode, you can add the WithOutputKey Option to convert the node's output to a Map: +Code location: `compose/chain.go` ```go -// This node's output will change from string to map[string]any, -// and the map will have only one element with key "your_output_key" and value being the actual string output from the node -graph.AddLambdaNode("your_node_key", compose.InvokableLambda(func(ctx context.Context, input []*schema.AgenticMessage) (str string, err error) { - // your logic - return -}), compose.WithOutputKey("your_output_key")) +func (c *Chain[I, O]) AppendAgenticChatTemplate(node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *Chain[I, O] ``` -After converting the predecessor node's output to map[string]any and setting the key, use the value corresponding to that key in the downstream AgenticChatTemplate node. - -## Options and Callback Usage - -### Callback Usage Example - ```go -import ( - "context" +chain := compose.NewChain[map[string]any, *schema.AgenticMessage]() +chain.AppendAgenticChatTemplate(template) +chain.AppendAgenticModel(model) +``` - callbackHelper "github.com/cloudwego/eino/utils/callbacks" - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/components/prompt" -) +### Graph -// Create callback handler -handler := &callbackHelper.AgenticPromptCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *prompt.AgenticCallbackInput) context.Context { - fmt.Printf("Starting template formatting, variables: %v\n", input.Variables) - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *prompt.AgenticCallbackOutput) context.Context { - fmt.Printf("Template formatting complete, number of messages generated: %d\n", len(output.Result)) - return ctx - }, -} +Code location: `compose/graph.go` -// Use callback handler -helper := callbackHelper.NewHandlerHelper(). - AgenticPrompt(handler). - Handler() +```go +func (g *graph) AddAgenticChatTemplateNode(key string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) error +``` -// Use at runtime -runnable, err := chain.Compile() +```go +graph := compose.NewGraph[map[string]any, *schema.AgenticMessage]() +err := graph.AddAgenticChatTemplateNode("prompt", template) if err != nil { return err } -result, err := runnable.Invoke(ctx, variables, compose.WithCallbacks(helper)) ``` -## Implementation Reference +### Workflow + +Code location: `compose/workflow.go` + +```go +func (wf *Workflow[I, O]) AddAgenticChatTemplateNode(key string, chatTemplate prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *WorkflowNode +``` -### Option Mechanism +### Parallel and ChainBranch -If needed, component implementers can implement custom prompt options: +Agentic prompt can also be placed in `Parallel` or `ChainBranch`: ```go -import ( - "github.com/cloudwego/eino/components/prompt" +func (p *Parallel) AddAgenticChatTemplate(outputKey string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *Parallel + +func (cb *ChainBranch) AddAgenticChatTemplate(key string, node prompt.AgenticChatTemplate, opts ...GraphAddNodeOpt) *ChainBranch +``` + +## Getting Variables from Predecessor Nodes + +`AgenticChatTemplate.Format` requires `map[string]any`. If the predecessor node's output is not a map, you can use `compose.WithOutputKey` when adding the node to wrap the output as a single-field map. + +```go +graph.AddLambdaNode("query", + compose.InvokableLambda(func(ctx context.Context, input string) (string, error) { + return input, nil + }), + compose.WithOutputKey("task"), ) -// Define Option struct -type MyPromptOptions struct { - StrictMode bool - DefaultValues map[string]string -} +graph.AddAgenticChatTemplateNode("prompt", template) +``` -// Define Option functions -func WithStrictMode(strict bool) prompt.Option { - return prompt.WrapImplSpecificOptFn(func(o *MyPromptOptions) { - o.StrictMode = strict - }) -} +The wrapped map looks like: -func WithDefaultValues(values map[string]string) prompt.Option { - return prompt.WrapImplSpecificOptFn(func(o *MyPromptOptions) { - o.DefaultValues = values - }) +```go +map[string]any{ + "task": previousNodeOutput, } ``` -### Callback Handling +## Callback -Prompt implementations need to trigger callbacks at appropriate times. The following structures are defined by the component: +### Component-level Callback Payload -> Code: [github.com/cloudwego/eino/tree/main/components/prompt/agentic_callback_extra.go](http://github.com/cloudwego/eino/tree/main/components/prompt/agentic_callback_extra.go) +Code location: `components/prompt/agentic_callback_extra.go` ```go -// AgenticCallbackInput is the input for the callback. type AgenticCallbackInput struct { - // Variables is the variables for the callback. Variables map[string]any - // Templates is the agentic templates for the callback. Templates []schema.AgenticMessagesTemplate - // Extra is the extra information for the callback. - Extra map[string]any + Extra map[string]any } -// AgenticCallbackOutput is the output for the callback. type AgenticCallbackOutput struct { - // Result is the agentic result for the callback. - Result []*schema.AgenticMessage - // Templates is the agentic templates for the callback. + Result []*schema.AgenticMessage Templates []schema.AgenticMessagesTemplate - // Extra is the extra information for the callback. - Extra map[string]any + Extra map[string]any } + +func ConvAgenticCallbackInput(src callbacks.CallbackInput) *AgenticCallbackInput +func ConvAgenticCallbackOutput(src callbacks.CallbackOutput) *AgenticCallbackOutput ``` -### Complete Implementation Example +`DefaultAgenticChatTemplate.Format` triggers callbacks at the start and end, passing the above agentic payload. + +### utils/callbacks Helper + +Code location: `utils/callbacks/template.go` + +The current public signature of `AgenticPromptCallbackHandler` is as follows: ```go -type MyPrompt struct { - templates []schema.AgenticMessagesTemplate - formatType schema.FormatType - strictMode bool - defaultValues map[string]string +type AgenticPromptCallbackHandler struct { + OnStart func(ctx context.Context, runInfo *callbacks.RunInfo, input *prompt.CallbackInput) context.Context + OnEnd func(ctx context.Context, runInfo *callbacks.RunInfo, output *prompt.CallbackOutput) context.Context + OnError func(ctx context.Context, runInfo *callbacks.RunInfo, err error) context.Context } +``` -func NewMyPrompt(config *MyPromptConfig) (*MyPrompt, error) { - return &MyPrompt{ - templates: config.Templates, - formatType: config.FormatType, - strictMode: config.DefaultStrictMode, - defaultValues: config.DefaultValues, - }, nil -} +Register using the helper: -func (p *MyPrompt) Format(ctx context.Context, vs map[string]any, opts ...prompt.Option) ([]*schema.AgenticMessage, error) { - // 1. Handle Options - options := &MyPromptOptions{ - StrictMode: p.strictMode, - DefaultValues: p.defaultValues, - } - options = prompt.GetImplSpecificOptions(options, opts...) - - // 2. Get callback manager - cm := callbacks.ManagerFromContext(ctx) - - // 3. Callback before starting formatting - ctx = cm.OnStart(ctx, info, &prompt.AgenticCallbackInput{ - Variables: vs, - Templates: p.templates, - }) - - // 4. Execute formatting logic - messages, err := p.doFormat(ctx, vs, options) - - // 5. Handle error and completion callbacks - if err != nil { - ctx = cm.OnError(ctx, info, err) - return nil, err - } - - ctx = cm.OnEnd(ctx, info, &prompt.AgenticCallbackOutput{ - Result: messages, - Templates: p.templates, - }) - - return messages, nil +```go +handler := callbackHelper.NewHandlerHelper(). + AgenticPrompt(&callbackHelper.AgenticPromptCallbackHandler{ + OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *prompt.CallbackInput) context.Context { + if input != nil { + fmt.Printf("variables: %v\n", input.Variables) + } + return ctx + }, + OnError: func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context { + fmt.Printf("prompt error: %v\n", err) + return ctx + }, + }). + Handler() + +result, err := runnable.Invoke(ctx, variables, compose.WithCallbacks(handler)) +``` + +> 💡 +> If you need to directly handle `*prompt.AgenticCallbackInput` or `*prompt.AgenticCallbackOutput`, you should use the component-level callback payload along with `prompt.ConvAgenticCallbackInput/Output`. The current public signature of `utils/callbacks.AgenticPromptCallbackHandler` still reuses `prompt.CallbackInput/Output`. + +## Custom Implementation + +Implementing a custom `AgenticChatTemplate` only requires satisfying the interface: + +```go +type MyAgenticPrompt struct { + templates []schema.AgenticMessagesTemplate + formatType schema.FormatType } -func (p *MyPrompt) doFormat(ctx context.Context, vs map[string]any, opts *MyPromptOptions) ([]*schema.AgenticMessage, error) { - // Implement your custom logic - return messages, nil +func (p *MyAgenticPrompt) Format(ctx context.Context, vs map[string]any, opts ...prompt.Option) ([]*schema.AgenticMessage, error) { + result := make([]*schema.AgenticMessage, 0, len(p.templates)) + for _, tpl := range p.templates { + msgs, err := tpl.Format(ctx, vs, p.formatType) + if err != nil { + return nil, err + } + result = append(result, msgs...) + } + return result, nil } ``` + +If you need to support custom options, you can implement them using `prompt.WrapImplSpecificOptFn` and `prompt.GetImplSpecificOptions`. + +## Best Practices + +- `FromAgenticMessages` does not return an `error`, so examples should not be written as `template, err := ...`. +- The variable value for `AgenticMessagesPlaceholder` must be `[]*schema.AgenticMessage`. +- Template variable names should be stable and consistent; missing variables will return an error at runtime. +- Use `AgenticMessagesPlaceholder("history", true)` for conversation history, which naturally returns an empty list when there is no history. +- In Graph/Chain, ensure that the node following the Agentic prompt accepts `[]*schema.AgenticMessage` type, such as `AgenticModel`. diff --git a/content/en/docs/eino/core_modules/components/agentic_tools_node_guide.md b/content/en/docs/eino/core_modules/components/agentic_tools_node_guide.md index 1d5194e611..914cf5be08 100644 --- a/content/en/docs/eino/core_modules/components/agentic_tools_node_guide.md +++ b/content/en/docs/eino/core_modules/components/agentic_tools_node_guide.md @@ -1,378 +1,412 @@ --- Description: "" -date: "2026-03-03" +date: "2026-05-25" lastmod: "" tags: [] -title: 'AgenticToolsNode & Tool User Guide [Beta]' +title: AgenticToolsNode & Tool User Guide [Beta] weight: 12 --- > 💡 -> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). +> This feature is available starting from [v0.9](https://github.com/cloudwego/eino/releases/tag/v0.9.0-alpha.2). This document is based on the current main branch source code, with code primarily located in `compose/agentic_tools_node.go`, `compose/tool_node.go`, `components/tool/interface.go`, and `schema/tool.go`. -## **Introduction** +## Introduction -In the eino framework, a `Tool` is defined as "an external capability that an AgenticModel can choose to invoke", including local functions, MCP server tools, etc. +`AgenticToolsNode` is the tool execution node on the agentic message path in Eino. It receives `*schema.AgenticMessage`, extracts tool calls from the `FunctionToolCall` content blocks, leverages `ToolsNode`'s execution capabilities to perform local tool execution, and then converts the results into `FunctionToolResult` content blocks for return. -`AgenticToolsNode` is the designated "Tool executor" in the eino framework. The methods for executing tools are defined as follows: +It is not responsible for "deciding which tool to call". Tool selection is done by the upstream `AgenticModel`; `AgenticToolsNode` only executes the corresponding tools based on the function tool calls in the input message. -> Code location: [https://github.com/cloudwego/eino/tree/main/compose/agentic_tools_node.go](https://github.com/cloudwego/eino/tree/main/compose/agentic_tools_node.go) +> 💡 +> `AgenticToolsNode` is an agentic wrapper layer around `ToolsNode`, so it reuses `ToolsNodeConfig`, `ToolsNodeOption`, tool aliases, exception handling, execution order, argument handlers, and tool middleware capabilities. + +## AgenticToolsNode Definition + +Code location: `compose/agentic_tools_node.go` ```go -func (a *AgenticToolsNode) Invoke(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) ([]*schema.AgenticMessage, error) {} +func NewAgenticToolsNode(ctx context.Context, conf *ToolsNodeConfig) (*AgenticToolsNode, error) -func (a *AgenticToolsNode) Stream(ctx context.Context, input *schema.AgenticMessage, - opts ...ToolsNodeOption) (*schema.StreamReader[[]*schema.AgenticMessage], error) {} +type AgenticToolsNode struct { + inner *ToolsNode +} + +func (a *AgenticToolsNode) Invoke(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) ([]*schema.AgenticMessage, error) + +func (a *AgenticToolsNode) Stream(ctx context.Context, input *schema.AgenticMessage, opts ...ToolsNodeOption) (*schema.StreamReader[[]*schema.AgenticMessage], error) ``` -AgenticToolsNode and ToolsNode share the same configuration and usage, such as configuring execution sequence, exception handling, input processing, middleware extensions, etc. +Input/Output rules: + + + + + +
    MethodInputOutput
    Invoke
    assistant message containing one or more
    FunctionToolCall
    blocks
    multiple user messages, each containing one
    FunctionToolResult
    or
    ToolSearchFunctionToolResult
    block
    Stream
    assistant message containing one or more
    FunctionToolCall
    blocks
    StreamReader
    , each chunk is
    []*schema.AgenticMessage
    -> Code location: [https://github.com/cloudwego/eino/tree/main/compose/tool_node.go](https://github.com/cloudwego/eino/tree/main/compose/tool_node.go) +## Execution Flow + +
    + +Core conversion logic: + +- Only processes blocks with `ContentBlockTypeFunctionToolCall` type and non-nil `FunctionToolCall`. +- `FunctionToolCall.CallID` is converted to `schema.ToolCall.ID` for correlating tool results. +- Standard tool output is converted to text blocks in `FunctionToolResult.Content`. +- Enhanced tool output is converted to text/image/audio/video/file blocks in `FunctionToolResult.Content`. +- Tool search results are converted to `ToolSearchFunctionToolResult` blocks. +- The output message role is `schema.AgenticRoleTypeUser`. + +## ToolsNodeConfig + +Code location: `compose/tool_node.go` ```go type ToolsNodeConfig struct { - // Tools specify the list of tools can be called which are BaseTool but must implement InvokableTool or StreamableTool. - Tools []tool.BaseTool - - // UnknownToolsHandler handles tool calls for non-existent tools when LLM hallucinates. - // This field is optional. When not set, calling a non-existent tool will result in an error. - // When provided, if the LLM attempts to call a tool that doesn't exist in the Tools list, - // this handler will be invoked instead of returning an error, allowing graceful handling of hallucinated tools. - // Parameters: - // - ctx: The context for the tool call - // - name: The name of the non-existent tool - // - input: The tool call input generated by llm - // Returns: - // - string: The response to be returned as if the tool was executed - // - error: Any error that occurred during handling - UnknownToolsHandler func(ctx context.Context, name, input string) (string, error) - - // ExecuteSequentially determines whether tool calls should be executed sequentially (in order) or in parallel. - // When set to true, tool calls will be executed one after another in the order they appear in the input message. - // When set to false (default), tool calls will be executed in parallel. - ExecuteSequentially bool - - // ToolArgumentsHandler allows handling of tool arguments before execution. - // When provided, this function will be called for each tool call to process the arguments. - // Parameters: - // - ctx: The context for the tool call - // - name: The name of the tool being called - // - arguments: The original arguments string for the tool - // Returns: - // - string: The processed arguments string to be used for tool execution - // - error: Any error that occurred during preprocessing + Tools []tool.BaseTool + ToolAliases map[string]ToolAliasConfig + UnknownToolsHandler func(ctx context.Context, name, input string) (string, error) + ExecuteSequentially bool ToolArgumentsHandler func(ctx context.Context, name, arguments string) (string, error) - - // ToolCallMiddlewares configures middleware for tool calls. - // Each element can contain Invokable and/or Streamable middleware. - // Invokable middleware only applies to tools implementing InvokableTool interface. - // Streamable middleware only applies to tools implementing StreamableTool interface. - ToolCallMiddlewares []ToolMiddleware + ToolCallMiddlewares []ToolMiddleware } ``` -How does AgenticToolsNode "decide" which Tool to execute? It doesn't make decisions; instead, it executes based on the input `*schema.AgenticMessage`. The AgenticModel generates FunctionToolCalls to be invoked (containing ToolName, Argument, etc.) and places them in `*schema.AgenticMessage` to pass to AgenticToolsNode. AgenticToolsNode then actually executes each FunctionToolCall. - -If ExecuteSequentially is configured, AgenticToolsNode will execute tools in the order they appear in `[]*ContentBlock`. + + + + + + + + +
    FieldDescription
    Tools
    List of executable tools. Each tool must implement
    tool.BaseTool
    and at least one execution interface
    ToolAliases
    Tool name aliases and argument alias configuration for compatibility with non-standard names generated by models
    UnknownToolsHandler
    Handles unknown tools hallucinated by the model; raises an error for unknown tools when not set
    ExecuteSequentially
    true
    means execute tool calls sequentially in order; default
    false
    executes in parallel
    ToolArgumentsHandler
    Called after argument alias processing and before tool execution; can be used for argument cleaning or completion
    ToolCallMiddlewares
    Tool execution middleware, supporting standard and enhanced, non-streaming and streaming tools
    -After each FunctionToolCall execution completes, the result is wrapped as `*schema.AgenticMessage` and becomes part of the AgenticToolsNode output. +### ToolsNodeOption ```go -// https://github.com/cloudwego/eino/tree/main/schema/agentic_message.go +type ToolsNodeOption func(o *toolsNodeOptions) -type AgenticMessage struct { - // role should be 'assistant' for tool call message - Role AgenticRoleType - - // ContentBlocks is the list of content blocks. - ContentBlocks []*ContentBlock +func WithToolOption(opts ...tool.Option) ToolsNodeOption +func WithToolList(tool ...tool.BaseTool) ToolsNodeOption +func WithToolAliases(toolAliases map[string]ToolAliasConfig) ToolsNodeOption +``` - // other fields... -} +`WithToolList` and `WithToolAliases` are call-level override configurations: -type ContentBlock struct { - Type ContentBlockType +- `WithToolList`: Replaces the tool list for the current call. +- `WithToolAliases` combined with `WithToolList`: Configures aliases for dynamic tool lists. +- `WithToolAliases` used alone: Replaces the global alias configuration while keeping the original tool list. - // FunctionToolCall contains the invocation details for a user-defined tool. - FunctionToolCall *FunctionToolCall +## Tool alias - // FunctionToolResult contains the result returned from a user-defined tool call. - FunctionToolResult *FunctionToolResult +Code location: `compose/tool_node.go` - // other fields... +```go +type ToolAliasConfig struct { + NameAliases []string + ArgumentsAliases map[string][]string } +``` -// FunctionToolCall is the function call in a message. -// It's used in assistant message. -type FunctionToolCall struct { - // CallID is the unique identifier for the tool call. - CallID string - - // Name specifies the function tool invoked. - Name string - - // Arguments is the JSON string arguments for the function tool call. - Arguments string -} +Semantic description: -// FunctionToolResult is the function call result in a message. -// It's used in user message. -type FunctionToolResult struct { - // CallID is the unique identifier for the tool call. - CallID string + + + + +
    ConfigDescription
    NameAliases
    Tool name aliases. When the model returns an alias, it will be resolved to the canonical tool name
    ArgumentsAliases
    Argument aliases. Key is the canonical argument name, value is a list of aliases
    - // Name specifies the function tool invoked. - Name string +Example: - // Result is the function tool result returned by the user - Result string -} +```go +toolsNode, err := compose.NewAgenticToolsNode(ctx, &compose.ToolsNodeConfig{ + Tools: []tool.BaseTool{searchTool}, + ToolAliases: map[string]compose.ToolAliasConfig{ + "search": { + NameAliases: []string{"web_search", "lookup"}, + ArgumentsAliases: map[string][]string{ + "query": {"q", "keyword"}, + "limit": {"count", "max_results"}, + }, + }, + }, +}) ``` -## **Tool Definition** +Argument alias processing rules: + +- Only processes keys in the top-level JSON object. +- Returns the original value when the string is empty, not an object, or JSON parsing fails. +- When the canonical key already exists, the alias will not override the canonical value. +- Alias remapping occurs before `ToolArgumentsHandler`. +- Alias configuration validates: empty aliases, empty canonical keys, canonical keys containing `.`, aliases conflicting with schema properties, and the same alias mapping to multiple canonical names. -### **Interface Definition** +## Tool Interface -The Tool component provides three levels of interfaces: +Eino currently does not export a unified interface named `Tool`. Tool capabilities are composed of the following interfaces in the `components/tool` package. -> Code location: [https://github.com/cloudwego/eino/components/tool/interface.go](https://github.com/cloudwego/eino/components/tool/interface.go) +Code location: `components/tool/interface.go` ```go -// BaseTool get tool info for ChatModel intent recognition. type BaseTool interface { Info(ctx context.Context) (*schema.ToolInfo, error) } -// InvokableTool the tool for ChatModel intent recognition and ToolsNode execution. type InvokableTool interface { BaseTool InvokableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (string, error) } -// StreamableTool the stream tool for ChatModel intent recognition and ToolsNode execution. type StreamableTool interface { BaseTool StreamableRun(ctx context.Context, argumentsInJSON string, opts ...Option) (*schema.StreamReader[string], error) } -``` - -#### **Info Method** -- Function: Get the tool's description information -- Parameters: - - ctx: Context object -- Return values: - - `*schema.ToolInfo`: Tool description information - - error: Error during information retrieval +type EnhancedInvokableTool interface { + BaseTool + InvokableRun(ctx context.Context, toolArgument *schema.ToolArgument, opts ...Option) (*schema.ToolResult, error) +} -#### **InvokableRun Method** +type EnhancedStreamableTool interface { + BaseTool + StreamableRun(ctx context.Context, toolArgument *schema.ToolArgument, opts ...Option) (*schema.StreamReader[*schema.ToolResult], error) +} +``` -- Function: Execute the tool synchronously -- Parameters: - - ctx: Context object, used for passing request-level information and also for passing the Callback Manager - - `argumentsInJSON`: JSON-formatted argument string - - opts: Tool execution options -- Return values: - - string: Execution result - - error: Error during execution +Interface layers: -#### **StreamableRun Method** + + + + + + + +
    InterfacePurpose
    BaseTool
    Provides tool metadata that can be passed to the model for tool recognition
    InvokableTool
    Non-streaming execution; input is a JSON string, returns a string
    StreamableTool
    Streaming execution; input is a JSON string, returns a string stream
    EnhancedInvokableTool
    Non-streaming enhanced tool; input is
    *schema.ToolArgument
    , returns multimodal
    *schema.ToolResult
    EnhancedStreamableTool
    Streaming enhanced tool; returns a
    *schema.ToolResult
    stream
    -- Function: Execute the tool in streaming mode -- Parameters: - - ctx: Context object, used for passing request-level information and also for passing the Callback Manager - - `argumentsInJSON`: JSON-formatted argument string - - opts: Tool execution options -- Return values: - - `*schema.StreamReader[string]`: Streaming execution result - - error: Error during execution +> 💡 +> If a tool implements both the standard interface and the enhanced interface, `ToolsNode` will prioritize using the enhanced interface to preserve structured multimodal results. -### **ToolInfo Struct** +## ToolInfo -> Code location: [https://github.com/cloudwego/eino/components/tool/interface.go](https://github.com/cloudwego/eino/components/tool/interface.go) +Code location: `schema/tool.go` ```go type ToolInfo struct { - // Unique name of the tool that clearly expresses its purpose - Name string - // Used to tell the model how/when/why to use this tool - // Can include few-shot examples in the description - Desc string - // Definition of parameters accepted by the tool - // Can be described in two ways: - // 1. Using ParameterInfo: schema.NewParamsOneOfByParams(params) - // 2. Using JSONSchema: schema.NewParamsOneOfByJSONSchema(jsonschema) + Name string + Desc string + Extra map[string]any *ParamsOneOf } ``` -### **Common Options** +Field descriptions: + + + + + + + +
    FieldDescription
    Name
    Unique tool name; should be concise and unique within the tool set
    Desc
    Tells the model when, why, and how to use the tool; can include a few examples
    Extra
    Additional metadata, defined by component implementations or business customizations
    ParamsOneOf
    Parameter definition; can be constructed via
    schema.NewParamsOneOfByParams
    or
    schema.NewParamsOneOfByJSONSchema
    ;
    nil
    means no parameters
    + +## ToolArgument and ToolResult + +Enhanced tools use structured input and multimodal output. + +```go +type ToolArgument struct { + Text string +} + +type ToolResult struct { + Parts []ToolOutputPart +} +``` + +`ToolOutputPart` can represent text, image, audio, video, file, and tool search results. `AgenticToolsNode` converts enhanced output into multimodal blocks in `FunctionToolResult.Content`. + +## FunctionToolCall and FunctionToolResult + +The input to `AgenticToolsNode` comes from `FunctionToolCall` blocks in `schema.AgenticMessage`: + +```go +type FunctionToolCall struct { + CallID string + Name string + Arguments string +} +``` + +Tool execution results are converted to `FunctionToolResult`: -The Tool component uses ToolOption to define optional parameters. AgenticToolsNode does not abstract common options. Each specific implementation can define its own specific Options, which are wrapped into the unified ToolOption type through the WrapToolImplSpecificOptFn function. +```go +type FunctionToolResult struct { + CallID string + Name string + Content []*FunctionToolResultContentBlock +} +``` -## **Usage** +`FunctionToolResultContentBlock` supports five content types: text, image, audio, video, and file. The current implementation no longer uses the `Result string` field. -ToolsNode is typically not used alone; it is generally used in orchestration after an AgenticModel. +## Standalone Usage Example ```go -import ( - "github.com/cloudwego/eino/components/tool" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" -) - -// Create tools node -toolsNode := compose.NewAgenticToolsNode([]tool.Tool{ - searchTool, // Search tool - weatherTool, // Weather query tool - calculatorTool, // Calculator tool +toolsNode, err := compose.NewAgenticToolsNode(ctx, &compose.ToolsNodeConfig{ + Tools: []tool.BaseTool{weatherTool}, }) +if err != nil { + return err +} -// Mock LLM output as input input := &schema.AgenticMessage{ Role: schema.AgenticRoleTypeAssistant, ContentBlocks: []*schema.ContentBlock{ - { - Type: schema.ContentBlockTypeFunctionToolCall, - FunctionToolCall: &schema.FunctionToolCall{ - CallID: "1", - Name: "get_weather", - Arguments: `{"city": "深圳", "date": "tomorrow"}`, - }, - }, + schema.NewContentBlock(&schema.FunctionToolCall{ + CallID: "call_1", + Name: "get_weather", + Arguments: `{"city":"Shenzhen","date":"tomorrow"}`, + }), }, } -toolMessages, err := toolsNode.Invoke(ctx, input) +messages, err := toolsNode.Invoke(ctx, input) +if err != nil { + return err +} ``` -### **Using in Orchestration** +Output example: ```go -import ( - "github.com/cloudwego/eino/components/tool" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/schema" -) - -// Create tools node -toolsNode := compose.NewAgenticToolsNode([]tool.Tool{ - searchTool, // Search tool - weatherTool, // Weather query tool - calculatorTool, // Calculator tool -}) +[]*schema.AgenticMessage{ + { + Role: schema.AgenticRoleTypeUser, + ContentBlocks: []*schema.ContentBlock{ + schema.NewContentBlock(&schema.FunctionToolResult{ + CallID: "call_1", + Name: "get_weather", + Content: []*schema.FunctionToolResultContentBlock{ + { + Type: schema.FunctionToolResultContentBlockTypeText, + Text: &schema.UserInputText{Text: "sunny"}, + }, + }, + }), + }, + }, +} +``` + +## Using in Orchestration + +### Chain + +Code location: `compose/chain.go` + +```go +func (c *Chain[I, O]) AppendAgenticToolsNode(node *AgenticToolsNode, opts ...GraphAddNodeOpt) *Chain[I, O] +``` -// Use in Chain +```go chain := compose.NewChain[*schema.AgenticMessage, []*schema.AgenticMessage]() chain.AppendAgenticToolsNode(toolsNode) - -// In graph -graph := compose.NewGraph[*schema.AgenticMessage, []*schema.AgenticMessage]() -graph.AddAgenticToolsNode(toolsNode) ``` -## **Option Mechanism** +### Graph -Custom Tools can implement specific Options as needed: +Code location: `compose/graph.go` ```go -import "github.com/cloudwego/eino/components/tool" +func (g *graph) AddAgenticToolsNode(key string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) error +``` -// Define Option struct -type MyToolOptions struct { - Timeout time.Duration - MaxRetries int - RetryInterval time.Duration +```go +graph := compose.NewGraph[*schema.AgenticMessage, []*schema.AgenticMessage]() +err := graph.AddAgenticToolsNode("tools", toolsNode) +if err != nil { + return err } +``` -// Define Option function -func WithTimeout(timeout time.Duration) tool.Option { - return tool.WrapImplSpecificOptFn(func(o *MyToolOptions) { - o.Timeout = timeout - }) -} +### Workflow, Parallel, ChainBranch + +```go +func (wf *Workflow[I, O]) AddAgenticToolsNode(key string, tools *AgenticToolsNode, opts ...GraphAddNodeOpt) *WorkflowNode + +func (p *Parallel) AddAgenticToolsNode(outputKey string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) *Parallel + +func (cb *ChainBranch) AddAgenticToolsNode(key string, node *AgenticToolsNode, opts ...GraphAddNodeOpt) *ChainBranch ``` -## **Option and Callback Usage** +## Callback -### **Callback Usage Example** +Code location: `utils/callbacks/template.go` ```go -import ( - "context" - - callbackHelper "github.com/cloudwego/eino/utils/callbacks" - "github.com/cloudwego/eino/callbacks" - "github.com/cloudwego/eino/compose" - "github.com/cloudwego/eino/components/tool" -) - -// Create callback handler -handler := &callbackHelper.ToolCallbackHandler{ - OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *tool.CallbackInput) context.Context { - fmt.Printf("Starting tool execution, arguments: %s\n", input.ArgumentsInJSON) - return ctx - }, - OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output *tool.CallbackOutput) context.Context { - fmt.Printf("Tool execution completed, result: %s\n", output.Response) - return ctx - }, - OnEndWithStreamOutput: func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[*tool.CallbackOutput]) context.Context { - fmt.Println("Tool starting streaming output") - go func() { - defer output.Close() - - for { - chunk, err := output.Recv() - if errors.Is(err, io.EOF) { - return - } - if err != nil { - return - } - fmt.Printf("Received streaming output: %s\n", chunk.Response) - } - }() - return ctx - }, +type AgenticToolsNodeCallbackHandlers struct { + OnStart func(ctx context.Context, info *callbacks.RunInfo, input *schema.AgenticMessage) context.Context + OnEnd func(ctx context.Context, info *callbacks.RunInfo, input []*schema.AgenticMessage) context.Context + OnEndWithStreamOutput func(ctx context.Context, info *callbacks.RunInfo, output *schema.StreamReader[[]*schema.AgenticMessage]) context.Context + OnError func(ctx context.Context, info *callbacks.RunInfo, err error) context.Context } +``` + +Registration example: -// Use callback handler -helper := callbackHelper.NewHandlerHelper(). - Tool(handler). +```go +handler := callbackHelper.NewHandlerHelper(). + AgenticToolsNode(&callbackHelper.AgenticToolsNodeCallbackHandlers{ + OnStart: func(ctx context.Context, info *callbacks.RunInfo, input *schema.AgenticMessage) context.Context { + fmt.Printf("tool call blocks: %d\n", len(input.ContentBlocks)) + return ctx + }, + OnEnd: func(ctx context.Context, info *callbacks.RunInfo, output []*schema.AgenticMessage) context.Context { + fmt.Printf("tool results: %d\n", len(output)) + return ctx + }, + }). Handler() - -/*** compose a chain -* chain := NewChain -* chain.appendxxx(). -* appendxxx(). -* ... -*/ - -// Use at runtime -runnable, err := chain.Compile() -if err != nil { - return err + +result, err := runnable.Invoke(ctx, input, compose.WithCallbacks(handler)) +``` + +## Getting ToolCallID + +Code location: `compose/tool_node.go` + +```go +func GetToolCallID(ctx context.Context) string +``` + +Within a tool function body or tool callback handler, you can use `compose.GetToolCallID(ctx)` to get the current tool call ID. + +```go +func (t *MyTool) InvokableRun(ctx context.Context, args string, opts ...tool.Option) (string, error) { + callID := compose.GetToolCallID(ctx) + // An empty callID indicates the current ctx is not in a tool call execution context, or the context value type does not match. + return callID, nil } -result, err := runnable.Invoke(ctx, input, compose.WithCallbacks(helper)) ``` -## How to Get ToolCallID +## Usage Recommendations -In the tool function body and tool callback handler, you can use the `compose.GetToolCallID(ctx)` function to get the ToolCallID of the current Tool. +- In documentation and code, refer to `tool.BaseTool`, `InvokableTool`, `StreamableTool`, `EnhancedInvokableTool`, `EnhancedStreamableTool`—do not use an exported `Tool` interface that does not exist in the source code. +- If a tool may return images, audio, video, or files, prefer implementing the enhanced interface to avoid flattening multimodal results into a string. +- Multiple tool calls execute in parallel by default; set `ExecuteSequentially: true` when order needs to be preserved or tools have side-effect dependencies. +- When using `ToolArgumentsHandler` for argument cleaning, note that it executes after argument alias remapping. +- `UnknownToolsHandler` is suitable as a fallback for tool names hallucinated by the model, but should not mask real configuration errors. -## **Existing Implementations** +## Existing Implementations 1. Google Search Tool: Tool implementation based on Google search [Tool - Googlesearch](/docs/eino/ecosystem_integration/tool/tool_googlesearch) 2. DuckDuckGo Search Tool: Tool implementation based on DuckDuckGo search [Tool - DuckDuckGoSearch](/docs/eino/ecosystem_integration/tool/tool_duckduckgo_search) 3. MCP: Use MCP server as a tool [Eino Tool - MCP](/docs/eino/ecosystem_integration/tool/tool_mcp) -## **Tool Implementation Methods** - -There are multiple ways to implement tools. You can refer to the following approaches: +## Tool Implementation Methods - HTTP API-based tool implementation: [How to create a tool/function call using OpenAPI?](https://bytedance.larkoffice.com/wiki/FjXzwf3exijtKyk2hh7cAmnZn1g) - gRPC-based tool implementation: [How to create a tool/function call using proto3?](https://bytedance.larkoffice.com/wiki/EPkawUVbdiGwxCkWCJTcAMQonbh) - Thrift-based tool implementation: [How to create a tool/function call using thrift IDL?](https://bytedance.larkoffice.com/wiki/PcHfwo6x0iOrXxkIjJecez8xnNg) - Local function-based tool implementation: [How to create a tool?](/docs/eino/core_modules/components/tools_node_guide/how_to_create_a_tool) -- ……