5.8 adk进阶 #
一、Plan-Execute MultiAgent范式(结构化解决问题) #
源码解读 #
ADK 提供的基于「规划-执行-反思」范式的 Multi-Agent 协作模式(参考论文 Plan-and-Solve Prompting),旨在解决复杂任务的分步拆解、执行与动态调整问题。
通过** Planner(规划器)、Executor(执行器)和 Replanner(重规划器)** 三个核心Agent的协同工作,实现任务的结构化规划、工具调用执行、进度评估与动态replanning,最终达成用户目标。
其中:
- 规划者(Planner):根据用户目标,生成一个包含详细步骤且结构化的初始任务计划
- 执行者(Executor):执行当前计划中的首个步骤,调用外部工具完成具体任务。基于
ChatModelAgent实现,配置工具集(如搜索、计算、数据库访问等)- 从 Session 中获取当前
Plan和已执行步骤 - 提取计划中的第一个未执行步骤作为目标
- 调用工具执行该步骤,将结果存储于 Session
- 从 Session 中获取当前
- 反思者(Replanner):评估执行进度,决定是修正计划继续交由 Executor 运行,或是结束任务
实现方式:组合SequentialAgent 和 LoopAgent
- 外层
SequentialAgent:先执行Planner生成初始计划,再进入执行-重规划循环 - 内层
LoopAgent:循环执行Executor和Replanner,直至任务完成或达到最大迭代次数



example:
| |
Plan-Execute 模式有如下特点:
- 明确的分层架构:通过将任务拆解为规划、执行和反思重规划三个阶段,形成层次分明的认知流程,体现了** “先思考再行动,再根据反馈调整” 的闭环认知策略,在各类场景中都能达到较好的效果**。
- 动态迭代优化:Replanner 根据执行结果和当前进度,实时判断任务是否完成或需调整计划,支持动态重规划。该机制有效解决了传统单次规划难以应对环境变化和任务不确定性的瓶颈,提升了系统的鲁棒性和灵活性。
- 职责分明且松耦合:Plan-Execute 模式由多个智能体协同工作,支持独立开发、测试和替换。模块化设计方便扩展和维护,符合工程最佳实践。
- 具备良好扩展性:不依赖特定的语言模型、工具或 Agent,方便集成多样化外部资源,满足不同应用场景需求。
非常适合需要多步骤推理、动态调整和工具集成的复杂任务场景;
可能的应用场景有:
- 复杂研究分析:通过规划分解研究问题,执行多轮数据检索与计算,动态调整研究方向和假设,提升分析深度和准确性。
- 自动化工作流管理:将复杂业务流程拆解为结构化步骤,结合多种工具(如数据库查询、API 调用、计算引擎)逐步执行,并根据执行结果动态优化流程。
- 多步骤问题解决:适用于需要分步推理和多工具协作的场景,如法律咨询、技术诊断、策略制定等,确保每一步执行都有反馈和调整。
- 智能助理任务执行:支持智能助理根据用户目标规划任务步骤,调用外部工具完成具体操作,并根据重规划思考结合用户反馈调整后续计划,提升任务完成的完整性和准确性。
源码解读:
| |
**Planner:**规划者,根据目标生成plan
| |
| |
默认值PlanToolInfo:
| |
GenInputFn(PlannerPrompt):
| |
defaultPlan (实现Plan):
| |
自定义实现Plan:略。一般不需要?
2. Executor(执行者): 执行plan中的first step
从 Session 获取计划、用户输入、已执行步骤,执行结果存入 ExecutedStepSessionKey
| |
| |
| |
**3. Replanner(重新规划者):**评估进度,决定 继续执行 或 结束任务
- Plan:更新Session中的计划(继续执行)
- Respond:生成最终响应(结束任务),发送 BreakLoopAction 退出循环
| |
| |
| |
| |
- 整体流程: SequentialAgent里面嵌套一个LoopAgent
| |
example:plan-execute-replan
#
plan-execute-replan agent:
| |
第二层-ToolKit:
| |
第二层-GenInputFn:输入生成函数,将 *planexecute.ExecutionContext上下文转换为 LLM 可理解的消息
| |
example:integration-excel-agent
#
文档: https://mp.weixin.qq.com/s/787AJLf2czPn4L-FAnB9zA
跑起来:
- 根据readme.md,配置ARK_VISION_MODEL、ARK_VISION_API_KEY、EXCEL_AGENT_PYTHON_EXECUTABLE_PATH=python3
- 在.env同级目录安装venv虚拟环境,并安装好readme的依赖
- 手动加载env和source venv/bin/activate,最后以sudo身份读取env并启动。codeagent写出的python代码,找不到questions.csv?
| |
核心代码-第一层:
| |
核心代码-第二层-NewPlanner:
plannerPromptTemplate:SystemPrompt + UserPrompt
| |
| |
generic/plan.go:实现plan interface(这里不使用defaultPlan):
| |
generic/full_plan.go: 对基础 Plan 的扩展,用于表示和跟踪任务的完整执行状态
| |
generic/``**submit_result**``.go:定义了任务执行结果的数据结构和相关工具函数,用于表示和格式化任务的最终执行结果。
- SubmitResult 作为 FullPlan 的执行结果字段
- 在 agents/wrap_plan.go 中,为每个已执行步骤创建 SubmitResult
| |
tools/wrap.go:装饰器模式,(Decorator Pattern),在不修改原始tool的情况下增强功能。
执行流程图:
| |
| 工具 | 预处理 | 后处理 | 用途 |
|---|---|---|---|
| bash | RepairJSON | FilePostProcess | 修复 JSON + 格式化命令输出 |
| python_runner | RepairJSON | FilePostProcess | 修复 JSON + 格式化 Python 输出 |
| edit_file | RepairJSON | EditFilePostProcess | 修复 JSON + 简化成功消息 |
| read_file | RepairJSON | nil | 仅修复 JSON |
| tree | RepairJSON | nil | 仅修复 JSON |
| submit_result | RepairJSON | nil |
| |
核心代码-第二层executor:
| |
核心代码-第二层replanner:
| |
核心代码-第二层NewReportAgent:
| |
核心代码-第二层read_image tool:
| |
Excel Agent:是一个“看得懂 Excel 的智能助手”,它先把问题拆解成步骤,再一步步执行并校验结果。它能理解用户问题与上传的文件内容,提出可行的解决方案,并选择合适的工具(系统命令、生成并运行 Python 代码、网络查询等等)完成任务。
- 更稳定的产出质量,通过“规划—执行—反思”闭环减少漏项与错误
- 更强的可扩展性,各 Agent 独立构建,低耦合利于迭代更新。
- 更少的人工操作,把复杂繁琐的 Excel 处理工作交给 Agent 自动完成。
架构图:
- 规划者(Planner):分析用户输入,拆解用户问题为可执行的计划
- 执行者(Executor):正确执行当前计划中的首个步骤
- CodeAgent:接收来自 Executor 的指令,调用多种工具(例如读写文件,运行 python 代码等)完成任务
- WebSearchAgent:接收来自 Executor 的指令,进行网络搜索
- 反思者(Replanner):根据 Executor 执行的结果和现有规划,决定继续执行、调整规划或完成执行
- ReportAgent:根据运行过程与结果,生成总结性质的报告

