Agent 工程史:从工具循环到可靠运行时

LLM Agent 的历史不是一张产品发布时间表。更稳定的线索是:模型每向现实世界多走一步,就会暴露一个新的工程缺口。

1
2
3
4
5
6
7
8
生成文本
→ 调用工具
→ 连续行动
→ 结构化协议
→ 真实任务评测
→ 管理 Context 与执行状态
→ 跨实现互操作
→ 处理权限、副作用与恢复

1. 前史:Agent 问题早于 LLM

经典 Agent 与 BDI 研究已经在讨论状态、目标、意图、计划和环境反馈。1990 年代的 Agent-Oriented Programming 与 BDI Agent 尝试把这些概念放进可执行系统。

它们为今天提供了问题语言,却不是 LLM Agent 的直接代码祖先。经典系统依赖形式逻辑、手工知识和计划;LLM Agent 依赖生成模型、Context 与工具协议。两条路线关心相似问题,技术基础并不相同。Intelligent Agents: Theory and Practice

2. 2022~2023:模型开始交替思考与行动

ReAct 在 2022 年提出让模型交错生成 reasoning trace 与 task-specific action。行动从环境获得 Observation,推理再据此更新计划。它让“边观察、边决定下一步”成为 LLM Agent 的经典形状。ReAct v3

说白了,ReAct 关心的是任务运行时:先做一步,看见结果,再调整下一步。

Toolformer 接着追问:模型能否从数据中学会何时调用 API、选择哪个 API、填写什么参数,并把结果纳入后续生成。它解决的是工具使用学习,不是完整 Runtime;论文也没有处理任意长的交互式工具链。Toolformer v1

两者的区别可以压成一句话:ReAct 是“运行时边做边看”,Toolformer 是“训练时学会何时用工具”。

2023 年的 Auto-GPT 原型把长期目标、记忆、搜索与浏览器串成长循环。它证明“让模型持续决定下一步”可以成为公开可运行原型,也暴露了无限循环、费用、权限与恢复等问题。Auto-GPT 初始 Commit

同年 6 月,OpenAI Function Calling 用 JSON Schema 把工具名与参数变成结构化 API 边界:模型提出调用,宿主程序执行,再把结果回传。协议减少了 Prompt 解析歧义,却不会替应用完成授权、参数校验或幂等。OpenAI Function Calling

3. 2023~2024:Coding Agent 变成可测系统

SWE-bench 把真实 GitHub Issue 与 Pull Request 整理成可重复评测。它不再问模型能不能写一段代码,而是问 Agent 能否理解仓库、编辑文件并让测试通过。SWE-bench v3

SWE-agent 进一步说明,能力不只来自模型。仓库导航、编辑命令、反馈格式和测试接口共同构成 Agent-Computer Interface;相同模型放进不同 Harness,结果可能差很多。SWE-agent v3

SWE-bench 是试卷,SWE-agent 是参加考试的系统。它提醒我们:工具接口会改变模型能做什么、能看见什么。只返回 failed 的工具,和能给出错误行、堆栈、退出码的工具,会让同一个模型走出完全不同的下一步。

这也是 Coding Agent 工程的转折:工具不再只是“能调用”,还要容易被模型理解,返回足够诊断信息,并受到权限与输出预算控制。

4. 长任务迫使系统管理 Context 与状态

持续循环很快撞上上下文窗口。MemGPT 用分层内存和外部存储模拟 Virtual Context Management;后来的 Context Engineering 把问题改写成“每次推理应该选择哪些高信号 Token”。MemGPT v2Anthropic Context Engineering

Context、Session 与 Checkpoint 也开始分层:Context 是本次模型可见窗口,Session 保存连续交互,Graph Checkpoint 保存工作流某一步的状态。LangGraph v0.2 将 Checkpointer 拆成独立库,SQLite 与 PostgreSQL Backend 让中断恢复、Human-in-the-loop 和 Time Travel 更容易实现。LangGraph v0.2

可以把它们记成:Context 是角色此刻看到的画面,Session 是整局游戏,Checkpoint 是这局游戏的一次存档。

Checkpoint 仍不等于外部副作用可靠。邮件、支付和 Shell 是否已经执行,需要幂等键、执行回执、Ledger 或人工核对。

原因很简单:邮件可能已经发出,程序却在保存 succeeded 前崩溃。Checkpoint 只能告诉你本地记到了哪里,不能证明外部世界发生了几次。

