1. 为什么很多人会把 ChatModelAgent 想简单
很多人一上来就把注意力放在这几个字段上:
InstructionModelTools
然后得出一个很自然的结论:
这就是一个'会调模型、也会调工具'的配置对象。
但这话不算错,也不全。ChatModelAgent 在 ADK 里承担的是'默认思考型 Agent'的角色。它不是单纯帮你调一次模型,而是把模型决策、工具调用、协作跳转、事件输出和扩展钩子,统一规范到一个可运行的 Agent 骨架里。
也就是说,它不是 ChatModel 的语法糖。它解决的是:当一个 Agent 需要靠 LLM 自己判断下一步该答、该调工具、该转给别人、还是该退出时,系统应该怎么组织这段运行过程。
这也是为什么你会发现它有 ReAct 循环、有 Transfer、可以把别的 Agent 当 Tool、有专门的 Handler,还要把整个过程输出成 AgentEvent。如果只是'模型外面包一层',根本没必要长出这一整套能力。
2. ChatModelAgent 在 ADK 里到底是什么
官方定义很直接:
ChatModelAgent是 Eino ADK 中的一个核心预构建 Agent,它封装了与大语言模型交互、并支持使用工具来完成任务的复杂逻辑。
这句话里最重要的词,不是'模型',而是'复杂逻辑'。你可以把 ADK 里的几类 Agent 先粗分一下:
| 类型 | 主要职责 | 决策方式 |
|---|---|---|
ChatModelAgent | 负责思考、推理、工具调用、动态决策 | 由 LLM 决定 |
Workflow Agents | 负责顺序、循环、并行等固定流程 | 由预设流程决定 |
Supervisor / Plan-Execute | 负责多 Agent 协作范式封装 | 仍以内置 ChatModelAgent 为核心 |
Custom Agent | 负责高度定制的执行协议 | 由你自己实现 |
所以 ChatModelAgent 的位置,其实非常像默认的'脑子'。当你的 Agent 需要根据上下文自行判断下一步动作、在回答和工具之间切换、在多个 Agent 之间转交任务、在运行过程中插入工程逻辑,那它通常就会成为第一个候选。

这张图里最该记住的是两点:
ChatModelAgent不等于'模型输出一段话'- 它真正对外暴露的是一整段可运行的决策过程
3. 其内部本质是一个 ReAct 循环
ChatModelAgent 的核心执行模式其实很清楚:它内部走的是 ReAct。
其内部是一个循环:



