目前主流的 Agent 框架都内置了 ReAct 支持:
a. LangChain / LangGraph:提供 create_react_agent 预构建函数,支持工具注册、状态管理和流式输出。LangGraph 通过 recursion_limit = 2 * max_iterations + 1 来控制最大循环步数。
b. LlamaIndex:提供 ReActAgent 类,使用文本格式的 Thought-Action-Observation 循环,兼容不支持 Function Calling 的开源模型。
c. CrewAI:基于角色的多 Agent 框架,每个 Agent 内部都是 ReAct 循环。
d. AutoGen(微软):支持多 Agent 对话,每个 Agent 可以独立运行 ReAct 循环。
a. 设置步数上限:必须配置 max_iterations 防止无限循环,一般建议 10-15 步。
b. 工具描述精准化:工具名称应语义清晰,描述应互斥且完备,这是减少工具选择错误的最有效手段。
c. 使用结构化输出:优先使用 Function Calling 模式而非文本解析,可以大幅降低格式错误的概率。
d. 错误包装而非抛出:当工具执行失败时,应将错误信息作为 Observation 返回给模型,让其自行判断是否需要重试或换用其他工具。
行业共识(包括 Anthropic 在 2024 年底发布的《Building Effective Agents》工程指南)建议:能用简单方案解决的不要用复杂方案。具体到 ReAct 的应用——
a. 纯推理任务(如数学证明)优先使用 CoT b. 需要外部信息的任务使用 ReAct c. 步骤固定且可预测的任务使用 Workflow 编排而非 Agent d. 对准确性要求极高的场景可在 ReAct 基础上叠加 Reflexion 自我反思机制