<!-- title: 图片正在偷你的token：多模态四道暗门 -->
<!-- domain: cost-hacks -->

你把一张手机截图丢给 AI，让它"看看这段报错"，它可能默默记了你 **3000 个 token**。你以为发的是一张图，模型算的是一片字海。海外有工程师发现，团队账单从纯文本切到多模态 RAG 后，**一夜涨了 5–10 倍**——而其中绝大部分，是一张张没人盯着的图片在偷偷计费。

今天拆穿多模态账单里四道把图片当碎钞机的暗门。每一道都附带官方计费规则、具体数字和可立刻执行的代码级操作。按这四道走，海外案例显示能把多模态花费**砍掉 40%–80%**。

---

## 先搞懂：一张图到底值多少 token？

这是信息差的第一层——大多数人从没算过图片的 token，因为图片不像文字那样"看得见字数"。但三家主流厂商给图片计费，用的是完全不同的两套底层逻辑，**算错的人会多付一个数量级**。

**Claude（Anthropic）——按面积算，像素越多越贵**

官方规则（[platform.claude.com](https://platform.claude.com/docs/en/build-with-claude/vision)）：图片送进来后，会被等比缩放到**长边不超过 1568 像素**的框里（只缩不放），然后按这个公式计费：

```
图片 token ≈ (width × height) / 750
```

举例：一张 1092×1092 的图 ≈ **1590 token**；一张 1568×1568 满框图 ≈ **3275 token**。

**OpenAI（GPT-4o / GPT-5 系列）——按 tile 切片算**

官方规则（[PyPI 上的 openai-vision-cost](https://pypi.org/project/openai-vision-cost/) 有现成实现）：图片被切成 512×512 的瓦片（tile），每片 170 token，外加 85 token 基底：

```
high detail: token = 85 + 170 × tiles
low  detail: 固定 85 token（不管多大）
```

举例：1024×1024 high detail = 4 片 → 85 + 4×170 = **765 token**；一张 4K 大图可能切出 10+ 片，冲到 **2000–3000 token**。

**关键反差**：同一张 4K 图，Claude 缩放到 1568 边后 ≈ 3275 token；OpenAI high detail 切完可能 ≈ 2800 token；但 OpenAI 如果切 `detail:"low"`，**直接 85 token 收摊**。差出 **38 倍**。

下面这张决策树，是多模态请求 token 流向的全景——四道暗门就藏在这个流程里：

```mermaid
flowchart TD
    A[原始图片上传] --> B{暗门1: 长边卡 1568?<br/>原图直送}
    B -->|没卡| BAD[4000×3000 缩放后<br/>仍吃满 ~5000 token]
    B -->|已 resize| C{暗门2: detail 参数<br/>默认 high}
    C -->|要看细节| D[high: 85+170×tiles]
    C -->|只判断有无/类型| E[low: 固定 85 token<br/>省 90%+]
    D --> F{暗门3: 内容是文档/截图?}
    F -->|当图喂| G[整页 1000-3000 token]
    F -->|先 OCR| H[转文本 ~200 token]
    E --> I{暗门4: 视频/多帧?}
    G --> I
    H --> I
    I -->|全帧灌入| J[token × 帧数 爆炸]
    I -->|抽关键帧| K[1-2fps 抽样]
    style BAD fill:#fdd
    style E fill:#dfd
    style H fill:#dfd
    style K fill:#dfd
```

---

## 暗门一：原图直送，长边从不卡 1568

**症状**：手机拍的照片 4000×3000，用户上传截图 2560×1440，全都不经处理直接塞进 API。

**为什么烧钱**：Claude 虽然会自动缩放到 1568，但 Claude 缩放前的"原始大图"在某些链路里仍会按高分辨率过一遍；更糟的是很多人用第三方 SDK 或把图传给同时支持 vision 的小模型（如某些 OpenAI 兼容端点），**这些端点不一定会帮你缩**，4K 图就按 4K 切 tile，token 直接×4。

**解法**：在客户端做一次 resize，长边锁死 1568（Claude）或 2048（OpenAI 上限），质量降到 85。一行 Pillow：

```python
from PIL import Image
img = Image.open("photo.jpg")
img.thumbnail((1568, 1568))  # 等比缩，长边≤1568
img.save("photo_s.jpg", quality=85)  # 质量85肉眼几乎无差
```

**省钱账**：一张 4K 图，缩放前 high detail ≈ 2800 token，缩到 1568 后 ≈ 765 token。假设 GPT-4o 输入按 \$2.5/1M token 算，单图从约 \$0.007 降到约 \$0.002，**一张省 70%**。日处理 10 万张图的业务，一年省下的钱够雇一个人。

> 这是绝大多数人忽略的第一层——**预处理发生在你这边，不花 API 的钱**。

---

## 暗门二：`detail` 默认 high，但 90% 请求根本不看细节

**症状**：你让模型"判断这张图里有没有猫"、"这是收款码还是付款码"、"提取图里的金额数字"。这类任务**根本不需要高清**，但请求默认走 `detail:"high"`，为每张图付 765 token。

**解法**：给不需要细节的请求显式指定 `detail:"low"`，**固定 85 token**，省 90%+。

```python
# OpenAI 风格
client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "图里有没有猫？只回有/没有"},
            {"type": "image_url",
             "image_url": {"url": url, "detail": "low"}}  # ← 一行省90%
        ]
    }]
)
```

**进阶**：搞个**两级路由**。第一级用 `low` + 便宜模型做粗判（有没有/是什么类），命中后再用 `high` + 强模型细看。这正是之前聊过的"旗舰只该当指挥"思路在多模态上的落地——**80% 的图根本不配上 high detail**。

**场景适配**：
| 任务 | detail 选什么 |
|------|--------------|
| 分类、有无判断、OCR 数字 | `low`（85 token） |
| 看图标 UI、读图表数据 | `auto` 或 `high` |
| 医学/质检/精密识别 | `high`，且别省 |

---

## 暗门三：把文档/截图当图片整页喂

**症状**：PDF 扫描件、长截图、合同页，直接整页当 image 丢给模型。一页 A4 扫描图轻松 1500–3000 token，**而你要的可能只是其中一段文字**。

**为什么是暗门**：图片里大部分是白纸黑字的文字，用 vision 编码器去"看文字"是杀鸡用牛刀——文字本该走文本通道（便宜得多）。视觉 token 是给"图像语义"（形状、颜色、布局）准备的，不是给纯文字准备的。

**解法**：文档先 OCR 成文本再喂。
- **本地/免费**：`tesseract`、PaddleOCR，中文识别已经很能打；
- **结构化**：[`unstructured`](https://github.com/Unstructured-IO/unstructured) 能把 PDF 拆成"文字+表格+图"，文字走文本，只有真图走 vision；
- **云**：各家文档解析 API，按页计费远比 vision token 便宜。

**省钱账**：一页扫描文档，当图喂 ≈ 2000 token；OCR 成文本 ≈ 200 token（同样内容，文字 token 密度高得多）。**省 90%**，而且 OCR 文本还能命中 prompt caching，进一步复利。

**判断标准**：如果图里 **90% 以上是文字**，就别当图喂，OCR 它。如果图里是**流程图、UI、照片**，才值得 vision。

---

## 暗门四：视频/多帧全帧灌进去

**症状**：做视频理解、监控摘要、UI 录屏分析时，把视频逐帧（甚至 30fps）拆成图全灌进 API。一段 1 分钟视频 = 1800 张图 × 765 token ≈ **137 万 token**，一次请求烧掉几美元到几十美元。

**为什么是暗门**：相邻帧 90% 画面是重复的，全送等于为同样的信息反复买单。而模型对视频本就有抽帧建议（如 1fps 或更稀疏）。

**解法**：
1. **降帧率**：按 1fps（每秒 1 帧）甚至按场景抽，而非 30fps；
2. **关键帧检测**：用 PySceneDetect 找镜头切换点，只在画面**发生变化**时送一帧；
3. **首帧 + 变化帧**：固定背景只送一次，后续只送差异区域（ROI）。

```python
# 粗暴版：每秒1帧
import cv2
cap = cv2.VideoCapture("video.mp4")
fps = cap.get(cv2.CAP_PROP_FPS)
for i in range(0, int(cap.get(7)), int(fps)):  # 每隔1秒
    cap.set(cv2.CAP_PROP_POS_FRAMES, i)
    _, frame = cap.read()
    send_to_api(frame)  # 而非每帧都送
```

**省钱账**：30fps → 1fps，token 直接砍 **97%**；再叠关键帧检测，监控类场景常常能砍到 **1% 以内**。

学术圈这两年也在卷这个方向——arXiv 上的 token reduction 论文（如 [ToFu](https://arxiv.org/html/2503.04444v1)、[Less is More](https://arxiv.org/abs/2409.10994)）研究的就是"哪些视觉 token 是冗余的、可以 prune/merge 掉"。GitHub 上有人维护了两个合集：[awesome-llm-token-optimization](https://github.com/pleasedodisturb/awesome-llm-token-optimization) 和 [Awesome-Collection-Token-Reduction](https://github.com/ZLKong/Awesome-Collection-Token-Reduction)，想深挖可以去抄。

---

## 信息差总结：你知道的 vs 别人不知道的

| 维度 | 大多数人（你在做的） | 信息差玩家（该做的） |
|------|---------------------|---------------------|
| 图片计费 | "图片就按张算吧" | 知道 Claude 按面积、OpenAI 按 tile，公式能背 |
| 上传前 | 原图直送 | 客户端 resize 锁 1568、质量 85 |
| detail 参数 | 永远默认 high | 分类/OCR 任务切 low，省 90% |
| 文档/截图 | 整页当图喂 | 90% 文字就先 OCR，省 90% |
| 视频 | 逐帧灌入 | 1fps + 关键帧，砍 97% |
| 测量 | 账单涨了不知道为啥 | 每张图算 token，盯图像占比 |

一句话：**纯文本时代你优化的是"怎么问"，多模态时代你还得优化"怎么喂图"**。后者是全新的成本黑洞，且国内几乎没人系统讲过。

---

## 行动指南：今晚就能做的 5 步

1. **量一下**：用 [图像 token 计算器](https://freetokencounter.com/image-token-calculator) 算算你生产环境里典型一张图值多少 token，很多人第一次算完会吓到。
2. **加一行 resize**：在图片上传前加 `thumbnail((1568,1568))` + `quality=85`，零 API 成本，立刻省 60–70%。
3. **给分类任务切 low**：把所有"有没有/是什么"类请求的 `detail` 改成 `low`，一刀省 90%。
4. **文档走 OCR**：凡 90% 是文字的图，先用 tesseract/`unstructured` 转文本，再决定要不要 vision。
5. **建图像 token 监控**：在日志里单独统计每天图片吃了多少 token、占总账单多少——你优化不了你看不见的东西。

把第 2、3、4 步叠起来，海外案例显示多模态账单普遍能砍到原来的 **1/5 到 1/3**。这不靠换便宜模型，不靠牺牲质量，纯粹是把"喂图的方式"从粗放改成精细——典型的认知差红利。

---

## 参考来源

- [Claude 官方 Vision 文档（图像 token 公式）](https://platform.claude.com/docs/en/build-with-claude/vision)
- [openai-vision-cost（PyPI，OpenAI tile 计费实现）](https://pypi.org/project/openai-vision-cost/)
- [Multimodal LLM Cost Optimization 2026 — StackPulsar](https://stackpulsar.com/blog/multimodal-llm-cost-optimization/)
- [Multi-Modal Cost Optimization — TrackAI FinOps 课程](https://trackai.dev/tracks/finops/specialized-topics/multi-modal-costs/)
- [awesome-llm-token-optimization（GitHub 工具/论文合集）](https://github.com/pleasedodisturb/awesome-llm-token-optimization) · [ToFu 视觉 token 压缩论文](https://arxiv.org/html/2503.04444v1)

> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护。
> 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
