generateContent 的 REST 契约,所以
google-generativeai Python SDK 和 @google/generative-ai JS SDK 都能
原样使用 —— 切换 base URL 和你的 apiKey 即可。跨厂商模型(Claude、
GPT、DeepSeek、Doubao)在底下被翻译成 Gemini 形状。
何时使用
以下情况选这个端点:google-generativeai/ Gemini SDK 客户端的直接替换- Gemini 独有的特性 比如带 Gemini 风格 JSON schema 的
responseSchema,或safetySettings - 已经围绕
contents[].parts[]组织代码 的项目(和 OpenAI / Anthropic 的messages不一样)
/v1/messages;要 OpenAI 形状用 /chat/completions。
请求
{model} 是模型 slug(例如 gemini-3-1-pro)。流式请用配套的 :streamGenerateContent 路径 —— 见下文 流式。
请求头
| Header | 是否必填 | 说明 |
|---|---|---|
x-goog-api-key | 是 | 你的 ByteSpike key。(也接受 Authorization: Bearer …。) |
content-type | 是 | application/json。 |
Body
| 字段 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
contents | array | 是 | 对话轮次。每项含 role(user / model)+ parts[]。 |
systemInstruction | object | 否 | {"parts":[{"text": "…"}]} —— Gemini 的 system prompt 位。 |
generationConfig.maxOutputTokens | integer | 否 | 响应长度硬上限。 |
generationConfig.temperature | number | 否 | 0.0–2.0。 |
generationConfig.topP | number | 否 | Nucleus sampling。 |
generationConfig.topK | integer | 否 | Top-K 采样。 |
generationConfig.stopSequences | string[] | 否 | 自定义 stop token。 |
generationConfig.responseMimeType | string | 否 | application/json 强制 JSON 输出。 |
generationConfig.responseSchema | object | 否 | Gemini 形状 JSON schema 约束。 |
tools | array | 否 | Function 声明 —— 见 工具调用。 |
toolConfig | object | 否 | {"functionCallingConfig": {"mode": "ANY"|"AUTO"|"NONE"}}。 |
safetySettings | array | 否 | 按类别的阈值(HARM_CATEGORY_HARASSMENT 等)。转发给 Gemini 模型。 |
响应
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
candidates[].content.parts[] | array | 文本和/或 functionCall parts。 |
candidates[].finishReason | string | STOP、MAX_TOKENS、SAFETY、RECITATION。 |
candidates[].safetyRatings | array | Gemini 的内容安全评分。 |
usageMetadata.promptTokenCount | integer | 输入计费 token 数。 |
usageMetadata.candidatesTokenCount | integer | 输出计费 token 数。 |
计费类请求头
与其他端点一致的信封:流式 [#streaming]
用配套路径:streamGenerateContent:
alt=sse),每一帧带部分 candidates payload:
alt=sse 时,响应是一个 JSON 数组的帧 —— SDK 的默认行为。)
工具调用 [#tool-calling]
Gemini 的tools[].functionDeclarations[] 形状。两次请求轮转:
第一轮 —— 提供工具
functionCall part:
args 是 结构化对象,不是 JSON 字符串(与 OpenAI 的 tool_calls.arguments 不同)。
第二轮 —— 回传工具结果
多模态(图像 / 音频 parts)
把 base64 编码的图像直接内联到 user 消息的 part 上:fileData.fileUri(要求文件可通过 HTTPS 公开访问)。多模态模型上音频(audio/wav、audio/mp3)和视频(video/mp4)parts 的用法相同。
跨模型路由
路径中的{model} 段接受 任意 ByteSpike 目录模型 —— 网关把 Gemini 形状翻译成各模型的原生协议:
responseSchema约束需要模型支持结构化输出;否则返回 400unsupported_feature。safetySettings仅在 Gemini 模型上被尊重 —— 在 Claude / GPT / DeepSeek 上被静默忽略(它们有自己的安全栈)。- 不论用哪个模型,
usageMetadata字段名始终是 Gemini 形状。
GET /v1/models。按模型计价:bytespike.ai/pricing。
错误
所有非 2xx 响应 免费。Body 形状与 Gemini 的错误信封一致:| Status | error.status | 触发 |
|---|---|---|
| 400 | INVALID_ARGUMENT | Body 校验失败。message 指出字段。 |
| 400 | INVALID_ARGUMENT(msg unsupported_model) | model slug 不在范围。 |
| 400 | INVALID_ARGUMENT(msg unsupported_feature) | 例如对非结构化输出模型用 responseSchema。 |
| 401 | UNAUTHENTICATED | key 缺失 / 已撤销。 |
| 402 | FAILED_PRECONDITION(msg insufficient_credits) | 钱包用尽。 |
| 403 | PERMISSION_DENIED | 范围拒绝、IP 白名单、模型受限。 |
| 404 | NOT_FOUND | 路径打错或未知 model id。 |
| 429 | RESOURCE_EXHAUSTED | tier 速率限制。按 x-ratelimit-reset-* 退避。 |
| 5xx | INTERNAL / UNAVAILABLE | 上游 provider 问题。免费 + 自动重试信封。 |
SDK 示例
google-generativeai Python SDK,base URL 指向 ByteSpike: