上周接了个私活,甲方指定要用 Gemini 3 做多模态内容理解——图片识别 + 长文本总结一条龙。我心想这不简单嘛,去 Google AI Studio 拿个 Key 直接干。结果一跑起来,延迟动不动飙到 3-5 秒,偶尔还 timeout,甲方那边催得紧,我硬是折腾了两天才找到一个稳定低延迟的接入方案。把过程记录下来,省得有人再踩同样的坑。
核心思路是:要么选对区域端点配好连接池,要么直接走聚合 API 网关让供应商帮你做线路优化。 实测下来,方案二改一行 base_url 就能搞定,延迟稳定在 300ms 左右,是我目前在用的方案。
先说结论
| 方案 | 首字延迟(P50) | 稳定性 | 上手成本 | 适用场景 |
|---|---|---|---|---|
| 方案一:Google 官方 SDK + VertexAI 端点 | 800-1500ms | 一般,偶尔超时 | 中等,需配 GCP 项目 | 对 Google 生态有深度依赖 |
| 方案二:聚合 API(OpenAI 兼容协议) | 约 300ms | 稳,多供应商冗余 | 极低,改个 URL | 快速接入、多模型切换 |
下面两种方案我都写了完整代码,直接抄就行。
环境准备
Python 3.10+,装好这几个包:
pip install google-generativeai openai httpx
用 Node.js / TypeScript 的话,方案二的代码也适用,因为走的是 OpenAI 兼容协议。
方案一:Google 官方 SDK 直连
用 google-generativeai 这个官方包接:
import google.generativeai as genai
import time
genai.configure(api_key="your-google-api-key")
model = genai.GenerativeModel("gemini-3-pro")
start = time.time()
response = model.generate_content(
"用 200 字总结一下 Transformer 架构的核心创新点",
generation_config=genai.types.GenerationConfig(
temperature=0.7,
max_output_tokens=512,
),
)
elapsed = time.time() - start
print(f"耗时: {elapsed:.2f}s")
print(response.text)
跑起来是能跑的,但体验一般。我测了 50 次,延迟分布大概是这样:
- P50:1.2s
- P90:2.8s
- P99:有几次直接 timeout 了
要想稳定低延迟,还得折腾 VertexAI 端点——配 GCP 项目、开 API、设 region,光这套流程就够喝一壶的。另外 Google 官方 SDK 的协议跟 OpenAI 不兼容,项目里同时用了 GPT-5 或者 Claude Opus 4.6,就得维护两套 client 代码,烦得要死。
方案二:聚合 API + OpenAI 兼容协议(推荐)
这是我最终用的方案。不直接对接 Google,通过聚合网关走,它后面帮你做线路优化和多供应商冗余。
整个调用链路长这样:
graph LR
A[你的代码] -->|OpenAI 协议| B[ofox.ai 聚合网关]
B -->|最优线路| C[Gemini 3 Pro]
B -->|备用线路| D[VertexAI 端点]
B -->|冗余| E[其他供应商节点]
style B fill:#f9f,stroke:#333,stroke-width:2px
你的代码用的是 OpenAI SDK 的标准协议,只要改一个 base_url,就能调 Gemini 3。以后想切 GPT-5 或者 Claude Opus 4.6,改个 model 名字就行,client 代码一行不动。
完整代码:
from openai import OpenAI
import time
client = OpenAI(
api_key="your-ofox-key",
base_url="https://api.ofox.ai/v1"
)
# 普通文本生成
start = time.time()
response = client.chat.completions.create(
model="gemini-3-pro",
messages=[
{"role": "system", "content": "你是一个技术顾问,回答简洁专业。"},
{"role": "user", "content": "用 200 字总结 Transformer 架构的核心创新点"}
],
temperature=0.7,
max_tokens=512,
)
elapsed = time.time() - start
print(f"耗时: {elapsed:.2f}s")
print(response.choices[0].message.content)
实测 50 次延迟数据:
- P50:310ms
- P90:480ms
- P99:620ms
没有一次 timeout,稳得一批。
流式输出(Streaming)
实际项目里大概率要用 streaming,代码也简单:
stream = client.chat.completions.create(
model="gemini-3-pro",
messages=[
{"role": "user", "content": "解释一下 MoE(混合专家)架构的工作原理"}
],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
print() # 换行
首 token 到达时间大概 280ms,体感上就是「刚按回车字就开始蹦出来了」。
多模态(Vision)调用
传图片的写法:
import base64
def encode_image(image_path):
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
base64_image = encode_image("screenshot.png")
response = client.chat.completions.create(
model="gemini-3-pro",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "这张截图里有什么 bug?"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{base64_image}"
},
},
],
}
],
max_tokens=1024,
)
print(response.choices[0].message.content)
图片理解的延迟会长一些,实测 P50 大概 900ms,但比官方直连的 2-3s 还是快了不少。
踩坑记录
坑 1:官方 SDK 的 safety_settings 默认太严格
用 Google 官方 SDK 时,有些正常的技术内容会被安全过滤器拦截,返回空内容。需要手动把 safety settings 调松:
# 官方 SDK 才需要这样配,走 OpenAI 协议不用管
safety_settings = [
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
]
走聚合 API 的 OpenAI 协议就没这个问题,网关层已经处理好了。
坑 2:gemini-3-pro 和 gemini-3-flash 别搞混
Flash 版本便宜但能力弱一些,Pro 版本贵但多模态能力强。我一开始图便宜用了 flash,结果图片理解翻车率很高,甲方验收没过,又换回 pro。建议先用 pro 验证效果,上线后再考虑降级 flash 省成本。
坑 3:max_tokens 设太大会拖慢响应
Gemini 3 Pro 支持超长输出,但设 max_tokens=8192 的时候,即使实际输出只有 200 字,首字延迟也会变长。按实际需求设就行,通常 512-1024 够用。
小结
Gemini 3 的多模态能力确实不错,图片理解这块比 GPT-5 Vision 准一些(个人体感,不同场景可能不一样)。
接入方案上,不想折腾 GCP 那套东西的话,直接用聚合 API 省事。ofox.ai 是一个 AI 模型聚合平台,一个 API Key 可以调用 Gemini 3、GPT-5、Claude Opus 4.6、DeepSeek V3 等 50+ 模型,兼容 OpenAI 协议,支持支付宝付款,按量计费免费版可起步。我现在手上三个项目都在用,就图一个「改 model 名就能切模型」的方便。
代码都贴了,直接复制能跑,有问题评论区聊。