Agent 精读(三):模型即 Agent?循环只是搬到了服务端

这是《深入理解 AI Agent》精读专题的第三篇。读的是李博杰的开源书第一章的 ReAct 循环与「模型即 Agent」,写下我自己的理解——不是摘抄,是用我的话重新讲一遍。
本章思维导图见 专题页 · 章节思维导图

先补个尾巴:ReAct 循环

第一篇留了个钩子:ReAct 循环没展开,这次补上。

Agent 干活的核心模式叫 ReAct(Reasoning + Acting)。名字里只有思考和行动两个词,循环其实有三个环节:模型先思考该做什么,然后调用工具行动,再观察工具返回的结果,接着想下一步。想 → 做 → 看,不断循环,直到任务完成。

上一轮工具返回的观察,就是下一轮思考的输入。这个循环要做的事,是让模型的每一步决策都踩在真实结果上,而不是踩在参数记忆里。

新范式:模型即 Agent

书里抛出的新范式叫「模型即 Agent」(Model as Agent):先进模型通过后训练(特别是强化学习),把工具调用能力内化为原生能力——何时调用工具、调哪个、传什么参数,模型自己决定,不需要人工编排。

听起来像框架要完。书里马上补了一句:恰恰相反,模型越强大,围绕模型构建的 Harness 越关键。空口无凭,上两个实验。

Kimi K3:决策进了参数,执行没有

实验 1-2 用的是 Kimi K3:约 2.8 万亿参数的混合专家(MoE)模型——像一个专家团队,面对不同的问题自动派合适的专家上阵,能力和效率兼得。

但要分清因果:让 K3 对工具调用熟练的不是参数多,是强化学习把决策策略写进了参数——何时调用、调用哪个、传什么参数,都由模型自主决定。书里给了一个直观的数字:它能连续执行 200~300 次工具调用而保持思考的一致性,多数模型在几十次后就开始退化。

然后是我读这部分抓到的最重要的一句话:

编排循环并没有消失,而是从客户端移到了服务端,决策权则交给了模型。

K3 依然不能真正执行工具——web_searchcode_runner 的真实实现在模型之外的基础设施里,由一个叫 Formula 的服务端脚本引擎运行。决策权交了出去,执行没有。

GPT-5.6:两个变化,都还在接口层

实验 1-3 用的是 GPT-5.6,两个变化:

  1. 自由格式工具调用(Freeform Tool Calling):不再把参数打包成严格的 JSON,模型可以直接给工具发原始文本——一段 Python、一条 SQL。但书里特意补了一句:这是 API 参数格式的演进,而非模型架构的革新,客户端的工具调用循环逻辑一个字没变。
  2. Deep Research 能力:Responses API 内置了联网搜索和代码解释器,在服务端形成「搜索 → 阅读 → 分析 → 再搜索」的闭环;而且模型在动手之前会先和用户交互,问几个澄清问题得到用户的真实意图——问的是「你偏好哪个数据源、要看哪些技术指标」,不是闷头去搜。

两个变化都指向同一个方向:把编排从客户端往服务端收。但注意第一条的定性——连「不再拘泥 JSON」都只是接口层的演进,谈不上模型学会了什么新东西。

我的判断:搬了个家,没长出手

两个实验看完,我的判断是:「模型即 Agent」更多只是转移到了服务端,并没有真正让模型具备真实运行工具的能力。

graph TB subgraph S1["传统形态:循环跑在客户端"] A["模型
决定下一步"] --> B["客户端 Harness
执行工具"] B --> C["观察
结果回传"] C --> A end subgraph S2["模型即 Agent:循环跑在服务端"] D["模型
决定下一步"] --> E["服务端 Harness
执行工具
(Kimi Formula / OpenAI 内置工具)"] E --> F["观察
结果回传"] F --> D end

循环的结构一模一样,搬了位置而已。理由可以拆成两层:

第一层,执行的本质是对真实环境产生状态变化,而模型只会生成 token——生成不等于执行。写 SQL 是 token,把一条 UPDATE 真的跑进生产数据库是另一回事。书里的论证很硬:强化学习写进参数的是决策,工具及其执行在模型之外的基础设施里完成。

第二层是我自己的延伸:工具是实时的,而模型是现有数据集之下的产物。搜索结果、股价、天气每天都在变,训练数据永远是历史快照——工具的返回值没法提前内化进参数,只能在推理时现场取。这也顺手解释了书里实验 1-1 的现象:上下文里缺了工具执行结果时,模型会就地编造,因为它只剩参数记忆可用了。

当然要留余地。书里对「模型吃掉 Harness」的立场是「方向认同、节奏务实」:决策这一层确实已经被内化了——这正是「模型即 Agent」的实质;执行这一层短期内看不到被吃掉的可能,因为它从来就不在参数里。

下一步

  • 第 1 章还剩最后一块:编排模式(工作流 vs 自主),下篇补上
  • 第一篇欠的 context 实验还挂着,和下篇一起跑

参考来源