Appearance
Agent:AI 是怎么「自己动手干活」的
「跟着 AI 学任何东西」系列第 40 篇,「向 AI 学 AI」第 5 篇。上一篇讲它读东西的方式,这一篇讲一个更大的问题——它是怎么从「说」变成「做」的。
⚠️ 这个领域变化极快,本文只讲不会很快过时的那部分:骨架和它的固有代价。不涉及任何具体产品与框架的实现细节。
它突然会干活了,但模型什么都没变
现在到处都在说 AI Agent:它能自己查资料、自己写代码、自己跑测试、自己改到跑通。
听起来像是模型变强了。但真相是:
模型什么都没变。变的是它外面那个循环。
一、最核心的一句:模型不会「做」任何事,它只会输出文本
这是全篇的地基,也是最被误解的一点。
你以为的:模型「调用了」搜索引擎。
实际发生的:
- 模型输出了一段文本,内容大意是「我要搜索:某某」;
- 外面的程序读到这段文本,把它解析出来;
- 程序去调了搜索引擎;
- 程序把返回结果当成一段新文本,贴回上下文;
- 模型再读一遍。
也就是说:
模型从头到尾只做了一件事:读文本,写文本。所有真正的「动作」,都是外面那个程序干的。
这句话不是抠字眼,它有直接的后果:
Agent 的能力边界,一半在模型,一半在那个程序给了它什么工具。 同一个模型,给它一个只读的搜索工具,和给它一个能删文件的终端,是两种完全不同的东西——而这个差别跟模型聪不聪明毫无关系。
二、那个循环长什么样
这个骨架最早被系统地提出来是在 2022 年,Yao 等人的 ReAct(Reasoning + Acting,发表于 ICLR 2023)。它把「推理」和「行动」交替起来:
思考(我需要知道 X)→ 行动(输出一个工具调用)→ 观察(工具的返回结果被贴回上下文)→ 再思考……
一直循环,直到模型认为任务完成。
有两个点值得单独拎出来。
① 推理是被「写出来」的。 模型把「我为什么要这么做」也输出成文本。这既提高了效果(写出来的推理会进入下一轮的上下文,起到自我约束的作用),也带来一个副产品:你能看到它写下了什么。
但这里要按住一句:「写下来的理由」不等于「真实的原因」。 已有研究发现,模型给出的推理链有时和它实际依据的东西对不上——它可能受某个你没注意到的线索影响,却在解释里编了另一套说法。所以那段推理更适合当线索用(顺着它去查、去验证),而不是当证词用。
② 每一轮的「观察」都会累积进上下文。 这一点直接把上一篇的所有问题继承了过来,而且放大了:
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 形曲线):见本系列上一篇《上下文与记忆》的来源清单。
本文不涉及任何具体产品或框架的实现与性能;该领域变化很快,请以当下实测为准。