一个零密钥、全功能透传的 Google Gemini API 代理。
通过 Netlify Edge Functions 部署,支持 generateContent、streamGenerateContent、文件上传/删除、Resumable 上传、SSE 等所有官方能力。
可直接部署到netlify上
- 🔐 无服务端密钥:调用方自带
X-Goog-Api-Key或?key=,代理不保存 Key - 🔁 零改写透传:路径、参数、方法、头、Body 全部原样转发
- 🌀 流式支持:
…:streamGenerateContentSSE 原样透传 - 📦 文件上传:直传小文件 + Resumable 大文件分块上传
- 🌍 跨域友好:默认 CORS
*,生产可改为白名单域名
把官方的
https://generativelanguage.googleapis.com
换成你的 Netlify 域名并加上 /api/gemini 前缀即可。
| 功能 | 官方 URL | 代理 URL |
|---|---|---|
| 列模型 | .../v1beta/models |
https://<your-site>.netlify.app/api/gemini/v1beta/models |
| 生成内容 | .../v1beta/models/{model}:generateContent |
https://<your-site>.netlify.app/api/gemini/v1beta/models/{model}:generateContent |
| 流式生成 | .../v1beta/models/{model}:streamGenerateContent |
https://<your-site>.netlify.app/api/gemini/v1beta/models/{model}:streamGenerateContent |
| 上传文件 | .../upload/v1beta/files |
https://<your-site>.netlify.app/api/gemini/upload/v1beta/files |
| 文件列表 | .../v1beta/files |
https://<your-site>.netlify.app/api/gemini/v1beta/files |
| 文件详情 / 删除 | .../v1beta/files/{id} |
https://<your-site>.netlify.app/api/gemini/v1beta/files/{id} |
curl -H "X-Goog-Api-Key: YOUR_KEY" \
"https://<your-site>.netlify.app/api/gemini/v1beta/models"curl -X POST "https://<your-site>.netlify.app/api/gemini/v1beta/models/gemini-2.5-flash:generateContent" \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_KEY" \
-d '{"contents":[{"parts":[{"text":"Say hi in 10 words"}]}]}'curl -N -X POST "https://<your-site>.netlify.app/api/gemini/v1beta/models/gemini-2.5-flash:streamGenerateContent" \
-H "Content-Type: application/json" \
-H "X-Goog-Api-Key: YOUR_KEY" \
-d '{"contents":[{"parts":[{"text":"Count 1..5"}]}]}'curl -X POST "https://<your-site>.netlify.app/api/gemini/upload/v1beta/files" \
-H "X-Goog-Api-Key: YOUR_KEY" \
-H "Content-Type: application/pdf" \
--data-binary @doc.pdfcurl -X DELETE "https://<your-site>.netlify.app/api/gemini/v1beta/files/{fileId}" \
-H "X-Goog-Api-Key: YOUR_KEY"安装官方 Gemini SDK:
pip install google-generativeaiimport google.generativeai as genai
genai.configure(api_key="YOUR_KEY")
model = genai.GenerativeModel("gemini-2.5-flash")
resp = model.generate_content("Say hi in 10 words")
print(resp.text)import requests
API_KEY = "YOUR_KEY"
BASE_URL = "https://<your-site>.netlify.app/api/gemini/v1beta"
url = f"{BASE_URL}/models/gemini-2.5-flash:generateContent"
headers = {
"Content-Type": "application/json",
"X-Goog-Api-Key": API_KEY,
}
payload = {
"contents": [{"parts": [{"text": "Say hi in 10 words"}]}]
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json())import requests
API_KEY = "YOUR_KEY"
BASE_URL = "https://<your-site>.netlify.app/api/gemini/v1beta"
url = f"{BASE_URL}/models/gemini-2.5-flash:streamGenerateContent"
headers = {
"Content-Type": "application/json",
"X-Goog-Api-Key": API_KEY,
}
payload = {
"contents": [{"parts": [{"text": "Count 1..5, one per line"}]}]
}
with requests.post(url, headers=headers, json=payload, stream=True) as r:
for line in r.iter_lines():
if line:
print(line.decode("utf-8"))import requests
API_KEY = "YOUR_KEY"
BASE_URL = "https://<your-site>.netlify.app/api/gemini"
url = f"{BASE_URL}/upload/v1beta/files"
headers = {
"X-Goog-Api-Key": API_KEY,
"Content-Type": "application/pdf",
}
with open("doc.pdf", "rb") as f:
resp = requests.post(url, headers=headers, data=f)
print(resp.json())- API Key:请求必须带
X-Goog-Api-Key: <your_key>或?key= - CORS:默认
*,生产建议改为指定域名 - Windows CMD JSON:请注意引号转义,推荐使用
--data-binary @payload.json
MIT