之前在做多模态 Agent 项目时,我遇到一个很典型的现象:模型明明在测试集上能把“看图 + 调用工具”的任务跑通,一旦换到线上真实场景,准确率就断崖式下跌。更让人困惑的是,你很难说清楚模型到底是真正理解了图像内容,还是仅仅根据上下文中的工具名称、参数格式、甚至一些和图像无关的统计规律“猜”对了答案。这种“会但没完全会”的状态,在相关研究里被称为Visual Tool-Use 的幻觉问题。
这篇文章我想围绕“视觉工具使用中的幻觉现象”展开,重点介绍一种更严谨的评估思路——因果审计(Causal Audit),并拆解“Thinking with Images”这类多模态推理场景下,模型能力为什么容易被高估。无论你是做算法评估、模型选型,还是正在开发基于视觉大模型的 Agent 应用,这篇文章都能帮你建立起一套更可靠的判断框架:到底怎么评估模型是真会,还是假会。
文章包含核心概念讲解、因果审计的流程设计、实验思路、代码示例和工程建议,内容偏方法论,但又不止于理论。
1. 背景:Visual Tool-Use 是什么,为什么值得关注
先看一个最简单的场景。
假设你做了一个 AI 助手,它可以根据用户上传的户型图,调用一个工具函数calculate_area(diagram_id),返回房间面积。这个过程中,模型要完成两件事:
- 看图片,理解户型图的房间布局。
- 根据理解结果,选择合适的工具并填入正确的参数。
这就叫视觉工具使用(Visual Tool-Use)。它和普通的“看图说话”不同,核心差异在于:模型不只是输出文字描述,而是要通过工具调用来完成一个实际动作。工具调用的参数、名称、格式是否准确,直接决定任务成败。
在传统视觉问答(VQA)任务里,模型回答“沙发在茶几左边”,答错了也就错了,影响相对有限。但在工具使用场景里,一个错误的参数可能引发后续一连串错误操作,比如计算错误、下单错误、重复提交等。所以,视觉工具使用能力,直接决定了一个多模态 Agent 能否在真实业务中落地。
1.1 视觉工具使用的典型链路
为了便于理解,我们可以把一次完整的视觉工具使用流程拆成几个阶段:
| 阶段 | 说明 | 常见模型/技术 |
|---|---|---|
| 视觉感知 | 输入图片,提取视觉特征 | Vision Encoder(如 ViT、CLIP 的视觉分支) |
| 跨模态推理 | 将图像信息与文本指令融合,推理出需要执行的动作 | 多模态大模型(如 GPT-4V、Gemini、Qwen-VL 等) |
| 工具选择 | 从候选工具列表里选出最合适的一个 | 模型自身的指令遵循能力 |
| 参数生成 | 根据图像内容生成工具调用参数 | 模型的生成能力 + 结构化输出约束 |
| 工具执行与反馈 | 执行工具并返回结果,模型根据结果进一步决策 | Agent 框架、Tool 执行引擎 |
其中最容易出问题的,就是“跨模态推理”和“参数生成”这两步。模型可能看懂了图,但不知道选哪个工具;也可能选对了工具,但参数是从错误信息里推断出来的。
1.2 所谓“幻觉能力”是什么
“幻觉能力”是我自己归纳的一种说法,指代以下现象:
模型在评估集上表现出很强的工具使用能力,但这种能力并非来自对图像内容的真实理解,而是来自数据集中的虚假关联、上下文捷径、或者模型内部先验知识的“巧合输出”。
换句话说,模型看起来会用视觉工具,但实际上它的决策过程并不依赖图像本身。一旦把图像换成无关图片,或者稍微改变图像中的关键信息,模型的工具调用结果可能完全不变——因为它根本没有“看图”。
这就是“The Illusion of Visual Tool-Use”的核心含义:视觉工具使用的表象之下,隐藏着对图像理解的缺失。
2. 因果审计:如何识别“真实能力”与“虚假能力”
既然“看结果”不可靠,那该怎么办?我们需要一种更严格的评估方法。这就是因果审计(Causal Audit)的用武之地。
2.1 因果审计的定义
因果审计,简单说就是:通过人为干预模型输入中的关键变量,观察输出是否发生“应有的”变化,从而判断模型是否真正建立了输入与输出之间的因果联系。
它的核心逻辑是:
- 如果模型真的理解图像内容,那么改变图像中的关键信息,模型的输出就应该跟着改变。
- 如果模型输出对图像内容的变化“无动于衷”,那就说明:图像内容并不是模型决策的原因,模型存在虚假能力。
这就像审计一个员工的业绩——只看他签了多少单不够,还要看他是不是真的有能力签单,还是仅靠运气、关系、或者数据失真。
2.2 因果审计与相关性评估的区别
传统的模型评估,本质上是在评估“相关性”:
输入图片 + 文本指令 → 模型输出工具调用 → 和标准答案比对 → 算准确率。
这种评估方式只能说明:在这些样本上,模型的输出和期望输出是匹配的。至于这种匹配是“因果性”的还是“偶然性”的,传统指标无法区分。
因果审计则更进一步。它通过“对照实验”的方式,去验证“图像输入”是否为“工具输出”的原因。
用一张图来理解两者区别:
传统评估: 图片A + 指令 → 工具X(正确) → 得出结论:模型会看图 因果审计: 图片A + 指令 → 工具X(正确) 图片B(篡改关键信息)+ 指令 → 工具X(依然正确) → 得出结论:模型根本没看图,输出和图像无关因果审计的价值就在于:它能识别出传统评估里的“幸存者偏差”和“数据泄漏”。这在多模态模型评测中越来越重要。
2.3 因果审计的三个核心步骤
结合相关研究思路,一个完整的因果审计通常包含三步:
- 构建干预:选择图像中的关键视觉属性(如物体颜色、位置、数量、空间关系等),对这些属性进行系统性修改,生成干预样本。目标是想清楚:哪些视觉属性是工具调用应依赖的“因”。
- 对比输出:用原始图片和干预图片分别运行模型,记录工具调用结果是否发生变化。
- 因果判定:如果干预后的输出与干预前一致,说明模型没有建立“该视觉属性 → 工具调用”的因果链路,存在幻觉能力的风险。
这个流程和因果推断中的“干预(Intervention)”思想一致,但在大模型时代,它的实施重点变成了:如何设计有效的干预策略,以及如何解读模型输出的变化。
3. Thinking with Images:图像推理的复杂性
在视觉工具使用场景中,一个常见的误区是:把“图像输入”当成“图像理解”。模型接入了图片,并不等于模型依赖图片。这背后涉及多模态模型“Thinking with Images”(用图像思考)的复杂性。
3.1 图像在推理链路中的角色
当我们说“模型用图像思考”时,至少包含以下三种可能:
| 角色 | 含义 | 举例 |
|---|---|---|
| 图像作为信息源 | 模型从图像中提取事实信息,用于回答问题 | 看图识别水果种类,然后调用“下单”工具 |
| 图像作为推理锚点 | 图像触发模型调用已有先验知识 | 看到一张机场照片,模型调用“查询航班”工具 |
| 图像作为无关干扰 | 模型输出并不依赖图像内容 | 无论图片是什么,模型都调用同一个工具 |
前两种是“合理使用图像”,第三种则是幻觉能力的高发区。问题是:我们很难从一次成功的输出中判断模型到底属于哪一种。同一个结果,背后可能完全不同的推理路径。
这就像两个人同时答对一道题,一个人真正会做,另一个蒙对了。如果只看分数,无法区分。
3.2 多模态推理中的“捷径学习”
为什么模型会发展出这种“不依赖图像的捷径”?原因通常有三个:
- 训练数据偏差:训练数据中,特定图像类型与特定工具调用之间存在高频共现。模型学到的是“这张图大致长这样 → 调用该工具”,而不是“这类图像的某个具体特征 → 需要调用该工具”。
- 文本先验主导:多模态大模型本质上还是语言模型主导的架构。文本指令本身可能已经包含了足够多的线索,让模型在不看图的情况下也能猜出答案。图像只是“装点门面”。
- 评估集标注不严谨:人工标注的评估集往往存在“可猜测性”——标注者本身就倾向于根据常见情况打分,导致答案有规律可循,模型可以利用规律。
这些因素叠加,就会导致一种结果:模型在评估集上表现优秀,但在真实世界的开放场景中,一旦遇到“看图才能决定参数”的新情况,能力迅速坍塌。
3.3 为什么“开放场景”更脆弱
在开放场景中,图像与工具调用之间的关联是多样且可变的。比如:
- 用户上传的图片可能模糊、倾斜、光照异常。
- 图片中的关键物体可能被遮挡或变形。
- 图片内容与工具参数的关联可能依赖复杂的背景知识。
如果模型只是学到了“训练集内图像 → 工具”的表层映射,面对这些分布外的图像,它就很容易失效。因果审计的价值,正是要在模型上线前,提前暴露这种脆弱性。
4. 实战:设计一个视觉工具使用的因果审计方案
下面我们用一个简化示例,展示如何实际落地一套因果审计实验。假设我们有一个多模态模型,它需要根据用户上传的“商品图片 + 用户指令”调用一个get_price(product_info)工具,返回商品价格。
第一版评估结果:准确率 85%,看似不错。
接下来我们用因果审计的方式,重新评估模型的真实能力。
4.1 定义审计目标和关键变量
首先要明确:工具调用的“因”应该是什么。
在这个场景里,模型要生成正确的工具参数(商品名称、规格、数量等),它必须从图片中识别出商品名称。所以关键视觉属性是:
- 商品名称(比如:红色保温杯、黑色无线鼠标)
- 商品外观特征(比如:带不带提手、是否是机械键盘)
审计问题:修改图片中的商品对象,模型是否相应改变“商品名称”参数?
4.2 构建干预样本
我们准备两组图片:
- 对照组(原始图片):一张黑色无线鼠标的图片。
- 干预组(篡改图片):将图片中的鼠标替换为键盘,或者用文本提示词更明确地标注为“键盘”。
这里的干预要遵循一个原则:只改变要审计的视觉属性,尽量保持图片其他属性不变。在实际操作中,可以使用图像编辑工具、合成图片,或者构造一个简单的图像插值实验。
示例干预逻辑可以用伪代码表示:
def build_intervention_samples(original_image, visual_attribute, new_value): """ 根据原始图片生成干预样本。 这里只是示例思路,实际需要接入图像编辑工具或调用图像生成模型。 """ intervened_image = edit_image( image=original_image, attribute=visual_attribute, # 例如 "object_category" new_value=new_value # 例如 "keyboard" ) return intervened_image4.3 运行相同指令,记录输出
对原始图片和干预图片,分别输入完全相同的用户指令:
用户指令:请根据商品图片,调用 get_price 工具查询该商品的价格,参数为商品名称。记录模型两次输出的工具调用参数。
预期行为:
- 如果模型真的会看图,干预后的商品名称应从“鼠标”变为“键盘”。
- 如果模型存在幻觉能力,两次输出可能完全相同,仍然调用“鼠标”。
4.4 对比结果并判定
下面是两种可能的结果对比:
| 样本 | 输入图片 | 模型输出(商品名称) | 判定 |
|---|---|---|---|
| 原始图片 | 黑色鼠标 | 鼠标 | 正确 |
| 干预图片(替换为键盘) | 黑色键盘 | 鼠标 | 异常 |
| 干预图片(替换为键盘) | 黑色键盘 | 键盘 | 正常 |
如果干预组输出仍是“鼠标”,则说明模型输出并未真正依赖图像内容,存在幻觉能力。
4.5 扩展审计维度
除了“替换物体”,我们还可以从多个维度审计模型的视觉工具使用能力:
| 审计维度 | 干预方式 | 工具使用中应变化的参数 |
|---|---|---|
| 物体类别 | 鼠标 → 键盘 | 商品名称 |
| 物体数量 | 一个苹果 → 三个苹果 | 商品数量 |
| 物体颜色 | 红色杯子 → 蓝色杯子 | 商品规格/款式 |
| 空间位置 | 左图与右图互换 | 布局描述相关参数 |
| 背景干扰 | 干净背景 → 杂乱背景 | 是否仍能识别主体 |
每个维度都代表一种“视觉因果链”。模型只有能在多个维度上都“随图而变”,才说明它建立了稳健的图像理解能力。
5. 常见误区与排查思路
在实施因果审计时,我自己踩过几个坑,也看到不少团队会犯类似错误。下面集中总结。
5.1 干预样本构造不干净
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 干预后模型输出变化,但原因不明 | 干预操作不仅改变了目标属性,还改变了图片整体风格、亮度、对比度 | 尽量使用可控的图像编辑工具,或在干预前后做对比可视化,确认只改了目标属性 |
| 干预样本和真实场景差异过大 | 用过于极端的图像拼接,导致模型识别失败 | 干预样本要贴近真实使用场景,不要为“制造差异”而脱离实际 |
| 图像中的文字信息泄漏 | 图片中本身带有商品标签文字,模型直接读文字 | 审计时先检查图片中是否存在与答案直接相关的文本 |
5.2 指令设计引入偏差
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 模型输出正确,但和图像无关 | 指令中包含了答案线索 | 审计时指令应只包含“任务说明”,不包含“答案提示” |
| 指令过于复杂,模型不理解 | 把审计任务和推理过程混在一起 | 审计时用最简单的指令,聚焦单一工具调用 |
| 提示词中注入工具名 | 某些提示词模板会固定工具名 | 审计工具选择时,应让模型从多个候选中自由选择,而不是直接给答案 |
5.3 结果解读过度激进
因果审计的结论不能只看一两次实验。模型输出具有随机性,而且不同数据分布下的表现可能不同。建议:
- 每个干预维度至少测试 50 条以上样本。
- 重复运行 2 到 3 次,记录输出稳定性。
- 对审计结果使用统计检验,观察干预前后输出分布的差异是否显著。
如果只是做了 5 张图,就断言“模型没有视觉能力”,结论可能不够稳。
5.4 审计维度覆盖不全
很多团队只审计“物体类别”一个维度,其他维度完全不管。但真实业务里,模型可能物体识别没问题,但对“数量”和“空间关系”非常迟钝。审计之前,先梳理一遍:在这个工具使用任务中,最终要生成的每个参数,分别依赖图像中的哪些视觉信息?
建议做一个审计维度清单,逐项排查,不要只盯一个维度。
6. 最佳实践:构建可信的视觉工具评估方案
经过因果审计的实践,我觉得有几条经验特别值得分享。
6.1 评估指标要分层
不要只用“工具调用准确率”一个指标评估模型。建议至少分成三层:
| 评估层面 | 指标 | 含义 |
|---|---|---|
| 工具选择 | 工具命中率 | 模型是否选对了工具 |
| 参数生成 | 参数准确率(EM/F1) | 模型生成的参数是否准确 |
| 因果一致性 | 视觉干预敏感度 | 模型输出是否随关键视觉属性变化 |
只有当“工具命中率”“参数准确率”和“因果敏感度”同时达标时,才能谨慎地认为模型具备视觉工具使用能力。
6.2 将因果审计纳入上线流程
在模型上线前,推荐按下面的流程做评估:
- 用常规评测集跑通基线指标。
- 基于任务定义,梳理工具参数与视觉属性的对应关系。
- 构造干预样本,做因果审计。
- 审计不通过的维度,针对性补充训练数据或进行提示词优化。
- 审计通过后再进入灰度测试。
这样可以避免一个很尴尬的局面:模型在测试集上分数很高,上线后被用户连续反馈“根本不会看图片”。
6.3 利用审计结果指导数据标注
因果审计不仅能用来评估模型,还能反哺数据标注:
- 如果审计发现模型在“物体数量”维度上不敏感,说明训练数据中“同图不同数量”的样本过少。
- 如果审计发现模型在“空间关系”维度上不敏感,说明训练数据的指令描述可能忽略了空间信息。
标注新数据时,可以有意识地增加“同场景、不同属性”的对比样本,让模型更难走捷径。
6.4 警惕“多模态能力”的虚假安全感
作为工程开发者,我们很容易被“多模态大模型”这个名词迷惑,默认它具备很强的图像理解能力。但实际效果高度依赖具体任务、提示词和评测方式。任何结论都要用数据说话,盲目的信任和盲目的否定都不可取。
另外要提醒一点:在涉及真实业务的视觉工具使用场景中,模型的输出要经过严格的上下文校验。尤其是当工具调用涉及支付、订单、库存等关键操作时,一定不能让模型“猜”参数。
6.5 设计安全的工具调用兜底策略
即使审计做完,也不代表模型永远不会出错。建议在工程侧增加兜底机制:
- 参数校验:工具调用前检查参数是否符合预期格式、取值范围、业务规则。
- 二次确认:对于关键操作,返回结果前让用户确认信息。
- 降级策略:当模型对图片内容的置信度较低时,主动请求用户补充文字描述,而不是硬调用工具。
这些工程手段,可以在模型能力不足时保护业务不受影响,也是负责任的 AI 应用应该具备的基本素养。
7. 总结
“模型会看图”这件事,远比想象中复杂。通过因果审计的视角可以看到,视觉工具使用能力中存在着不少“虚假的因果”——模型能够输出正确结果,但并不依赖图像内容。这种能力一旦被高估,轻则测评失真,重则造成线上事故。
本文围绕 Visual Tool-Use、Causal Audit、Thinking with Images 三个关键词,梳理了视觉工具使用的背景、因果审计的原理、以及落地实施的方法与常见坑点。核心思想可以浓缩为一句话:
不要问“模型答得对不对”,而要问“模型是不是因为正确的视觉原因才答对”。
如果你正准备做多模态 Agent 的评测,或者正在为模型“看似会看图但实际不会看图”而困惑,建议从因果审计开始,挑一个关键任务维度,构造少量干预样本跑一遍,你很可能会有新的发现。尤其是对于上线前的能力验收,这套方法值得加入你的评估清单。
如果这篇文章对你有帮助,欢迎收藏备用。也欢迎在评论区聊聊你在多模态工具调用场景中遇到的“幻觉能力”案例,一起交流排查经验。