什么是 AI agent?
去掉炒作,agent 就是三样东西:一个能调用工具的模型、一个循环,以及决定下一步做什么的自主权。
「agent」这个词用得太随意,几乎什么都指。这里给一个足够严格、因而真正有用的定义:
agent 就是一个能调用工具的语言模型,跑在一个循环里,自己决定下一步做什么,直到任务完成。
三个组成部分。去掉任何一个,剩下的东西都更简单,也就不需要这个词了。
三个组成部分
工具
模型能调用你提供的函数——查数据库、读文件、调 API、跑代码。没有工具,模型只能产出文本。有了工具,它就能对外部世界产生影响,并观察到结果。见工具调用是怎么运作的?。
一个循环
输出会作为输入回流。模型调用工具,看到结果,再决定下一步做什么。这个循环不断重复,直到任务完成。见 Agent 循环。
让出的控制权
这一条才是真正把 agent 区分出来的一点,也是人们最容易低估的一点。
在普通应用里,决定下一步做什么的是你的代码。在 agent 里,做决定的是模型——用哪个工具、传什么参数、调多少次、什么时候停。你定义什么是可能的,模型在其中做选择。
能力由此而来,所有麻烦也由此而来。
什么不是 agent
严格一点是有用的,因为这个词总被贴到不需要它的东西上。
聊天机器人在循环里产出文本,但不调用任何工具,也不掌控任何东西。
单次工具调用——模型请求搜索,你返回结果,模型给出回答。只有一步,没有循环,也没有让出的控制权。这属于工具调用,而且往往是正确的设计。
固定管线——先检索,再总结,再分类。多步骤、多次模型调用,但排列顺序的是你的代码。这是一个工作流,对已经摸清的任务来说通常更好:可预测、好调试、更便宜。
这个区分不是抠字眼。一旦把顺序的决定权交给模型,你就得接受不确定性、成本波动,以及难得多调试过程。当顺序确实无法事先确定时,这值得;能确定时,就是浪费。
agent 在什么情况下值回成本
路径取决于发现了什么。 调试是最清楚的例子——下一个读哪个文件,完全取决于上一个文件里写了什么。任何固定管线都覆盖不了这种情况。
步数未知。 一直搜到找到答案为止,可能是查一次,也可能是查十二次。
需要恢复能力。 某个工具失败了,得有东西来决定换个方案。
任务本身就是探索。 摸清一个代码库,或者跨多个来源研究一个问题。
agent 在什么情况下不划算
步骤已知。 能写出顺序就直接写。工作流会更快、更便宜,也更容易诊断。
出错代价高。 agent 会做出错误操作。若错误操作会发出邮件或改动生产环境的数据,不设关卡的话,这些失效模式就无法接受。
延迟重要。 循环的每一轮都是一次完整的模型调用。十步就是十个来回。
对成本敏感。 每一轮都会把累积的历史重发一遍,所以跑得越久,成本越是平方级增长——这和对话里发生的事是同一个机制,只是工具返回的结果更长,把它放大了。
关于现状的实话
agent 真正好用的范围,比舆论宣传的要窄。
它们好用的条件是:工具少且描述清晰、任务几步就能完成、失败代价低,并且在不可逆的事情发生前有人能过一眼。编程助手非常符合:文件操作可逆,反馈即时,用户就在旁边。
当工具又多又相似、任务跨度很长、成功标准又模糊时,它们就开始退化。可靠性是往下复利的——每一步 95%,十步下来就是 60%。长时间的自主运行依然不可靠,而且不是靠 prompt 能修好的。
务实的做法是范围窄、工具少、循环短,在关键节点上有人复核。大多数成功的生产环境 agent 都长这样。完全自主的版本,大多还停留在演示阶段。
要点回顾
- agent = 工具 + 循环 + 让出的控制权。第三条才使它成为 agent。
- 聊天机器人、单次工具调用和固定管线都不是 agent——而固定管线往往是更好的设计。
- 路径取决于发现什么时用 agent;步骤已知时用工作流。
- 可靠性会随步数逐级衰减,所以循环要短,不可逆的操作要设关卡。
下一篇: 工具调用是怎么运作的?