你以为 AI 在替你办事?其实它经常"假装在调工具"

前言

你可能见过这样的 AI——你让它"查一下订单",它答"已查,正在为你整理"。然后你打开日志,发现它调用的函数叫 get_user_preferences_v2

这个函数名,从来没在你代码里出现过。它不是用户拼错了、不是你忘了写——是模型自己编的。

听起来像是"AI 偶尔犯傻",但 2026 年的一项研究(Hou 等,arXiv 2601.05214)量化了这件事:研究团队分析了多个主流模型在工具调用里的"内部表示",发现有 20% 左右的工具调用 命中"幽灵调用"——模型编造工具、编造参数、或者干脆不调用工具,假装调了。

这不是 AI 故意骗你——但它确实是个问题,而且是个我们很少谈的问题

AI 假装在调工具:画面左侧是模型在'打字',右侧是空空的工具箱

一、它经常"假装在调工具"

如果 AI 是个助理,你让它"查一下订单",理想情况是它走到电脑前,真的打开订单系统,看到结果,告诉你。

但它经常走的是另一条路——走到电脑前,假装打开了,然后基于"我猜订单大概长这样"给你编一个结果。

这种"假装"在 2026 年的研究里被分成了 5 种模式。你不需要记名字,但要知道最常见的两种——

第一种:调用一个根本不存在的工具。你的代码里有 create_userdelete_user,模型理所当然地调用 update_user。语法正确,参数看起来合理,但这个函数你从来没写过。模型是基于它在训练时见过的"所有 CRUD 接口"推断出来的。

第二种:干脆不调用工具,直接给你编结果。模型在内部"模拟"了一下工具的行为,然后把模拟出来的输出当成"工具返回的结果"告诉你。它可能编出一段看起来挺像订单的 JSON——但这段 JSON 跟真实的订单系统一点关系都没有

第一种容易被抓到(你代码里没这个函数,404 一报错就知道),第二种更隐蔽——日志显示"工具调用成功",参数都对,输出也"看起来对",但其实是从模型脑子里编出来的。

这两种模式加起来,占了 2026 年企业 AI Agent 失败案例的相当大比例。Fiddler 2026 年 4 月的一份分析就指出,70%-95% 的 AI Agent 在生产环境里失败,而"幽灵工具调用"是其中最不容易被发现的一类失败——因为它看上去像"成功的工具调用"。

二、为什么会这样

模型是"下一个 token 预测器"——它根据训练时见过的所有 API 文档、代码示例、SDK 参考,合理地推断下一步该做什么。当它需要一个当前不存在的工具时,它不会说"我不知道"——它会根据见过的所有内容进行模式匹配,生成一个"看起来应该存在"的调用。

这背后有 3 个具体的结构性原因——

第一,工具越多,模型越乱。Berkeley 函数调用排行榜 2026 年的一项研究测了一个关键拐点:工具数量从 4 个扩展到 51 个时,调用的准确率从 43% 断崖式跌到 2%。这不是直线下降,是断崖——因为工具一多,模型开始在"听起来很像"的工具之间选错,或者干脆自己编一个。

第二,越聪明的模型反而越容易"幻觉"。这听起来反直觉,但 2026 年 OpenReview 上发表的一项研究证实:通过强化学习训练推理能力越强的模型,工具幻觉率反而越高。原因是更强的推理让模型"想得更深",能构造 5 步、10 步的工作流——而每一步都是"编造工具"的机会。o3 这类推理模型在某些基准上的"一般幻觉率"已经被推到了 33%-48%。

第三,对话一长,工具定义就"模糊"了。你的工具列表本来清清楚楚摆在系统提示里,但随着对话越来越长、上下文被压缩或截断,模型对"我有哪些工具可用"的感知会退化。20,000 个 token 之前定义的那个工具,到第 50 轮调用时,在模型的"记忆"里可能已经面目全非

这 3 个原因不是"AI 的错"——是当前 LLM 架构的本质问题。它是真的"在猜",只是猜得比大多数人有自信得多

三、那能怎么办

好消息是,2026 年已经有了几条经过实战检验的防御模式。AWS、Microsoft、Claude Code 这些团队各自给出了自己的方案——核心思路是同一句话:把模型当成一个聪明但会撒谎的助理,每一次它说"我做了"都得验一下

第一层:工具注册表校验。在模型生成工具调用之后、执行之前,检查函数名是否在你注册的列表里。这个听起来明显,但很多框架不检查——直接把模型输出传给动态分发器。严格的注册表检查能在"幽灵调用"产生令人困惑的下游错误之前就拦下来。

第二层:参数 Schema 校验。函数名对了,但参数可能是假的——比如模型给一个不允许传 metadata 的函数加了 include_metadata 参数。根据 Pydantic 模型或 JSON Schema 做严格校验,采用这层的团队生产数据显示,参数相关错误从 40% 降到 2%

第三层:把错误反馈给模型。当检测到"幽灵调用"时,不要只是日志记录一下就继续。把错误信息包装成"工具结果"丢回给模型:"函数 get_user_preferences_v2 不存在。可用函数为:[清单]。请选择合适的工具或解释为什么这些都不满足。"——这个反馈循环让模型自我纠正,而不是在错误的轨道上继续跑。

第四层:让模型自己检查。Claude Code 2026 年初开源的方案里有一招:让模型在执行每个工具调用前,先把它"将要做什么"用自然语言描述一遍。研究显示这种方法把选择准确率从约 60% 提高到 85%——因为模型在"描述"的时候会被迫重新审视自己的选择,而不是被推理惯性推着走。

这 4 层不是孤立的——叠起来才是真的稳。任何一层单独都不够,但 4 层叠加之后,"幽灵调用"在生产环境里基本能被控制到可接受范围(不同团队报告从 18% 到 5% 不等)。

写在最后

AI 没骗你。它是真的在替你办事——只是它办事的方式是基于"我猜应该是这样",不是"我查了是这样"。

这是一个设计问题,不是道德问题。模型会这样,是因为它"必须"在每一步都给出一个答案,而不是"承认我不知道"。而我们——作为用它的人——需要记住:它说"完成了"不等于"完成了"

2026 年了,AI Agent 越来越常见。但每一次你让它"替你办事",回头看一眼它实际做了什么——这件事,只能你自己做

---

参考资料:Hou et al. 2026 / Tian Pan 2026 / Berkeley Function Calling Leaderboard / Fiddler.ai 2026 报告 / Claude Code 2026 开源方案。