ReAct 循环
把决策摘要、工具行动、环境观察与停止判定组织成受控循环,不要求暴露模型隐藏思维过程。
学习目标
- 能解释“ReAct 循环”如何让每轮行动由新观察推进,并以可判定停止条件收束
- 能区分ReAct、决策摘要、Action、Observation、Final Answer,并指出它们在请求、状态或执行边界中的位置
- 能固定输入,沿以下证据定位首个分叉:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批
- 能注入“模型伪造 Observation 或在必要验证前输出 Final Answer”,在同一预算和权限下完成故障、恢复与重放
来源、课程编排与适用边界
“ReAct 循环”以Anthropic 公开全文《Building effective agents》为总纲,并用ReAct 原始论文核对本单元机制;工具与外部能力的角色再由MCP 官方规范交叉检查。
这不是一本具有“官方九章目录”的纸质书。平台把公开文章中的 augmented LLM、工作流、智能体、上下文和工具工程重组为 9 个教学单元;下列 72 个节点是站内课程地图,不冒充 Anthropic 原文目录。正文、代码、图表和练习均为独立教学重写,产品或模型版本变化时应重新验证。
本单元的八个课程坐标
- ReAct 循环:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 1 个课程坐标,必须进入正文解释、交互观察或练习证据。
- 决策摘要:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 2 个课程坐标,必须进入正文解释、交互观察或练习证据。
- Action:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 3 个课程坐标,必须进入正文解释、交互观察或练习证据。
- Observation:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 4 个课程坐标,必须进入正文解释、交互观察或练习证据。
- Final Answer:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 5 个课程坐标,必须进入正文解释、交互观察或练习证据。
- 环境反馈:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 6 个课程坐标,必须进入正文解释、交互观察或练习证据。
- 循环预算:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 7 个课程坐标,必须进入正文解释、交互观察或练习证据。
- 人工检查点:作为“让每轮行动由新观察推进,并以可判定停止条件收束”的第 8 个课程坐标,必须进入正文解释、交互观察或练习证据。
术语与状态合同
↡ReAct:把任务推理与环境行动交错组织的智能体方法;在“ReAct 循环”中按以下证据核对:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。、↡决策摘要:可审计但不要求暴露隐藏思维过程的下一步理由;在“ReAct 循环”中按以下证据核对:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。、↡Action:模型提出并由运行时审核的工具行动;在“ReAct 循环”中按以下证据核对:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。、↡Observation:工具或环境返回的结构化事实;在“ReAct 循环”中按以下证据核对:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。、↡Final Answer:满足完成或阻塞合同后产生的终止输出;在“ReAct 循环”中按以下证据核对:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。。
本页不变量是:每轮 Action 都能指出所依据的 Observation,最终回答满足成功标准或明确阻塞。任何“成功”结论都要保存以下证据:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批,不能把模型口头确认当作环境事实。
关键机制与可推翻实验
ReAct 交替推理与行动
经典 ReAct 把任务推理与环境行动交错,使新观察能够纠正后续路径。工程实现关注可审计决策和动作,不需要向用户暴露隐藏 chain-of-thought。
动手试:保存短决策摘要、工具请求和观察,确认复核人能解释下一步依据。
Observation 必须来自环境
模型自行编写的“搜索结果”不是观察。运行时只有在工具真正完成后才把结构化结果加入下一轮上下文。
动手试:阻断网络工具,确认观察记录为失败而不是生成一段伪结果。
Final Answer 是受条件保护的分支
最终回答必须满足成功标准或清楚声明阻塞;模型仅输出 final 字样不能越过必要工具、测试或人工审批。
动手试:让模型提前结束,检查运行时的完成判定是否拒绝。
循环同时受预算与人工检查点控制
最大轮数、token、工具费用、不可逆操作审批和重复调用检测共同防止失控。恢复策略要区分可重试与需要用户输入的阻塞。
动手试:注入重复 action,确认检测器停止循环并保留完整轨迹。
先预测,再操作三类证据
1. 模型与结构边界
在“ReAct 循环”中先画出责任、数据或候选空间,再预测“让每轮行动由新观察推进,并以可判定停止条件收束”会在哪个节点改变结果。
第 1 / 6 步 · 0 用户把任务塞进小屋:帮我订明早会议室。
关键不是多一次函数调用,而是每次拿到 Observation 后重新思考下一步。
最小可运行实现
def run(task, runtime, max_turns=8):
trace = []
for turn in range(max_turns):
decision = runtime.decide(task, trace)
if decision.kind == "final":
if runtime.success_criteria_met(task, trace):
return {"status": "done", "answer": decision.answer, "trace": trace}
return {"status": "blocked", "reason": "premature_final", "trace": trace}
observation = runtime.execute(decision.action)
trace.append({"summary": decision.summary, "action": decision.action,
"observation": observation})
return {"status": "blocked", "reason": "turn_budget", "trace": trace}这段实现只负责暴露“让每轮行动由新观察推进,并以可判定停止条件收束”的最小合同。交付版本还要补齐超时、日志、权限、密钥隔离和可重复评测;缺少以下证据时,代码能运行也不代表本章结论成立:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
练习与答案
练习
问题 1:系统边界。 怎样用最小输入证明“每轮 Action 都能指出所依据的 Observation,最终回答满足成功标准或明确阻塞”?
问题 2:课程坐标。 ReAct 循环、决策摘要、Action、Observation、Final Answer、环境反馈、循环预算、人工检查点如何进入可操作验证?
问题 3:故障恢复。 怎样证明“模型伪造 Observation 或在必要验证前输出 Final Answer”已经修复?
本章回顾
- “ReAct 循环”的主问题是让每轮行动由新观察推进,并以可判定停止条件收束。
- 核心不变量是每轮 Action 都能指出所依据的 Observation,最终回答满足成功标准或明确阻塞。
- 首要反例是模型伪造 Observation 或在必要验证前输出 Final Answer。
- 最小证据包包含轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- ReAct
把任务推理与环境行动交错组织的智能体方法。在“ReAct 循环”中必须能按以下证据重新定位:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
- 决策摘要
可审计但不要求暴露隐藏思维过程的下一步理由。在“ReAct 循环”中必须能按以下证据重新定位:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
- Action
模型提出并由运行时审核的工具行动。在“ReAct 循环”中必须能按以下证据重新定位:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
- Observation
工具或环境返回的结构化事实。在“ReAct 循环”中必须能按以下证据重新定位:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。
- Final Answer
满足完成或阻塞合同后产生的终止输出。在“ReAct 循环”中必须能按以下证据重新定位:轮次、决策摘要、Action、调用 id、Observation、预算变化、完成判定与人工审批。