Gemini 3 API 怎么低延迟接入?2026 实测两种方案,附完整代码

5 阅读5分钟

上周接了个私活,甲方指定要用 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-progemini-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 名就能切模型」的方便。

代码都贴了,直接复制能跑,有问题评论区聊。