ReAct:推理与行动循环
ReAct:推理与行动循环:把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理,以架构、轨迹与故障重放完成工程验收。
学习目标
- 能解释“ReAct:推理与行动循环”如何把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理
- 能区分ReAct、Action、Observation、状态摘要、循环预算,并标出控制权、状态和副作用边界
- 能冻结输入与版本,沿以下证据定位首个分叉:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因
- 能注入“工具失败后模型忽略 observation,继续沿旧计划重复相同副作用”,完成阻断、恢复、复位和同输入重放
来源、课程身份与适用边界
“ReAct:推理与行动循环”以Anthropic 公开全文《Building effective agents》建立工程总纲,并用ReAct 原始论文核对本章机制。
这不是一本名为《AI Agent 开发实战》的官方出版物,也不存在官方十四章目录。平台把公开工程文章、官方开发文档和原始论文重组为 14 个工程单元;下列 112 个节点是站内课程地图。正文、代码、图表、实验与练习均为独立教学重写,模型、API、协议或安全边界变化时必须重新验证。
本单元的八个工程坐标
- ReAct:推理与行动循环:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 1 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 小特办事,是边想边查边调整的:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 2 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- ReAct:把「想」和「干」拧成一股绳:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 3 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- Thought:把「我现在在想什么」写出来:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 4 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- Action 与 Observation:一个去做,一个把结果带回来:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 5 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- ReAct vs 纯 CoT:一个去查,一个瞎猜:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 6 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手一:拆开一轮 ReAct,看清谁写的、谁填的:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 7 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手二:同一个问题,ReAct 怎么把纯 CoT 比下去:这是“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的第 8 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
术语与运行合同
↡ReAct:把任务推理与环境行动交错进行的方法;在“ReAct:推理与行动循环”中按以下证据核对:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。、↡Action:模型向运行时提出的结构化工具请求;在“ReAct:推理与行动循环”中按以下证据核对:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。、↡Observation:环境执行动作后返回的事实;在“ReAct:推理与行动循环”中按以下证据核对:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。、↡状态摘要:供下一轮决策使用的可审计任务状态;在“ReAct:推理与行动循环”中按以下证据核对:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。、↡循环预算:限制轮数、时间、token 和成本的退出边界;在“ReAct:推理与行动循环”中按以下证据核对:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。。
本页不变量是:下一步只依据任务状态、允许的动作和真实 observation 更新,调用与结果严格配对。任何“成功”结论都要保存状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因;模型自评、最终措辞和单次 demo 都不能替代环境事实。
工程机制与反证实验
行动把推理接到环境
纯文本推演无法取得新事实,工具调用让系统能查询、执行和纠错。
动手验证:切断工具后比较回答是否仍错误声称取得外部事实。
观察必须改变状态
空结果、错误与拒绝都是信息,不能被吞掉后继续旧计划。
动手验证:返回 permission_denied,检查下一步是否转人工。
调用结果按标识配对
并行工具完成顺序不稳定,数组位置会导致观察串线。
动手验证:反转结果顺序,确认状态摘要仍正确。
可观测摘要优于泄露私密推理
工程系统需要决策依据、动作和证据,不应依赖展示未必可靠的隐藏思维链。
动手验证:只保留状态摘要与外部事件,确认仍能复盘首错。
从架构到故障重放
1. 架构复杂度实验
在“ReAct:推理与行动循环”中切换简单基线、受控工作流和自主循环,先判断“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”是否真的需要更高自主性,再比较延迟、成本、可观测性与风险。
Architecture decision laboratory
ReAct:推理与行动循环
把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理
不变量:下一步只依据任务状态、允许的动作和真实 observation 更新,调用与结果严格配对
最小可运行切片
while (budget.remaining()) {
const decision = await decide({ goal, state, allowedTools });
if (decision.kind === "final") return verifyFinal(decision, state);
const observation = await executeAuthorized(decision.action);
state = reduceState(state, {
actionId: decision.id,
observation,
});
}
return blocked("budget");切片只表达“把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理”的核心合同。生产实现还要补齐持久化、超时、密钥隔离、结构化日志、幂等和批量评测;如果不能重新取得状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因,代码跑通也不能证明机制正确。
练习与答案
练习
问题 1:最小证明。 怎样用正常、边界和单故障三类样本证明“下一步只依据任务状态、允许的动作和真实 observation 更新,调用与结果严格配对”?
问题 2:节点覆盖。 ReAct:推理与行动循环、小特办事,是边想边查边调整的、ReAct:把「想」和「干」拧成一股绳、Thought:把「我现在在想什么」写出来、Action 与 Observation:一个去做,一个把结果带回来、ReAct vs 纯 CoT:一个去查,一个瞎猜、动手一:拆开一轮 ReAct,看清谁写的、谁填的、动手二:同一个问题,ReAct 怎么把纯 CoT 比下去如何从目录词变成工程证据?
问题 3:恢复验收。 怎样证明“工具失败后模型忽略 observation,继续沿旧计划重复相同副作用”已经修复?
本章回顾
- “ReAct:推理与行动循环”解决的是把决策、行动与环境观察交错成可追踪循环,并避免暴露或依赖不可验证的私密推理。
- 核心不变量是下一步只依据任务状态、允许的动作和真实 observation 更新,调用与结果严格配对。
- 首要反例是工具失败后模型忽略 observation,继续沿旧计划重复相同副作用。
- 最小证据包包含状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- ReAct
把任务推理与环境行动交错进行的方法。在“ReAct:推理与行动循环”中必须能按以下证据重新定位:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。
- Action
模型向运行时提出的结构化工具请求。在“ReAct:推理与行动循环”中必须能按以下证据重新定位:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。
- Observation
环境执行动作后返回的事实。在“ReAct:推理与行动循环”中必须能按以下证据重新定位:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。
- 状态摘要
供下一轮决策使用的可审计任务状态。在“ReAct:推理与行动循环”中必须能按以下证据重新定位:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。
- 循环预算
限制轮数、时间、token 和成本的退出边界。在“ReAct:推理与行动循环”中必须能按以下证据重新定位:状态摘要、action、参数、tool_use_id、observation、错误、下一步与停止原因。