跳到主要内容

工具幻觉率:你的智能体团队尚未运行的探测工具集

· 阅读需 11 分钟
Tian Pan
Software Engineer

询问一个 Agent 团队他们的工具调用成功率是多少,你会得到一个答案。但如果你问他们的工具幻觉率(tool-hallucination rate)是多少,全场就会陷入沉默。大多数团队并不追踪这一指标,而那些追踪的团队通常也只计算最灾难性的版本——即目录中不存在的函数名——而那些更隐蔽、代价更高的变体则在生产环境中未受监控地运行。

幻觉化的工具调用不仅仅是指模型凭空捏造了 delete_orphaned_users(older_than="30d") 导致你的分发器(dispatcher)抛出 ToolNotFoundError。这是简单的情况。更复杂的情况是,虚假的调用通过模糊匹配隐匿地指向了一个相邻的真实工具,或者工具名称正确,但 Agent 捏造了一个参数,而你的 Schema 因为将其标记为可选而愉快地接受了它。这两种情况都能通过你的“工具调用是否成功”仪表盘,但都不是用户真正想要的。

本文的核心观点是将工具幻觉视为一个可衡量的量,而不是一种传说中的故障类别。这意味着三个指标、一个每个 Agent 团队都应该运行(但几乎没人运行)的探测套件,以及一套关于提示词(prompt)、工具目录(catalog)和分发器(dispatcher)各自对幻觉率贡献的准则。

三种率,而不仅仅是一种

“工具幻觉率”是一个笼统的概念(suitcase term)。如果你唯一的指标是每千次对话中 UnknownToolError 异常的数量,那么你测量的是分发器的严格程度,而不是模型的行为。请将其拆分为以下三个指标:

未知工具率 (Unknown-tool rate) —— 模型输出一个在当前对话注册的工具集中不存在的函数名的频率。这是经典的幻觉调用。它的下限由分发器的错误日志决定,上限则由模糊匹配层静默吸收的任何内容决定。

影子调用率 (Shadow-call rate) —— 模型输出的名称与真实工具足够接近,以至于分发器(或框架的模糊匹配器)将其路由到了模型并非本意的工具。例如,update_user_profile 因为匹配器过于“慷慨”而被路由到 update_user。这是最糟糕的情况:你产生了幻觉,它却“成功”了,结果你向真实记录写入了错误的字段。除非你专门进行埋点监控,否则这个指标是不可见的。

参数幻觉率 (Hallucinated-argument rate) —— 工具名称正确,但参数是捏造的。例如,在 search_documents(query=..., tenant_id="enterprise_tier") 中,tenant_id 应该是请求者的字面 UUID,而不是对他们的描述。调用在 Schema 层面是成功的,但在语义层面是失败的。在可靠性对齐(Reliability Alignment)文献中,这被称为“工具内容幻觉”,是最微妙的失败模式之一:JSON 解析成功,类型验证通过,但副作用却是错误的。

最近一份关于 Agent 幻觉调查文献的分类法将执行幻觉分解为工具类型(tool-type)、工具时机(tool-timing)、工具格式(tool-format)和工具内容(tool-content)类别。对于暴露大量目录的生产级 Agent,后两类(格式和内容)的比例占据主导地位。行业讨论往往偏向于未知工具率,因为它易于统计。你的指标卡应该将这三者全部分开。

为什么幻觉率比你想象的要高

目录大小会非线性地推高幻觉率。每轮对话暴露 5-10 个工具的团队,其工具幻觉率往往低到可以忽略不计。而每轮暴露 50 多个工具的团队会发现幻觉率激增,这种增长仅凭模式匹配是无法解释的——模型开始在工具族之间进行虚构,因为上下文本身暗示了一个比实际注册的更大的动作空间。目录中的工具越新,附近出现幻觉“近亲”的可能性就越大,因为训练分布中有熟悉的邻居,模型会进行插值。

命名是一种泄露。如果你的目录中有 create_invoicelist_invoicesget_invoice,那么当用户第一次要求取消发票时,模型会非常自信地调用 delete_invoice。目录的形态暗示了完整性。再配合一个过度承诺的系统提示词(system prompt)——“你可以访问全套计费工具”——你就等于告诉模型,缺失的工具一定存在,因为提示词是这么说的。

训练分布会从另一个方向泄露。模型在成千上万的代码库中见过 send_emailsend_messagesend_notification 的实现。如果你只注册其中一个,另外两个就会存在于先验知识中。ToolTweak 系列研究表明,表面层级的工具元数据极易受到对抗性操纵,正是因为工具名称在选择中具有极大的权重——在正常情况下,正是这种权重将幻觉引向了那些看似合理但实际上并不存在的“邻居”工具。

提示词也有所影响。那些被指令要求“机智灵活”或“当工具失败时尝试其他方法”的 Agent,在首轮调用失败后,幻觉调用的比例会有显著上升。这种指令赋予了模型即兴发挥的权限,而代价最低的即兴发挥就是捏造一个新的工具名称。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates