照片认得出,截图小字却读错:AI 到底怎么看图?
一张图片不是一个 token,也不是先变成一段完整文字才交给大模型。从图片切块、缩放和视觉编码说起,看看为什么能认出猫却可能读错小数点,以及什么时候该裁切、补全景、直接给原始文本。
把一张猫的照片交给 AI,它能描述毛色、姿势,甚至猜出拍摄环境。换成一张表格截图,问题简单多了:“第三行的数字是多少?”它却可能把 18.6 读成 186,还接着认真分析这个数字意味着什么。
我觉得这种反差很容易让人误判:既然复杂的照片都看懂了,几个字总不该出错。可“认出这是一只猫”和“保住一个小数点”,需要留下的视觉细节差得很远。
不妨先设一个假想场景。我们有一张很长的商品清单截图,上面有缩略图、名称、规格和价格。任务不是概括它卖什么,而是找出第三件商品的单价。这个例子会贯穿下面的讨论;数字和清单都是演示用的,不是某次产品测试结果。
上传的是原图,模型收到的未必是原图
图片进系统以后,通常还要经过尺寸调整和编码。聊天界面能让你打开原图,不代表后台以同样的像素尺寸处理它。不同模型、接口和客户端的规则也可能不同。
想象那张清单宽一千像素、高六千像素。为了让整张图进入某个处理预算,系统可能把它缩小。商品的整体轮廓还在,行列布局大致还在,但一个原本就很小的小数点,缩完只剩一点浅灰色,甚至与背景混在一起。
这时候问“请仔细看”,能够改变模型如何回答,却不能恢复已经没送进去的笔画。好比把一份报纸缩印在邮票上,再请人多集中一点注意力;问题有时出在材料的清晰度,而不在态度。
还要区分缩小和压缩。像素尺寸变小,是能留下的空间细节减少;同样尺寸的图片被反复有损压缩,也可能出现模糊边缘和杂点。一个文件只有几百 KB,并不能据此判断它适不适合读字;一个文件有几十 MB,也不保证重要区域足够清楚。
Anthropic 的图像质量指南明确提醒:过大的图片可能被缩小,小字会因此更难辨认;有损压缩也可能损伤文字。这个提醒能解释一类问题,但不能反过来说,所有识别错误都由缩放造成。原图清楚以后,模型仍可能读错。

图片怎样变成模型能处理的东西
文本模型接收文字时,会把文字转换成 token,再变成一串数字向量。看图也需要数字表示,只是不能照搬文字词表:图片里的一个方块,未必对应一个汉字,也未必对应一个物体。
一种经典办法是把图像切成规则的小块,也就是 patch。每块包含一片像素,经过学习得到的变换,成为一个向量。可以把它暂时理解为一份关于这片区域的数字描述,但它不是人能直接读懂的“左上角有一条黑线”这样的句子。
2020 年提出的 Vision Transformer 论文展示了这条路线:图像块变成序列,加上位置信息,再交给 Transformer 处理。论文标题里的“16×16”描述的是一种块尺寸,并不是所有视觉模型都遵守的固定规格。
块之间也不是互不相干的孤岛。后续计算会联系不同区域:猫耳朵和脸部的关系、一个单元格与表头的关系,都需要跨区域信息。把字切在两块之间,不意味着它必然读不出来;把整字放进一块,也不意味着一定读得对。
真正的视觉语言模型还要让视觉表示与语言模型协作。以 LLaVA 的公开架构为例,它连接视觉编码器与语言模型,让图像信息和提问一起参与回答。这里的连接需要训练,不是给一个纯文本模型接上文件上传按钮,就自然拥有了看图能力。

