Generate Content
最近更新:2026年8月31日
Google Gemini generateContent 协议的推理端点,兼容官方 SDK,可调任意支持该协议的模型。
这个端点兼容 Google Gemini 的 generateContent 接口,可直接配合官方 SDK 使用,只需将请求地址指向本站。
鉴权沿用 Gemini 的原生方式:x-goog-api-key: <你的 Amux 密钥>,或 URL 上的 ?key=。
下表列出主要请求参数,包含取值范围、跨协议调用时的处理方式,以及使用上的前置条件。Gemini 原生字段在兼容路径上会尽量保留,但计费相关字段和跨协议不兼容项仍可能被拦截、归一化或丢弃。
https://gateway.amux.ai/v1beta/models/{model}:generateContent鉴权
headerAuthorizationstring必填控制台创建的 Amux 密钥。这是 Gemini SDK 原生发送的鉴权头; Authorization: Bearer 与 URL 上的 ?key= 同样接受。
Content-Typestring必填默认 "application/json"固定为 application/json。
请求
application/jsonmodelstring必填规范 ID,写在路径里(Gemini 把模型名与动作拼进地址)。厂商/模型 中的斜杠不要转义。冒号后缀同样可用::供应商 锁定某一家,:@策略 指定排序,写 在动作之前(models/厂商/模型:@price:generateContent)。
contentsarray<object>必填对话内容列表。助手一侧的角色叫 model,不是 assistant。
›contentsarray<object>
role"user" | "model"角色。助手一侧叫 model,不是 assistant。
partsarray<object>必填内容片段。文本写 { text: "…" },多模态用 inlineData。
›partsarray<object>
textstring文本片段。
systemInstructionobject系统指令,形状同 contents 的一项。不是 contents 里的一条。
generationConfigobject采样与输出配置。Gemini 把别家放在顶层的参数都收在这里——temperature、maxOutputTokens、stopSequences(最多 5 条)、thinkingConfig 等,逐个见下。
›generationConfigobject
temperaturenumber采样温度,0–2。转到 Anthropic 时会被压到 1。
topPnumber核采样。与 temperature 二选一,不建议同时调。
topKintegertop-k 采样。OpenAI 系协议没有对等物,转过去时丢弃。转到 Anthropic 要留意:Opus 4.6 之后的模型拒收 top_k, 整个请求会 400。
candidateCountinteger生成几条候选,相当于 Chat 的 n。跨协议时默认不传递。计费按实际返回的总 token 数。
maxOutputTokensinteger本次生成的最大 token 数。相当于 Chat 的 max_tokens。
stopSequencesarray<string>停止词,最多 5 条。转到 Chat 时压到 4 条并留说明。
presencePenaltynumber存在惩罚。Anthropic 没有对等物,转过去时丢弃。
frequencyPenaltynumber频率惩罚。同上。
seedinteger采样种子。Chat 有对等物,Anthropic 与 Responses 没有。
responseMimeTypestring输出的 MIME 类型,application/json 或 text/plain。从别家的 JSON 约束转过来时写的就是这个。
responseSchemaobject输出要满足的 schema,Gemini 自己那套子集。
responseJsonSchemaobject输出要满足的标准 JSON Schema。从 Chat 的 response_format.json_schema 转过来时落在这里。
responseLogprobsboolean是否返回 token 概率。跨协议时默认不传递。
logprobsinteger每个位置返回几个候选的概率,需同时开 responseLogprobs。跨协议时默认不传递。
thinkingConfigobject思考配置。两种写法(token 预算 / 档位)互斥,见各自说明。
›thinkingConfigobject
includeThoughtsboolean是否把思考内容一起返回。只是开关,没有详略之分——所以 Responses 的 reasoning.summary 转过来时只能落实 「要不要」这一半。
thinkingBudgetinteger思考的 token 预算。0 表示关闭思考,这是 Gemini 唯一的关闭方式(没有布尔开关)。
thinkingLevelstring档位式的思考强度,Gemini 3 起推荐用它。不能和 thinkingBudget 同时给——两个都写上游直接返回 400。
responseModalitiesarray<"TEXT" | "IMAGE" | "AUDIO">要模型返回哪些模态。填非 TEXT 的值会改变计价维度(上游按张、按秒计),而这个端点的价格表只有按 token 的档, 详见 generationConfig 的说明。
mediaResolution"LOW" | "MEDIUM" | "HIGH"输入媒体的解析精度,决定一张图折算多少 token。用量如实回来,按实际计价。
speechConfigobject语音输出配置。原样透传,跨协议时默认不传递。
imageConfigobject图像输出配置。原样透传,跨协议时默认不传递。
labelsobject自定义键值标签,Google 侧用来拆分它那边的账单。原样透传,不影响我们这边的计费。
toolsarray<object>可调用的工具,{ functionDeclarations: [{ name, description, parameters }] }。注意外面多包了一层。
toolConfigobject工具选择。functionCallingConfig.mode 取 AUTO / ANY / NONE,对应别家的 tool_choice。
›toolConfigobject
functionCallingConfigobjectmode 取 AUTO / ANY / NONE,对应别家的 tool_choice;allowedFunctionNames 可把可调用范围限定到几个。
safetySettingsarray<object>安全策略阈值。Gemini 独有,原样透传。
cachedContentstring显式缓存的内容句柄。Gemini 独有,原样透传——它是上游侧的状态,只在锁定了供应商时可靠。 命中缓存的部分会以更低的单价回到用量里,按实际发生的计价即可,我们不拦。
serviceTier"standard" | "flex" | "priority"服务档位。不支持——我们不会把它转发给任何上游,两条路径都摘,serviceTier 与 service_tier 两种写法一视同仁。 带了它不会报错,摘了什么会告诉你:非流式在响应体的 amux.droppedParams,流式在 x-amux-dropped-params 响应头。
storeboolean是否让上游记录本次请求。原样透传,我们自己不留存请求正文。
响应
200response推理成功。
402response余额不足。这类错误不重试,也不影响任何供应商的健康度。
路径与版本段
Gemini 会把模型名和动作写入 URL,这一点与其他兼容协议的固定路径形式不同:
POST /v1beta/models/anthropic/claude-opus-5:generateContent
- 同时支持
v1beta与v1。 Google 官方文档当前主要展示v1beta。 - 流式是另一个动作:将末尾的
:generateContent替换为:streamGenerateContent。官方 SDK 通常还会配合alt=sse;省略alt时返回持续增长的 JSON 数组,而不是 SSE。 - 模型名里的斜杠不要转义。
与其他兼容协议的三个差异
- 系统提示词在顶层
systemInstruction,不是内容数组里的一条。 - 助手一侧的角色叫
model,不是assistant。 candidatesTokenCount不含思考 token,而站内账单里的输出 token 是含的。
错误
错误按 Gemini 的错误体形状返回,status 取值与重试语义见错误与重试。
curl https://gateway.amux.ai/v1beta/models/google/gemini-3-pro:generateContent \
-H "x-goog-api-key: $AMUX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Hello!"
}
]
}
]
}'{
"candidates": [
{
"content": {
"role": "user",
"parts": [
{
"text": "Hello!"
}
]
},
"finishReason": "STOP"
}
],
"usageMetadata": {
"promptTokenCount": 0,
"candidatesTokenCount": 0,
"totalTokenCount": 0
}
}