📌 TL;DR: 你以为给Agent配完工具,它就"会用"了——这个"会用"跟你理解的不是一回事。人用工具是先判断再确定性执行;Agent调用工具,选哪个、填什么参数、什么时候调,每一步都是概率推理的结果。 工具调用出错,不像人操作出错那样会报警。选错工具流程照跑、参数填偏结果照出、时序搞反任务照完——三种失败都以"完成"的面目出现,不核查发现不了。 工具能不能被用对,很大程度由description的质量决定。写功能定义不够,写使用场景才有用——什么时候该调、什么时候不该调,这才是Agent做判断时真正需要的信息。 最后一条:按出错代价区分工具,写入型、不可逆的操作前加人工确认节点。这不是信不过Agent,而是结构设计的基本原则。配工具的逻辑要跟概率性执行的现实匹配,才能让任务链跑出你真正信得过的结果。

Agent调用工具,跟你用工具是一回事?丨Agent误解系列

信息图

你给Agent配了十几个工具:发邮件、查日历、读文件、调接口。

配完之后,你可能有一种感觉——它现在"会用"这些工具了。就像你教会了一个助手怎么开软件、怎么找文件,接下来只管分配任务就好。

这个感觉很自然,但它在一个关键地方出了偏差。

你以为的"会用",是你理解的那种会用。Agent那边,发生的是另一件事。

NotebookLM的音视频概览,解读的比较通俗易懂,对于时间比较紧张的读者朋友,可以听听,会有启发。


你我用工具的方式:先判断,再执行

想想你用Excel的过程。

你知道要做一张表→你打开Excel→你选择插入表格→你填数据。每一步是完成上一步之后才发生的。“执行"是在"判断"之后,分开的。而且执行本身是确定性的:你点了"保存”,文件就会保存,不会有别的可能。

这是人使用工具的底层逻辑:意图清晰,执行确定。知道要干什么,再决定用哪个工具,用完就是用完了。

我们习惯了这套逻辑,所以想象Agent用工具的时候,下意识就把这个框架套上去了。


Agent那边实际发生的事

Agent用工具,走的不是这条路。

每次工具调用,Agent要依次做出四个判断,而且每个判断都是基于当前context的概率推理,不是确定性执行

第一步:要不要调用工具? 不是所有问题Agent都会去用工具。它在当前对话里推测:这个情况,需要调用外部能力吗?还是我直接生成回答就够了?这个判断可能判对,也可能判偏。

第二步:调哪个? 你配了十个工具,它要从里面选一个。靠什么选?靠每个工具的名字和描述,加上当前任务的context,推测出"最可能适用的那个"。注意,是推测,不是查手册。

第三步:参数填什么? 工具需要输入参数,Agent要把任务里的信息转化成工具能接受的格式填进去。这一步仍然是生成,不是复制粘贴。参数的内容、格式、值域,都可能跟你的预期有偏差。

第四步:什么时候调? 在一个多步任务里,工具调用的时机至关重要。前置条件没满足就调用,后续全部跑偏。Agent对时序的判断,同样来自推理,不是写死的流程控制。

四步下来,每一步都是token预测的结果。整个工具调用链,本质上是一段概率推理,不是你代码里写的那种if A then do B


翻车的方式,跟人完全不同

人用工具出错,通常知道在哪里出的错。按错了按钮——知道;找不到文件——知道;权限不够——系统会报错。失败是可见的。

Agent工具调用的失败,往往是沉默的。

三种常见的沉默翻车:

工具选错了,但流程没停。 任务是"把这份合同存进档案系统",Agent判断之后调了"发送附件"工具——选错了,但没有报错,它继续往下跑,任务显示完成,合同发出去了,没存进去。

举个更直观的例子:你让Agent整理完会议记录后通知相关人,它搞错了工具优先级,先发了通知,再去整理记录——顺序反了,但两个动作都"成功执行"了。

参数填偏了,工具跑完,结果不是你要的。 你让Agent查"本季度销售额",它调了数据查询工具,参数里的时间范围填成了上季度——工具执行成功,数据回来了,但是错的那份数据。你不核查,就直接用了。

时序判断错了,前置条件没满足就触发。 你让Agent在客户确认后给对方发合同。Agent推进任务时,判断"确认"这个条件已经满足(可能是对话里有一句"好的"被它理解成了确认),直接触发了发送。合同发出去了,客户还没真的确认。

这三种失败有一个共同点:流程完整跑完,没有异常,以"完成"的面目出现。你不去核查,发现不了。


工具能不能被用对,很大程度是描述质量的问题

既然Agent靠工具描述来判断"该不该用、怎么用",那工具描述写得好不好,直接决定调用质量。

这是一个很多人低估的地方。

配工具的时候,大多数人写的description是功能定义:

“发送电子邮件。参数:收件人、标题、正文。”

这对Agent来说信息量不够。它知道这个工具能做什么,但不知道什么时候该用它、什么时候不该用

更有效的写法是使用场景说明:

“在任务完成、需要通知外部人员时使用。适合:发送结果通知、确认邮件。不适合:内部记录、草稿保存。收件人需已确认身份后再填写。”

前者告诉Agent工具的功能,后者告诉Agent工具的使用判断逻辑。对于靠推理决策的Agent来说,后者才是它真正需要的信息。


出错代价不一样,设计方式也不一样

工具调用是概率性的,就意味着出错是大概率会发生的事。

那要降低风险,不只是"让它少出错",更重要的是:让高代价的错误更难发生,让低代价的错误快速暴露。

按出错代价把工具分两类:

读取型、可重试的工具(查数据、读文件、检索信息):出错了可以重跑,代价低。这类工具调用出问题,通常能在结果里发现,没有大碍。

写入型、不可逆的工具(发邮件、提交表单、触发支付、修改数据库):调用错了,后果无法撤销。这类工具,在调用前加一个确认节点是最稳妥的设计——不是让Agent自己确认,是让人来确认一眼,再继续。

一个简单的区分标准:这个工具跑完之后,结果能被撤销吗?不能撤销的,就是高代价工具,流程里需要有人在旁边。

这个判断优先于"Agent能不能用好这个工具"——不管它用得多好,结构上没有设置验证节点,出错代价就是省不掉的。


写在最后

给Agent配工具不难,真正难的是带着正确的认知去配。

人用工具是确定性执行,Agent调用工具是概率性推理。这不是说Agent不可信、工具不能给它用,而是说你的设计逻辑要跟上这个现实

工具描述写成使用场景,而不只是功能定义;对不可逆的操作设置人工验证节点,而不是全程放手;核查结果,因为沉默失败不会自己报警。

带着这套认知去配工具,和随手往Agent身上堆工具,结果差的不只是几个报错,是整条任务链跑出来的东西,你到底信不信得过。


感谢你看到最后,如果你觉得有启发,随手点个赞、在看、转发吧,如果想第一时间收到推送,也可以给我加个星标⭐我们下期见。

我是「AioGeoLab」主理人塔迪Tardi,AioGeoLab是深度洞察AI第一性原理和应用实践的前瞻性研究实验室,目前有两个主要研究方向:
塔迪GEO判断工程」是基于GEO的价值SEO化,在AI从“说”到“做”的重要跃迁阶段,试图回答,如何让AI敢于行动、不因为责任问题而畏手畏脚,而做的一个前沿研究项目。
塔迪硅基禅心」是传统东方智慧、未来AI前沿、当下应用实践,深层共鸣的探索。不是用AI解读经典,也不是用经典指导AI。 这是一场跨越2500年的对话,在算法与古老智慧之间,照见意识、智能与存在的本质。
塔迪的微信 - tardyai2025