前言:什么是 agent
在写第一行代码之前,先清一次地基。因为关于 agent 是什么,网上流传的说法一半是错的—— 而且错得整整齐齐。
一个典型的误解
随便搜一篇"agent 设计模式"教程,大概率会看到这样的清单:实现 agent 有几种模式—— ReAct(边想边做)、Plan-and-Execute(先规划后执行)、Reflexion(会反思)…… 初学者第一站的教程网站在教这个,长文公众号在教这个,它甚至已经进了面试题库。
把它们并列成"可供选择的架构",是在把考古当架构。看一眼时间线就明白了:
| 时间 | 发生了什么 |
|---|---|
| 2022-10 | ReAct 论文。靠 few-shot prompt 教模型输出 Thought / Action / Observation,再用正则从文本里把动作抠出来——因为当时的模型没有任何原生的工具接口 |
| 2023-03 | Reflexion 论文。外挂一个"反思循环",补弱模型不会自我纠错 |
| 2023 上半年 | BabyAGI、Plan-and-Execute。拆出 planner 和 executor 两个角色,补弱模型任务一长就忘了目标 |
| 2023-06 | 分水岭:OpenAI 上线 function calling。 动作从"文本解析"变成协议原生的一等公民 |
| 2024 | 各家跟进,tool use 成为标配接口 |
| 2024 之后 | 推理模型(RL 训练的 thinking)把"先规划""会反思"内化进了模型本身 |
看清了吗?那三个"模式"全部诞生在 function calling 之前。它们不是三种架构, 是给同一批弱模型打的三个补丁——那时的模型不会原生调用工具,不会自我纠错, 任务一长就忘了自己在干什么。2023 年的补丁,被当成了 2026 年的选择题。
现代 agent 只有一种架构
Anthropic 在《Building effective agents》里给 agent 的定义只有一句话:
They are typically just LLMs using tools based on environmental feedback in a loop. (agent 通常就是:模型在循环里根据环境反馈使用工具。)
就这么多。agent = LLM + tool use。 一个循环:把工具列表和对话发给模型, 模型要么回答、要么伸手调工具,工具结果回填进对话,再来一轮。
那三个"模式"去哪了?没有死,也没有被淘汰——它们内化进了 LLM 和工具调用里。
- ReAct:循环骨架赢了,但赢的方式是被吸收进原生接口和模型训练, 赢到连自己的名字都不需要了。今天没有人再用正则从文本里抠动作。
- Plan-and-Execute:今天的模型自己规划。你见过 Claude Code 先列一张任务清单、 再逐项执行逐项勾掉——那就是"先规划后执行",只是 planner 这个角色没有了: 规划变成了一次工具调用。模型先用 task 工具安排一堆任务,再按顺序执行、逐个完成; 计划就存在对话里,和任何一个工具结果没有区别。
- Reflexion:反思也不再需要外挂循环。模型调一个工具,工具返回一个错误, 下一轮它看着这个错误立刻改变计划、换另一个工具——工具的返回值就是反思的燃料。 这正是上面那句定义里 "based on environmental feedback"(根据环境反馈)说的东西。
所以这三个"模式"的结局,是失去了独立存在的必要:一个写对了的循环, 天生就会规划,天生就会反思。
一个诚实的限定:以上说的是有原生 tool use 接口的现代模型。真的接一个没有原生接口的 模型时,文本解析式的 ReAct 仍然是唯一选择——但那是在给旧时代的模型打补丁, 不是新时代的架构分类。
这本书要做什么
既然 agent 只有一种架构,事情就变得非常清爽:循环只有几十行,模型你改不了—— 一个 agent 和另一个 agent 的全部差别,都在工具的设计里。
所以这本书的路线是:用最短的路把那个循环亲手写出来(Part 1–2), 然后把剩下的整本书花在真正值得花的地方——工具怎么声明、怎么执行、怎么管权限、 结果怎么占上下文、知识怎么按需加载、subagent 为什么也是一个工具、 编排什么时候该从模型手里拿回来。
每一章的代码都从一个真实生产 harness 蒸馏而来,敲完就能跑。 不需要你先信我——写到练习 5,你自己会看见那个循环合上的瞬间。
翻页,从练习 0 开始。