dalaoyang技术手记

ReAct 是什么:在动作与反馈之间更新判断

ReAct 描述一种把判断与环境动作交替组织的方式。它不是前端框架 React,也不是只让模型多写几段推理;关键是让下一步真正受到工具结果影响。

Agent 入门 · 阅读路线

先带走这三个判断

  1. ReAct 来自 Reasoning 与 Acting,与前端框架 React 是两个概念。
  2. 观察结果需要改变下一步;没有新证据的重复调用不会自动提高质量。
  3. 实际产品展示决策摘要、调用事实和结果依据即可,不必展示隐藏思维链。
从第一个问题开始
文章目录

先把 ReAct 的名字读对

ReAct 是 Reasoning 与 Acting 的组合名称。Yao 等人在 ReAct 原论文(2022) 中研究把推理轨迹与任务动作交替生成:动作从外部来源或环境获得信息,再影响后续处理。它与构建网页界面的 React 没有从属关系;搜索时加上“agent”或论文标题,可以避免找错领域。

理解时可抓住一个动作节奏:先判断目前缺什么,执行一次相关动作,读取观察结果,然后更新下一步。论文中的具体提示格式是一种研究实现;今天的工具调用 API 可以用结构化请求实现类似循环,未必出现文本标签 Thought、Action、Observation。不要把某种字符串格式误当作整个方法。

为什么不能只生成一份答案

ReAct 的反馈环:判断、动作、观察与停止;观察结果回到下一次决策;证据充分或达到停止条件时,形成有边界的回答。
观察结果回到下一次决策;证据充分或达到停止条件时,形成有边界的回答。放大图表

继续使用资料整理场景。助手要找一篇解释 ReAct 的入门文章,搜索结果里有一个标题叫“React 从零开始”。如果只凭关键词写答案,很容易把网页框架混进来。打开正文后才知道它讨论组件和状态,观察结果应促使助手换来源,而不是沿着原判断继续编写。

反馈环的价值就在这里:环境能够否定上一轮假设。搜索命中不等于正文相关,正文相关也不等于版本适用。每一步都获得一种不同证据,最后才构成“这篇适合解释 Agent 中的 ReAct”的判断。

用简短记录看懂一次循环

可以把演示记录写成:“决策摘要:当前只看到标题,需要核对正文。动作:读取页面 A。工具事实:页面主要讨论前端组件。下一步:排除 A,搜索 ReAct 论文解读。”这份记录足以解释为何改变方向,也能检查调用是否发生。

记录里的决策摘要是为了沟通的简要说明,不是模型隐藏推理的逐字转录。真实产品应保留可核实的调用参数、结果状态和引用片段;涉及敏感资料时收窄采集范围。模型说“已查询”仍不能替代工具回执,展示出来的漂亮步骤也不能证明外部动作已经执行。

观察有类型,解释有边界

读取结果的三种状态:相关、不相关、不可用;状态决定继续路径;依赖不可用不能被解释成资料不存在。
状态决定继续路径;依赖不可用不能被解释成资料不存在。放大图表

读取到相关正文,可以核对解释与来源。读取到无关正文,应改变来源选择。读取失败,则只能说明这次没有成功取得页面,不能宣布文章不存在。把不同状态都写成“无结果”,模型就可能在错误基础上调整计划。

对资料助手,工具结果最好同时包含最终地址、标题、文本范围、读取时间和是否截断。输出过长时可以先给摘要与片段,再允许按需读更多;摘要必须保留影响判断的版本和限制。Claude 官方工具调用文档说明,应用执行自定义工具调用,并把结果交回模型;业务状态如何解释,仍需要应用自己的契约。

适合边查边确定的任务

当下一步依赖尚未取得的事实时,ReAct 风格很自然。例如排查页面错误:先读取日志,再决定查配置还是复现请求;整理陌生主题:先阅读材料,再决定补查定义还是寻找反例。这类任务难以在第一轮准确写死全部动作,短反馈周期更便于修正方向。

若步骤和输入已经确定,固定流程通常更直接。把十个互不依赖的文档逐个串行读取,也未必合理;运行程序可以对获准的独立读取并发处理,再把结果交回模型。ReAct 不强制所有系统只能一次执行一个动作,具体粒度由任务依赖、工具语义和执行器决定。

循环为什么会跑偏

常见问题是反复搜索相同词,却没有说明上一轮缺口;把单个来源当作全部事实;遇到权限拒绝后换一种参数继续尝试;把工具报错解释成业务否定。模型在循环中有更大选择空间,也就需要更清楚的工具边界和停止规则。

可以给每个循环设置可检查的问题:是否得到新信息?当前来源是否符合范围?下一动作是否重复?是否已到时间或调用上限?预算耗尽时留下缺口而不是强行输出结论。工具授权仍应由运行程序核对,不能因为模型写了一段合理说明就跳过执行检查。

与计划型 Agent 可以组合

ReAct 和 Plan-and-Execute 并非互斥阵营。资料整理助手可以先列出“概念、实践、工程边界”三个收集任务,再让每个子任务用反馈循环寻找合适文章。上层负责目标覆盖,下层负责应对页面和来源的不确定性。

组合以后要避免责任混淆:子任务宣布找到材料,上层仍要检查整体是否缺一个主题;上层计划修改,也不自动撤销已经发生的外部动作。先明确每层输入、完成证据与调用预算,再决定是否值得拆层。结构更复杂不保证结果更好,应该与简单循环在同一批任务上比较。

动手练习:下一步应该做什么

构造两条工具结果:第一条成功读取到讲前端 React 的正文;第二条读取 ReAct 解读时网络超时。你会怎样更新资料清单?为两条结果分别写一句决策摘要,注意不要把它们混成“没有相关资料”。

展开参考判断

第一条有足够依据排除该来源,应换相关材料;第二条只证明本次读取失败,可按预算有限重试或换一个允许的来源。两条都不能证明所有来源里没有 ReAct 资料。记录已经确认的事实,再写下一步将补哪一个缺口。

参考资料与阅读边界

以上案例为用于解释概念的构造场景;图中结构属于通用示意,不代表某个产品的线上架构或验收结论。资料核对日期为 2026 年 10 月 7 日,框架接口会演进,具体实现请以所用版本的官方文档为准。

记录可验证的工具事实与简短决策摘要,不展示模型隐藏推理;方法名称不构成效果或成功保证。

下一步由最新事实决定;没有新增证据,就检查是否该停下。

读完,留一句在书桌上

回书桌看看

仅保存在当前浏览器。

图表

窄屏可在图内横向滑动查看细节。