ReAct 解决推理与外部事实脱节
ReAct 原论文把 reasoning trace 与 task-specific action 交错:当前推断决定下一动作,动作从外部环境取得 Observation,Observation 再改变后续决策。工程上应保留的是这条可观察闭环,而不是要求模型公开不可验证的私有思维链。
Anthropic 的工程指南强调 Agent 在执行中从环境取得 ground truth,并设置停止条件。这里的 ground truth 不是“绝对真理”,而是当前任务的权威可观察信号,例如订单服务中的真实状态、测试进程的退出码或审批系统的决定。
Action Space 决定可控性上限
Action Space 是模型在某个状态下可选择动作的集合。工具清单只是其中一部分;直接回答、请求澄清、等待人工、委派子任务、取消和报告失败同样是动作。Runtime 应依据身份、租户、运行阶段和风险动态计算可用集合,而不是把所有工具一次性暴露给模型。
| 动作 | 模型可以决定 | Runtime 必须拥有 |
|---|---|---|
| 只读查询 | 是否需要、选择哪种查询 | 鉴权、参数校验、限流、数据脱敏 |
| 可逆写入 | 提出意图和候选参数 | 对象版本、策略、幂等、回执、补偿 |
| 不可逆动作 | 生成预览和影响说明 | 绑定参数的审批、再次校验、提交权限 |
| 终止 | 提出“可能已完成” | 后置条件、证据完整性和唯一终态 |
高风险动作不能只靠 Prompt 禁止,因为 Prompt 是模型输入,不是授权边界。权限要在工具执行端重新校验;审批必须绑定动作、参数、目标对象版本和有效期,防止批准后被替换。
系统需要决策证据,不需要暴露私有思维链
可审计 Trace 应回答“系统看到了什么、采取了什么、依据哪些可检查事实、产生了什么外部效果”。它不应把模型的自由文本推理当成事实,也不应依赖供应商未承诺提供的原始 reasoning tokens。
- 记录模型、Prompt、Tool Schema、策略与配置版本;
- 记录结构化计划摘要、选中的 Action、完整参数与权限判定;
- 记录 Observation 的来源、时间、截断状态和可关联 Artifact;
- 分别标记事实、模型建议、待验证假设与最终业务状态。
这样做还有隐私收益:原始推理可能复述敏感 Context,而结构化决策事件可以按字段脱敏和制定保留策略。审计目标是复现控制流和外部后果,不是监视模型“内心”。
按任务结构选择执行模式
模式选择的默认顺序是:先尝试单次调用或确定性 Workflow;只有路径确实依赖运行时发现,才引入模型驱动循环。复杂度应由评测收益购买,而不是由“Agent 化”愿望驱动。
ReAct
适合路径不能提前确定、每一步都依赖新 Observation、动作短到中等且可频繁校验的任务,例如探索式排障。代价是步骤、成本和失败路径难预测;必须限制 Action Space、进展和总预算。
Plan-and-Execute
先形成高层任务图,再由 Executor 按依赖执行;适合目标可分解、计划需要对用户可见、独立节点可并行的长任务。计划不是承诺:环境变化时必须局部失效并重规划,不能维护两份互相漂移的“自然语言计划”和运行状态。
Deterministic Workflow
路径稳定、规则可枚举、监管或不可逆风险较高时,代码拥有控制流,模型只负责分类、抽取或生成候选。Anthropic 将这类预定义代码路径称为 workflow;其优势是可预测、可测试,缺点是难覆盖开放路径。
混合
生产默认通常是混合模式:模型提出计划、选择低风险动作;代码校验任务图、调度依赖、执行策略和验收后置条件;人工承担高影响判断。它不是平均折中,而是按可验证性和后果分配控制权。
| 变量 | Workflow | ReAct | Plan-and-Execute / 混合 |
|---|---|---|---|
| 路径变化 | 低 | 高且逐步发现 | 总体可规划、局部会变化 |
| 可并行性 | 代码预先编排 | 通常有限 | 任务图可显式并行 |
| 风险 | 高风险默认选择 | 只适合可逆、可验证动作 | 高风险节点切回审批/Workflow |
| 主要证据 | 分支覆盖与业务测试 | 逐步 Trace 与进展信号 | 计划版本、节点产物与汇聚验证 |
范式常见失败
| 信号 | 机制 | 优先处理 |
|---|---|---|
| 连续试探相似 Tool | 动作语义重叠,Observation 没有信息增益 | 工具消歧、重复指纹、停止或澄清 |
| Observation 越来越长 | 原始结果挤压目标、约束和关键证据 | Artifact 外置、结构化摘要、信任标记 |
| 计划显示完成,节点仍失败 | 展示计划与状态机双写 | 以事件状态为真源,计划作为投影 |
| 模型声称完成但后置条件不满足 | 语言终态替代业务终态 | 独立验证器、失败终态、人工升级 |
失败恢复要区分“换一种推理”与“外部世界已经变化”。前者可以重新规划;后者要保留已验证产物、回执和副作用,不允许新计划把历史当作没有发生。
用任务证据决定模式
用同一代表性任务和同一成功判定比较候选模式,而不是凭 Demo 的主观流畅度。除任务成功率外,应看步骤数分布、无效动作率、恢复成功率、人工介入、尾延迟、成本和高风险动作被阻断的准确性。
ADR 至少写清:默认模式与适用边界;Why Not 其他模式;不可逆节点如何降级;当环境变化率、成功率或成本越过什么阈值时复审。一个“更智能但更贵”的方案,只有在任务价值覆盖成本且风险可控时才成立。
主动提取:为什么增加最大步数仍不能解决 ReAct 失控?
迁移判断:路径稳定但输入是自然语言,应该选 Agent 吗?
资料与事实边界
以下以官方文档、标准、论文和原始工程资料为主。厂商 API、价格、限额与模型能力会变化,落地时仍需按目标版本做能力探测和回归。
- Yao et al.:ReAct: Synergizing Reasoning and Acting in Language Models — Reasoning 与 Action 交错范式的原始论文
- Anthropic:Building Effective AI Agents — Workflow、Agent、Orchestrator-workers 与停止条件的工程边界
- OpenAI:A practical guide to building agents — Run、单/多 Agent 编排、Guardrail 与人工介入实践