Featured image of post 第十话|Agent 理论发展脉络:从 CoT 到 SWE-Agent

第十话|Agent 理论发展脉络:从 CoT 到 SWE-Agent

六篇论文串起 Agent 从推理、行动到进入真实软件环境的演进。

系列 GYA(Get Your Agent) 第 10 / 12 篇
主题 AgentLLM教程论文精读理论演进

Agent 不是“更强的提示词”,也不是把模型接上终端。它是一组逐层补齐的能力:推理、行动、工具使用、反馈、可复用经验,以及适配真实环境的接口。

这条线从 CoT 延伸到 SWE-agent。把六篇论文按“上一步已经解决了什么,人们接下来还想要什么”来读,名词表就会变成一张工程问题地图。

先给结论:六篇论文,六个能力缺口

论文它回答的问题留给工程的能力
CoT复杂问题如何不只猜最终答案?显式中间推理
ReAct推理如何接触外部环境?Thought → Action → Observation 循环
Toolformer模型如何知道何时、怎样用 API?工具使用的学习问题
Reflexion一次失败如何影响下一次尝试?语言化反馈进入后续上下文
Voyager成功行为如何不必每次重学?可执行 Skill 的积累与复用
SWE-agent代码任务环境怎样才适合 Agent 使用?面向 Agent 的软件接口(ACI)

它们不是六个互相替代的框架。更准确地说,后面的研究把 Agent 放进了更长、更真实的任务链条。

CoT:先把“答案”拆成过程

对于多步计算或符号推理,直接要求最终答案,系统无法暴露中间哪一步出了问题。Chain-of-Thought Prompting 的做法是提供“问题—中间推理—答案”的示例,让模型生成中间步骤再到达结论。

论文报告,在 GSM8K 等任务上,540B 参数的 PaLM 配合 8 个 CoT 示例取得了当时的领先表现。这是论文在特定模型与 few-shot 设置下的结果,不是所有模型都会自动获得的保证。Chain-of-Thought Prompting

CoT 解决的是“如何展开思考”。它没有让模型查询数据库、读取网页或运行程序;一条流畅的推理链仍可能建立在错误前提上。

关键洞察:CoT 让答案过程可见,但还没有让推理接受环境校验。

ReAct:把环境反馈送回下一轮推理

当问题依赖外部事实或真实操作时,人们自然会想:模型能不能先判断缺什么,再行动,再根据结果决定下一步?

ReAct 将 reasoning traces 和 actions 交织:模型输出 Thought 与 Action,运行时执行 Action 并返回 Observation,Observation 再成为下一轮 Thought 的输入。ReAct

ReAct 的关键不是字段数量,而是环境反馈回到下一轮决策

论文在问答、事实验证及交互任务上评估该范式;在只给 1~2 个 in-context 示例的设置中,论文报告 ReAct 在 ALFWorld 与 WebShop 上相对相关基线分别有 34 与 10 个百分点的绝对提升。该数字只描述论文的对应实验,不能外推为任意 Agent 的成功率。ReAct

这也是工程里常见的 Agent loop:LLM → Action → Tool → Observation → LLM。重点不是把输出格式命名为 Thought,而是 Observation 必须来自可执行的外部环境。

关键洞察:CoT 让模型解释自己的思路;ReAct 让思路能够被现实结果修正。

Toolformer:把“能调工具”与“会用工具”分开

ReAct 描述了推理与行动如何交替,但仍有一层问题:模型如何判断要不要调用工具、选择哪一个 API、填哪些参数,以及如何使用返回值?

Toolformer 研究的正是这种自监督的工具使用学习:模型学习 API 的调用时机、参数与结果整合。Toolformer

这与今天工程里常说的 Function Calling 或 MCP 不能混为一谈:

层次关注点
ReAct推理、行动、观察如何组成一个运行循环
Toolformer模型如何学习 API 使用行为
Function Calling API应用怎样接收结构化调用请求
MCPAgent 客户端怎样与工具提供方建立标准连接

所以,tool_calls JSON 解决的是接口表达;它不等同于模型已经具备可靠的工具选择能力。一个工程系统仍要负责执行、校验参数、限制权限,并把结果回填到上下文。

关键洞察:协议让工具“可被调用”,学习与运行时设计才决定工具“会不会被正确调用”。

Reflexion 与 Voyager:经验要么成为反馈,要么成为资产

一个 ReAct 轨迹结束后,下一次类似任务能否少走弯路?Reflexion 的答案是把外部反馈转写为语言反思,保存为 episodic memory,在后续尝试时作为上下文使用;它并不要求更新模型权重。Reflexion