5. 2024~2025:从单体 Loop 到可组合生态

MCP 在 2024 年试图解决 N 个 Agent 应用对接 M 个工具源的重复集成。它建立 Host、Client 与 Server 的能力边界,让 Tool、Resource 和 Prompt 可以跨应用发现与调用。MCP 发布公告

最短记忆是:MCP 连接 Agent 应用与外部能力。

MCP 不是 Agent Runtime,也不是 Agent-to-Agent 协议。当前 2026-07-28 规范已经移除核心 Session 与初始化握手,转向 Stateless 请求;长任务进入 Tasks Extension。MCP Changelog

2025 年发布的 A2A 面向另一层:让不同厂商和框架中的远程 Agent 发现能力、交换消息并协作处理长任务。MCP 连接外部能力,A2A 连接不透明 Agent,两者不能互相替代。A2A 发布公告

也就是说,Agent 调文件工具通常看 MCP,Agent 把任务交给另一个远程 Agent 才看 A2A。

OpenAI Responses API 与 Agents SDK、Claude Agent SDK 等 Runtime 继续封装 Loop、Handoff、Guardrail、Trace 与 Session。框架开始按层分化:Provider API、Agent SDK、Workflow Runtime、能力协议和 Coding Runtime,不再是一个“Agent 框架”概念能够概括。

6. 今天:可靠性成为独立工程层

工具能调用以后,系统还要回答:谁批准动作,进程能访问什么,崩溃后怎样恢复,重复请求会不会产生第二次副作用。

1
2
3
4
5
Tool Calling       描述模型想调用什么
Agent Loop 执行并回传结果
Session/Checkpoint 保存对话或工作流状态
Sandbox/Approval 限制动作边界
Idempotency/Ledger 判断副作用是否发生、能否重试

这不是某个框架一次性发明的标准,而是 Agent Runtime 逐渐吸收分布式系统、数据库和安全工程经验的结果。

一个系统可以同时拥有 Function Calling、MCP 和 Checkpoint:它能申请工具、连接工具,也能保存进度。但没有 Sandbox、Approval、Idempotency 与 Ledger,它仍可能越权执行、破坏文件,或者在崩溃后重复发送邮件。

后面的课程会沿这条历史反向拆解:先理解 Agent 和 Tool Loop,再学习 Context、开源实现、存储、工具恢复与沙盒。历史的价值不在于记住年份,而在于知道每一层为什么出现,也知道一项新技术并没有自动解决下一层问题。

参考资料

主动回忆自测

  1. 为什么这篇历史不用产品发布时间来组织?
  2. Function Calling 中,模型和宿主程序分别负责什么?
  3. SWE-bench 与 SWE-agent 有什么区别?
  4. ReAct 与 Toolformer 分别解决什么问题?
  5. Auto-GPT 证明了什么,又暴露了什么?
  6. MCP 与 A2A 分别连接谁?
  7. Context、Session 与 Checkpoint 有什么区别?
  8. 为什么同一个模型换一套工具接口,表现可能明显变化?
  9. Function Calling、MCP、Checkpoint、Ledger 与 A2A 各在哪一层?
  10. 为什么“能调用工具、能恢复状态”仍不等于“可靠执行真实动作”?
展开查看简答
  1. 主线是“新能力暴露新问题,下一层工程再补上”,不是产品热度。
  2. 模型提出结构化工具名和参数;宿主校验、授权、执行并回传结果。
  3. SWE-bench 是真实仓库任务的评测试卷;SWE-agent 是参加评测的 Agent 系统。
  4. ReAct 研究运行时如何边做边看;Toolformer 研究训练时如何学会选择工具。
  5. 它证明长期目标可以驱动连续工具循环,也暴露无限循环、成本、权限和恢复问题。
  6. MCP 连接 Agent 应用与外部能力;A2A 连接远程 Agent。
  7. Context 是本次可见窗口,Session 是持续会话范围,Checkpoint 是某时刻状态快照。
  8. 工具决定模型能采取哪些动作、能收到哪些环境证据。
  9. Function Calling 是调用格式,MCP 是能力协议,Checkpoint 保存状态,Ledger 记录执行事实,A2A 连接 Agent。
  10. 状态恢复不能证明外部副作用执行了几次;还需要权限边界、幂等、回执和审计。