ReAct 循环

ReAct 循环就是将 LLM、上下文和工具串联起来的核心机制------让我们看看一个 Agent 是如何一步步思考和行动的。

Agent 执行任务的核心模式叫做 **ReAct**(Reasoning + Acting)。虽然名字只体现了思考(Reasoning)和行动(Acting)两个词,但实际循环包含三个环节:模型先**思考**当前应该做什么,然后调用工具**行动**,再**观察**工具返回的结果并继续思考下一步。这个"想→做→看→想→做→看"的循环不断重复,直到任务完成。

让我们通过一个多币种收入汇总的具体例子来理解 Agent 的**轨迹**(trajectory)。轨迹是 Agent 在执行任务过程中不断积累的消息历史------用户消息、模型回复(包括思考过程和工具调用)、工具执行结果。每一次调用 LLM 时,它接收的完整上下文由**静态前缀**(系统提示词 + 工具定义)和**轨迹**(动态消息历史)两部分组成(图 1-3)。这揭示了一个关键事实:**Agent 的上下文 = 静态前缀 + 轨迹**。具体地说,静态前缀对应前文五个组件中的前两项(系统提示词 + 工具定义),轨迹对应后三项(用户消息 + 模型回复 + 工具执行结果,随交互不断增长)。基于这个完整上下文,LLM 生成下一步的响应,然后这个响应又追加到轨迹中,供下一次调用使用。

Agent 轨迹------多币种汇总任务的 ReAct 循环(images/fig1-3.svg)

让我们通过伪代码来理解 Agent 轨迹的结构:

```

轨迹 = [

{role: "user" , content: "根据公司季度收入:Q1 2.5M 美元,Q2 2.1M 欧元,Q3 1.8M 英镑,Q4 380M 日元,计算公司年度总收入和季度平均收入" },

第一次迭代 - LLM 看到上述轨迹,生成响应

{role: "assistant" ,

reasoning: "需要将所有货币转换为 USD..." ,

content: "" , # 没有直接回复用户

tool_calls: [

{name: "convert_currency" , args: {amount: 2100000, from: "EUR" , to: "USD" }},

{name: "convert_currency" , args: {amount: 1800000, from: "GBP" , to: "USD" }},

{name: "convert_currency" , args: {amount: 380000000, from: "JPY" , to: "USD" }}

]},

Agent 框架执行工具,添加结果到轨迹

{role: "tool" , content: "EUR->USD: 2282608.7" },

{role: "tool" , content: "GBP->USD: 2278481.01" },

{role: "tool" , content: "JPY->USD: 2541806.02" },

第二次迭代 - LLM 看到完整轨迹,包括工具结果

{role: "assistant" ,

reasoning: "已获得转换结果,现在需要汇总计算..." ,

content: "" ,

tool_calls: [

{name: "code_interpreter" , args: {code: "total = 2500000 + 2282608.7 + ..." }}

]},

{role: "tool" , content: "Total: 9,602,895.73, Average: 2,400,723.93..." },

第三次迭代 - LLM 看到完整轨迹,生成最终答案

{role: "assistant" ,

reasoning: "所有计算完成,总结结果..." ,

content: "FINAL ANSWER: 总收入$9,602,895.73..." }

]

```

注意,轨迹中没有显示系统提示词和工具定义------它们作为静态前缀,在每次 LLM 调用时都会被自动拼接在轨迹前面。

在我们的实验中,这个循环展现得淋漓尽致。第一轮,Agent 分析任务后并行调用三个货币转换工具;第二轮,基于转换结果调用代码解释器进行复杂计算;第三轮,确认所有计算完成后生成最终答案。整个过程仅用了 3 次迭代、4 次工具调用就完成了复杂的多步骤任务。

这种设计的精妙之处在于**上下文的累积性**。每次 LLM 调用都能看到完整的轨迹,这让它能够理解当前处于任务的哪个阶段、之前尝试了什么、得到了什么结果。就像人类解决问题时会不断回顾和总结,Agent 通过轨迹保持着对整个任务的全局认知。同时,轨迹的结构化特性也让系统具有高度的可解释性和可调试性:用户消息、模型回复(思考过程 + 工具调用)和工具执行结果都被清晰地区分开来。

轨迹不仅是执行的记录,更是 Agent 能力的体现。通过分析大量的轨迹,我们可以发现 Agent 的行为模式、优化决策路径、改进工具设计。轨迹数据甚至可以总结到知识库中,或者通过强化学习来训练更好的 Agent 模型,实现从经验中学习的闭环优化。

相关推荐
陈希1231 小时前
Linux 服务器性能排查手册(2026):CPU、内存、磁盘IO、网络四大瓶颈定位
linux·服务器·网络
usdoc文档预览1 小时前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户2705077725241 小时前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
LuHang2 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风3 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276153 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
测试界的小码农4 小时前
【Linux 命令实战(03):文件创建、复制、移动与删除,掌握 touch、mkdir、cp、mv、rm】
linux·服务器·php
|_⊙5 小时前
网络层协议 IP
服务器·网络·tcp/ip
程序员大阳5 小时前
HTML+CSS+JS对话式实战(3)-活动管理页实现查询、新增、删除API后端接口
javascript·css·html·实战·删除·查询·新增
byte轻骑兵5 小时前
实战 1:修改 BlueZ 源码,添加自定义开机日志
linux·aiot·bluez·电脑蓝牙·嵌入式蓝牙