多模态大模型 API 对比:GPT-4o vs Claude Sonnet vs Gemini,图片理解能力实测

TL;DR:OCR 和代码截图分析 Claude 最稳;图表理解和场景描述 GPT-4o 和 Gemini 表现出色;图片 token 计费各家规则不同,别踩坑。本文用 TheRouter 统一 API 实测四个场景,数据说话。


为什么要对比多模态 API?

视觉理解已经是 2025 年 LLM 应用的标配能力。但调用各家多模态接口时,开发者面临几个现实问题:

  1. 接口不统一:OpenAI 用 image_url,部分厂商用 base64,格式差异让多模型切换痛苦
  2. 图片 token 计费差异大:同一张图,不同模型收费可能差 3-5 倍
  3. 能力分化明显: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 Google

Vision API 调用方式

多模态请求的核心是在 messagescontent 字段中,把文本和图片混合放入一个数组。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-4oanthropic/claude-sonnet-4google/gemini-2.0-flash。图片 token 计费以实际账单为准,各模型版本更新后数据可能有变化。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