你大概也撞见过。agent 信心十足地调了个 API,推理过程每一步都像模像样,选工具的理由写得漂漂亮亮:语义匹配度高、描述相关、评分第一。一执行就露馅——那个 API 早挂了。
再一件事。你挂了十几个 MCP server,心想这下它总该有得选。结果它偏选那个你半个月没碰、endpoint 已经 502 的插件。你去问它,它还振振有词:根据描述相关性,这个工具最符合当前意图。
单看都像运气不好。摆一起看就不是了。agent 挑工具,看的是工具“像不像那么回事”,不是“现在还能不能用”。这跟它生成内容时编一个看似合理但根本不存在的事实,同一种病根。
这块空地,得有个名字。我把它叫做:工具幻觉。
模型输出内容会幻觉——编一个合理但不存在的事实。agent 选工具也会幻觉——挑一个语义高度匹配但执行层已经失效的 API。工具没失联,是你对它的可用状态产生了幻觉。
这词零散有人提,但没人把它钉成一个独立病名。怪就怪在,语义幻觉已经一堆名字一堆基准在测,工具幻觉却连个固定叫法都没。大家只说“这 agent 又乱调工具”“检索不行”,比划半天,点不到同一件事上。
我起这个名字,不是要跟内容幻觉划清界限,正好相反——病名得把这事的病根搬对地方:问题不在模型脑子不清楚,在它输入的地图是错的。模型没疯,它只是信了检索器给的语义排名。检索器只看了描述,没看执行。你把一份只按描述匹配画出来的地图塞给模型,它照着走,当然走进死胡同。这不是推理缺陷,这是地图错了。
所以治这个病,不用换更聪明的模型。RATED 那篇论文干的就是这件事:不另起炉灶训练更强的推理,换的是检索器那层的逻辑。
这类现象在传统信息检索里早有原形。早期搜索排序只看文本相似度,退化成了关键词匹配;后来把点击、时效、权威度这些动态信号加进去,才活过来。工具检索现在就是那个还停在文本相似度的早期阶段——拿个双编码器对 query 和工具描述做对比学习,谁分高选谁。执行层发生了什么,排序系统一概不知。
这套检索教出来的东西,其实就是“哪个工具看起来最该被选”,不是“哪个工具现在真能干活”。这两者之间,隔着一整个运行时。
RATED 那个上下文赌博机模块,我最看重的不是算法本身,是它把可靠性做成了在线信号而不是训练时特征。工具挂没挂、返回格式对不对,只有执行时才知道。你训练集再完备,也预测不了某个 API 下周会不会改 schema 或者被限流。这种动态失效,只能在线感知。所以它不重训模型,用几毫秒的额外延迟换排序的动态调整。这个取舍我认。技术细节不展开,不是这篇要吹的号。
我要吹的是:工具幻觉这个病名,得被社区认领走。RATED 用它自己那套方法治,但病本身不是这篇论文的私产。你不需要复现 RATED 也能做一件事——下次你的 agent 调了个返回格式不对或者响应超时的工具,错误日志里那条 selected by semantic similarity 别删。截下来,发出来,配一句“工具幻觉”。这个动作本身,就是在给社区标注病例。
等“工具幻觉”这四个字开始被不同的人用在自己完全不同的栈上——MCP 客户端、自研 agent 框架、review 别人 prompt 的时候——它才算活了。我先说清楚,这号不是替哪个工具背书。病是跨工具的,谁的 agent 都可能犯。不是某个 MCP server 或某个框架的锅。
所以这周的号吹到这儿:把“agent 按描述选工具箱里一件已经坏了的家什”这件事,叫工具幻觉。叫出名字不是为了追责,是为了让你在日志、代码 review、团队讨论里能一句话点破——你不可能在一堆没名字的烟雾里排查出真正的问题。
这个词你认领走。下次撞见 agent 选了个描述漂亮但实际不可用的 API,在群里说一句“工具幻觉了”,看看有没有人立刻明白你指什么。附带作废条件:半年内我搜不到任何第二个人在公开场合用过它,或者有人指出它跟内容幻觉混淆了,我回炉,换一个。造词的特权,到认领率为止。