首页 › cost-hacks › 图片正在偷你的token:多模态四道暗门

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

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


先搞懂:一张图到底值多少 token?

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

Claude(Anthropic)——按面积算,像素越多越贵

官方规则(platform.claude.com):图片送进来后,会被等比缩放到长边不超过 1568 像素的框里(只缩不放),然后按这个公式计费:

图片 token ≈ (width × height) / 750

举例:一张 1092×1092 的图 ≈ 1590 token;一张 1568×1568 满框图 ≈ 3275 token。

OpenAI(GPT-4o / GPT-5 系列)——按 tile 切片算

官方规则(PyPI 上的 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 流向的全景——四道暗门就藏在这个流程里:

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:

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%+。

# 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 能把 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)。

# 粗暴版:每秒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、Less is More)研究的就是"哪些视觉 token 是冗余的、可以 prune/merge 掉"。GitHub 上有人维护了两个合集:awesome-llm-token-optimization 和 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 计算器 算算你生产环境里典型一张图值多少 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。这不靠换便宜模型,不靠牺牲质量,纯粹是把"喂图的方式"从粗放改成精细——典型的认知差红利。


参考来源

本文由「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学通信知识星球海报-扫码加入