上周接了个私活,甲方要求做多模态文档分析工具,能看图、能读 PDF、还要能生成结构化报告。我没多想直接上了 GPT-5,跑了两天发现 token 费用有点离谱——这个场景输入量大,动不动就是几万 token 的上下文。朋友说「你试试 Gemini 3 啊,上下文窗口大、多模态还便宜」,我就花了一周时间把两个 API 都跑了一遍,记录下真实的对比数据。

结论先放这儿:Gemini 3 在长上下文和多模态性价比上确实有优势,但 GPT-5 的指令遵循和 Function Calling 稳定性仍然是标杆。具体怎么选,取决于你的场景——下面全是实测数据,不是官方 benchmark 那种。

先说结论

维度Gemini 3 ProGPT-5我的判断
上下文窗口2M tokens256K tokensGemini 碾压
多模态能力原生支持图/视频/音频图片+音频Gemini 略优
指令遵循准确度85-90%95%+GPT-5 更稳
Function Calling支持但偶尔格式飘非常稳定GPT-5 胜
输入价格(百万 token)≈$1.25≈$3.00Gemini 便宜一半多
输出价格(百万 token)≈$5.00≈$15.00Gemini 便宜
中文理解不错,偶尔断句奇怪很好GPT-5 略优
Streaming 首 token 延迟400-800ms300-600msGPT-5 略快

环境准备

两个 API 的调用方式其实都兼容 OpenAI SDK 格式(Gemini 从 2025 年底就支持了 OpenAI 兼容模式),代码切换成本很低。

pip install openai httpx

这次测试我用的是 ofox.ai 的聚合接口,一个 Key 同时调 Gemini 和 GPT,省得分别管两套鉴权。ofox.ai 是一个 AI 模型聚合平台,兼容 OpenAI/Anthropic/Gemini 三大 API 协议,一个 API Key 可以调用 GPT-5、Claude Opus 4.6、Gemini 3 等 50+ 模型,支持支付宝/微信付款,按量计费。

方案一:基础文本生成对比

先来最基础的——给同一个 prompt,看两个模型的输出质量和速度。

import time
from openai import OpenAI

client = OpenAI(
 api_key="your-ofox-key",
 base_url="https://api.ofox.ai/v1"
)

prompt = "请用 Python 实现一个支持重试和指数退避的 HTTP 客户端类,要求:支持 GET/POST、自定义 headers、超时配置、最多重试 3 次。给出完整可运行代码。"

def test_model(model_name: str):
 start = time.time()
 response = client.chat.completions.create(
 model=model_name,
 messages=[
 {"role": "system", "content": "你是一个资深 Python 开发者,代码要求生产级质量。"},
 {"role": "user", "content": prompt}
 ],
 temperature=0.3,
 max_tokens=2000
 )
 elapsed = time.time() - start
 content = response.choices[0].message.content
 tokens_used = response.usage.total_tokens
 print(f"[{model_name}] 耗时: {elapsed:.2f}s | Tokens: {tokens_used}")
 print(content[:500]) # 只打印前 500 字符看看
 return elapsed, tokens_used, content

# 测 GPT-5
gpt_time, gpt_tokens, gpt_code = test_model("gpt-5")

# 测 Gemini 3 Pro
gemini_time, gemini_tokens, gemini_code = test_model("gemini-3-pro")

实测结果(跑了 5 次取平均):

指标GPT-5Gemini 3 Pro
平均响应时间3.2s4.1s
平均 token 消耗1,4501,680
代码可直接运行5/5 次4/5 次
代码质量评分(我主观打的)9/108/10

GPT-5 生成的代码更"规矩",异常处理、类型注解、docstring 一个不少。Gemini 3 有一次生成的代码少了个 import,另外它特别喜欢给你加一堆注释——有时候注释比代码还多,看着烦。

方案二:多模态能力对比(图片理解)

这是我实际项目里的核心需求。我拿了一张包含表格的扫描件 PDF 截图,让两个模型提取结构化数据。

import base64

def encode_image(image_path: str) -> str:
 with open(image_path, "rb") as f:
 return base64.b64encode(f.read()).decode("utf-8")