运行动线图:

Eino中的Multi-Agent自定义架构要如何设计与实现? 使用Eino框架实现DeerFlow系统
二、Supervisor MultiAgent范式(中心化协调模式) #
源码解读 #
ADK 提供的一种中心化 Multi-Agent 协作模式,旨在为集中决策与分发执行的通用场景提供解决方案。由一个 Supervisor Agent(监督者) 和多个 SubAgent (子 Agent)组成,其中:
- Supervisor Agent:作为协作核心, 负责任务的分配(如基于规则或 LLM 决策)、子 Agent 完成后的结果汇总与下一步决策。
- **SubAgents:**专注于执行具体任务。子 Agent 完成后,
WithDeterministicTransferTo触发 Transfer 事件,将任务转让回 Supervisor,确保在完成后自动将任务控制权交回 Supervisor。
Supervisor 模式有如下特点:
- 中心化控制:Supervisor 统一管理子 Agent,可根据输入与子 Agent 执行结果动态调整任务分配。
- 确定性回调:子 Agent 执行完毕后会将运行结果返回到 Supervisor Agent,避免协作流程中断。
- 松耦合扩展:子 Agent 可独立开发、测试和替换,方便拓展与维护。只需确保实现 Agent 接口并绑定到 Supervisor,即可接入协作流程。
非常适合于动态协调多个专业 Agent 完成复杂任务的场景;
可能的应用场景有:
- 科研项目管理:Supervisor 分配 调研、实验、报告撰写 任务给不同子 Agent。
- 客户服务流程:Supervisor 根据用户问题类型,分配给技术支持、售后、销售等子 Agent。


example:
| |
完整example: example:integration-project-manager
WithDeterministicTransferTo
是 Eino ADK 提供的 Agent 增强工具,用于为 Agent 注入任务转让(Transfer)能力 。它允许开发者为目标 Agent 预设固定的任务转让路径,当该 Agent 完成任务(未被中断)时,会自动生成 Transfer 事件,将任务流转到预设的目标 Agent。
是构建 Supervisor Agent 协作模式的基础,确保子 Agent 在执行完毕后能可靠地将任务控制权交回监督者(Supervisor),形成“分配-执行-反馈”的闭环协作流程。
| |
example:supervisor
#
| |
supervisor agent
| |
example:layered-supervisor
#
| |
1个supervisor agent下有嵌套1个supervisor subagent
| |
example:integration-project-manager
#

