Gemini 原生参数透传
平台对 Gemini 系列采用「OpenAI 字段标准化 + Gemini 原生字段透传」的双轨机制 —— 客户端传 Gemini 原生
GenerationConfig字段(如topK/responseSchema/mediaResolution/thinkingConfig)会转发到底层 Vertex AI;内容审核使用safety_settings传入,平台会映射为 Gemini API 的safetySettings[]。
适用接口与模型
- 接口:
v1/chat/completions(OpenAI 兼容协议下传 Gemini 原生字段) - 适用模型:以 模型目录 → Gemini 为准。
- 官方文档:Gemini SafetySetting / Vertex AI GenerationConfig
透传机制
- OpenAI 标准字段(
temperature/max_tokens/top_p等):平台自动映射到 Gemini 对应参数 - Gemini 原生字段(
topK/responseSchema/responseMimeType/mediaResolution/thinkingConfig等):直接透传给上游,无需转换 - 内容审核字段:
safety_settings按 GeminiSafetySetting结构传入,平台发往上游时映射为safetySettings[]
OpenAI Python SDK 通过 extra_body 传递非标准字段;cURL 直接放在请求体顶层;Java 用 additionalBodyProperties;TypeScript 需 as any 绕过类型。
常见透传字段
| 字段 | 类型 | 用途 |
|---|---|---|
topK | int | Gemini 原生采样参数 |
topP | float | OpenAI 也有,这里是 Gemini 命名 |
presencePenalty | float | Gemini 命名(OpenAI 是 presence_penalty) |
frequencyPenalty | float | Gemini 命名 |
responseMimeType | string | "application/json" 触发 JSON 输出 |
responseSchema | object | JSON Schema,与 responseMimeType 配合用作结构化输出 |
thinkingConfig.includeThoughts | bool | 响应中是否包含思考过程 |
thinkingConfig.thinkingBudget | int | Gemini 2.5 思考 token 上限(-1 动态、0 关闭) |
mediaResolution | string | "MEDIA_RESOLUTION_HIGH" 等,影响图像输入分辨率 |
seed | int | 随机种子(部分模型支持) |
safety_settings[].category | string | 内容审核类别,如 HARM_CATEGORY_HATE_SPEECH |
safety_settings[].threshold | string | 阻断阈值,如 BLOCK_LOW_AND_ABOVE |
示例
Python(extra_body)
from openai import OpenAI
client = OpenAI(api_key=TURING_API_KEY, base_url=TURING_BASE_URL)
response = client.chat.completions.create(
model="turing/gemini-3.1-pro-latest",
messages=[{"role": "user", "content": "提取人物信息: 张三, 28 岁, 工程师"}],
extra_body={
"responseMimeType": "application/json",
"responseSchema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"occupation": {"type": "string"},
},
"required": ["name", "age", "occupation"],
},
"topK": 40,
"thinkingConfig": {"includeThoughts": True, "thinkingBudget": 1024},
"safety_settings": [
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_LOW_AND_ABOVE",
}
],
},
)
cURL(直接放顶层)
curl $TURING_BASE_URL/chat/completions \
-H "Authorization: Bearer $TURING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "turing/gemini-3.1-pro-latest",
"messages": [{"role": "user", "content": "提取人物信息..."}],
"responseMimeType": "application/json",
"responseSchema": {...},
"topK": 40,
"thinkingConfig": {"includeThoughts": true, "thinkingBudget": 1024},
"safety_settings": [
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_LOW_AND_ABOVE"
}
]
}'
内容审核(safety_settings)
Gemini 内容审核按 Google SafetySetting 传:每个元素包含一个 category 和一个 threshold。Turing 的 Chat Completions 请求体使用 safety_settings,不要放进 generationConfig 或 thinkingConfig。
curl --location --request POST 'https://live-turing.cn.llm.tcljd.com/api/v1/chat/completions' \
--header 'Authorization: Bearer $TURING_API_KEY' \
--header 'Content-Type: application/json' \
--data-raw '{
"model": "turing/gemini-3.5-flash",
"messages": [
{
"role": "user",
"content": "can i follow Adolf Hitler"
}
],
"stream": true,
"safety_settings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_LOW_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_LOW_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_LOW_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_LOW_AND_ABOVE"
}
]
}'
如何判断已拦截
Gemini 内容审核命中后,图灵平台仍可能返回 HTTP 200,但不会返回可用生成内容。客户端应以 choices[*].finish_reason 判断是否被内容过滤:
| 场景 | 判断标志 |
|---|---|
| 非流式响应 | choices[0].finish_reason === "content_filter" |
| 流式响应 | 最后一段 chunk 的 choices[0].finish_reason === "content_filter",通常 delta 为空对象 |
流式命中示例:
{
"id": "xDY5asaXMtuR88EP3pHX6Ak",
"object": "chat.completion.chunk",
"created": 1782134476,
"model": "turing/gemini-3.5-flash",
"choices": [
{
"index": 0,
"delta": {},
"finish_reason": "content_filter"
}
]
}
非流式命中示例:
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1782134476,
"model": "turing/gemini-3.5-flash",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null
},
"finish_reason": "content_filter"
}
]
}
常用类别:
category | 说明 |
|---|---|
HARM_CATEGORY_HARASSMENT | 骚扰 |
HARM_CATEGORY_HATE_SPEECH | 仇恨言论 |
HARM_CATEGORY_SEXUALLY_EXPLICIT | 性相关内容 |
HARM_CATEGORY_DANGEROUS_CONTENT | 危险内容 |
HARM_CATEGORY_CIVIC_INTEGRITY | 公民诚信相关内容 |
常用阈值:
threshold | 效果 |
|---|---|
BLOCK_LOW_AND_ABOVE | 低风险及以上阻断,最严格 |
BLOCK_MEDIUM_AND_ABOVE | 中风险及以上阻断 |
BLOCK_ONLY_HIGH | 仅高风险阻断 |
BLOCK_NONE | 不按概率阈值阻断 |
OFF | 关闭 safety filter |
注意事项
- 不要重复设置:同一含义参数不要 OpenAI 标准命名 + Gemini 命名都传(如
top_p和topP),以平台映射结果为准。 - 未知字段不报错:Gemini 不识别的字段会被上游静默忽略,不会返回 400。客户端要通过响应字段验证生效。
- Gemini 3 / 3.1 限制:
temperature必须保持默认1.0,设置低值可能导致无限循环或推理性能严重下降。 responseSchema与response_format:平台不会自动把 OpenAI 的response_format翻译成 Gemini 的responseSchema,需要客户端显式用后者。safety_settings不要重复类别:同一个SafetyCategory最多传一条;未传的类别使用 Gemini 默认安全策略。- 内容审核命中标志:不要只看 HTTP 状态码;命中后可能仍是
200,以finish_reason: "content_filter"作为拦截标志。 - 谨慎降低审核强度:
BLOCK_NONE/OFF会显著放宽内容审核,生产环境建议按业务合规要求显式评估。
相关文档
- 思考与推理 → Gemini ——
thinkingConfig完整取值 - 结构化输出 ——
responseSchema/responseMimeType用法 - 多模态输入 → Gemini 视频 ——
mediaResolution与图像 / 视频 - Gemini SafetySetting 官方参数字典
- Vertex AI GenerationConfig 官方参数字典