Eino28 章 · Go Agent 框架
Eino ADK:从会用到读懂
这是一份写给 Go 后端工程师的 Eino ADK 教程。它不从最底层的 compose 图引擎讲起,而是倒过来:先把 ADK 用顺,再回头看它为什么这么设计、底下的编排引擎又是怎么把流式、中断、续跑、类型安全这些能力交上来的。
每一处「见某某源码」都可以就地展开真实代码——正文所讲与仓库里跑着的实现是同一份东西。
配套源码:cloudwego/eino
Part I · ADK 的使用
- 01为什么先学 ADK三仓库关系、ADK 在框架中的位置,以及它把「模型+工具+记忆+中断+多智能体」收敛成统一运行时。
- 02ChatModelAgent 与 RunnerAgent 配置项、Runner.Run vs Query、EnableStreaming 与事件流消费。
- 03给 Agent 装上工具ToolInfo / InvokableTool、WithTools 不可变绑定、自动注入的 exit 工具与 returnDirectly。
- 04记忆、Session 与流式输出会话记忆、Session 跨步骤传值、把 Agent 事件流转成 SSE。
- 05中断与人在回路(先会用)工具触发中断 → 存 checkpoint → Resume 续跑;审批、改参、追问三类场景。
- 06中间件:给 Agent 叠能力中间件「叠加」心智;filesystem / plantask / summarization / skill / toolsearch 速览。
- 07多智能体:先跑通两条路线对照体验 supervisor(集中协调)vs DeepAgent(agent-as-tool)与 plan-execute。
Part II · ADK 的设计
- 08ADK 世界观:Agent = 事件流生成器TypedAgent[M] 三方法、事件判别联合、MessageVariant 承载物化消息或活流。
- 09组合哲学之争transfer 路线(共享 session,NOT RECOMMENDED)vs agent-as-tool / DeepAgent(隔离、可组合、中断可传播)。
- 10中间件与 Handler 的设计六个钩子、Middlewares 先于 Handlers 的执行序、两类职责与内置件分类学。
- 11预置 Agent 的设计范式supervisor、plan-execute、DeepAgent 各代表一种组合范式。
- 12v0.9 的 AgenticMessage 与泛型化AgenticMessage/ContentBlock、AgenticModel、ADK 全面泛型化让 chat 与 agentic 复用同一体系。
Part III · ADK 的实现
- 13Runner 与 flowAgent:运行骨架toFlowAgent 统一包裹、flowAgent.run() 负责回调/RunPath/transfer、中断时的 checkpoint 持久化。
- 14ReAct 不是 for 循环,而是编译好的图ReAct 图拓扑(默认 MaxIter=20)、cancel 建模为图节点安全点、工具映射成 AgentAction。
- 15TurnLoop、取消与中断的实现推送式事件循环、CancelMode 安全点状态机、bridgeStore 桥接 ADK↔compose 两层 checkpoint。
- 16AgentTool 的实现:控制流隔离的秘密typedAgentTool[M] 如何适配 tool.BaseTool,为何 Exit/Transfer 被吞而 Interrupted 穿透。
- 17Context / Harness / Loop:三引擎映射Agent 运行时的三大引擎——上下文引擎、执行骨架、循环引擎——如何逐一落在 ADK 的 runContext、prepareExecContext 与 TurnLoop 上。
Part IV · 支撑 ADK 的编排引擎
- 18Runnable 与四范式自动适配Invoke/Stream/Collect/Transform、缺失方法自动降级链、单值↔流的装箱与拼接原语。
- 19两套执行引擎:Pregel vs DAG同一 run 循环靠替换 channel 切换语义;AnyPredecessor(支持环)vs AllPredecessor(skip 传播)。
- 20Graph / Chain / Workflow 与类型检查reflect.Type 传播 + toValidateMap 硬校验;Chain 是线性糖;Workflow 用字段映射并强制 DAG。
- 21流机制与状态管理Copy 的 copy-on-read 链表、MergeNamedStreamReaders、装箱、ProcessState 按类型逐级查找。
- 22扇出与扇入:并行的两端扇出靠 copyItem(值共享引用、流走 copy-on-read);扇入靠 mergeValues(map 键并集、流按到达序);Pregel「任一」vs DAG「齐活 + skip」。
- 23图引擎的中断 / Checkpoint / 续跑Interrupt 家族、Address 定位、gob 序列化、Resume/ResumeWithData/BatchResumeWithData。
Part V · 综合实战与工程化
- 24把编排包装成 Agent 工具(GraphTool)Chain 做摘要工具 / Graph 并行研究 / Workflow 订单审批 / 两层嵌套中断。
- 25RAG 全流程 Capstoneanswer_from_document 工具:一张 load→chunk→score→filter→answer 的 Workflow,字段级扇入 + BatchNode 并发打分。
- 26可观测性、调试与部署callback → Langfuse/APMPlus/CozeLoop、Eino Dev 可视化、A2UI 全栈。
- 27综合大项目(生产级 Agent 应用)chatwitheino:deep.NewTyped 叠中间件 + 审批中断 + TurnLoop 服务化,并做一次全书复盘。
- 28Agent Runtime 长在 Go 原生机制上收束全书:每并行节点一 goroutine + unbounded channel 调度、context 贯穿取消、泛型承载类型安全、接口作组合接缝、gob 做原生持久化。