详情: https://mp.weixin.qq.com/s/p_QqDN6m2anHAE97P2Q2bw?forceh5=1
ProjectManagerAgent:项目开发经理Agent(使用 Supervisor 模式):根据动态的用户输入,路由并协调多个负责不同维度工作的子智能体开展工作。
ResearchAgent(调研Agent): 负责调研并生成可行方案。支持中断后从用户处接收额外的上下文信息来提高调研方案生成的准确性。CodeAgent(编码 Agent):使用知识库工具,召回相关知识作为参考,生成高质量的代码。ReviewAgent(评论 Agent):使用顺序工作流编排问题分析、评价生成、评价验证三个步骤,对调研结果/编码结果进行评审,给出合理的评价,供项目经理进行决策。- questionAnalysisAgent
- generateReviewAgent
- reviewValidationAgent
| |
核心代码:
| |
如果不用Eion,从0开发:
| 设计点 | 基于 Eino ADK 开发 | 传统开发模式 |
|---|---|---|
| Agent 抽象 | 统一定义,职责独立,代码整洁,便于各 Agent 分头开发 | 没有统一定义,团队协作开发效率差,后期维护成本高 |
| 输入输出 | 有统一定义,全部基于事件驱动运行过程通过 iterator 透出,所见即所得 | 没有统一定义,输入输出混乱运行过程只能手动加日志,不利于调试 |
| Agent 协作 | 框架自动传递上下文 | 通过代码手动传递上下文 |
| 中断恢复能力 | 仅需在 Runner 中注册 CheckPointStore 提供断点数据存储介质 | 需要从零开始实现,解决序列化与反序列化、状态存储与恢复等问题 |
| Agent 模式 | 多种成熟模式开箱即用 | 需要从零开始实现 |
三、deepAgent MultiAgent范式 #
源码解读 #
deepAgent论文地址(中国人大学生和小红书实习员工的论文): https://arxiv.org/html/2510.21618?_immersive_translate_auto_translate=1
- 对比 Plan-and-Execute
- 优势:DeepAgents 将 Plan/RePlan 作为工具供主 Agent 自由调用,可以在任务中跳过不必要的规划,整体上减少模型调用次数、降低耗时与成本。
- 劣势:任务规划与委派由一次模型调用完成,对模型能力要求更高,提示词调优也相对更困难
- 对比 Supervisor(ReAct)
- 优势:DeepAgents 通过内置 WriteTodos 强化任务拆解与规划;同时隔离多 Agents 上下文,在大规模、多步骤任务中通常效果更优。
- 劣势:制定计划与调用子 Agent 会带来额外的模型请求,增加耗时与 token 成本;若任务拆分不合理,可能对效果产生反作用。
https://www.cloudwego.io/zh/docs/eino/core_modules/eino_adk/agent_implementation/deepagents/

example:deepAgent范式
#
四、Human-in-the-Loop #
源码解读 #

三个主要参与者之间按时间顺序的交互流程:

理解human-in-the-loop的需求:

因此,总结我们的目标是:
- 帮助开发者尽可能轻松地回答上述问题。
- 帮助最终用户尽可能轻松地回答上述问题。
- 使框架能够自动并开箱即用地回答上述问题。
approval 审批模式 #
非常适合不可逆操作,如删除文件、数据库修改、金融交易。
InvokableApprovableTool 是 eino-examples 提供的一个 tool 装饰器,可以为任意的 InvokableTool 加上“审批中断”功能。
Eino 用 CheckPointStore 来保存 Agent 中断时的运行状态。用 CheckPointID 来唯一标识和串联“中断前”和“中断后”的两次(或多次)运行。
- 这里用的 InMemoryStore,保存在内存中。
- 实际使用中,推荐用分布式存储比如 redis。 用InterruptID(event.Action.Interrupted.InterruptContexts[0].ID) 来标识“哪里发生了中断”。这里直接打印在了终端上,实际使用中,可能需要作为 HTTP 响应返回给前端。
review-and-edit 审查与编辑模式 #
允许在执行前进行人工审查和原地编辑工具调用参数。非常适合纠正误解。
feedback-loop 反馈循环模式 #
agent 生成内容,人类提供定性反馈以进行改进。
Follow-up 追问模式 #
agent识别出不充分的工具输出并请求澄清或下一步行动。