论文在 HumanEval 的特定设置中报告 91% pass@1,并以其中的 GPT-4 对照结果 80% 作比较。这个数字属于论文实验条件,不能当作当今模型或任意实现的通用结论。Reflexion

Voyager 再往前走一步:在 Minecraft 中结合自动课程、不断增长的可执行 Skill Library,以及环境反馈、执行错误与自我验证的迭代提示,让完成过的行为可被再次调用。Voyager

Agent 能力演进:从推理到行动、反馈资产与软件环境

Reflexion 主要留下“下次应该注意什么”的语言反馈;Voyager 的 Skill Library 试图留下“已经会做什么”的可执行资产。两者都不是企业平台的现成蓝图:前者需要控制反思的质量与检索,后者的 Minecraft 结果也不能直接等同于业务系统。但它们明确了经验积累的两种工程形态。

关键洞察:反馈能减少重复犯错;被验证、可调用的行为才可能成为 Skill。

SWE-agent:能力还取决于 Agent 看见怎样的界面

把 Agent 放进代码仓库,任务不再只是回答:它要逐步浏览文件、搜索符号、局部修改、运行测试、读取报错,再决定是否继续。此时“给一个万能 shell”并不必然带来稳定的任务推进。

SWE-agent 提出 Agent-Computer Interface(ACI),讨论为仓库浏览、编辑与测试等活动设计更适合 Agent 的交互界面。论文在其评测设置中报告 SWE-bench 12.5% 和 HumanEvalFix 87.7% 的 pass@1;这些数值同样受模型、提示、接口和评测版本约束。SWE-agent

关注点不利于 Agent 的接口面向 Agent 的接口目标
浏览代码一次返回大量无关内容支持逐步定位与搜索
修改文件整文件覆盖、难以审查局部且可验证的编辑
执行测试只有成功或失败返回可定位、可继续推理的反馈
权限边界任意命令直接执行明确能力范围与审计点

这把讨论从“模型是否够聪明”推进到“环境是否给了恰当的可观察性与可操作性”。对于 Coding Agent,工具颗粒度、输出格式、沙箱和测试反馈都是能力的一部分。

关键洞察:Agent 的性能不只来自模型,也来自它能够安全、清楚地感知和操作的环境。

动手:跑一遍可验证的 ReAct 控制流

配套 demo 位于 GYA/c10-agent-theory-timeline。默认是离线 replay,Python 3.9+、无第三方依赖、无 API Key;它验证控制流,不模拟论文 benchmark,也不声称调用真实模型。

git clone https://github.com/renxin2024/GYA.git
cd GYA/c10-agent-theory-timeline
python3 main.py

本次以 python3 --version && python3 main.py 实际运行,输出如下:

Python 3.9.6
[Thought] I need an external fact before answering.
[Action] lookup({"query": "capital of France"})
[Observation] Paris is the capital and most populous city of France.
[Final Answer] The answer is Paris is the capital and most populous city of France.
[check] actions=1 observations=1 terminated=final_answer

跑通标准不是记住“巴黎”,而是看到一次 Action → Observation → Final Answer 的闭环。若执行时出现语法错误,请确认 python3 --version 不低于 3.9;若使用 --liveDEEPSEEK_API_KEY is required,这是正常的运行时保护,需配置密钥以及兼容的 LLM_API_URLLLM_MODEL。本文未运行 --live,因此不报告其输出或效果。

下一步:按能力缺口设计,而不是按论文堆组件

读这条脉络时,最有用的问题不是“下一篇 Agent 论文叫什么”,而是:当前任务到底缺少推理展开、外部观察、工具选择、失败反馈、可复用 Skill,还是环境接口?

这个判断决定你该改 prompt、工具契约、记忆策略、Skill 流程还是执行环境。知识检索与 RAG 是另一条专题路线,本文不展开。

下一篇将从 Agent 运行轨迹出发,讨论怎样把反复出现、且已经验证过的做法沉淀为新 Skill。

理解检验

  1. 为什么 CoT 的中间步骤不能替代 ReAct 的 Observation?
  2. 为什么 Function Calling 的 JSON 契约不等于 Toolformer 的研究问题?
  3. Reflexion 的语言反馈与 Voyager 的可执行 Skill 分别留下了什么?
  4. 面对一个不稳定的 Coding Agent,为什么先审视 ACI 可能比先换模型更有效?

参考资料

留言

欢迎分享你的想法。评论提交后会在审核通过后显示。