多模态大模型 API 对比:GPT-4o vs Claude Sonnet vs Gemini,图片理解能力实测
多模态大模型 API 对比:GPT-4o vs Claude Sonnet vs Gemini,图片理解能力实测
TL;DR:OCR 和代码截图分析 Claude 最稳;图表理解和场景描述 GPT-4o 和 Gemini 表现出色;图片 token 计费各家规则不同,别踩坑。本文用 TheRouter 统一 API 实测四个场景,数据说话。
为什么要对比多模态 API?
视觉理解已经是 2025 年 LLM 应用的标配能力。但调用各家多模态接口时,开发者面临几个现实问题:
- 接口不统一:OpenAI 用
image_url,部分厂商用 base64,格式差异让多模型切换痛苦 - 图片 token 计费差异大:同一张图,不同模型收费可能差 3-5 倍
- 能力分化明显:OCR 能力强的模型,图表理解不一定强
本文使用 TheRouter 统一 API(OpenAI 兼容格式),测试三个主流多模态模型在四类视觉场景下的表现。TheRouter 是 AI 模型路由网关,一套 API 调所有模型,图片请求也完全兼容。
测试模型
| 模型 | TheRouter Model ID | 原厂 |
|---|---|---|
| GPT-4o | openai/gpt-4o |
OpenAI |
| Claude Sonnet 4 | anthropic/claude-sonnet-4 |
Anthropic |
| Gemini 2.0 Flash | google/gemini-2.0-flash |
Vision API 调用方式
多模态请求的核心是在 messages 的 content 字段中,把文本和图片混合放入一个数组。TheRouter 兼容标准 OpenAI Vision 格式。
方式一:URL 传图
import httpx
BASE_URL = "https://api.therouter.ai/v1"
API_KEY = "your-therouter-api-key"
def vision_chat(model: str, image_url: str, prompt: str) -> str:
payload = {
"model": model,
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": image_url}
},
{
"type": "text",
"text": prompt
}
]
}
],
"max_tokens": 1024
}
resp = httpx.post(
f"{BASE_URL}/chat/completions",
headers={"Authorization": f"Bearer {API_KEY}"},
json=payload,
timeout=60
)
resp.raise_for_status()
return resp.json()["choices"][0]["message"]["content"]
方式二:Base64 传图
适合私有图片、本地文件,或不想暴露图片 URL 的场景:
import base64
from pathlib import Path
def load_image_base64(path: str, mime: str = "image/png") -> str:
data = base64.b64encode(Path(path).read_bytes()).decode()
return f"data:{mime};base64,{data}"
def vision_chat_base64(model: str, image_path: str, prompt: str) -> str:
b64_url = load_image_base64(image_path)
payload = {
"model": model,
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": b64_url} # 直接塞 data URI
},
{"type": "text", "text": prompt}
]
}
]
}
# ... 同上发送请求
注意:TheRouter 统一用
image_url.url字段接收两种格式,后端自动处理转发,开发者无需关心各家厂商的具体格式差异。
场景一:OCR 文字识别
测试图片:一张包含中英文混排、有表格、有手写注释的扫描合同截图(约 1200×900px,JPEG)。
Prompt:请提取图片中所有文字内容,保持原始排版结构,表格用 Markdown 格式输出。
结果对比
GPT-4o:
- 中文识别准确率约 96%,英文 99%
- 表格结构基本还原,列对齐正确
- 手写注释识别率约 70%,部分字迹潦草处标注了
[难以辨认] - 响应时间:约 5.2s
Claude Sonnet 4:
- 中英文识别准确率均达 98%
- 表格格式完美还原,甚至保留了合并单元格的提示说明
- 手写注释识别率约 80%,且会尝试推断模糊字符并加注
(可能是"X") - 主动标注了图片中有水印,未参与正文提取
- 响应时间:约 4.8s
Gemini 2.0 Flash:
- 中文识别准确率约 93%,英文 98%
- 表格识别有错列现象(约 2 处)
- 手写识别率约 65%
- 速度最快:约 2.9s(Flash 的设计定位即为速度优先)
OCR 评分
| 指标 | GPT-4o | Claude Sonnet 4 | Gemini 2.0 Flash |
|---|---|---|---|
| 中文识别准确率 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 表格还原质量 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 手写识别 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 响应速度 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
OCR 推荐:Claude Sonnet 4(准确率最高);速度优先选 Gemini Flash。
场景二:图表理解
测试图片:一张折线图,展示某 SaaS 产品 12 个月的 MRR 增长数据,包含两条曲线(国内/海外),有图例、刻度轴、标注点。
Prompt:分析这张图表,描述趋势,找出增长最快的月份,估算第12个月两条曲线的数值,并给出可能的业务解读。
结果对比
GPT-4o:
- 准确读取了图例和轴标签
- 正确识别增长最快月份(第7个月,环比约+40%)
- 数值估算误差约 ±8%
- 业务解读丰富:主动联系了常见 SaaS 增长模式,提到"可能存在季节性因素"
- 回答最具商业分析价值
Claude Sonnet 4:
- 图例、轴标识别完整
- 趋势描述最系统(先整体后局部)
- 数值估算误差约 ±5%,是三者中最准确的
- 业务解读偏保守,倾向于提示"需要更多上下文才能确认"
- 主动指出图表中有一个数据点疑似异常(Q3 国内线有突然下跌后回升)
Gemini 2.0 Flash:
- 整体趋势描述正确
- 数值估算误差约 ±15%,明显偏大
- 业务解读较简短
- 但速度优势明显,适合需要快速提取"大概趋势"的场景
图表理解评分
| 指标 | GPT-4o | Claude Sonnet 4 | Gemini 2.0 Flash |
|---|---|---|---|
| 数值提取精度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 趋势分析深度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 业务解读质量 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 异常点识别 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
图表推荐:GPT-4o(商业解读最好)或 Claude Sonnet 4(数值精度最高)。
场景三:代码截图分析
测试图片:一张 VS Code 截图,显示一段有 bug 的 TypeScript 代码,包含 IDE 报错下划线和 terminal 输出。
Prompt:分析这段代码,找出 bug,解释错误原因,给出修复方案。
这个场景对模型的能力要求比较综合:既要准确识别代码文字(细小等宽字体),又要理解代码语义。
GPT-4o:
- 代码识别准确,等宽字体(Fira Code 14px)无障碍识别
- 正确识别出 2 处 bug(类型错误 + 未处理的 Promise)
- 修复方案代码可直接使用
- 主动指出 IDE 报红线位置和 terminal 报错信息的对应关系
Claude Sonnet 4:
- 代码识别准确,甚至识别出了注释中的中文
- 识别出 3 处问题(多发现一处潜在的 null 引用)
- 修复方案最完整,附带了解释每处修改原因的说明
- 输出格式最规范(用 diff 格式展示变更)
Gemini 2.0 Flash:
- 代码识别基本准确,但有1处变量名识别错(
handleError识别为handleErroc) - 找出了主要 bug,但遗漏了 Promise 未处理问题
- 修复方案可用但缺乏解释
代码截图分析评分
| 指标 | GPT-4o | Claude Sonnet 4 | Gemini 2.0 Flash |
|---|---|---|---|
| 代码文字识别 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Bug 检出完整性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 修复方案质量 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 输出格式 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
代码截图推荐:Claude Sonnet 4(全面领先)。
场景四:场景描述
测试图片:一张城市夜景照片,包含街道、建筑、霓虹灯、行人,光线复杂。
Prompt:详细描述这张图片的内容,包括场景氛围、主要元素、色彩风格,以及你推断的拍摄地点和时间。
GPT-4o:
- 描述最丰富,层次感强(前景→中景→背景)
- 颜色分析细腻,能识别霓虹灯色温差异
- 地点推断准确(东亚城市商业街),并给出了推断依据
- 文字表达最有"摄影感",适合内容创作
Claude Sonnet 4:
- 描述系统全面,要素提取完整
- 氛围描述偏"工整",不如 GPT-4o 有文采
- 地点推断谨慎,给出了多个可能(日本/中国/韩国),不武断
Gemini 2.0 Flash:
- 描述简洁,主要元素识别正确
- 地点推断最有信心(直接说"日本大阪道顿堀"),但有可能过度自信
- 适合需要快速标注图片内容的场景
场景描述评分
| 指标 | GPT-4o | Claude Sonnet 4 | Gemini 2.0 Flash |
|---|---|---|---|
| 描述丰富度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 细节识别 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 推断合理性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 文字表达 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
场景描述推荐:GPT-4o(内容创作);Claude Sonnet 4(严谨场景)。
图片 Token 计费差异
这部分很多开发者容易忽略,但成本差异显著。以一张 1024×1024 的标准图为例(TheRouter 统一计费口径):
| 模型 | 图片 Token 消耗 | 计费方式 |
|---|---|---|
| GPT-4o | ~765 tokens | 根据分辨率分 tile,每 512×512 约 170 token |
| Claude Sonnet 4 | ~1334 tokens | 根据图片尺寸和细节动态计算 |
| Gemini 2.0 Flash | ~258 tokens | 固定低消耗,Flash 系列图片 token 大幅压缩 |
实际成本估算(1024×1024 图 + 200 token 输出):
| 模型 | 单次图片请求成本 |
|---|---|
| openai/gpt-4o | ~$0.0062 |
| anthropic/claude-sonnet-4 | ~$0.0230 |
| google/gemini-2.0-flash | ~$0.0003 |
Gemini Flash 在图片成本上有碾压性优势,特别适合图片量大的批处理场景(如电商图片标注、文档批量 OCR)。
多张图片和多轮对话
TheRouter 同样支持多图和多轮视觉对话:
# 多张图片
messages = [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": url1}},
{"type": "image_url", "image_url": {"url": url2}},
{"type": "text", "text": "对比这两张图的差异"}
]
}
]
# 多轮对话(第二轮引用第一轮的图)
messages = [
{"role": "user", "content": [{"type": "image_url", ...}, {"type": "text", "text": "描述这张图"}]},
{"role": "assistant", "content": "这是一张..."},
{"role": "user", "content": [{"type": "text", "text": "图中左边那个物体是什么材质?"}]}
]
综合选择建议
| 使用场景 | 推荐模型 | 原因 |
|---|---|---|
| 合同/票据 OCR | anthropic/claude-sonnet-4 |
中文识别最准,结构还原最好 |
| 图表/数据可视化分析 | openai/gpt-4o |
商业解读最丰富 |
| 代码截图 Debug | anthropic/claude-sonnet-4 |
代码文字识别+语义理解双强 |
| 内容创作/场景描述 | openai/gpt-4o |
文字表达最有质感 |
| 批量图片处理(成本优先) | google/gemini-2.0-flash |
图片 token 成本极低 |
| 实时应用(延迟优先) | google/gemini-2.0-flash |
响应最快 |
用 TheRouter 实现按场景路由
有了统一 API,可以很容易地实现"按场景自动选模型":
from enum import Enum
class VisionTask(Enum):
OCR = "ocr"
CHART = "chart"
CODE = "code"
SCENE = "scene"
BATCH = "batch" # 成本优先
VISION_ROUTER = {
VisionTask.OCR: "anthropic/claude-sonnet-4",
VisionTask.CHART: "openai/gpt-4o",
VisionTask.CODE: "anthropic/claude-sonnet-4",
VisionTask.SCENE: "openai/gpt-4o",
VisionTask.BATCH: "google/gemini-2.0-flash",
}
def analyze_image(task: VisionTask, image_url: str, prompt: str) -> str:
model = VISION_ROUTER[task]
return vision_chat(model, image_url, prompt)
# 使用示例
result = analyze_image(VisionTask.OCR, "https://example.com/contract.jpg", "提取所有文字")
这样的架构下,切换模型只需改一行配置,账单和 Key 管理全部由 TheRouter 统一处理。
总结
多模态 API 的选择没有"一个最强",而是要根据场景匹配:
- Claude Sonnet 4:精度优先场景(OCR、代码分析)的首选
- GPT-4o:需要丰富语义解读的场景(图表分析、内容创作)
- Gemini 2.0 Flash:成本敏感或延迟敏感的大批量场景
TheRouter 让你无需在三家分别注册账号、管理三套 API Key,直接用一个统一接口按需路由,非常适合需要多模型混用的 AI 应用开发。
注册免费体验:therouter.ai
本文测试数据基于 2026 年 3 月实测,所用 TheRouter model ID:openai/gpt-4o、anthropic/claude-sonnet-4、google/gemini-2.0-flash。图片 token 计费以实际账单为准,各模型版本更新后数据可能有变化。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)