通过 OpenAI 兼容网关调用 Gemini API:curl、Python 与 Node 示例
发布于 2026-11-11
如果你搜的是「Gemini API」或「Gemini API 代理」,通常是想在不改动现有代码的前提下调用 Gemini 模型,或者想用同一个 Key 管理多个模型。简短版本是:在 Gemini 分组里创建 Key,把 OpenAI 客户端指向 https://origincoder.com/v1,再传入 Gemini 的模型名。本文用 OriginCoder 这个 AI API 网关演示 curl、Python 和 Node.js 的写法,并说明网关同时提供的 Gemini 原生格式路径。
利益声明:我们运营 OriginCoder,所以我们对网关这条路线有立场。你也可以直接使用 Google 官方的 Gemini API;下面的代码换成官方的地址和密钥照样能对照着跑。内容截至 2026 年 11 月。
该用哪个模型名
请使用控制台模型广场里 Gemini 对应的准确模型名。Gemini 的模型集合和名称会随 Google 的发布变化,我们不在这里列出具体名字,以模型价格页上的实时列表为准。示例里用 your-gemini-model 作占位,请换成从该页复制的名字。
准备工作
- 一个 OriginCoder 账号并有余额。注册账号。
- 一个属于 Gemini 模型分组的 API Key。分组决定这个 Key 能调用哪些模型,当前有哪些分组以控制台为准。只属于其他分组的 Key 调用 Gemini 的名字会返回「模型不存在」或权限类错误。
- 任意 OpenAI 兼容客户端:Python 或 Node.js 的官方 OpenAI SDK,或者直接发 HTTP。
方式一:OpenAI 兼容格式
这是最省事的路线:沿用 Chat Completions 格式,只改 Base URL、Key 和模型名。网关会把请求转换成 Gemini 能理解的格式再转发。
curl
curl https://origincoder.com/v1/chat/completions \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "your-gemini-model",
"messages": [{"role": "user", "content": "用两句话解释什么是互斥锁。"}]
}'
Python
from openai import OpenAI
client = OpenAI(
base_url="https://origincoder.com/v1",
api_key="sk-xxxx",
)
resp = client.chat.completions.create(
model="your-gemini-model",
messages=[{"role": "user", "content": "用两句话解释什么是互斥锁。"}],
)
print(resp.choices[0].message.content)
Node.js
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://origincoder.com/v1",
apiKey: "sk-xxxx",
});
const resp = await client.chat.completions.create({
model: "your-gemini-model",
messages: [{ role: "user", content: "用两句话解释什么是互斥锁。" }],
});
console.log(resp.choices[0].message.content);
不要把真实密钥写死在代码里,请从环境变量读取,例如 process.env.ORIGINCODER_API_KEY 或 os.environ["ORIGINCODER_API_KEY"]。
流式输出和 OpenAI API 一样:设置 stream=True(Python)或 stream: true(Node.js),然后遍历返回的数据块。
方式二:Gemini 原生格式
如果你的代码或工具本来就按 Gemini 官方接口写(例如 generateContent),网关也提供 /v1beta 下与官方路径形式一致的接口,包括 /v1beta/models/{model}:generateContent 和 /v1beta/models/{model}:streamGenerateContent?alt=sse。认证方式可以用 x-goog-api-key 请求头、Authorization: Bearer 请求头,或 key 查询参数。
curl "https://origincoder.com/v1beta/models/your-gemini-model:generateContent" \
-H "x-goog-api-key: sk-xxxx" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "用两句话解释什么是互斥锁。"}]}]
}'
用 Gemini 官方 SDK 时,需要把它的 API 地址改成 https://origincoder.com。不同 SDK 里这个选项的名字不一样,请以所用 SDK 的官方文档为准。原生格式下具体支持哪些方法和参数,也请以实测和控制台为准,不要默认它与官方完全一致。
为什么通过网关调用 Gemini
- 一个 Key 对接多个厂商。 改个模型名,代码就能在 Gemini、Claude、GPT、DeepSeek 之间切换,共用一份余额。什么情况下这很重要,见 AI 网关是什么。同样的写法对 DeepSeek 见 DeepSeek API 示例。
- 逐请求记录。 每次调用都会出现在控制台使用记录里,带 token 数和费用。
- 账单集中在一处, 不用为每个厂商分别开账号。
取舍也是网关的通用问题:你的提示词会经过第三方,网关也可能落后于厂商的最新功能。完整的权衡清单请读 LLM 网关对比。两种设置如何切换提供商、常见差异怎么排查,见 OpenAI 兼容 API 是什么。
常见问题排查
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 401 或「API Key 无效」 | Key 错误或被禁用 | 重新从控制台复制 |
| 404 | OpenAI 格式的 Base URL 缺少 /v1 或写了两遍;原生格式路径里 :generateContent 写错 |
OpenAI 客户端使用 https://origincoder.com/v1;原生格式核对路径 |
| 「模型不存在」或 403 | Key 所在分组不提供该模型,或名字拼错 | 从模型价格页复制名字,并使用 Gemini 分组的 Key |
| 429 | 触发速率限制 | 带退避重试,并在控制台检查该 Key 的限额 |
| 余额相关报错 | 没有余额 | 在控制台充值 |
价格与安全
Gemini 在 OriginCoder 上的按 token 价格显示在模型价格页,可能与 Google 官方价格不同,决定前请对比。请阅读服务条款了解你的数据如何处理,并避免发送机密信息。OriginCoder 是独立平台,与 Google 没有任何关联。