Tutorial 6: ReAct Agent

ReAct 模式简介

ReAct(Reasoning + Acting)是让 LLM 交替进行「推理」与「行动」的 Agent 模式:根据当前上下文决定下一步是生成回答,还是调用某个工具,并根据工具结果继续推理,直到得出最终答案。

Eino 在 Flow 层提供 ReAct 的预置实现,并与 ToolsNodeToolCallingChatModel 配合使用。

参考:Eino: ReAct Agent ManualDeepWiki ADK

图中结构概览

典型 ReAct 图包含:

  • 模型节点:使用 ToolCallingChatModel,输出中可包含 tool_calls

  • 工具节点(ToolsNode):根据 tool_calls 调用对应 BaseTool,将结果写回消息(如 assistant message + tool results)。

  • 边与循环

    • 模型 → 若存在 tool_calls → 工具节点 → 将结果追加到对话 → 再回到模型;

    • 模型 → 若无 tool_calls(或已满足终止条件)→ 结束,输出最终回答。

这样形成「思考 → 选工具 → 执行 → 再思考」的循环,直到模型选择不再调用工具。

配置要点

  1. 工具注册:为 ToolsNode 提供一组 BaseTool(名称、描述、参数 schema),与模型 function calling 对齐。

  2. 模型:使用 eino-ext 中支持 function calling 的 ChatModel(如 OpenAI、Claude)。

  3. 终止条件:图中需定义「何时结束循环」(例如无 tool_calls、或达到最大步数)。

  4. 流式:若需流式输出,使用图的 Stream 执行;工具调用回合仍由框架按需拼接/收集。

与 ADK 的关系

ChatModelAgent(ADK)是对 ReAct 模式的高层封装:内部已包含「模型 + 工具循环」的图结构,你主要配置 ChatModel、Tools 和可选中间件即可,无需手写图的每条边。
因此:

  • 快速上手:用 ChatModelAgent 即可得到 ReAct 行为。

  • 需要自定义图结构、分支或状态时:使用 Graph + 模型节点 + ToolsNode 自行编排。

文档:Eino ReAct Agent ManualChatModelAgent

小结

  • ReAct = 推理 + 行动:模型决定是否调用工具,工具结果再回馈模型,循环直到结束。

  • Eino 通过 Graph(模型节点 + ToolsNode + 循环边)或 ADK 的 ChatModelAgent 实现 ReAct。

  • 配置要点:ToolCallingChatModel、Tools 注册、终止条件与可选流式。

下一节将系统介绍 ADK:Agent 接口、Runner、ChatModelAgent 及扩展方式。