返回全部文章
指南

用 OpenAI SDK 调 Gemini API:只改 base_url、key 和模型名的接入教程

2026年6月14日 · 9 分钟阅读 · GPT / Gemini / Claude

米白背景上的开发者接入示意图:左侧是炭灰色代码窗口,三行配置 base_url、api_key、model 被赤陶色高亮;右侧是 Gemini API 云端节点;中间用细线箭头连接,底部有小型价格卡片和 SDK 图标化方块,无 logo,无

Google 已经把话说得很直:Gemini API 支持 OpenAI compatibility,可以用 OpenAI Python SDK、JavaScript SDK 和 REST 调用;官方示例里的 base_urlhttps://generativelanguage.googleapis.com/v1beta/openai/,模型名是 gemini-3.5-flashGoogle AI for Developers)。
这对已有 OpenAI SDK 代码的团队很实用。你不需要重写一套 client,不需要改消息结构,先把三处配置换掉,跑通,再决定要不要用 Gemini 原生能力。

米白背景的三步迁移流程图,左侧为 OpenAI SDK 旧配置卡片,中间赤陶色箭头标注“改 3 行”,右侧为 Gemini API 新配置卡片;三行分别是 base_url、api_key、model,使用炭灰细线和赤陶高亮

先看要改哪三处

Google 文档在示例后写得很清楚:变化就是 api_keybase_urlmodel 三项。OpenAI Python SDK 本身也支持配置 base_urlOPENAI_BASE_URLopenai-python),Node SDK 对应字段是 baseURLopenai-node)。

最小 Python 示例:

from openai import OpenAI

client = OpenAI(
    api_key="GEMINI_API_KEY",
    base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
)

resp = client.chat.completions.create(
    model="gemini-3.5-flash",
    messages=[
        {"role": "system", "content": "你是一个简洁的技术助手。"},
        {"role": "user", "content": "用一句话解释什么是向量数据库。"},
    ],
)

print(resp.choices[0].message.content)

如果你的老代码已经在用 client.chat.completions.create(),大概率只需要把初始化 client 的地方抽成配置项。别在业务函数里硬编码模型名,后面切 Batch、Flex 或换模型会更痛。

Node.js 也是同一套路

JavaScript 版本只把字段名从 base_url 换成 baseURL

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.GEMINI_API_KEY,
  baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/",
});

const resp = await client.chat.completions.create({
  model: "gemini-3.5-flash",
  messages: [{ role: "user", content: "给我一个 Redis 限流方案。" }],
});

console.log(resp.choices[0].message.content);

REST 也能直接打:POST https://generativelanguage.googleapis.com/v1beta/openai/chat/completions,请求头用 Authorization: Bearer $GEMINI_API_KEY。这点适合先用 curl 排除 SDK、代理、环境变量问题。

紧凑的架构示意图,左侧三种入口 Python SDK、Node SDK、REST 以小卡片呈现,汇入同一个 OpenAI-compatible endpoint,再连接到 Gemini 3.5 Flash;米白底,赤陶箭头,炭灰标签,无品牌

价格别凭感觉,按输出算

截至 2026-06-14,Gemini 官方 pricing 页列出的 gemini-3.5-flash 标准价是输入 $1.50 / 1M tokens、输出 $9.00 / 1M tokens,Batch 和 Flex 都是输入 $0.75 / 1M tokens、输出 $4.50 / 1M tokensGemini API pricing)。官方还写明输出价包含 thinking tokens,所以推理型任务不要只盯输入价。

模式 输入 / 1M tokens 输出 / 1M tokens 适合场景
Standard $1.50 $9.00 在线请求、低延迟
Batch $0.75 $4.50 离线批处理
Flex $0.75 $4.50 可接受弹性调度

我的建议很简单:聊天、Agent、编辑器插件先走 Standard;日志总结、数据清洗、离线评测尽量走 Batch/Flex。输出长的任务,成本差距会被放大。

迁移时最容易踩的坑

第一,base_url 末尾的 /openai/ 不要漏。很多 404、模型不存在,本质是打到了 Gemini 原生路径,不是兼容路径。
第二,环境变量分清楚。OPENAI_API_KEY 可以继续给 OpenAI 用,Gemini 建议单独放 GEMINI_API_KEY,不要让 CI 里两个 provider 抢同一个变量。
第三,先跑 models.list()。Google 文档给了列模型和取模型的示例,生产前用它确认账号区域、权限、模型 ID 都没问题。
第四,流式、函数调用、图像输入这些能力在兼容层有示例,但别默认所有 OpenAI 参数都一比一支持。先用一条真实业务请求做回归。

如果你想少维护一套 key

如果团队同时用 Claude、GPT、Gemini,逐个申请、绑卡、配限额很烦。省事路径是用 onehop:把 OpenAI SDK 的 base_url 改成 https://api.onehop.ai/v1,用 onehop 的 key,就能走 OpenAI/Anthropic 兼容接口调用 Claude、GPT、Gemini。它的定位是帮你少折腾接入;价格低于官方,新账号送 $10,无需绑卡。

from openai import OpenAI

client = OpenAI(
    api_key="ONEHOP_API_KEY",
    base_url="https://api.onehop.ai/v1",
)

resp = client.chat.completions.create(
    model="gemini-3.5-flash",
    messages=[{"role": "user", "content": "把这段报错日志总结成三条原因。"}],
)

print(resp.choices[0].message.content)

想试 Claude 或多模型路由,可以直接看:在 onehop 上调用 Claude 等模型。想先跑一个小样例,不想绑卡,走这个入口:注册即送 $10 体验额度

结论:先做成配置,不要写死供应商

这次 Gemini 的 OpenAI compatibility 最有价值的地方,不是“又多一个模型”,而是迁移成本足够低。把 base_urlapi_keymodel 放进配置,业务代码继续用 OpenAI SDK 的 chat completions。
跑通后再补三件事:记录输入/输出 tokens,按任务选择 Standard 或 Batch/Flex,把模型 ID 做成灰度开关。这样你今天接 Gemini,明天接 Claude 或别的兼容服务,都不会再动核心业务代码。