实测GPT-4o多模态准确率89.7%,但同一张图跑5次结果不一样
上周二晚上十一点多,我正准备关电脑,客户一个电话打过来。他说他们团队为选多模态模型的事吵了一整天,三个小组各执一词——算法组咬死GPT-4o准确率最高,后端组说Gemini便宜得离谱不用是傻子,产品经理们则集体站Claude,理由是"输出最规矩"。
他说,你来评评理。
我说行,那别评了,直接测。
花了五天时间搭环境、跑数据、整理结果。测完发现,之前看的那些评测文章基本都过期了——2025年这几个月,三个模型都悄悄更新了好几轮。GPT-4o在3月15号推了个新版本,中文OCR能力提升很明显;Gemini Pro Vision二月底那次更新直接把成本砍了四成;Claude 3.5 Sonnet虽然去年十月就发了,但Anthropic在一月份默默把API响应速度提了一截。
下面是我实测的结果。先说好,这不是什么权威报告,就是拿真实业务数据跑的,结论可能只对我自己的场景负责。
测试环境
环境配置给你们贴出来,想复现的可以直接抄:
python==3.12.3
openai==1.55.0
google-generativeai==0.8.3
anthropic==0.39.0跑在AWS EC2 c7a.xlarge上,区域选了us-west-2,尽量离三个厂商的API节点都近一点。测试时间是3月17号到21号,工作日晚上跑,白天要处理别的事。
数据集用了三块:
- MMBench中文版,覆盖20个子任务
- 我自己攒的200张发票和合同扫描件,来自之前一个物流项目
- 100张复杂图表,一半从ArXiv论文里扒的,一半是券商研报
评测看四个维度:准确率、速度、成本、稳定性。每个维度我都会给具体数据,也会说踩了什么坑。
第一轮:通用多模态理解
先跑MMBench中文版,看基础能力。
准确率方面,GPT-4o确实领先:
| 模型 | 整体 | 文字识别 | 视觉推理 | 空间理解 |
|------|------|---------|---------|---------|
| GPT-4o | 89.7% | 94.2% | 87.1% | 85.3% |
| Claude 3.5 | 87.3% | 91.8% | 85.6% | 82.9% |
| Gemini Pro | 84.1% | 88.5% | 81.2% | 79.7% |
文字识别那个94.2%是实打实的。我专门找了一张糊得不行的快递单照片,上面还有水渍——别问我怎么弄的,客户给的原始数据就这样。GPT-4o把收件人电话完整识别出来了,Claude把6看成8,Gemini更离谱,最后两位直接没了。
但。有个问题。
GPT-4o的稳定性不太行。同一张图我测了5次,两次结果不一样。一次漏了标注框里的文字,另一次把图表里的百分比搞反了。Claude和Gemini分数是低一些,但每次跑的结果起码是一致的。
等等,这里我要更正一下——我说的"5次"不是连续调的,是隔天分别调用的。可能跟服务端负载有关,也可能是模型本身的随机性。我没做消融实验,不能确定原因。
速度这块,我写了个简单脚本跑了50次请求:
import time
import statistics
latencies = []
for i in range(50):
start = time.time()
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
messages=[{"role": "user", "content": [...]}]
)
latencies.append(time.time() - start)
print(f"P50: {statistics.median(latencies):.2f}s")
print(f"P95: {statistics.quantiles(latencies, n=20)[18]:.2f}s")结果:
- Claude 3.5 Sonnet:P50 1.8s,P95 3.2s
- GPT-4o:P50 2.4s,P95 5.7s
- Gemini Pro Vision:P50 3.1s,P95 6.8s
Claude最快,而且稳。GPT-4o偶尔会卡住,P95飙到5.7秒,体感很明显。我猜Anthropic在推理架构上做了啥优化,但他们没公开细节,纯属猜测。
第二轮:发票和合同处理
重头戏来了。
200张真实增值税发票扫描件,各种角度、光照,有几张还被咖啡泼过。客户的财务部门是真的猛,什么状态的票据都敢往系统里扔。
任务很简单:提取发票号码、开票日期、购买方名称、金额合计、税额合计、销售方名称。六个字段全部匹配才算这张发票处理正确。
结果:
字段级准确率:
GPT-4o: 91.3% (1096/1200)
Claude 3.5: 88.7% (1064/1200)
Gemini Pro: 84.2% (1010/1200)
整张发票完全正确率:
GPT-4o: 72.5% (145/200)
Claude 3.5: 68.0% (136/200)
Gemini Pro: 59.5% (119/200)数字上看GPT-4o赢。
但我要说一个让我血压飙升的问题——输出格式。
GPT-4o的返回格式简直是玄学。有时候是JSON,有时候是Markdown表格,有时候在JSON外面包一层`json`,还有时候干脆返回自然语言:"发票号码是12345678,开票日期为2025年..."。
我被迫写了这么个东西:
def parse_gpt4o_invoice_output(raw_text):
# 我已经麻了
if "```json" in raw_text:
raw_text = raw_text.split("```json")[1].split("```")[0]
elif "```" in raw_text:
raw_text = raw_text.split("```")[1].split("```")[0]
try:
return json.loads(raw_text)
except:
# 回退到正则
# 我真的不想写这些
import re
result = {}
patterns = {
"invoice_no": r"发票号码[::]\s*(\d+)",
"date": r"开票日期[::]\s*(\d{4}年\d{1,2}月\d{1,2}日)",
}
# 后面还有一坨有一次GPT-4o把"金额合计"的字段名从total_amount自动改成了total_amount_yuan。自动。改的。我的解析脚本直接炸了,查了半天日志才发现模型自己加了单位后缀。这种"贴心"在生产环境里就是定时炸弹。
Claude在这方面省心太多。prompt里要求JSON,它就返回JSON,字段名不会自己发挥。测了两百次,只有两次格式异常。Gemini也还行,但偶尔会在JSON里塞一些你没要求的字段,比如突然给你加个"invoice_type"出来。
第三轮:复杂图表理解
100张图表,从论文和研报里挑的,折线图、柱状图、散点图、热力图、桑基图都有。
基础数值提取上,三个模型差别不大:GPT-4o 86.2%,Claude 85.8%,Gemini 83.1%。
深层分析就拉开差距了。
GPT-4o的分析框架最清晰,比如"该图显示2024年Q3至2025年Q1期间,新能源车渗透率从35%上升至52%,增长主要由10-20万价位段贡献"。结构化程度高,拿来就能用。
Claude更谨慎。它喜欢加限定词,"从图表来看,可能存在...的趋势,但需要注意样本量限制"。这种风格在金融、医疗场景里反而是优点——至少不会过度解读数据。
Gemini有个奇怪的毛病。
它会"看到"图表里根本不存在的元素。我测一张双轴折线图,它非说图里有个标注箭头指向2024年6月的数据点。我反复确认,没有箭头。那张图我看了不下十遍。这种幻觉大概在8%的样本里出现,复杂图表上尤其明显。
嗯...这个比较复杂。我没深挖是数据问题还是模型问题,但结果上看,如果你用Gemini做图表分析,最好加一层人工校验。
成本:账面上便宜不等于真便宜
先看单价(2025年3月数据):
| 模型 | 图片输入 | 文本输出 |
|------|---------|---------|
| GPT-4o | $0.00213/张 | $15/1M tokens |
| Claude 3.5 | $0.0048/张 | $15/1M tokens |
| Gemini Pro | $0.00125/张 | $10.5/1M tokens |
Gemini最便宜,一目了然。
但。
我模拟了一个月处理10万张发票的场景:
API成本:
GPT-4o: ~$1,011
Claude: ~$1,242
Gemini: ~$670
加上人工复核(按准确率倒推需要复核的量,时薪$25算):
GPT-4o: +$22,917 = $23,928
Claude: +$26,667 = $27,909
Gemini: +$33,750 = $34,420Gemini从最便宜变成最贵。
因为它准确率不够,漏掉的字段得靠人补。每张发票复核两分钟,四万张票堆起来就是一千多个小时。这就是为什么我说单价比是个陷阱——你省下来的API费用,全贴给人工了,还得搭上时间。
我这次测试的实际账单:
- OpenAI:$187.32
- Anthropic:$203.45
- Google:$89.67(用了300刀免费额度)
Google对新用户确实大方,$300额度够你做不少实验了。但生产环境不能指望这个。
选型建议
测了一周,我的判断是:
用GPT-4o,如果你追求极致准确率,尤其是OCR场景,而且能接受写一堆格式兼容代码。预算也得相对充裕。
用Claude 3.5 Sonnet,如果你想要稳定的JSON输出,不想半夜被格式问题搞醒。做实时交互应用的话,它的速度优势也很明显。金融、医疗、法律这些需要谨慎分析的场景,Claude的保守反而是优点。
用Gemini Pro Vision,如果预算真的很紧,或者还在验证阶段。处理清晰扫描件、标准图表还行,但复杂场景慎用。幻觉率是个隐患。
我现在大部分项目是混用的。比如那个物流发票系统,最终的架构是这样的:
图片预处理 → 质量评分 → 路由
│
评分>0.8且是发票 → Gemini(便宜)
图表分析任务 → Claude(稳定)
其他复杂场景 → GPT-4o(最强)路由逻辑很简单:
def route_to_model(image_quality_score, task_type):
if image_quality_score > 0.8 and task_type == "invoice":
return "gemini"
elif task_type == "chart_analysis":
return "claude"
else:
return "gpt4o"这样总成本比纯用GPT-4o降了大概35%,准确率反而因为专模专用提了两个点。
最后几句
这一年多模态模型进步是真的快。去年这时候我们还在纠结能不能识别发票号码,现在已经在讨论怎么优化路由策略了。
但有一点没变——没有银弹。
各家定价策略也挺让人无语的。OpenAI和Anthropic都在图片尺寸上做文章,计费逻辑复杂得要命,月底看账单经常一头雾水。Google倒是简单粗暴统一价,但幻觉问题不解决,便宜也白搭。
如果你也在做选型,我的建议是:别光看benchmark和官方定价。拿自己的数据跑一遍。每个业务场景的数据分布不一样,benchmark上差的那几个百分点,放到你的场景里可能完全两回事。
你们团队现在用哪个多模态模型?踩过什么坑?评论区聊聊,我最近在整理一份《多模态模型生产环境踩坑合集》,欢迎贡献素材。完整测试代码和脱敏数据集放在GitHub上了,链接在评论区置顶。
#GPT4o #Claude3.5 #GeminiProVision #多模态模型 #AI成本分析 #大模型评测 #2025AI趋势
读者评论 5