第 03 篇 · Eino ADK 实战:多 Agent 与人工中断
原文链接:https://mp.weixin.qq.com/s/Bl0mcQ5QUAwjOCDEVEeGbQ
本文首发于微信公众号「月牙寂」,此处为同步转载。
人类作者:月牙寂(龚浩华)
Agent 作者:月绡凝(小凝)
定位:Agent 实战系列板块一·框架第 03 篇(收尾)——Eino ADK 实战:Agent Development Kit 的多 Agent 协作、子 Agent、HITL 中断恢复;事件流分发与任务控制权转让。
免责声明:本文为学习与技术分享用途,代码示意依据官方文档。
第 03 篇 · Eino ADK 实战:多 Agent 与人工中断
导读
02 篇的 ReAct Agent 是「单兵」。真实业务常要「多兵种协同」(主 Agent 派活 + 子 Agent 分工)+「人工把关」(高风险动作中断等人批)。Eino 官方 ADK(Agent Development Kit,借鉴 Google ADK 设计)专为多 Agent + HITL 场景沉淀。本篇搭一个主 Agent + 子 Agent 的最小系统,并演示中断/恢复。
一、ADK 是什么
•定位:Eino 的高层 Agent 开发框架——比手写 Graph 更面向「Agent」抽象;
•能力:多 Agent 协作(子 Agent)、上下文传递、事件流分发与转换、任务控制权转让(handoff)、中断与恢复(HITL)、通用切面;
•与 flow/react 的关系:单 Agent 用 react 够了;多 Agent 场景建议用 ADK。
二、最小实战:单 Agent(ChatModelAgent)
agt, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: openaiCli, // 可调用模型
ToolsConfig: adk.ToolsConfig{
ToolsNodeConfig: compose.ToolsNodeConfig{
Tools: todoTools, // 工具集(如任务管理工具)
},
},
OutputKey: "main-agent",
MaxIterations: 50, // 最大迭代(比 react 的 MaxStep 更宽)
Name: "main-agent",
Description: "master agent", // 供父/子 Agent 调度时理解职责
Instruction: "角色:xx 助手\n核心职责:专注 xx。\n输出规范:xx",
})
•与 react 的差异:多了 Name/Description/Instruction——这些是给「别的 Agent」看的(调度方靠 Description 决定把任务派给谁)。
三、多 Agent 实战:主 Agent + 子 Agent
// 1. 创建子 Agent(如「搜索 Agent」「写作 Agent」)
searchAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Model: openaiCli,
ToolsConfig: ... // 搜索工具
Name: "search-agent", Description: "负责检索信息并返回摘要",
Instruction: "...",
})
writerAgent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{ /* ... */ })
// 2. 把子 Agent 挂到主 Agent 下(SubAgent 机制)
mainAgent, _ := adk.SetSubAgents(ctx, mainAgent, searchAgent, writerAgent)
// 3. 运行:主 Agent 判断「该派谁」,把子任务 handoff 给对应子 Agent
out, _ := mainAgent.Invoke(ctx, input)
•原理(对应 agent-范式 06 篇「Manager-Worker 层级」):主 Agent 当经理拆任务、子 Agent 当工人执行——上下文隔离(子 Agent 只带所需上下文)是核心收益;
•工程点:每个 Agent 的 Description 决定了调度质量——把「谁负责什么」写清楚,多 Agent 才不乱。
四、HITL 中断与恢复(人工审批)
4.1 为什么需要中断
高风险动作(删数据/付款/发布)不能直接执行——要在执行前暂停 Agent、等人确认(agent-系列 07 篇 HITL 审批点)。
4.2 中断/恢复的心智
Agent 跑到「需要人工」的节点
→ 中断(保存状态,等待)
→ 人工确认/修改/拒绝
→ 恢复(从断点继续,不重跑)
•ADK 提供中断与恢复能力:Agent 状态可保存、可续跑——长任务 + 人工审批 = 生产可用的关键拼图;
•类比:LangGraph 的 interrupt / Claude Code 的 checkpoints(同款思路)。
💡 学习要点:ADK 多 Agent + HITL =「复杂任务的正确打开方式」主 Agent 拆、子 Agent 做、关键节点人批。Token 成本会涨(多 Agent ≈ 单 Agent 的 3-4 倍),但换来的是复杂任务的可控与可审——值不值由任务价值决定。
五、实战要点与踩坑
1Description 即调度契约:子 Agent 的 Description 写清楚,主 Agent 才知道「该派给谁」;
2中断点别太多:HITL 打断频率是设计参数——高价值不可逆动作才打断;
3事件流注意分发:多 Agent 事件流(流式输出)需要按 Agent 分发——ADK 已沉淀;
4先单后多:先跑通单 ChatModelAgent,再加 SubAgents——多 Agent 的坑(上下文污染/重复调用)靠小步迭代排。
六、本篇要点(复习卡片)
1ADK 定位:Eino 高层 Agent 框架——多 Agent 协作 + HITL 中断恢复 + 事件流分发 + 控制权转让。
2单 Agent:adk.NewChatModelAgent(Model, Tools, Name/Description/Instruction)。
3多 Agent:SetSubAgents(main, sub1, sub2)——主拆子做、上下文隔离。
4HITL:中断(保存状态)→ 人工 → 恢复(断点续跑)——高风险动作的人审批。
5关键:Description = 调度契约;先单后多;Token 成本要算。
6板块一收官:Eino 组件(01)→ 编排/ReAct(02)→ ADK 多 Agent/HITL(03)——Go 专线三件套。
七、下一篇预告
第 04 篇(板块二·通用):从零搭单 Agent——语言无关的实战:不依赖框架,用 Python + 一个 API Key 写一个能自主调用工具的 Agent(工具调用 + ReAct 循环 + 避坑:token 消耗、上下文污染)。看清「没有框架时 Agent 的裸骨架」,框架的价值才更清楚。
参考资料
•[官方] Eino ADK 文档:https://www.cloudwego.io/docs/eino/
•[官方] Eino Overview(ADK 定位):https://www.cloudwego.io/docs/eino/overview/
•[官方] eino pkg.go.dev(v0.8.0):https://pkg.go.dev/github.com/cloudwego/eino@v0.8.0
•[参考] 社区实战:eino ADK 多 Agent 使用(CSDN)
整理:2026-10-02 月绡凝 · 依据官方文档。
- 点赞
- 收藏
- 关注作者
评论(0)