Skip to content

Agent:AI 是怎么「自己动手干活」的 ​

「跟着 AI 学任何东西」系列第 40 篇,「向 AI 学 AI」第 5 篇。上一篇讲它读东西的方式,这一篇讲一个更大的问题——它是怎么从「说」变成「做」的。

⚠️ 这个领域变化极快,本文只讲不会很快过时的那部分:骨架和它的固有代价。不涉及任何具体产品与框架的实现细节。

它突然会干活了,但模型什么都没变 ​

现在到处都在说 AI Agent:它能自己查资料、自己写代码、自己跑测试、自己改到跑通。

听起来像是模型变强了。但真相是:

模型什么都没变。变的是它外面那个循环。

一、最核心的一句:模型不会「做」任何事,它只会输出文本 ​

这是全篇的地基,也是最被误解的一点。

你以为的:模型「调用了」搜索引擎。

实际发生的:

  1. 模型输出了一段文本,内容大意是「我要搜索:某某」;
  2. 外面的程序读到这段文本,把它解析出来;
  3. 程序去调了搜索引擎;
  4. 程序把返回结果当成一段新文本,贴回上下文;
  5. 模型再读一遍。

也就是说:

模型从头到尾只做了一件事:读文本,写文本。所有真正的「动作」,都是外面那个程序干的。

这句话不是抠字眼,它有直接的后果:

Agent 的能力边界,一半在模型,一半在那个程序给了它什么工具。 同一个模型,给它一个只读的搜索工具,和给它一个能删文件的终端,是两种完全不同的东西——而这个差别跟模型聪不聪明毫无关系。

二、那个循环长什么样 ​

这个骨架最早被系统地提出来是在 2022 年,Yao 等人的 ReAct(Reasoning + Acting,发表于 ICLR 2023)。它把「推理」和「行动」交替起来:

思考(我需要知道 X)→ 行动(输出一个工具调用)→ 观察(工具的返回结果被贴回上下文)→ 再思考……

一直循环,直到模型认为任务完成。

Agent 的循环

有两个点值得单独拎出来。

① 推理是被「写出来」的。 模型把「我为什么要这么做」也输出成文本。这既提高了效果(写出来的推理会进入下一轮的上下文,起到自我约束的作用),也带来一个副产品:你能看到它写下了什么。

但这里要按住一句:「写下来的理由」不等于「真实的原因」。 已有研究发现,模型给出的推理链有时和它实际依据的东西对不上——它可能受某个你没注意到的线索影响,却在解释里编了另一套说法。所以那段推理更适合当线索用(顺着它去查、去验证),而不是当证词用。

② 每一轮的「观察」都会累积进上下文。 这一点直接把上一篇的所有问题继承了过来,而且放大了:

Agent 跑到第 30 步时,你最初那句任务描述,正躺在那条 U 形曲线的谷底。

很多「agent 跑着跑着就跑偏了」,不是它叛逆,是它真的快看不见你最开始说的话了。

三、为什么 Agent 这么不可靠:错误会连乘 ​

这是本篇最实用的一节,而且只需要一次乘法。

假设每一步的正确率是 95%。听起来相当高。

  • 走 5 步:0.95⁵ ≈ 77%
  • 走 10 步:0.95¹⁰ ≈ 60%
  • 走 20 步:0.95²⁰ ≈ 36%

单步可靠 ≠ 整链可靠。链条越长,越接近抛硬币。

而且这还是乐观估计。因为上面的算法假设每一步的错误是独立的,实际不是:

一步走错,它的错误结果会被当成事实贴回上下文,后面所有的推理都建立在那个错误之上。错误不只是累积,它会污染。

这一条直接推出了 agent 工程里几乎所有的常见做法,而且推得很干脆:

  • 尽量缩短链条(能一步做完就别分三步)
  • 每步之后校验(把 95% 拉高一点,指数会放大这点改善)
  • 关键动作要人确认
  • 让它可以回退(错了能撤销,比错了不发生更现实)

四、和「幻觉」的关系:从说错话,升级成做错事 ​

这个系列第二篇讲过幻觉——它会自信地编。

在聊天场景里,幻觉的代价是你被误导,而你还有机会发现。

在 agent 场景里,幻觉的代价是它真的去做了:编一个不存在的文件名然后执行删除、编一个 API 然后调用、编一个结论然后据此下单。

Agent 没有降低幻觉发生的概率,它提高了幻觉的后果。

所以「不可逆的操作必须人确认」不是保守,也不是流程洁癖——它是这个机制的直接推论。 一个会编东西的模型 + 一双真能动手的手,中间必须有个闸。

五、⚠️ 四条边界 ​

第一,本文讲的是通用骨架,各家的实现差别很大,很多已经不是朴素的 ReAct 循环了。

第二,95% 是我为了说明连乘而设的假设值,不是任何系统的实测数据。真实的每步正确率随任务类型差别极大。

第三,「Agent 不可靠」不等于「Agent 没用」。 短链条、可回退、有校验的场景已经很实用。这个连乘算的是「无人值守跑二十步」那种用法的风险,不是所有用法。

第四,这个领域变化极快。 上面的骨架和代价结构大概率还会成立一阵,但具体能力边界请以当下实测为准。

收尾 ​

Agent 的本质不是「更聪明的 AI」,而是:

把一个不会做事、只会写字的模型,放进一个能替它做事的循环里。

所以判断一个 agent 靠不靠谱,别只盯着模型有多强,看三件事:

它手上有哪些工具、链条有多长、错了能不能退回去。


附:这次我是怎么问 AI 的 ​

  • 追问「它到底是怎么调用工具的」,一直问到物理层面。 停在「它调用了搜索」什么都学不到。追问下去才发现——它根本没调用,它只是输出了一段文本。这一句改变了后面所有的理解。遇到「A 做了 B」这种描述,值得问一句「A 具体是怎么让 B 发生的」。
  • 把可靠性问题换成算术题。 「Agent 为什么不可靠」是个能聊一整天的软问题。改成「每步 95%,走十步剩多少」,一次乘法就把答案钉死了,而且顺带推出了所有的工程对策。
  • 主动去接上一篇的结论。 我问了一句「上一篇讲的上下文问题,在 agent 里会怎样」——问出了「跑到第 30 步时任务描述正在 U 形曲线谷底」。新知识和旧知识之间,值得主动去撞一下。
  • 问「这让已知的问题变好了还是变坏了」。 幻觉这件事前面讲过,我没有重复讲,而是问它在新场景下变成了什么——答案是概率没变、后果变大了。

参考来源 ​

  • Yao S, Zhao J, Yu D, Du N, Shafran I, Narasimhan K, Cao Y. ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023(arXiv:2210.03629)。推理与行动交替进行,推理轨迹帮助模型制定与修正计划,行动使其能与外部环境/知识源交互。
  • 「模型只输出文本、由外部程序解析并执行工具调用」:当前工具调用机制的通用实现方式。
  • 连乘算例:0.95⁵ ≈ 0.774,0.95¹⁰ ≈ 0.599,0.95²⁰ ≈ 0.358。其中 95% 为便于说明而设的假设值。
  • 推理链未必忠实反映模型的真实决策依据(chain-of-thought unfaithfulness):Turpin M, et al. Language Models Don't Always Say What They Think. NeurIPS 2023 等相关研究。
  • 上下文位置对检索准确率的影响(U 形曲线):见本系列上一篇《上下文与记忆》的来源清单。

本文不涉及任何具体产品或框架的实现与性能;该领域变化很快,请以当下实测为准。

books.sdx88.com