我喜欢用拼图解释这一步,但要给比喻加一道边界。拼图块是人能拿在手里的碎片,视觉向量是模型学出来的表示;一块里可能同时包含背景、边缘和半个字。它不附带“这一块准确无误”的保证,更不能把一个视觉 token 理解成一个已识别的文字。
所以,模型可以直接回答图片里的内容,并不代表它先做过一次完整、可靠、可逐字检查的文字转录。它有时能依靠场景和上下文补足意思,也可能因此把看不清的地方补成一个很顺口的答案。
一张图究竟值多少个 token
最容易记住的说法通常最容易误用:一张图片固定多少 token,或者宽乘高除以某个数。它们可能适用于某个模型的某套规则,却不是图像本身的自然属性。
先只看一个明确假设的数学例子。假设图像宽高都能被块宽整除,没有额外缩放,也没有后续合并,那么块数等于“宽除以块宽”乘“高除以块高”。把图像的宽和高都翻倍,块数就变为四倍。这里算的是初始图像块,不是在预测任何服务商的最终账单。
实际系统可以先缩放、做局部切片,也可以把相邻视觉表示合并。不同路径下,原始像素数、编码器看到的块数、语言模型收到的视觉序列长度,以及接口报告的计费 token,不一定是一回事。
Qwen2-VL 的官方架构介绍就说明,它根据图像分辨率产生不同数量的视觉 token,而不是让所有图像占用同样的固定数量。这是理解可变分辨率的一份公开例子,不代表所有模型都采取同样实现。
服务层的规则还会变化。当前 Claude 文档把不同模型的原生图像分辨率分档,并规定超过限制时如何缩小;因此不能把旧版教程里的经验公式永久贴在所有新模型上。需要估算时,我会先确认具体模型和输入方式,再看它当下的分辨率与计费说明,最后以接口实际报告为准。
这对普通使用者也有用。把一百页拼成一张超长图片,不会因为上传时只有一个文件,就自动变成便宜又完整的一次阅读。系统可能缩掉细节,也可能需要更多视觉计算。文件数少了,信息处理的工作并没有凭空消失。
反过来,裁成很多图也不是免费的优化。每个局部可能重新占用预算,而且失去全局关系。更合适的目标是:把任务需要的细节留清楚,把判断需要的上下文也留下,而不是机械追求最大分辨率或最多张数。
裁切能救小字,也能裁掉答案的含义
回到商品清单。我们只关心第三件商品,就可以从原始清晰截图里裁出对应区域。这样在同样的展示宽度里,字能够占更多空间。注意是从原始材料裁切;如果手里只剩已经模糊的缩略图,把它放大四倍并不会重新长出小数点。
但如果只裁下一个“18.6”,模型就不知道它是单价、总价还是折扣。再把表头“单位:元”裁掉,它连数字的单位都没了。局部清楚与语义完整,是两件需要同时做到的事。
我的做法是先给一张全景说明位置,再给一张关键局部保留细节。局部尽量带着列名、行名、单位和必要脚注,明确告诉模型“图二是图一第三行的放大裁切”。如果图一只用来定位,也直接说清楚,避免它从模糊全景重新猜数字。

还可以把任务拆成两次判断:先按原图抄录目标行,把不确定的位置标出来;核对无误之后,再算总额或作比较。否则第一步错了一个小数点,后面几十行推理也可能完全自洽。推理过程写得越长,并不等于起点越可靠。
这里不需要诱导模型报一个没有校准过的“置信度百分比”。更有用的是要求它保留原始字符,指出哪一格无法辨认,并给出可以回到原图检查的位置。若它把空白、横线和零都统一成零,我们就已经失去了重要差别。
还有一种容易忽略的失败:数字逐个都认对了,关系却接错了。第三行的名称配上第四行的价格,单看每一项都很像正确答案。清单越长、相邻行越相似,越不能只抽查几个字符就认为整表通过。对这个假想任务,我会要求输出商品名、规格、单价三个字段,并保留原来的行号,而不是只要一个脱离位置的数字。
如果答案与原图不一致,也别立刻把正确数字塞进提示词再重问,然后把第二次答对当成识别能力已经改善。那测到的可能只是模型顺着提示改口。更有区分力的比较是保持问题不变,只替换输入:原图一次、清晰局部一次、原始文本一次。局部改善说明分辨率或干扰值得排查;文本也出错,就要继续看任务理解和处理逻辑。这只是定位问题的方法,不是凭三次结果下性能结论。
另一个常见案例是图表。曲线往上走不难看出来,纵轴从零开始还是从九十开始,却会改变对变化幅度的理解。只裁出曲线、不带刻度和图例,图片可能更清晰,结论反而更容易失真。这与表格保留表头是同一个道理:细节需要落在关系里才有意义。
能直接给文字时,不必让模型再认一次字
商品清单如果本来就有电子表格,能导出结构化数据,通常没有必要先截图,再让模型恢复表格。截图把原来的字符、列和数值类型变成了像素,等于主动增加一道识别任务。
日志也是如此。假设有一段报错,本来可以复制文本,却拍了一张屏幕照片。模型现在既要识别字符,又要区分换行,还要猜被窗口边缘截掉的部分。直接提供相关原文,通常更容易检查它有没有漏掉一个冒号或把相似字符混淆。
这不意味着截图没有价值。问“按钮为什么被挡住了”,布局就是证据;问“这条错误是什么意思”,错误文本更直接;排查页面问题时,可能需要截图与文本一起给。选择输入形式,要跟着问题走。
如果只有扫描件,可以先做文字识别,也就是 OCR,再让语言模型整理。这个分工有一个实用好处:能把“认错字”和“理解错意思”分开检查。不过 OCR 同样会错,尤其是复杂表格、手写内容和跨栏排版。文字被提出来,不代表单元格之间的对应关系还完整。
因此保留原图与位置关系仍然有价值。让识别结果带上页码、区域或行列标记,遇到异常就能回看;对需要精确计算的数字,先核对关键字段,再交给计算工具。把识别、解释和计算混在一句“帮我看看”里,出错后反而不知道该修哪一步。
我会用几个有意不同的小样例检查这个流程:清晰大字、细小字号、缺失单位、相似字符,以及带空白单元格的表格。只用一张干净截图得到正确答案,证明不了长截图也可靠;只比较回答是否流畅,也看不出错列和漏行。
AI 看图的进步很快,但“看到了一个大概”和“准确保留了每一个细节”始终值得分开确认。下次它把截图读错时,我会先看一眼送进去的材料:关键像素还在不在,位置关系还全不全,能不能直接给它一份不需要猜字的原文。这几步往往比再补一句“请务必认真”更具体。
评论