Gemini Native API
Google Gemini 原生协议端点。让你直接用 Google 官方 SDK(google-genai / @google/genai)零代码改动接入 Picklyone,享受 Gemini 全部多模态能力。
💡 如果你已经在用 OpenAI SDK,继续走
/v1/chat/completions也能调 Gemini —— 只需把model改成gemini-2.5-flash等 Gemini 模型名即可,不必切到本端点。
什么时候用 Gemini Native: 你原本在用 Google 官方 SDK / 需要 Gemini 独有能力(精确思考预算、safetySettings精细控制、avgLogprobs置信度输出)/ 想要零翻译漂移的 token 对账。
什么时候继续用 OpenAI 格式: 跨多家模型(GPT + Claude + Gemini)用统一一套代码 / 从 OpenAI 迁来不想改 SDK。
端点
| 用途 | 端点 |
|---|---|
| 非流式生成 | POST /v1beta/models/{model}:generateContent |
| 流式生成(SSE) | POST /v1beta/models/{model}:streamGenerateContent?alt=sse |
{model} 替换为模型 ID,例如 gemini-2.5-flash。
鉴权(支持 3 种方式)
任选其一即可,推荐使用 header 方式:
1. Authorization header(推荐)
Authorization: Bearer pk_live_xxxxxxxxxxxxxxxx
2. x-api-key header
x-api-key: pk_live_xxxxxxxxxxxxxxxx
3. ?key= query 参数(Google SDK 默认方式)
POST /v1beta/models/{model}:generateContent?key=pk_live_xxxxxxxxxxxxxxxx
⚠️
?key=方式 API Key 会出现在 URL 中,可能被 CDN 日志、浏览器历史记录捕获。生产环境优先用 header 方式。
请求体
完全遵循 Google 官方 generateContent 文档。常用字段:
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
contents | array | ✓ | 对话历史,每条含 role(user/model)和 parts 数组 |
systemInstruction | object | ✗ | 系统指令,结构 {parts: [{text: "..."}]} |
generationConfig | object | ✗ | 输出参数(maxOutputTokens / temperature / topP / topK / thinkingConfig 等) |
tools | array | ✗ | Function calling 工具定义 |
toolConfig | object | ✗ | 工具调用模式配置 |
safetySettings | array | ✗ | 安全阈值精细控制 |
cachedContent | string | ✗ | 引用已创建的 cached content 资源(暂未支持创建端点) |
示例:纯文本对话
curl https://api.picklyone.com/v1beta/models/gemini-2.5-flash:generateContent \
-H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{ "parts": [{ "text": "你好,请用一句话介绍下你自己" }] }
],
"generationConfig": {
"maxOutputTokens": 512
}
}'
响应:
{
"candidates": [{
"content": {
"role": "model",
"parts": [{ "text": "你好!我是 Gemini..." }]
},
"finishReason": "STOP",
"avgLogprobs": -1.23
}],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 50,
"totalTokenCount": 60,
"thoughtsTokenCount": 0
},
"modelVersion": "gemini-2.5-flash"
}
示例:流式输出
curl https://api.picklyone.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse \
-H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"contents": [{ "parts": [{ "text": "讲一个一句话故事" }] }],
"generationConfig": { "maxOutputTokens": 1024 }
}'
返回 SSE 格式,每个 chunk:
data: {"candidates":[{"content":{"role":"model","parts":[{"text":"从前..."}]}}],"modelVersion":"gemini-2.5-flash"}
data: {"candidates":[{"content":{"role":"model","parts":[{"text":"有一只猫"}]},"finishReason":"STOP"}],"usageMetadata":{"promptTokenCount":5,"candidatesTokenCount":15,"totalTokenCount":20}}
最后一个 chunk 含完整 usageMetadata —— 实际客户端用 Google SDK 时不用手动解析,SDK 会自动累加。
示例:多模态(图片识别)
在 parts 数组里加 inline_data(base64 编码的图片):
IMG_B64=$(base64 -w 0 photo.jpg)
curl https://api.picklyone.com/v1beta/models/gemini-2.5-flash:generateContent \
-H "Authorization: Bearer pk_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d "{
\"contents\": [{
\"parts\": [
{ \"text\": \"这张图里是什么?\" },
{ \"inline_data\": { \"mime_type\": \"image/jpeg\", \"data\": \"$IMG_B64\" } }
]
}]
}"
支持的 MIME 类型:image/jpeg / image/png / image/webp / image/heic / image/heif。
注意:单次请求 body 总大小限制为 30MB,超大文件(视频/PDF 等)的 Files API 暂未支持。
示例:思考预算精确控制
gemini-2.5-flash 等模型支持显式控制推理(thinking)token 预算:
{
"contents": [{ "parts": [{ "text": "..." }] }],
"generationConfig": {
"maxOutputTokens": 2048,
"thinkingConfig": {
"thinkingBudget": 1024
}
}
}
thinkingBudget 取值含义:
| 值 | 行为 |
|---|---|
0 | 关闭思考,立即输出 |
> 0 | 精确指定思考预算(token 数) |
-1 | 不限,模型自行决定 |
💡 思考型模型默认会消耗大量 token 推理。如果你只要短回复,建议显式设置
thinkingBudget: 0或较小值,否则max_tokens会被推理吃光,可见输出不完整。
用 Google 官方 SDK 接入
这是 Gemini Native 端点最大的卖点 —— 改 1 行 baseUrl 就能从 Google 官方迁移。
Python(google-genai)
from google import genai
client = genai.Client(
api_key="pk_live_xxxxxxxxxxxxxxxx",
http_options={"base_url": "https://api.picklyone.com"},
)
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="你好",
)
print(response.text)
Node.js(@google/genai)
import { GoogleGenAI } from "@google/genai";
const ai = new GoogleGenAI({
apiKey: "pk_live_xxxxxxxxxxxxxxxx",
httpOptions: { baseUrl: "https://api.picklyone.com" },
});
const response = await ai.models.generateContent({
model: "gemini-2.5-flash",
contents: "Hello",
});
console.log(response.text);
业务代码完全不动,SDK 行为、字段名、错误处理全部保留 Google 官方语义。
Token 计费说明
Gemini 的 usageMetadata 字段按以下方式计入账单:
| 字段 | 计费方式 |
|---|---|
promptTokenCount | 按模型的 input_price 计 |
candidatesTokenCount | 按 output_price 计(可见输出) |
thoughtsTokenCount | 按 output_price 计(思考 token 也算输出) |
cachedContentTokenCount | 按 cache_read_price 计(远低于 input_price) |
多模态图片输入的 token 数会出现在 promptTokensDetails[modality=IMAGE],按 input_price 计费(与文本 token 同价)。
错误响应格式
错误返回 Google 原生格式:
{
"error": {
"code": 404,
"message": "Model 'xxx' is not available",
"status": "NOT_FOUND"
}
}
常见错误码:
| HTTP | status | 含义 |
|---|---|---|
| 401 | UNAUTHENTICATED | API Key 无效或缺失 |
| 403 | PERMISSION_DENIED | Key 没权限访问该模型,或账户被封 |
| 404 | NOT_FOUND | 模型不存在或已下线 |
| 402 | FAILED_PRECONDITION | 余额不足 |
| 429 | RESOURCE_EXHAUSTED | 触发速率限制或并发上限 |
| 502 | UNAVAILABLE | 上游网关故障 |
| 501 | UNIMPLEMENTED | 该端点暂未实现 |
当前已支持/未支持端点对照
| Google 端点 | Picklyone 支持 |
|---|---|
:generateContent 非流式 | ✅ 完整支持 |
:streamGenerateContent 流式 | ✅ 完整支持(SSE 格式) |
:countTokens token 预计数 | ❌ 暂未实现 |
:embedContent / :batchEmbedContents | ❌ 暂未实现(Embedding 客户请用 OpenAI 兼容端点) |
Google 格式 GET /v1beta/models | ❌ 请改用 /v1/models(OpenAI 格式) |
Files API(/v1beta/files) | ❌ 暂未实现,大文件请用 inline_data(30MB 上限) |
| Cached Content 显式创建 | ❌ 暂未实现 |
Imagen 文生图(:predict) | ❌ 文生图请用 /v1/images/generations |
Batch 异步(:batchGenerateContent) | ❌ 暂未实现 |
支持的 Gemini 模型
请到 模型列表 查看当前可用的全部模型。所有 gemini-* 系列模型都可以走 Gemini Native 端点。
如果某个模型同时出现在 OpenAI 兼容端点和 Gemini Native 端点中,你可以任意选择协议调用,billing 和速率限制完全一致。