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。
