主题模式
VLM 多模态大模型深度解析:大模型如何看懂图像,从 ViT 到原生多模态的完整演进
你给 GPT-4o 发一张截图,它秒懂界面布局;发一张发票,它抽出全部字段。这背后的机制是什么?图像如何变成 LLM 能消化的 token?这篇文章讲透 VLM 的三代架构演进、图像 token 的经济学、视觉提示工程技巧,以及"截图转代码 / 发票抽取 / UI 自动化"的完整实战。
发布日期:2026-10-07
为什么 VLM 是当前的主战场
2026 年的旗舰模型清一色是多模态的:GPT-4o(原生全模态)、Gemini(文本/图像/音频/视频)、Claude(视觉)、Qwen-VL、GLM-4V。原因很实际:
| 文本能做的 | 图像能解锁的 |
|---|---|
| 读你粘贴的文字 | 看懂你没能力描述的东西——报错截图、UI 界面、手绘草图、CT 片、表格图片 |
| 基于你的转述推理 | 零转述损耗——"这张表哪行有异常"不需要你人肉抄表 |
| 写代码 | 截图转代码、UI 还原、自动化测试的视觉断言 |
关键是那句话:多模态消灭了"人肉模态转换"。以前你要把截图的内容用文字描述给模型(有损、费时、还描述不准),现在直接把图扔给它。
第一性问题:图像怎么变成 token
LLM 的输入是 token 序列(见 Tokenizer 篇)。VLM 的核心魔法就一句话:
把图像切分成小块(patch),每块编码成一个向量,这些向量作为"图像 token"与文本 token 拼在一起,喂给同一个 Transformer。
对模型来说,一张图和一段文字没有本质区别——都是序列里的元素,都通过注意力机制与彼此交互。理解了这个统一视角,后面所有架构都是"怎么把图像块变成高质量 token"的不同答案。
ViT:一切的开端
Vision Transformer(ViT, 2020)把 NLP 的成功搬运到视觉:
一张 224×224 的图
↓ 切成 16×16 的 patch(196 个)
↓ 每个 patch 展平成向量(16×16×3 = 768 维)
↓ 线性投影 + 加位置编码(告诉模型 patch 在图中的位置)
↓ 标准 Transformer 编码器
→ 输出 196 个视觉向量两个关键认知:
- patch 就是图像的"词"。Tokenizer 把文字切成子词,ViT 把图像切成方块。区别在于子词有语义、patch 最初只是像素块——语义要靠模型在训练中自己学出来
- 位置编码必不可少。打乱 patch 顺序,图就完全变了;文本里词序重要,图像里"空间位置"更重要
三代架构演进
第一代:双塔对比学习(CLIP)——理解世界但不解码
CLIP(2021)训练了两个编码器:图像编码器 + 文本编码器,用对比学习把"一张图"和"它的描述"拉到同一向量空间。
图像 "一张猫在键盘上" ──→ [0.2, -0.5, ...] ↘
夹角小(相似)
文本 "a cat on a keyboard" ──→ [0.3, -0.4, ...] ↗CLIP 的能力是匹配而非生成:它知道这张图和这句话配对,但不能回答"猫在键盘上干什么"。它的历史贡献:
- 零样本图像分类(不需要训练就能分 400 类)
- 它就是多模态 Embedding 的鼻祖——向量检索图片、以文搜图(呼应 Embeddings 篇),底层全是 CLIP
- 它的图像编码器成为后来几乎所有 VLM 的视觉骨干
第二代:投影层桥接(LLaVA 范式)——当前开源主流
LLaVA(2023)证明了最简架构的有效性:
┌────────────┐ ┌──────────────┐ ┌─────────────┐
│ CLIP ViT │ ──→ │ 投影层 MLP │ ──→ │ LLM │
│ (冻结/微调) │ │ (视觉→语言空间)│ │ (Vicuna等) │
└────────────┘ └──────────────┘ └─────────────┘
图 → 576 个视觉向量 对齐维度 与文本 token 拼接图像经 CLIP 编码后,一个可训练的 MLP 把视觉向量投影到 LLM 的输入空间,与文本 token 拼成一条序列。LLM 在预训练中已经具备的语言世界知识,直接被用来"解读"视觉信号。
为什么这个"胶水架构"能成功?因为语义理解的重活全在 LLM 侧——视觉侧只需要提供足够好的"视觉词汇表"。这类似于给一个博学的人配一副眼镜。
Qwen-VL、MiniCPM-V、Llama 3.2 Vision 都是这个范式的变体,主要改进在:
- 动态分辨率:不再强制 resize 到 224×224,而是按原图比例切块,高分辨率图给更多 token(Qwen-VL 的 AnyRes 策略,发票小字识别的关键)
- 更细的 patch:14×14 甚至 8×8,小目标看得更清
第三代:原生多模态(早期融合)——旗舰的答案
GPT-4o 和 Gemini 代表的方向:不是"给 LLM 接眼睛",而是从头就用多模态数据统一训练。
传统级联: 音频 → ASR → 文本 → LLM → TTS → 音频 (三级延迟, 信息逐级丢失)
原生多模态: 音频 ⇄ 统一 Transformer ⇄ 文本/图像 (端到端, 延迟 <300ms)级联架构里,语气、停顿、情绪在 ASR 转文本时就丢了;原生架构让"听到笑声"和"理解笑点"发生在同一个模型里。代价是训练成本——需要海量 interleaved(图文交错)数据,只有顶级玩家烧得起。
三代对比速查
| 架构 | 代表 | 能力 | 成本 |
|---|---|---|---|
| 双塔对比 | CLIP | 匹配/检索,不能生成 | 低 |
| 投影桥接 | LLaVA, Qwen-VL | 图文对话 | 中,开源主流 |
| 原生融合 | GPT-4o, Gemini | 全模态,低延迟,音视频原生 | 天价 |
图像 Token 的经济学
一张图消耗多少 token?这是 VLM 应用的成本核心。
计算逻辑
token 数 ≈ (图宽 × 图高) / (patch大小²) × 每patch输出token数典型数字(以 OpenAI 为例):
| 分辨率 | 消耗 token |
|---|---|
| 512×512 | ~300+ |
| 1024×1024(detail: high) | ~1100+ |
| 一页高清发票 | 1500~2000 |
三个工程推论:
- 批量图片处理比文本贵一个数量级——1000 张图的批量抽取,光输入就是百万 token 级,该用便宜模型(Qwen-VL 系 API 价格是 GPT-4o 的 1/10)就别用旗舰
- 分辨率档位是成本旋钮——
detail: "low"只用 85 token,判断"这张图里有没有人"用 low 档就够,读小字发票才需要 high - prompt caching 对 VLM 同样生效——系统提示 + 示例图片放前缀,批量处理同构图片能省大钱(呼应 Prompt Caching 篇)
视觉 token 的注意力税
视觉 token 还有一个隐性成本:它们会稀释文本注意力。一张 1000 token 的图插在长文档里,模型对文字的"专注度"被摊薄(lost in the middle 在多模态里更严重)。实践建议:图片放靠近提问的位置,长文档用文字而不是截图。
实战一:结构化抽取——发票/表单/证件
VLM 杀手级应用。以发票字段抽取为例:
typescript
const response = await client.chat.completions.create({
model: "gpt-4o",
messages: [
{
role: "user",
content: [
{
type: "text",
text: `从发票图片中抽取字段,严格输出 JSON:
{"invoice_number": string, "date": "YYYY-MM-DD",
"seller": string, "items": [{"name": string, "qty": number, "price": number}],
"total": number}
无法识别的字段填 null,不要编造。`,
},
{
type: "image_url",
image_url: { url: `data:image/png;base64,${base64}`, detail: "high" },
},
],
},
],
response_format: { type: "json_object" }, // 结构化输出配合
});五个实战要点:
detail: "high"是小字识别的开关——低档模式下发票明细行必挂- 结构化输出模式 + VLM 是黄金组合(呼应结构化输出篇),字段抽取永远别用自由文本
- "无法识别填 null,不要编造"——没有这句话,模型会对模糊字段自信地幻觉
- 旋转/倾斜先矫正——预处理用 OpenCV 或
sharp做透视矫正,比指望模型"歪着看"可靠 - 批量降本路径:先便宜模型跑,置信度低的(字段 null 多)再升级到旗舰模型复审——级联思路(呼应 Model Routing 篇)
实战二:截图转代码——前端的新工作流
设计稿截图 → VLM → HTML/CSS/React 代码提示词模板(实测效果差异巨大):
将这张设计稿转换为 React + Tailwind 组件。要求:
1. 布局用 flex/grid 还原,不要绝对定位堆砌
2. 颜色尽量取图中近似值,标注为 TODO 确认
3. 图标用 lucide-react 替代
4. 组件 props 化: 文案与数据不要硬编码
5. 输出单个文件,从 <components开始关键技巧:让模型先"读图描述"再生成(视觉 CoT):
第一步提示: 先详细描述这张 UI 截图的布局结构、层级、组件清单,不要写代码
第二步提示: 根据你的描述生成代码两步走比一步到位的还原度显著更高——第一步强迫模型把视觉信息"翻译"成语言侧的世界知识,再发挥代码生成能力。
实战三:视觉定位——bounding box 输出
"图里第三个人的表情"这种问题,定位是基础。当前主流模型支持坐标输出:
提示: 检测图中所有的按钮,输出 JSON 数组,每个元素:
{"label": "按钮文字", "bbox": [x1, y1, x2, y2]}
坐标系: 左上角为原点,归一化到 0-1000。
技巧: Qwen-VL 系模型用 <box>(x1,y1),(x2,y2)</box> 语法,
归一化到 0-1000 比 0-1 的浮点数更稳(整数 token 好预测)这是 UI 自动化测试("断言这个按钮存在且可点击")、RPA、Agent 操控浏览器(视觉 Agent)的地基。
Set-of-Mark:给图打标签再提问
增强空间推理的黑科技:先用程序在图上叠加编号标签,再让模型引用编号:
[用 Canvas 在每个可交互元素上叠加红框 + 数字编号]
提示: 图中编号 7 的元素是什么? 它和编号 12 的位置关系是?
→ 模型对"编号化对象"的推理准确率远高于裸图OpenAI 的官方 agent 方案(CotA)和多个视觉 Agent 框架都用这招。
多模态 RAG:检索系统的降维打击
已有 RAG 系列(Embeddings → Reranker → GraphRAG)都是纯文本的。多模态带来两个升级:
1. 图文混合语料
入库: 文档 PDF 的图表区域截图 + 周围文字 → 多模态 embedding(CLIP 类)→ 同一向量库
检索: "Q3 增长趋势是什么" → 命中的是折线图图片本身,不是它的 alt 文本纯文本 RAG 处理图表时只能靠 OCR/图片描述(有损),多模态 RAG 直接把图当一等公民检索。
2. 视觉文档解析
传统 PDF 解析(PyMuPDF)会把双栏论文读成串行灾难。多模态解析器(Qwen-VL 系、GPT-4o)直接"看"版面:标题层级、表格结构、图文关系全部保留——RAG 的分块质量上限,正在从文本解析器切换为 VLM 解析器。2026 年新项目选型时,"PDF→markdown 用 VLM"应该作为默认选项评估。
评估:VLM 的能力怎么衡量
| 基准 | 测什么 |
|---|---|
| MMMU | 大学级多学科推理(图+题),皇冠基准 |
| DocVQA / OCRBench | 文档理解 / OCR 精度,企业场景最相关 |
| MathVista | 图表数学推理 |
| ChartQA | 图表问答 |
| RealWorldQA | 真实世界照片的空间/常识推理 |
选型经验:企业抽取类任务看 DocVQA/OCRBench,别被 MMMU 榜单带偏——推理满分但 OCR 翻车的模型,在发票场景一文不值。永远用自己业务的 50 张样本做盲测,公开基准只做初筛。
十大坑
- detail 档位用错——low 档读小字必失败,high 档做粗分类纯烧钱
- 图片 base64 全量塞 prompt——不做压缩直接 4MB 一张,token 账单爆炸;先 resize 到模型最优分辨率
- 不给"不要编造"约束——模糊字段必幻觉,VLM 的幻觉比文本 LLM 更"理直气壮"(图里确实有点像 5 位数)
- 多图混排乱序——多图对话中不明确指代("第一张图" "左图"),模型张冠李戴
- 旋转的手写字直接上——90° 侧拍、透视畸变不预处理,识别率腰斩
- 图表截图走纯文本 RAG——图表 OCR 后丢坐标轴/图例,数字对了语义全错
- 坐标归一化坐标系不确认——各家 API 原点/范围(0-1 vs 0-1000 vs 像素)不统一,直接套用必错位
- 长文档用截图而非文本——1000 视觉 token 传递的信息不如 500 文本 token,还稀释注意力
- 把 VLM 当 OCR 用旗舰模型——简单文字识别用 PaddleOCR(免费)预处理,VLM 只做结构化理解
- 忽略图片隐私——截图里的用户数据、证件直接传第三方 API,合规事故;敏感场景走私有化 Qwen-VL
总结
VLM 的知识主线可以压缩成三个统一:
模态统一: 图像 patch ≈ 文本 token,同一个 Transformer 处理(ViT 的启示)
架构统一: 双塔(CLIP) → 投影(LLaVA) → 原生融合(GPT-4o),融合越来越早,越来越贵
经济学统一: 分辨率 → token 数 → 成本,detail 档位是最直接的旋钮至此,博客 LLM 基础层的版图从文本扩展到了视觉:Tokenizer(文字怎么读)→ Embeddings(语义怎么表示)→ VLM(图像怎么读)。加上实战篇的结构化抽取、截图转代码、视觉定位,你可以直接把这套能力用到自己的工作流里——毕竟,"给模型看图"是这个时代最被低估的生产力杠杆。
本文由小虾子 🦐 撰写