diff --git a/content/zh/docs/eino/core_modules/eino_adk/agent_implementation/deepagents.md b/content/zh/docs/eino/core_modules/eino_adk/agent_implementation/deepagents.md
new file mode 100644
index 00000000000..aaa019b6f27
--- /dev/null
+++ b/content/zh/docs/eino/core_modules/eino_adk/agent_implementation/deepagents.md
@@ -0,0 +1,157 @@
+---
+Description: ""
+date: "2025-11-14"
+lastmod: ""
+tags: []
+title: 'Eino ADK MultiAgent: DeepAgents'
+weight: 5
+---
+
+## DeepAgents 概述
+
+Eino ADK 中的 DeepAgents 是一个高级的多智能体(Multi-Agent)协调器,其设计哲学与 LangChain 的 Deep Agents 概念高度一致。您可以将其理解为 Eino ADK 对 LangChain Deep Agents 思想的具体工程实现,旨在通过一个“指挥官”智能体(主 Agent)来规划、拆解、委派并监督一系列复杂的任务,这些任务最终由专门的子智能体(Sub-Agents)或工具(Tools)执行。
+
+DeepAgent 的核心价值在于自动化处理需要多步骤、多角色协作的复杂工作流。它不仅仅是单一功能的执行者,更是一个具备深度思考、规划和动态调整能力的“项目经理”。
+
+### ImportPath
+
+Eino 版本需大于等于 v0.5.14
+
+```go
+import github.com/cloudwego/eino/adk/prebuilt/deep
+
+agent, err := deep.New(ctx, &deep.Config{})
+```
+
+### DeepAgents 结构
+
+DeepAgents 是一种多智能体(Multi-Agent)架构,其核心思想在于通过一个主代理(MainAgent)来协调、规划和委派任务。主代理本身不直接执行所有操作,而是利用其内置的大模型和一系列工具来与外部世界交互或将复杂任务分解给专门的子代理(SubAgents)。
+
+
+
+上图展示了 DeepAgents 的核心组件与它们之间的调用关系:
+
+- MainAgent: 系统的入口和总指挥,接收初始任务,以 ReAct 方式调用工具完成任务并负责最终结果的呈现。
+- ChatModel (ToolCallingChatModel): 通常是一个具备工具调用能力的大语言模型,负责理解任务、推理、选择并调用工具。
+- Tools: MainAgent 可用的一系列能力的集合,包括:
+ - WriteTodos: 内置的规划工具,用于将复杂任务拆解为结构化的待办事项列表。
+ - TaskTool: 一个特殊的工具,作为调用子 Agent 的统一入口。
+ - CustomTools: 用户根据业务需求自定义的各类工具。
+- SubAgents: 负责执行具体、独立的子任务,与 MainAgent 上下文独立。
+ - GeneralPurpose: 通用子 Agent,具有与 MainAgent 相同的 Tools(除了 TaskTool),用于在“干净”的上下文中执行子任务。
+ - CustomSubAgents: 用户根据业务需求自定义的各种子 Agent。
+
+### 任务拆解与规划
+
+WriteTodos 的 Description 描述了任务拆解、规划的原则,主 Agent 通过调用 WriteTodos 工具,在上下文中添加子任务列表来启发后续推理、执行过程:
+
+
+
+1. 模型接收用户输入。
+2. 模型调用 WriteTodos 工具,参数为依照 WriteTodos Description 产生的任务列表。这次工具调用被添加到上下文中,供后续参考。
+3. 模型依照上下文中的 todos,调用 TaskTool 完成第一个 todo。
+4. 再次调用 WriteTodos ,更新 Todos 执行进度。
+
+> 💡
+> 对简单任务来说,每次都调用 WriteTodos 可能会起到反效果。WriteTodos Description 中添加了一些比较通用的正反例子来避免不调用或过度调用 WriteTodos。使用 DeepAgents 时,可以根据实际业务场景添加更多 prompt 来让 WriteTodos 在合适的时候被调用。
+
+> 💡
+> WriteTodos 会被默认添加到 Agent 中,配置 `WithoutWriteTodos=true` 可以关闭 WriteTodos。
+
+### 任务委派与 SubAgents 调用
+
+**TaskTool**
+
+所有子 Agent 会被绑定到 TaskTool 上,当主 Agent 分配子任务给子 Agent 处理时,它会调用 TaskTool,并指明需要哪个子代理及执行的任务。TaskTool 随后将任务路由到指定的子代理,并在其执行完毕后,将结果返回给主 Agent。TaskTool 的默认 Description 会说明调用子 Agent 的通用规则并拼接每个子 Agent 的 Description,开发者可以通过配置 `TaskToolDescriptionGenerator` 来自定义 TaskTool 的 Description。
+
+**上下文隔离**
+
+Agent 之间的上下文隔离:
+
+- 信息传递: 主 Agent 与子 Agent 之间不共享上下文。子 Agent 仅接收主 Agent 分配的子任务目标,不会接收整个任务的处理过程;主 Agent 仅接收子 Agent 的处理结果,不会接受子 Agent 的处理过程。
+- 避免污染: 这种隔离确保了子 Agent 的执行过程(如大量的工具调用和中间步骤)不会“污染”主代理的上下文,主代理只接收简洁、明确的最终答案。
+
+**general-purpose**
+
+DeepAgents 会默认增加一个子 Agent:general-purpose。general-purpose 具有和主 Agent 相同的 system prompt 和工具(除了 TaskTool),当任务没有专门的子 Agent 来解决时,主 Agent 可以调用 general-purpose 来隔离上下文。开发者可以通过配置 `WithoutGeneralSubAgent=true` 去掉此 Agent。
+
+### 与其他 MultiAgent 对比
+
+- 对比 Supervisor(ReAct)
+
+ - 优势:DeepAgents 通过内置 WriteTodos 强化任务拆解与规划;同时隔离多 Agents 上下文,在大规模、多步骤任务中通常效果更优。
+ - 劣势:制定计划与调用子 Agent 会带来额外的模型请求,增加耗时与 token 成本;若任务拆分不合理,可能对效果产生反作用。
+- 对比 Plan-and-Execute
+
+ - 优势:DeepAgents 将 Plan/RePlan 作为工具供主 Agent 自由调用,可以在任务中跳过不必要的规划,整体上减少模型调用次数、降低耗时与成本。
+ - 劣势:任务规划与委派由一次模型调用完成,对模型能力要求更高,提示词调优也相对更困难。
+
+## DeepAgent 使用示例
+
+### 场景说明
+
+Excel Agent 是一个“看得懂 Excel 的智能助手”,它先把问题拆解成步骤,再一步步执行并校验结果。它能理解用户问题与上传的文件内容,提出可行的解决方案,并选择合适的工具(系统命令、生成并运行 Python 代码、网络查询等等)完成任务。
+
+在真实业务里,你可以把 Excel Agent 当成一位“Excel 专家 + 自动化工程师”。当你交付一个原始表格和目标描述,它会给出方案并完成执行:
+
+- **数据清理与格式化**:从一个包含大量数据的 Excel 文件中完成去重、空值处理、日期格式标准化操作。
+- **数据分析与报告生成**:从销售数据中提取每月的销售总额,聚合统计、透视,最终生成并导出图表报告。
+- **自动化预算计算**:根据不同部门的预算申请,自动计算总预算并生成部门预算分配表。
+- **数据匹配与合并**:将多个不同来源的客户信息表进行匹配合并,生成完整的客户信息数据库。
+
+用 DeepAgents 搭建的 Excel Agent 结构如下:
+
+
+
+1. 在主 Agent 添加 ReadFile 工具,允许主 Agent 查看文件内容,辅助子任务制定
+2. 添加 Code 和 WebSearch 两个子 Agent:Code 可以编写 python 代码来操作 excel 表格;WebSearch 可以搜索信息并总结。
+
+### 代码实现
+
+https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/deep
+
+### 运行结果
+
+```yaml
+name: ExcelAgent
+path: [{ExcelAgent}]
+tool name: task
+arguments: {"subagent_type":"CodeAgent","description":"请帮我处理一个CSV文件操作任务。具体要求如下:1. 读取当前目录下的questions.csv文件;2. 提取该CSV文件中的第一列数据;3. 将提取出的第一列数据保存到一个新的CSV文件中,新文件命名为first_column.csv。请使用pandas库来完成这些操作,确保代码能够正确执行并处理可能出现的文件路径问题。"}
+
+name: ExcelAgent
+path: [{ExcelAgent}]
+tool name: python_runner
+arguments: {"code":"```python\nimport pandas as pd\nimport os\n\n# 获取当前工作目录并构建文件路径\nbase_dir = os.getcwd()\ninput_path = os.path.join(base_dir, 'questions.csv')\noutput_path = os.path.join(base_dir, 'first_column.csv')\n\ntry:\n # 读取CSV文件\n df = pd.read_csv(input_path)\n # 提取第一列数据\n first_column = df.iloc[:, 0]\n # 保存为新CSV文件(不包含索引)\n first_column.to_csv(output_path, index=False)\n print(f\"成功将第一列数据保存至: {output_path}\")\nexcept FileNotFoundError:\n print(f\"错误: 未找到文件 {input_path}\")\nexcept Exception as e:\n print(f\"处理过程中发生错误: {str(e)}\")\n```"}
+
+name: ExcelAgent
+path: [{ExcelAgent}]
+tool response: 成功将第一列数据保存至: /Users/bytedance/go/src/github.com/cloudwego/eino-examples/adk/multiagent/deep/playground/262be931-532c-4d83-8cff-96c44b131973/first_column.csv
+
+
+name: ExcelAgent
+path: [{ExcelAgent}]
+answer: 任务已完成。已成功读取当前目录下的 `questions.csv` 文件,提取第一列数据,并将结果保存至 `first_column.csv`。具体输出路径如下:
+
+`/Users/bytedance/go/src/github.com/cloudwego/eino-examples/adk/multiagent/deep/playground/262be931-532c-4d83-8cff-96c44b131973/first_column.csv`
+
+代码已处理路径拼接和异常捕获(如文件不存在或格式错误),确保执行稳定性。
+
+name: ExcelAgent
+path: [{ExcelAgent}]
+tool response: 任务已完成。已成功读取当前目录下的 `questions.csv` 文件,提取第一列数据,并将结果保存至 `first_column.csv`。具体输出路径如下:
+
+`/Users/bytedance/go/src/github.com/cloudwego/eino-examples/adk/multiagent/deep/playground/262be931-532c-4d83-8cff-96c44b131973/first_column.csv`
+
+代码已处理路径拼接和异常捕获(如文件不存在或格式错误),确保执行稳定性。
+
+name: ExcelAgent
+path: [{ExcelAgent}]
+answer: 已成功将 `questions.csv` 表格中的第一列数据提取至新文件 `first_column.csv`,文件保存路径为
+:
+
+`/Users/bytedance/go/src/github.com/cloudwego/eino-examples/adk/multiagent/deep/playground/262be931-532c-4d83-8cff-96c4
+4b131973/first_column.csv`
+
+操作过程中已处理路径拼接和异常捕获(如文件不存在、格式错误等问题),确保数据
+提取完整性和文件生成稳定性。若需要调整文件路径或对数据格式有进一步要求,请随时告知。
+```
diff --git a/content/zh/docs/eino/overview/bytedance_eino_practice.md b/content/zh/docs/eino/overview/bytedance_eino_practice.md
index d1fd7e26d26..4f51e59ecee 100644
--- a/content/zh/docs/eino/overview/bytedance_eino_practice.md
+++ b/content/zh/docs/eino/overview/bytedance_eino_practice.md
@@ -4,7 +4,7 @@ date: "2025-03-04"
lastmod: ""
tags: []
title: 字节跳动大模型应用 Go 开发框架 —— Eino 实践
-weight: 0
+weight: 1
---
## 前言
diff --git a/content/zh/docs/eino/overview/eino_adk0_1.md b/content/zh/docs/eino/overview/eino_adk0_1.md
new file mode 100644
index 00000000000..46e5c5e5f95
--- /dev/null
+++ b/content/zh/docs/eino/overview/eino_adk0_1.md
@@ -0,0 +1,532 @@
+---
+Description: ""
+date: "2025-11-14"
+lastmod: ""
+tags: []
+title: Eino ADK:一文搞定 AI Agent 核心设计模式,从 0 到 1 搭建智能体系统
+weight: 3
+---
+
+# 前言
+
+当大语言模型突破了 “理解与生成” 的瓶颈,Agent 迅速成为 AI 落地的主流形态。从智能客服到自动化办公,几乎所有场景都需要 Agent 来承接 LLM 能力、执行具体任务。
+
+但技术演进中痛点也随之凸显,有的团队因不懂如何衔接 LLM 与业务系统,导致 Agent 只能 “空谈”;有的因状态管理缺失,让 Agent 执行任务时频频 “失忆”,复杂的交互流程也进一步增加了开发难度。
+
+为此,Eino ADK(Agent Development Kit)应运而生,为 Go 开发者提供了一套完整、灵活且强大的智能体开发框架,直接解决传统开发中的核心难题。
+
+## 🙋 什么是 Agent?
+
+Agent 代表一个独立的、可执行的智能任务单元,能够自主学习,适应与作出决策,主要功能包含:
+
+- **推理**:Agent 可以分析数据、识别模式、使用逻辑和可用信息来得出结论、进行推断及解决问题。
+- **行动**:Agent 根据决策、计划或外部输入采取行动或执行任务来实现目标。
+- **观察**:Agent 自主收集相关的信息(例如计算机视觉、自然语言处理或传感器数据分析)来了解上下文,为做出明智的决策打下基础。
+- **规划**:Agent 可以确定必要的步骤、评估潜在行动,并根据可用信息和预期结果选择最佳行动方案。
+- **协作**:Agent 能够在复杂且动态的环境中,与他人(无论是人类还是其他 AI 智能体)进行有效协作。
+
+你可以把它想象成一个能够理解指令、执行任务并给出回应的“智能体”。任何需要与大语言模型(LLM)交互的场景都可以抽象为一个 Agent。例如:
+
+- 一个用于查询天气信息的 Agent。
+- 一个用于预定会议的 Agent。
+- 一个能够回答特定领域知识的 Agent。
+
+## 🙋♂️ 什么是 Eino ADK?
+
+[Eino ADK](https://github.com/cloudwego/eino) 是一个专为 Go 语言设计的 Agent 和 Multi-Agent 开发框架,设计上参考了 [Google-ADK](https://google.github.io/adk-docs/agents/) 中对 Agent 与协作机制的定义。
+
+它不仅是一个工具库,更是一套完整的智能体开发体系:通过统一的抽象接口、灵活的组合模式和强大的协作机制,将复杂的 AI 应用拆解为独立、可组合的智能体单元,让开发者能够像搭建乐高积木一样构建复杂的智能体系统:
+
+- **少写胶水**:统一接口与事件流,复杂任务拆解更自然。
+- **快速编排**:预设范式 + 工作流,分分钟搭好管线。
+- **更可控**:可中断、可恢复、可审计,Agent 协作过程“看得见”。
+
+无论你是 AI 应用的新手,还是经验丰富的开发者,ADK 都能为你提供合适的工具和模式。它的设计哲学是"简单的事情简单做,复杂的事情也能做"——让开发者能够专注于业务逻辑的实现,而不必担心底层的技术复杂性。
+
+# 核心构建
+
+## 🧠 ChatModelAgent:智能决策的大脑
+
+`ChatModelAgent` 是 ADK 中最重要的预构建组件,它封装了与大语言模型的交互逻辑,实现了经典的 [ReAct](https://react-lm.github.io/)(Reason-Act-Observe)模式,运行过程为:
+
+1. 调用 LLM(Reason)
+2. LLM 返回工具调用请求(Action)
+3. ChatModelAgent 执行工具(Act)
+4. 将工具结果返回给 LLM(Observation),结合之前的上下文继续生成,直到模型判断不需要调用 Tool 后结束。
+
+
+
+ReAct 模式的核心是**思考 → 行动 → 观察 → 再思考**的闭环,解决传统 Agent “盲目行动”或“推理与行动脱节”的痛点,以下是几种可能的实践场景:
+
+- **行业赛道分析**:使用 ReAct 模式避免了一次性搜集全部信息导致的信息过载,通过逐步推理聚焦核心问题;同时使用数据验证思考,而非凭空靠直觉决策,过程可解释,提升了生成报告的准确性。
+ - **Think-1**:判断赛道潜力,需要 “政策支持力度、行业增速、龙头公司盈利能力、产业链瓶颈”4 类信息。
+ - **Act-1**:调用 API 获取行业财报整体数据
+ - **Think-2**:分析数据,判断行业高增长 + 政策背书,但上游价格上涨可能挤压中下游利润,需要进一步验证是否有影响
+ - **Act-2**: 调用 API 获取供需、行业研报等详细数据
+ - **Think-3**: 整合结论生成分析报告,附关键数据来源
+- **IT 故障运维**:使用 ReAct 模式逐步缩小问题范围,避免盲目操作;每一步操作有理有据,方便运维工程师实施解决方案前的二次验证,为后续复盘与制定预防措施提供基础。
+ - **Think-1**:理清故障的常见原因,例如宕机的常见原因是 “CPU 过载、内存不足、磁盘满、服务崩溃”,需要先查基础监控数据
+ - **Act-1**:调用「监控系统 API」查询服务器打点数据
+ - **Think-2**:判断主因,例如 CPU 利用率异常则进一步排查哪些进程 CPU 占用高
+ - **Act-2**:用「进程管理工具」查 TOP 进程,看是否有异常服务
+ - **Think-3**:发现日志服务异常,可能是 “日志文件过大” 或 “配置错误”,需要进一步查看日志服务的配置和日志文件大小
+ - **Act-3**:bash 执行命令,发现日志文件过大,同时配置未开启滚动,也未设置最大日志大小
+ - **Think-4**:向运维工程师提供可行的解决方案:清理日志,修改配置并开启滚动,重启日志服务与应用
+
+`ChatModelAgent` 利用 LLM 强大的功能进行推理、理解自然语言、作出决策、生成相应、进行工具交互,**充当智能体应用程序 "思考" 的部分**。您可以使用 ADK 快速构建具有 `ReAct` 能力的 `ChatModelAgent`:
+
+```go
+import github.com/cloudwego/eino/adk
+
+// 创建一个包含多个工具的 ReAct ChatModelAgent
+chatAgent := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
+ Name: "intelligent_assistant",
+ Description: "An intelligent assistant capable of using multiple tools to solve complex problems",
+ Instruction: "You are a professional assistant who can use the provided tools to help users solve problems",
+ Model: openaiModel,
+ ToolsConfig: adk.ToolsConfig{
+ Tools: []tool.BaseTool{
+ searchTool,
+ calculatorTool,
+ weatherTool,
+ },
+ }
+})
+```
+
+## 🎭 WorkflowAgents:精密的流水线
+
+Eino ADK 提供了专用于协调子 Agent 执行流程的 WorkflowAgents 模式,用于通过预定义逻辑管理 Agent 的运行方式,产生确定的执行过程,协助实现**可预测可控制的多 Agent 协作方式**。您可以按需对下列模式进行排列组合,结合 `ChatModelAgent` 构造出符合自身需求的完整工作流水线:
+
+- **Sequential Agent**: 将配置中注册的 Agents 按顺序依次执行一次后结束,运行遵循以下原则:
+ - **线性执行**:严格按照 SubAgents 数组的顺序执行。
+ - **运行结果传递**:配置中的每个 Agent 都能够获取 Sequential Agent 的完整输入以及前序 Agent 的输出。
+ - **支持提前退出**:如果任何一个子 Agent 产生退出 / 中断动作,整个 Sequential 流程会立即终止。
+- **可能的实践场景有**:
+ - **数据 ETL**:`ExtractAgent`(从 MySQL 抽取订单数据)→ `TransformAgent`(清洗空值、格式化日期)→ `LoadAgent`(加载到数据仓库)
+ - **CI / CD 流水线**:`CodeCloneAgent`(从代码仓库拉取代码)→`UnitTestAgent`(运行单元测试,用例失败时返回错误与分析报告)→`CompileAgent`(编译代码)→`DeployAgent`(部署到目标环境)
+
+```go
+import github.com/cloudwego/eino/adk
+
+// 依次执行 制定研究计划 -> 搜索资料 -> 撰写报告
+sequential := adk.NewSequentialAgent(ctx, &adk.SequentialAgentConfig{
+ Name: "research_pipeline",
+ SubAgents: []adk.Agent{
+ planAgent, // 制定研究计划
+ searchAgent, // 搜索资料
+ writeAgent, // 撰写报告
+ },
+})
+```
+
+
+
+- **Parallel Agent**: 将配置中注册的 Agents 并发执行,所有 Agent 执行完毕后结束,运行遵循以下原则:
+ - **并发执行**:所有子 Agent 同时启动,在独立的 goroutine 中并行执行。
+ - **共享输入**:所有子 Agent 接收调用 Pararllel Agent 时相同的初始输入。
+ - **等待与结果聚合**:内部使用 sync.WaitGroup 等待所有子 Agent 执行完成,收集所有子 Agent 的执行结果并按接收顺序输出到 `AsyncIterator` 中。
+- 可能的实践场景有:
+ - **多源数据采集**:`MySQLCollector`(采集用户表)+ `PostgreSQLCollector`(采集订单表)+ `MongoDBCollector`(采集商品评论)
+ - **多渠道推送**:`WeChatPushAgent`(推送到微信公众号)+ `SMSPushAgent`(发送短信)+ `AppPushAgent`(推送到 APP)
+
+```go
+import github.com/cloudwego/eino/adk
+
+// 并发执行 情感分析 + 关键词提取 + 内容摘要
+parallel := adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{
+ Name: "multi_analysis",
+ SubAgents: []adk.Agent{
+ sentimentAgent, // 情感分析
+ keywordAgent, // 关键词提取
+ summaryAgent, // 内容摘要
+ },
+})
+```
+
+
+
+- **Loop Agent**:将配置中注册的 Agents 按顺序依次执行并循环多次,运行遵循以下原则:
+ - **循环执行**:重复执行 SubAgents 序列,每次循环都是一个完整的 Sequential 执行过程。
+ - **运行结果累积**:每次迭代的结果都会累积,后续迭代的输入可以访问所有历史信息。
+ - **条件退出**:支持通过输出包含 `ExitAction` 的事件或达到最大迭代次数来终止循环,配置 `MaxIterations=0` 时表示无限循环。
+- 可能的实践场景有:
+ - **数据同步**:`CheckUpdateAgent`(检查源库增量)→ `IncrementalSyncAgent`(同步增量数据)→ `VerifySyncAgent`(验证一致性)
+ - **压力测试**:`StartClientAgent`(启动测试客户端)→ `SendRequestsAgent`(发送请求)→ `CollectMetricsAgent`(收集性能指标)
+
+```go
+import github.com/cloudwego/eino/adk
+
+// 循环执行 5 次,每次顺序为:分析当前状态 -> 提出改进方案 -> 验证改进效果
+loop := adk.NewLoopAgent(ctx, &adk.LoopAgentConfig{
+ Name: "iterative_optimization",
+ SubAgents: []adk.Agent{
+ analyzeAgent, // 分析当前状态
+ improveAgent, // 提出改进方案
+ validateAgent, // 验证改进效果
+ },
+ MaxIterations: 5,
+})
+```
+
+
+
+## 🛠️ 预构建的 Multi-Agent 范式
+
+Eino ADK 基于日常 Multi-Agent 协作实践中沉淀的最佳工程经验,为用户提供**两种预构建的 Multi-Agent 范式**,无需从头设计协作逻辑即可开箱即用,覆盖「集中式协调」与「结构化问题解决」两大核心场景,高效支撑复杂任务的智能协作。
+
+#### 🎯 Supervisor 模式:集中式协调
+
+Supervisor Agent 是 ADK 提供的一种中心化 Multi-Agent 协作模式,旨在为集中决策与分发执行的通用场景提供解决方案,由一个 Supervisor Agent(监督者) 和多个 SubAgent (子 Agent)组成,其中:
+
+- Supervisor Agent 负责任务的分配、子 Agent 完成后的结果汇总与下一步决策。
+- 子 Agents 专注于执行具体任务,并在完成后自动将任务控制权交回 Supervisor。
+
+
+
+Supervisor 模式有如下特点:
+
+- **中心化控制**:Supervisor 统一管理子 Agent,可根据输入与子 Agent 执行结果动态调整任务分配。
+- **确定性回调**:子 Agent 执行完毕后会将运行结果返回到 Supervisor Agent,避免协作流程中断。
+- **松耦合扩展**:子 Agent 可独立开发、测试和替换,方便拓展与维护。
+
+Supervisor 模式的这种层级化的结构非常适合于**动态协调多个专业 Agent 完成复杂任务**的场景,例如:
+
+- **科研项目管理**:Supervisor 分配调研、实验、报告撰写任务给不同子 Agent。
+- **客户服务流程**:Supervisor 根据用户问题类型,分配给技术支持、售后、销售等子 Agent。
+
+```go
+import github.com/cloudwego/eino/adk/prebuilt/supervisor
+
+// 科研项目管理:创建一个监督者模式的 multi-agent
+// 包含 research(调研),experimentation(实验),report(报告)三个子 Agent
+supervisor, err := supervisor.New(ctx, &supervisor.Config{
+ SupervisorAgent: supervisorAgent,
+ SubAgents: []adk.Agent{
+ researchAgent,
+ experimentationAgent,
+ reportAgent,
+ },
+})
+```
+
+#### 🎯 Plan-Execute 模式:结构化问题解决
+
+Plan-Execute Agent 是 ADK 提供的基于「规划-执行-反思」范式的 Multi-Agent 协作模式(参考论文 **Plan-and-Solve Prompting**),旨在解决复杂任务的分步拆解、执行与动态调整问题,通过 Planner(规划器)、Executor(执行器)和 Replanner(重规划器) 三个核心智能体的协同工作,实现任务的结构化规划、工具调用执行、进度评估与动态重规划,最终达成用户目标,其中:
+
+- **Planner**:根据用户目标,生成一个包含详细步骤且结构化的初始任务计划
+- **Executor**:执行当前计划中的首个步骤
+- **Replanner**:评估执行进度,决定是修正计划继续交由 Executor 运行,或是结束任务
+
+
+
+Plan-Execute 模式有如下特点:
+
+- **明确的分层架构**:通过将任务拆解为规划、执行和反思重规划三个阶段,形成层次分明的认知流程,体现了 “先思考再行动,再根据反馈调整” 的闭环认知策略,在各类场景中都能达到较好的效果。
+- **动态迭代优化**:Replanner 根据执行结果和当前进度,实时判断任务是否完成或需调整计划,支持动态重规划。该机制有效解决了传统单次规划难以应对环境变化和任务不确定性的瓶颈,提升了系统的鲁棒性和灵活性。
+- **职责分明且松耦合**:Plan-Execute 模式由多个智能体协同工作,支持独立开发、测试和替换。模块化设计方便扩展和维护,符合工程最佳实践。
+- **具备良好扩展性**:不依赖特定的语言模型、工具或 Agent,方便集成多样化外部资源,满足不同应用场景需求。
+
+Plan-Execute 模式的「规划 → 执行 → 重规划」闭环结构非常适合**需要多步骤推理、动态调整和工具集成的复杂任务场景**,例如:
+
+- **复杂研究分析**:通过规划分解研究问题,执行多轮数据检索与计算,动态调整研究方向和假设,提升分析深度和准确性。
+- **自动化工作流管理**:将复杂业务流程拆解为结构化步骤,结合多种工具(如数据库查询、API 调用、计算引擎)逐步执行,并根据执行结果动态优化流程。
+- **多步骤问题解决**:适用于需要分步推理和多工具协作的场景,如法律咨询、技术诊断、策略制定等,确保每一步执行都有反馈和调整。
+- **智能助理任务执行**:支持智能助理根据用户目标规划任务步骤,调用外部工具完成具体操作,并根据重规划思考结合用户反馈调整后续计划,提升任务完成的完整性和准确性。
+
+```go
+import github.com/cloudwego/eino/adk/prebuilt/planexecute
+
+// Plan-Execute 模式的科研助手
+researchAssistant := planexecute.New(ctx, &planexecute.Config{
+ Planner: adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
+ Name: "research_planner",
+ Instruction: "制定详细的研究计划,包括文献调研、数据收集、分析方法等",
+ Model: gpt4Model,
+ }),
+ Executor: adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
+ Name: "research_executor",
+ ToolsConfig: adk.ToolsConfig{
+ Tools: []tool.BaseTool{
+ scholarSearchTool,
+ dataAnalysisTool,
+ citationTool,
+ },
+ },
+ }),
+ Replanner: replannerAgent,
+})
+```
+
+# 基础设计
+
+## 🎯 统一的 Agent 抽象
+
+ADK 的核心是一个简洁而强大的 `Agent` 接口:
+
+```go
+type Agent interface {
+ Name(ctx context.Context) string
+ Description(ctx context.Context) string
+ Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
+}
+```
+
+每个 Agent 都有明确的身份(Name)、清晰的职责(Description)和标准化的执行方式(Run),为 Agent 之间的发现与调用提供了基础。无论是简单的问答机器人,还是复杂的多步骤任务处理系统,都可以通过这个统一的接口加以实现。
+
+## ⚡ 异步事件驱动架构
+
+ADK 采用了异步事件流设计,通过 `AsyncIterator[*AgentEvent]` 实现非阻塞的事件处理,并通过 `Runner` 框架运行 Agent:
+
+- **实时响应**:`AgentEvent` 包含 Agent 执行过程中特定节点输出(Agent 回复、工具处理结果等等),用户可以立即看到 Agent 的思考过程和中间结果。
+- **追踪执行过程**:`AgentEvent` 额外携带状态修改动作与运行轨迹,便于开发调试和理解 Agent 行为。
+- **自动流程控制**:框架通过 `Runner` 自动处理中断、跳转、退出行为,无需用户额外干预。
+
+## 🤝 灵活的协作机制
+
+Eino ADK 支持处于同一个系统内的 Agent 之间以多种方式进行协作(交换数据或触发运行):
+
+- **共享 Session**:单次运行过程中持续存在的 KV 存储,用于支持跨 Agent 的状态管理和数据共享。
+
+```go
+// 获取全部 SessionValues
+func GetSessionValues(ctx context.Context) map[string]any
+
+// 指定 key 获取 SessionValues 中的一个值,key 不存在时第二个返回值为 false,否则为 true
+func GetSessionValue(ctx context.Context, key string) (any, bool)
+
+// 添加 SessionValues
+func AddSessionValue(ctx context.Context, key string, value any)
+
+// 批量添加 SessionValues
+func AddSessionValues(ctx context.Context, kvs map[string]any)
+```
+
+- **移交运行(Transfer)**:携带本 Agent 输出结果上下文,将任务移交至子 Agent 继续处理。适用于智能体功能可以清晰的划分边界与层级的场景,常结合 ChatModelAgent 使用,通过 LLM 的生成结果进行动态路由。结构上,以此方式进行协作的两个 Agent 称为父子 Agent:
+
+
+
+```go
+// 设置父子 Agent 关系
+func SetSubAgents(ctx context.Context, agent Agent, subAgents []Agent) (Agent, error)
+
+// 指定目标 Agent 名称,构造 Transfer Event
+func NewTransferToAgentAction(destAgentName string) *AgentAction
+```
+
+- **显式调用(ToolCall)**:将 Agent 视为工具进行调用。适用于 Agent 运行仅需要明确清晰的参数而非完整运行上下文的场景,常结合 ChatModelAgent,作为工具运行后将结果返回给 ChatModel 继续处理。除此之外,ToolCall 同样支持调用符合工具接口构造的、不含 Agent 的普通工具。
+
+
+
+```go
+// 将 Agent 转换为 Tool
+func NewAgentTool(_ context.Context, agent Agent, options ...AgentToolOption) tool.BaseTool
+```
+
+## 🔄 **中断与恢复机制**
+
+Eino ADK 提供运行时中断与恢复的功能,允许正在运行中的 Agent 主动中断并保存其当前状态,并在未来从中断点恢复执行。该功能为长时间等待、可暂停或需要外部输入(Human in the loop)等场景下的开发提供协助。
+
+- Agent 内部运行过程中,通过抛出含 `Interrupt Action` 的 `Event` 主动通知 `Runner` 中断运行,并允许携带额外信息供调用方阅读与使用。
+- `Runner` 通过初始化时注册的 `CheckPointStore` 记录当前运行状态
+- 重新准备好运行后,通过 `Resume` 方法携带恢复运行所需要的新信息,从断点处重新启动该 Agent 运行
+
+```go
+// 1. 创建支持断点恢复的 Runner
+runner := adk.NewRunner(ctx, adk.RunnerConfig{
+ Agent: complexAgent,
+ CheckPointStore: memoryStore, // 内存状态存储
+})
+
+// 2. 开始执行
+iter := runner.Query(ctx, "recommend a book to me", adk.WithCheckPointID("1"))
+for {
+ event, ok := iter.Next()
+ if !ok {
+ break
+ }
+ if event.Err != nil {
+ log.Fatal(event.Err)
+ }
+ if event.Action != nil {
+ // 3. 由 Agent 内部抛出 Interrupt 事件
+ if event.Action.Interrupted != nil {
+ ii, _ := json.MarshalIndent(event.Action.Interrupted.Data, "", "\t")
+ fmt.Printf("action: interrupted\n")
+ fmt.Printf("interrupt snapshot: %v", string(ii))
+ }
+ }
+}
+
+// 4. 从 stdin 接收用户输入
+scanner := bufio.NewScanner(os.Stdin)
+fmt.Print("\nyour input here: ")
+scanner.Scan()
+fmt.Println()
+nInput := scanner.Text()
+
+// 5. 携带用户输入信息,从断点恢复执行
+iter, err := runner.Resume(ctx, "1", adk.WithToolOptions([]tool.Option{subagents.WithNewInput(nInput)}))
+```
+
+# 快速开始
+
+## 安装
+
+```go
+go get github.com/cloudwego/eino@latest
+```
+
+## 项目开发经理智能体
+
+下面的示例使用 Eino ADK 构建了一个项目开发经理智能体,面向多方面管理协同的场景:
+
+- Project Manager Agent:项目经理智能体,整体使用 Supervisor 模式,各 Agent 的功能如下:
+ - `ResearchAgent`:调研 Agent,负责调研并生成可行方案,支持中断后从用户处接收额外的上下文信息来提高调研方案生成的准确性。
+ - `CodeAgent`:编码 Agent,使用知识库工具,召回相关知识作为参考,生成高质量的代码。
+ - `ReviewAgent`:评论 Agent,使用顺序工作流编排问题分析、评价生成、评价验证三个步骤,对调研结果 / 编码结果进行评审,给出合理的评价,供项目经理进行决策。
+ - `ProjectManagerAgent`:项目经理 Agent,根据动态的用户输入,路由并协调多个负责不同维度工作的子智能体开展工作。
+- 该 Agent 可能的工作场景为:
+ - **从零开始实现项目**:项目经理从需求入手,经由调研、编码、评论三个 Agent 工作,最终完成项目交付。
+ - **对已有项目的完善**:项目经理从评论 Agent 获得项目仍旧需要完善的功能点,交由编码 Agent 进行实现,再交由评论 Agent 对修改后的代码进行评审。
+ - **开展技术调研**:项目经理要求调研 Agent 生成技术调研报告,然后由评论 Agent 给出评审意见。调用方结合返回的技术调研报告和评审意见,决定后续动作。
+
+
+
+该示例的设计涵盖了文中介绍的大部分概念,您可以基于示例回顾之前的提到的种种设计理念。另外,请试想普通开发模式下如何完成该示例的编写,ADK 的优势便立刻凸显了出来:
+
+
| 设计点 | 传统开发模式 | 基于 Eino ADK 开发 |
| Agent 抽象 | 没有统一定义,团队协作开发效率差,后期维护成本高 | 统一定义,职责独立,代码整洁,便于各 Agent 分头开发 |
| 输入输出 | 没有统一定义,输入输出混乱运行过程只能手动加日志,不利于调试 | 有统一定义,全部基于事件驱动运行过程通过 iterator 透出,所见即所得 |
| Agent 协作 | 通过代码手动传递上下文 | 框架自动传递上下文 |
| 中断恢复能力 | 需要从零开始实现,解决序列化与反序列化、状态存储与恢复等问题 | 仅需在 Runner 中注册 CheckPointStore 提供断点数据存储介质 |
| Agent 模式 | 需要从零开始实现 | 多种成熟模式开箱即用 |
diff --git a/content/zh/docs/eino/overview/eino_adk_excel_agent.md b/content/zh/docs/eino/overview/eino_adk_excel_agent.md
new file mode 100644
index 00000000000..fd673d513c8
--- /dev/null
+++ b/content/zh/docs/eino/overview/eino_adk_excel_agent.md
@@ -0,0 +1,541 @@
+---
+Description: ""
+date: "2025-11-14"
+lastmod: ""
+tags: []
+title: 用 Eino ADK 构建你的第一个 AI 智能体:从 Excel Agent 实战开始
+weight: 4
+---
+
+## 从 Excel Agent 详解 Eino ADK
+
+本文将会向您介绍如何利用 **Eino ADK(Agent Development Kit)** 构建一个强大的多智能体系统,往期 Eino ADK 介绍链接:[Eino ADK:一文搞定 AI Agent 核心设计模式,从 0 到 1 搭建智能体系统](https://mp.weixin.qq.com/s/ffGjlDEzEzroo8w6knlLqw)
+
+示例以 Excel Agent 这个实际业务场景为基础,Excel Agent 是一个能够“听懂你的话、看懂你的表格、写出并执行代码”的智能助手。它把复杂的 Excel 处理工作拆解为清晰的步骤,通过自动规划、工具调用与结果校验,稳定完成各项 Excel 数据处理任务。
+
+接下来我们将从 Excel Agent 的完整架构与功能出发,向您展示该 Agent 是如何通过 Eino ADK 逐步搭建的,进而深入浅出的理解 Eino ADK 的核心设计特点,助您快速上手 Eino ADK,向构建自定义智能体与 AI 应用系统更进一步。
+
+本示例完整代码位于 [Github](https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/integration-excel-agent),您可以随时浏览与下载。
+
+### Excel Agent 是什么?
+
+Excel Agent 是一个“看得懂 Excel 的智能助手”,它先把问题拆解成步骤,再一步步执行并校验结果。它能理解用户问题与上传的文件内容,提出可行的解决方案,并选择合适的工具(系统命令、生成并运行 Python 代码、网络查询等等)完成任务。
+
+Excel Agent 整体是基于 Eino ADK 实现的 Multi-Agent 系统,完整架构如下图所示:
+
+
+
+Excel Agent 内部包含的几个 Agent 功能分别为:
+
+- **Planner**:分析用户输入,拆解用户问题为可执行的计划
+- **Executor**:正确执行当前计划中的首个步骤
+- **CodeAgent**:接收来自 Executor 的指令,调用多种工具(例如读写文件,运行 python 代码等)完成任务
+- **WebSearchAgent**:接收来自 Executor 的指令,进行网络搜索
+- **Replanner**:根据 Executor 执行的结果和现有规划,决定继续执行、调整规划或完成执行
+- **ReportAgent**:根据运行过程与结果,生成总结性质的报告
+
+### Excel Agent 的典型使用场景
+
+在真实业务里,你可以把 Excel Agent 当成一位“Excel 专家 + 自动化工程师”。当你交付一个原始表格和目标描述,它会给出方案并完成执行:
+
+- **数据清理与格式化**:从一个包含大量数据的 Excel 文件中完成去重、空值处理、日期格式标准化操作。
+- **数据分析与报告生成**:从销售数据中提取每月的销售总额,聚合统计、透视,最终生成并导出图表报告。
+- **自动化预算计算**:根据不同部门的预算申请,自动计算总预算并生成部门预算分配表。
+- **数据匹配与合并**:将多个不同来源的客户信息表进行匹配合并,生成完整的客户信息数据库。
+
+Excel Agent 的完整运行动线为:
+
+
+
+> 💡
+> **核心收益**:
+>
+> - **更少的人工操作**,把复杂繁琐的 Excel 处理工作交给 Agent 自动完成。
+> - **更稳定的产出质量**,通过“规划—执行—反思”闭环减少漏项与错误。
+> - **更强的可扩展性**,各 Agent 独立构建,低耦合利于迭代更新。
+
+Excel Agent 既可以单独使用,也可以作为子 Agent,集成在一个复合的多专家系统中,由外部路由到此 Agent 上,解决 excel 领域相关的问题。
+
+下面我们将逐步拆解 Excel Agent,深入了解 Eino ADK 的核心设计特点,以及如何利用这些特点构建高效、灵活的 AI 应用系统。
+
+### ChatModelAgent:与 LLM 交互的基石
+
+`ChatModelAgent` 是 Eino ADK 中的一个核心预构建的 Agent,内部使用了 [ReAct](https://react-lm.github.io/) 模式(一种让模型‘思考-行动-观察’的链式推理模式):
+
+
+
+`ChatModelAgent` 旨在让 ChatModel 进行显式的、一步一步的“思考”,结合思考过程驱动行动,观测历史思考过程与行动结果继续进行下一步的思考与行动,最终解决复杂问题:
+
+- 调用 ChatModel(Reason)
+- LLM 返回工具调用请求(Action)
+- ChatModelAgent 执行工具(Act)
+- 将工具结果返回给 LLM(Observation),结合之前的上下文继续生成,直到模型判断不需要调用工具后结束
+
+
+
+在 Excel Agent 中,每个 Agent 的核心都是这样一个 `ChatModelAgent`,以 Executor 运行【读取用户输入表格的头信息】这个步骤为例 ,我们可以通过观察完整的运行过程来理解 ReAct 模式在 `ChatModelAgent` 中的表现:
+
+1. Executor:经过判断,将任务转交给 CodeAgent 运行
+2. CodeAgent:接收到任务【读取用户输入表格的头信息】
+ 1. **Think-1**:上下文未提供工作目录下的所有文件,需要查看
+ 2. **Act-1**: 调用 Bash 工具,ls 查看工作目录下的所有文件
+ 3. **Think-2**: 找到了用户输入的文件,判断需要编写 Python 代码读取 xlsx 表格的首行
+ 4. **Act-2**: 调用 PythonRunner 工具,书写代码并运行,获取运行结果
+ 5. **Think-3**: 获取到了 xlsx 首行,判断任务完成
+3. 运行完成,将表格头信息返回给 Executor
+
+### Plan-Execute Agent:基于「规划-执行-反思」的多智能体协作框架
+
+Plan-Execute Agent 是 Eino ADK 中一种基于「规划-执行-反思」范式的多智能体协作框架,旨在解决复杂任务的分步拆解、执行与动态调整问题。它通过 **Planner(规划器)**、**Executor(执行器)** 和 **Replanner(重规划器)** 三个核心智能体的协同工作,实现任务的结构化规划、工具调用执行、进度评估与动态 replanning,最终达成用户目标:
+
+```go
+// 完整代码: https://github.com/cloudwego/eino/blob/main/adk/prebuilt/planexecute/plan_execute.go
+
+// NewPlanner creates a new planner agent based on the provided configuration.
+func NewPlanner(_ context.Context, cfg *PlannerConfig) (adk.Agent, error)
+
+// NewExecutor creates a new executor agent.
+func NewExecutor(ctx context.Context, cfg *ExecutorConfig) (adk.Agent, error)
+
+// NewReplanner creates a new replanner agent.
+func NewReplanner(_ context.Context, cfg *ReplannerConfig) (adk.Agent, error)
+
+// New creates a new plan-execute-replan agent with the given configuration.
+func New(ctx context.Context, cfg *Config) (adk.Agent, error)
+```
+
+
+
+而 Excel Agent 的核心能力恰好为【解决用户在 excel 领域的问题】,与该智能体协作框架定位一致:
+
+- **规划者(Planner)**:明确目标,自动拆解可执行步骤
+- **执行者(Executor)**:调用工具(Excel 读取、系统命令、Python 代码)完成规划中的每一个详细步骤
+- **反思者(Replanner)**:根据执行进度决定继续、调整规划或结束
+
+Planner 和 Replanner 会将用户模糊的指令拆解为清晰的、可执行的步骤清单,即包含多个步骤(Step)的计划(Plan),Eino ADK 为此提供了灵活的 Plan 接口定义,支持用户自定义 Plan 结构与细节:
+
+```go
+type Plan interface {
+ // FirstStep returns the first step to be executed in the plan.
+ FirstStep() string
+ // Marshaler serializes the Plan into JSON.
+ // The resulting JSON can be used in prompt templates.
+ json.Marshaler
+ // Unmarshaler deserializes JSON content into the Plan.
+ // This processes output from structured chat models or tool calls into the Plan structure.
+ json.Unmarshaler
+}
+```
+
+默认情况下,框架会使用内置的 Plan 结构作为兜底配置,例如下面就是 Excel Agent 产生的一个完整运行计划:
+
+```sql
+### 任务计划
+- [x] 1. Read the contents of '模拟出题.csv' from the working directory into a pandas DataFrame.
+- [x] 2. Identify the question type (e.g., multiple-choice, short-answer) for each row in the DataFrame.
+- [x] 3. For non-short-answer questions, restructure the data to place question, answer, explanation, and options in the same row.
+- [x] 4. For short-answer questions, merge the answer content into the explanation column and ensure question and merged explanation are in the same row.
+- [x] 5. Verify that all processed rows have question, answer (where applicable), explanation, and options (where applicable) in a single row with consistent formatting.
+- [x] 6. Generate a cleaned report presenting the formatted questions with all relevant components (question, answer, explanation, options) in unified rows.
+```
+
+### Workflow Agents:可控的多 Agent 运行流水线
+
+Excel Agent 中,存在一些需要按照特定顺序运行 agent 的情况:
+
+1. **顺序运行**:先运行 Planner,再运行 Executor 和 Replanner;Planner 只运行一次。
+2. **循环运行**:Executor 和 Replanner 需要按需循环运行多次,每次循环运行都是先运行 Executor 后运行 Replanner
+3. **顺序运行**:Plan-Executor 整体运行完后,固定运行一次 ReportAgent 进行总结。
+
+对于这些拥有固定执行流程的场景,Eino ADK 提供了三种流程编排方式,协助用户快速搭建可控的工作流:
+
+- **SequentialAgent**:按照配置中提供的顺序,依次执行一系列子 Agent。每个子 Agent 执行完成后,其输出会通过 History 机制传递给下一个子 Agent,形成一个线性的执行链。
+
+ ```go
+ import github.com/cloudwego/eino/adk
+
+ // 依次执行 制定研究计划 -> 搜索资料 -> 撰写报告
+ sequential := adk.NewSequentialAgent(ctx, &adk.SequentialAgentConfig{
+ Name: "research_pipeline",
+ SubAgents: []adk.Agent{
+ planAgent, // 制定研究计划
+ searchAgent, // 搜索资料
+ writeAgent, // 撰写报告
+ },
+ })
+ ```
+
+
+
+- **LoopAgent**:重复执行配置的子 Agent 序列,直到达到最大迭代次数或某个子 Agent 产生 ExitAction,每次迭代的结果都会累积,后续迭代的输入可以访问所有历史信息。LoopAgent 基于 SequentialAgent 实现。
+
+ ```go
+ import github.com/cloudwego/eino/adk
+
+ // 循环执行 5 次,每次顺序为:分析当前状态 -> 提出改进方案 -> 验证改进效果
+ loop := adk.NewLoopAgent(ctx, &adk.LoopAgentConfig{
+ Name: "iterative_optimization",
+ SubAgents: []adk.Agent{
+ analyzeAgent, // 分析当前状态
+ improveAgent, // 提出改进方案
+ validateAgent, // 验证改进效果
+ },
+ MaxIterations: 5,
+ })
+ ```
+
+
+
+- **ParallelAgent**:允许多个子 Agent 基于相同的输入上下文并发执行。所有子 Agent 接收相同的初始输入,各自在独立的 goroutine(Go 语言中一种轻量级的并发执行单元) 运行,最终收集所有子 Agent 的执行结果并按顺序输出到 `AsyncIterator` 中。
+
+ ```go
+ import github.com/cloudwego/eino/adk
+
+ // 并发执行 情感分析 + 关键词提取 + 内容摘要
+ parallel := adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{
+ Name: "multi_analysis",
+ SubAgents: []adk.Agent{
+ sentimentAgent, // 情感分析
+ keywordAgent, // 关键词提取
+ summaryAgent, // 内容摘要
+ },
+ })
+ ```
+
+
+
+### Agent 抽象:灵活定义 Agent 的基础
+
+Eino ADK 的核心是一个简洁而强大的 Agent 接口,每个 Agent 都有明确的身份(Name)、清晰的职责(Description)和标准化的执行方式(Run),为 Agent 之间的发现与调用提供了基础。无论是简单的问答机器人,还是复杂的多步骤任务处理系统,都可以通过这个统一的接口加以实现。
+
+- **统一的 Agent 抽象**:ADK 提供的预构建 Agent(ChatModelAgent,Plan-Execute Agent,Workflow Agents)都遵循该接口定义。您也可以基于该接口,书写自定义 Agent,完成定制化需求。
+
+ ```go
+ type Agent interface {
+ Name(ctx context.Context) string
+ Description(ctx context.Context) string
+ Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
+ }
+ ```
+- **标准化输入**:Agent 通常以 LLM 为核心,因此 Eino ADK 定义的 Agent 的输入与 LLM 接收的输入一致:
+
+ ```go
+ type AgentInput struct {
+ Messages []_Message_
+ _ _EnableStreaming bool
+ }
+
+ type Message = *schema.Message // *schema.Message 是模型输入输出的结构定义
+ ```
+- **异步事件驱动输出**:Agent 的输出是一个 AgentEvent 的异步迭代器,其中的 AgentEvent 表示 Agent 在其运行过程中产生的核心事件数据。其中包含了 Agent 的元信息、输出、行为和报错信息:
+
+ ```go
+ type AgentEvent struct {
+ AgentName string // 产生 Event 的 Agent 名称(框架自动填充)
+
+ RunPath []RunStep // 到达当前 Agent 的完整运行轨迹(框架自动填充)
+
+ Output *AgentOutput // Agent 输出消息内容
+
+ Action *AgentAction // Agent 动作事件内容
+
+ Err error // Agent 报错
+ }
+
+ type AgentOutput struct {
+ MessageOutput *MessageVariant // 模型消息输出内容
+
+ CustomizedOutput any // 自定义输出内容
+ }
+
+ type MessageVariant struct {
+ IsStreaming bool // 是否为流式输出
+
+ Message Message // 非流式消息输出
+ MessageStream MessageStream // 流式消息输出
+
+ Role schema.RoleType // 消息角色
+ ToolName string // 工具名称
+ }
+
+ type AgentAction struct {
+ Exit bool // Agent 退出
+
+ Interrupted *InterruptInfo // Agent 中断
+
+ TransferToAgent *TransferToAgentAction // Agent 跳转
+
+ CustomizedAction any // 自定义 Agent 动作
+ }
+ ```
+
+异步迭代器允许 Agent 在运行过程中的任意时刻向迭代器发送消息(Agent 调用模型结果、工具运行结果、中间状态等等),同时调用方以一种有序、阻塞的方式消费这一系列事件:
+
+```go
+iter := myAgent.Run(ctx, "hello") // get AsyncIterator
+
+for {
+ event, ok := iter.Next()
+ if !ok {
+ break
+ }
+ // handle event
+}
+```
+
+### Agent 协作:隐藏在 Agent 后的数据传递
+
+Excel Agent 架构图中的节点代表每个具体的 Agent,边代表了数据流通与任务转移。在构建多 Agent 系统时,让不同 Agent 之间高效、准确地共享信息至关重要。
+
+这些信息不仅包含 Agent 的输入输出,还有全局的、部分可见的种种额外信息,例如:
+
+- Executor 执行需要从 Planner / Replanner 拿到一个结构化的、可被拆分为详细步骤(Step)的计划(Plan),而非一段非结构化的 LLM 原始输出消息。
+- ReportAgent 需要拿到完整的运行计划、运行过程与运行产物才能正确产生报告。
+
+Eino ADK 包含两种基础的数据传递机制:
+
+- **History**:每一个 Agent 产生的 AgentEvent 都会被保存到这个隐藏的 History 中,调用一个新 Agent 时 History 中的 AgentEvent 会被转换并拼接到 AgentInput 中。默认情况下,其他 Agent 的 Assistant 或 Tool Message,被转换为 User Message,这相当于在告诉当前的 LLM:“刚才, Agent_A 调用了 some_tool ,返回了 some_result 。现在,轮到你来决策了。”。 通过这种方式,其他 Agent 的行为被当作了提供给当前 Agent 的“外部信息”或“事实陈述”,而不是它自己的行为,从而避免了 LLM 的上下文混乱。
+
+
+
+- **共享 Session**:单次运行过程中持续存在的 KV 存储,用于支持跨 Agent 的状态管理和数据共享,一次运行中的任何 Agent 可以在任何时间读写 SessionValues。以 Plan-Execute Agent 模式为例,Planner 生成首个计划并写入 Session;Executor 从 Session 读取计划并执行;Replanner 从 Session 读取当前计划后,结合运行结果,将更新后的计划写回 Session 覆盖当前的计划。
+
+ ```go
+ // Agent 内获取全部 SessionValues
+ func GetSessionValues(ctx context.Context) map[string]any
+
+ // Agent 内指定 key 获取 SessionValues 中的值
+ func GetSessionValue(ctx context.Context, key string) (any, bool)
+
+ // Agent 内添加 SessionValues
+ func AddSessionValue(ctx context.Context, key string, value any)
+
+ // Agent 内批量添加 SessionValues
+ func AddSessionValues(ctx context.Context, kvs map[string]any)
+
+ // WithSessionValues 在 Agent 运行前由外部注入 SessionValues
+ func WithSessionValues(v map[string]any) AgentRunOption
+ ```
+
+
+
+除了完善的 Agent 间数据传递机制,Eino ADK 从实践出发,提供了多种 Agent 协作模式:
+
+- **预设 Agent 运行顺序(Workflow)**:以代码中预设好的流程运行, Agent 的执行顺序是事先确定、可预测的。对应 Workflow Agents 章节提到的三种范式。
+- **移交运行(Transfer)**:携带本 Agent 输出结果上下文,将任务移交至子 Agent 继续处理。适用于智能体功能可以清晰的划分边界与层级的场景,常结合 ChatModelAgent 使用,通过 LLM 的生成结果进行动态路由。结构上,以此方式进行协作的两个 Agent 称为父子 Agent:
+
+
+
+```go
+// 设置父子 Agent 关系
+func SetSubAgents(ctx context.Context, agent Agent, subAgents []Agent) (Agent, error)
+
+// 指定目标 Agent 名称,构造 Transfer Event
+func NewTransferToAgentAction(destAgentName string) *AgentAction
+```
+
+- **显式调用(ToolCall)**:将 Agent 视为工具进行调用,适用于 Agent 运行仅需要明确清晰的参数而非完整运行上下文的场景。常结合 ChatModelAgent,将 Agent 作为工具运行后将结果返回给 ChatModel 继续处理。除此之外,ToolCall 同样支持调用符合工具接口构造的、不含 Agent 的普通工具。
+
+
+
+```go
+// 将 Agent 转换为 Tool
+func NewAgentTool(_ context.Context, agent Agent, options ...AgentToolOption) tool.BaseTool
+```
+
+## Excel Agent 示例运行
+
+### 配置环境与输入输出路径
+
+- 环境变量:Excel Agent 运行依赖的完整环境变量可参考项目 README。
+- 运行输入:包括一段用户需求描述和待处理的一系列文件,其中:
+
+ - `main.go` 中首行表示用户输入的需求描述,可自行修改:
+
+ ```go
+ func main() {
+ // query := schema.UserMessage("统计附件文件中推荐的小说名称及推荐次数,并将结果写到文件中。凡是带有《》内容都是小说名称,形成表格,表头为小说名称和推荐次数,同名小说只列一行,推荐次数相加")
+ // query := schema.UserMessage("读取模拟出题.csv 中的内容,规范格式将题目、答案、解析、选项放在同一行,简答题只把答案写入解析即可")
+ query := schema.UserMessage("请帮我将 question.csv 表格中的第一列提取到一个新的 csv 中")
+ }
+ ```
+ - `adk/multiagent/integration-excel-agent/playground/input` 为默认的附件输入路径,附件输入路径支持配置,参考 README。
+ - `adk/multiagent/integration-excel-agent/playground/test_data` 路径下提供了几个示例文件,您可以将文件复制到附件输入路径下来进行测试运行:
+
+ ```go
+ % tree adk/multiagent/integration-excel-agent/playground/test_data
+ adk/multiagent/integration-excel-agent/playground/test_data
+ ├── questions.csv
+ ├── 推荐小说.txt
+ └── 模拟出题.csv
+
+ 1 directory, 3 files
+ ```
+- 运行输出:Excel Agent 输入的附件、运行的中间产物与最终结果都会放置在工作路径下:`adk/multiagent/integration-excel-agent/playground/${uuid}`,输出路径支持配置,参考 README。
+
+### 查看运行结果
+
+Excel Agent 单次运行会在输出路径下创建一个新的工作目录,并在该目录下完成任务,运行时产生的中间产物与最终结果都会写到该目录下。
+
+以 `请帮我将 question.csv 表格中的第一列提取到一个新的 csv 中` 这个任务为例,运行完成后在工作目录下的文件包含:
+
+
+
+1. 原始输入:从输入路径获取到的 `question.csv`
+2. Planner / Replanner 给出的运行计划:`plan.md`
+
+ ```go
+ ### 任务计划
+ - [x] 1. {"desc":"Read the 'questions.csv' file into a pandas DataFrame."}
+ - [x] 2. Save the extracted first column to a new CSV file.
+ ```
+3. Executor 中的 CodeAgent 书写的代码:`$uuid.py`
+
+ ```go
+ import pandas as pd
+
+ df = pd.read_csv('questions.csv')
+ first_column = df.iloc[:, _0_]
+ first_column.to_csv('extracted_first_column.csv', index=_False_)
+ ```
+4. 运行中间产物:`extracted_first_column.csv` 和 `first_column.csv`
+
+ ```go
+ type
+ multiple-choice
+ ...
+ short-answer
+ ```
+5. 最终报告:`final_report.json`
+
+ ```json
+ {
+ "is_success": true,
+ "result": "Successfully extracted the first column from questions.csv and saved it to first_column.csv.",
+ "files": [
+ {
+ "path": "/User/user/go/src/github.com/cloudwego/eino-examples/adk/multiagent/integration-excel-agent/playground/00f118af-4bd8-42f7-8d11-71f2801218bd/first_column.csv",
+ "desc": "A CSV file containing only the first column data from the original questions.csv."
+ }
+ ]
+ }
+ ```
+
+### 运行过程输出
+
+Excel Agent 会将每个步骤的运行结果输出到日志中。下面仍以 `请帮我将 question.csv 表格中的第一列提取到一个新的 csv 中` 这个任务为例,向您展示 Excel Agent 在运行过程中的几个关键步骤及其输出,并通过对步骤的解释,直观地呈现 Agent 的运行流程及其强大能力。:
+
+- Planner 生成 JSON 格式的初始计划
+
+ ```yaml
+ name: Planner
+ answer: {
+ **"steps"**: [
+ {
+ **"index"**: **1**,
+ **"desc"**: **"Read the 'questions.csv' file into a pandas DataFrame."**
+ },
+ {
+ **"index"**: **2**,
+ **"desc"**: **"Extract the first column from the DataFrame."**
+ },
+ {
+ **"index"**: **3**,
+ **"desc"**: **"Save the extracted first column to a new CSV file."**
+ }
+ ]
+ }
+ ```
+- Executor 将 CodeAgent 作为工具进行调用,执行计划中的首个步骤
+
+ ```yaml
+ name: Executor
+ tool name: CodeAgent
+ arguments: {"request":"Read the 'questions.csv' file into a pandas DataFrame using pandas. Use the pandas.read_csv function and store the result in a variable named df."}
+ ```
+- CodeAgent 使用 PythonRunner 工具运行代码,并使用 ReAct 模式自动纠错,修正代码中的错误
+
+ ```yaml
+ # CodeAgent 使用 PythonRunner 工具运行代码
+ name: Executor
+ tool name: PythonRunner
+ arguments: {"code":"```python\nfirst_column = df.iloc[:, 0]\n```"}
+
+ # PythonRunner 代码运行报错
+ name: Executor
+ tool response: Traceback (most recent call last):
+ File "/User/user/go/src/github.com/cloudwego/eino-examples/adk/multiagent/integration-excel-agent/playground/00f118af-4bd8-42f7-8d11-71f2801218bd/00f118af-4bd8-42f7-8d11-71f2801218bd.py", line 1, in
diff --git a/content/zh/docs/eino/overview/eino_open_source.md b/content/zh/docs/eino/overview/eino_open_source.md
index 4104d1ba1c5..aea1bcb7162 100644
--- a/content/zh/docs/eino/overview/eino_open_source.md
+++ b/content/zh/docs/eino/overview/eino_open_source.md
@@ -4,7 +4,7 @@ date: "2025-03-04"
lastmod: ""
tags: []
title: 大语言模型应用开发框架 —— Eino 正式开源!
-weight: 0
+weight: 1
---
今天,经过字节跳动内部半年多的使用和迭代,基于 Go 的大模型应用综合开发框架 —— Eino,已在 CloudWeGo 正式开源啦!
diff --git a/static/img/eino/ActebkYfUo7bCwxPk8ocOLEOnsf.png b/static/img/eino/ActebkYfUo7bCwxPk8ocOLEOnsf.png
new file mode 100644
index 00000000000..ba5c49913dc
Binary files /dev/null and b/static/img/eino/ActebkYfUo7bCwxPk8ocOLEOnsf.png differ
diff --git a/static/img/eino/C7J2wMDQNhDCHfbPYsIcgw8Yn9g.png b/static/img/eino/C7J2wMDQNhDCHfbPYsIcgw8Yn9g.png
new file mode 100644
index 00000000000..a54d7df9189
Binary files /dev/null and b/static/img/eino/C7J2wMDQNhDCHfbPYsIcgw8Yn9g.png differ
diff --git a/static/img/eino/H04SbFvATod8oRx3VVXcxhhRnKf.png b/static/img/eino/H04SbFvATod8oRx3VVXcxhhRnKf.png
new file mode 100644
index 00000000000..0a99baaf67a
Binary files /dev/null and b/static/img/eino/H04SbFvATod8oRx3VVXcxhhRnKf.png differ
diff --git a/static/img/eino/HyrlwkG2Bh2tAfbDPRUcJjoXnje.png b/static/img/eino/HyrlwkG2Bh2tAfbDPRUcJjoXnje.png
new file mode 100644
index 00000000000..c60b29e0c40
Binary files /dev/null and b/static/img/eino/HyrlwkG2Bh2tAfbDPRUcJjoXnje.png differ
diff --git a/static/img/eino/IHwSwc4uHhqHZDbUuzvc679OnRd.png b/static/img/eino/IHwSwc4uHhqHZDbUuzvc679OnRd.png
new file mode 100644
index 00000000000..8022d0dc902
Binary files /dev/null and b/static/img/eino/IHwSwc4uHhqHZDbUuzvc679OnRd.png differ
diff --git a/static/img/eino/IhrFw8gxShD1gabCYIScuypjnVc.png b/static/img/eino/IhrFw8gxShD1gabCYIScuypjnVc.png
new file mode 100644
index 00000000000..43ff34f56b9
Binary files /dev/null and b/static/img/eino/IhrFw8gxShD1gabCYIScuypjnVc.png differ
diff --git a/static/img/eino/JCOUw5vAJhghRPbakhec9wolnfc.png b/static/img/eino/JCOUw5vAJhghRPbakhec9wolnfc.png
new file mode 100644
index 00000000000..b2846e59866
Binary files /dev/null and b/static/img/eino/JCOUw5vAJhghRPbakhec9wolnfc.png differ
diff --git a/static/img/eino/JTjGwKheGhTZrhbCIgZciClgnab.png b/static/img/eino/JTjGwKheGhTZrhbCIgZciClgnab.png
new file mode 100644
index 00000000000..f3053ae78ae
Binary files /dev/null and b/static/img/eino/JTjGwKheGhTZrhbCIgZciClgnab.png differ
diff --git a/static/img/eino/JVo8wOsuZhcf38b5ljHcJmGYnDc.png b/static/img/eino/JVo8wOsuZhcf38b5ljHcJmGYnDc.png
new file mode 100644
index 00000000000..be50f23ce8b
Binary files /dev/null and b/static/img/eino/JVo8wOsuZhcf38b5ljHcJmGYnDc.png differ
diff --git a/static/img/eino/JcXAbPMIjodRxPxfBEtcEztQnrb.png b/static/img/eino/JcXAbPMIjodRxPxfBEtcEztQnrb.png
new file mode 100644
index 00000000000..a77a837b8ee
Binary files /dev/null and b/static/img/eino/JcXAbPMIjodRxPxfBEtcEztQnrb.png differ
diff --git a/static/img/eino/Kgoew8X0RhWDvtbBZqnc1WWlnie.png b/static/img/eino/Kgoew8X0RhWDvtbBZqnc1WWlnie.png
new file mode 100644
index 00000000000..22cb9e7958b
Binary files /dev/null and b/static/img/eino/Kgoew8X0RhWDvtbBZqnc1WWlnie.png differ
diff --git a/static/img/eino/KxH0wlxpfhRWGfbhUMecv0O1n9f.png b/static/img/eino/KxH0wlxpfhRWGfbhUMecv0O1n9f.png
new file mode 100644
index 00000000000..40077c3ed70
Binary files /dev/null and b/static/img/eino/KxH0wlxpfhRWGfbhUMecv0O1n9f.png differ
diff --git a/static/img/eino/LuyNwCiyHhoL4Wb48XHcsHS6nrf.png b/static/img/eino/LuyNwCiyHhoL4Wb48XHcsHS6nrf.png
new file mode 100644
index 00000000000..ec96a47852c
Binary files /dev/null and b/static/img/eino/LuyNwCiyHhoL4Wb48XHcsHS6nrf.png differ
diff --git a/static/img/eino/MnhMwjIsnhb9WsbSvFHcz3VqnWd.png b/static/img/eino/MnhMwjIsnhb9WsbSvFHcz3VqnWd.png
new file mode 100644
index 00000000000..ec96a47852c
Binary files /dev/null and b/static/img/eino/MnhMwjIsnhb9WsbSvFHcz3VqnWd.png differ
diff --git a/static/img/eino/NkWDbNKykog8nQxmGu3crnzsnkB.png b/static/img/eino/NkWDbNKykog8nQxmGu3crnzsnkB.png
new file mode 100644
index 00000000000..59f383c637d
Binary files /dev/null and b/static/img/eino/NkWDbNKykog8nQxmGu3crnzsnkB.png differ
diff --git a/static/img/eino/OF0JwDhHwhUQc9bpa9jc4ZK0nGg.png b/static/img/eino/OF0JwDhHwhUQc9bpa9jc4ZK0nGg.png
new file mode 100644
index 00000000000..0966c0a98c0
Binary files /dev/null and b/static/img/eino/OF0JwDhHwhUQc9bpa9jc4ZK0nGg.png differ
diff --git a/static/img/eino/R2CBwqMnbhjTQJbOAJQcyojLnIe.png b/static/img/eino/R2CBwqMnbhjTQJbOAJQcyojLnIe.png
new file mode 100644
index 00000000000..22cb9e7958b
Binary files /dev/null and b/static/img/eino/R2CBwqMnbhjTQJbOAJQcyojLnIe.png differ
diff --git a/static/img/eino/RVsgbX5Y0oQtUDxhDGzc0hAbnFc.png b/static/img/eino/RVsgbX5Y0oQtUDxhDGzc0hAbnFc.png
new file mode 100644
index 00000000000..a2da3e69c84
Binary files /dev/null and b/static/img/eino/RVsgbX5Y0oQtUDxhDGzc0hAbnFc.png differ
diff --git a/static/img/eino/RZONwQH7shiID5bGLolcQFBlncd.png b/static/img/eino/RZONwQH7shiID5bGLolcQFBlncd.png
new file mode 100644
index 00000000000..4480f271c5c
Binary files /dev/null and b/static/img/eino/RZONwQH7shiID5bGLolcQFBlncd.png differ
diff --git a/static/img/eino/SSmjw7ooshk8rybm87XchHPtn7K.png b/static/img/eino/SSmjw7ooshk8rybm87XchHPtn7K.png
new file mode 100644
index 00000000000..e0c7385a102
Binary files /dev/null and b/static/img/eino/SSmjw7ooshk8rybm87XchHPtn7K.png differ
diff --git a/static/img/eino/SjhmwZUNzhch0rb8SdUcwotpnaf.png b/static/img/eino/SjhmwZUNzhch0rb8SdUcwotpnaf.png
new file mode 100644
index 00000000000..37f77aa868d
Binary files /dev/null and b/static/img/eino/SjhmwZUNzhch0rb8SdUcwotpnaf.png differ
diff --git a/static/img/eino/SnmTwoOFGh2ZMHbDVoNcH2eInsQ.png b/static/img/eino/SnmTwoOFGh2ZMHbDVoNcH2eInsQ.png
new file mode 100644
index 00000000000..54d0c9d90b6
Binary files /dev/null and b/static/img/eino/SnmTwoOFGh2ZMHbDVoNcH2eInsQ.png differ
diff --git a/static/img/eino/SviabfhOUoGC1TxrucAckWkmnqg.png b/static/img/eino/SviabfhOUoGC1TxrucAckWkmnqg.png
new file mode 100644
index 00000000000..b47f1737af6
Binary files /dev/null and b/static/img/eino/SviabfhOUoGC1TxrucAckWkmnqg.png differ
diff --git a/static/img/eino/UL4Zw6Rj7hXg2rbNHLAcPhZOnrn.png b/static/img/eino/UL4Zw6Rj7hXg2rbNHLAcPhZOnrn.png
new file mode 100644
index 00000000000..934ef4de58d
Binary files /dev/null and b/static/img/eino/UL4Zw6Rj7hXg2rbNHLAcPhZOnrn.png differ
diff --git a/static/img/eino/Wt3Nbd2t4oMlUtxKw8hct36EnKb.png b/static/img/eino/Wt3Nbd2t4oMlUtxKw8hct36EnKb.png
new file mode 100644
index 00000000000..a2da3e69c84
Binary files /dev/null and b/static/img/eino/Wt3Nbd2t4oMlUtxKw8hct36EnKb.png differ