def test_vision(model_name: str, image_path: str):
 base64_image = encode_image(image_path)
 start = time.time()
 response = client.chat.completions.create(
 model=model_name,
 messages=[
 {
 "role": "user",
 "content": [
 {
 "type": "text",
 "text": "请提取这张图片中的表格数据,输出为 JSON 格式。每一行是一个对象,字段名用表头。"
 },
 {
 "type": "image_url",
 "image_url": {
 "url": f"data:image/png;base64,{base64_image}"
 }
 }
 ]
 }
 ],
 temperature=0,
 max_tokens=3000
 )
 elapsed = time.time() - start
 content = response.choices[0].message.content
 print(f"[{model_name}] Vision 耗时: {elapsed:.2f}s")
 return content

# 用同一张表格截图测试
gpt_result = test_vision("gpt-5", "invoice_table.png")
gemini_result = test_vision("gemini-3-pro", "invoice_table.png")

这一轮 Gemini 3 让我刮目相看。说实话我一开始不太信它(Gemini 1.5 那会儿翻车过几次),但 Gemini 3 确实进步了很多:

指标GPT-5Gemini 3 Pro
表格字段识别准确率96%98%
数字 OCR 准确率94%97%
JSON 格式正确率100%90%(一次多了个逗号)
响应时间5.8s4.2s

Gemini 3 在图像理解上确实更强,尤其是数字和小字识别。但它输出的 JSON 偶尔有格式问题——多个尾逗号这种事,得在业务代码里加个 json5 解析兜底。

方案三:Function Calling 稳定性

这个是我踩坑最多的地方。

tools = [
 {
 "type": "function",
 "function": {
 "name": "search_products",
 "description": "根据关键词搜索商品",
 "parameters": {
 "type": "object",
 "properties": {
 "keyword": {"type": "string", "description": "搜索关键词"},
 "category": {"type": "string", "enum": ["电子", "服饰", "食品", "图书"]},
 "max_price": {"type": "number", "description": "最高价格(元)"}
 },
 "required": ["keyword"]
 }
 }
 }
]

def test_function_calling(model_name: str):
 response = client.chat.completions.create(
 model=model_name,
 messages=[
 {"role": "user", "content": "帮我找一下 500 块以内的蓝牙耳机"}
 ],
 tools=tools,
 tool_choice="auto"
 )
 msg = response.choices[0].message
 if msg.tool_calls:
 print(f"[{model_name}] 调用函数: {msg.tool_calls[0].function.name}")
 print(f"参数: {msg.tool_calls[0].function.arguments}")
 else:
 print(f"[{model_name}] 未触发函数调用!")

test_function_calling("gpt-5")
test_function_calling("gemini-3-pro")

跑了 20 次,结果如下:

指标GPT-5Gemini 3 Pro
函数触发成功率20/2018/20
参数解析正确率100%85%
category 推断正确20/2015/20
max_price 提取20/2017/20

GPT-5 在 Function Calling 上确实是降维打击。Gemini 3 有两次完全没触发函数调用,直接用文字回答了事;还有几次把 category 识别错了——「蓝牙耳机」归到「服饰」类,离谱。

踩坑记录

坑 1:Gemini 3 的 Streaming 有时候断流

stream=True 的时候,Gemini 3 大概有 5% 的概率会在中间卡住 3-5 秒再继续,体验很差。GPT-5 基本没遇到过。

坑 2:Gemini 3 对中文 prompt 中的数字写法敏感

「找 500 块以内的东西」和「找五百块以内的东西」,Gemini 3 对后者的理解明显差一截。GPT-5 两种写法都能正确解析。跟 Gemini 交互时,数字尽量用阿拉伯数字。

坑 3:两家的 token 计算方式不一样

同样一段中文文本,Gemini 3 算出来的 token 数比 GPT-5 多大概 15-20%。不能简单拿官方单价乘以 token 数来对比,得看实际花了多少钱。

graph TD
 A[用户请求] --> B{选择模型}
 B -->|长上下文/多模态/控成本| C[Gemini 3 Pro]
 B -->|Function Calling/指令遵循/中文| D[GPT-5]
 C --> E[ofox.ai 聚合网关]
 D --> E
 E --> F[统一响应格式]
 F --> G{质量检查}
 G -->|JSON 格式错误| H[json5 容错解析]
 G -->|通过| I[返回结果]
 H --> I

小结

跑完这一轮,我最后的方案是混用:文档 OCR 和长上下文分析用 Gemini 3(便宜、上下文长、多模态强),结构化输出和函数调用用 GPT-5(稳定、指令遵循好)。两个模型走同一个聚合接口,代码里只改 model 参数,切换成本几乎为零。

2026 年了,「一个模型打天下」基本不现实。搞清楚自己的场景需求,比纠结「谁更强」有用得多。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com