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 模型,实现从经验中学习的闭环优化。

相关推荐
皓月盈江1 小时前
Linux Debian下STM32CubeProgrammer串口连接失败解决方案
linux·stm32·debian·串口下载·stm32f103c8t6·usb转ttl·stm32cubepro
鬼手点金1 小时前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
雪芽蓝域zzs1 小时前
Vue导入方法三种方式对比
前端·javascript·vue.js
定栓1 小时前
Webpack迁到Vite第八节:错误排查实录
前端·webpack·devops
haluhalu.2 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
l1t2 小时前
修改两处,让SQLite求解数独SQL在datafusion上运行
服务器·数据库·sql
data analyse 4562 小时前
服务端统计时区切换的日期归并
大数据·前端·数据库·人工智能·数据分析
misty youth2 小时前
前端知识速查
前端·react.js·web
远方16092 小时前
108-ORA-00600 [kdsgrp1-qetlbr] 内部错误排查与 RMAN 块级恢复
大数据·linux·数据库·oracle