generateContent、batchEmbedContents、Imagen predict)路由 Gemini 的聊天、Responses、嵌入(Embeddings)和图片请求。如果您需要原生适配器尚未实现的兼容行为(尤其是远程 image_url 值),请切换到兼容 OpenAI 的端点。
配置
config.yaml 中配置:
当未设置按提供商的
GEMINI_API_MODE 时,USE_GOOGLE_GEMINI_NATIVE_API 仍作为旧版全局开关生效。建议使用 GEMINI_API_MODE。Base URL
GoModel 为原生 Gemini 和兼容 OpenAI 的 API 分别维护内部的 Base URL:- 原生聊天/模型:
https://generativelanguage.googleapis.com/v1beta - 兼容 OpenAI:
https://generativelanguage.googleapis.com/v1beta/openai
GEMINI_BASE_URL 会覆盖它们。当该值以 /openai 结尾时,GoModel 将其用于兼容 OpenAI 的客户端,并通过去掉 /openai 推导出原生 Base URL。文件和批处理始终使用兼容 OpenAI 的接口;聊天、嵌入和图片则遵循 API 模式。
嵌入
在原生模式下,嵌入通过models/{model}:batchEmbedContents 提供。dimensions 映射为 outputDimensionality,并支持 encoding_format: "base64"。Gemini 在两种 API 接口上都不报告嵌入的 Token 用量,因此嵌入响应中的 Token 数为零,且该用量记录会被标记一条成本计算说明。
图片生成与编辑
在原生模式下,兼容 OpenAI 的图片端点可用于 Gemini 图片模型(gemini-2.5-flash-image 等,通过 generateContent)。Google 已于 2026 年 8 月从 AI Studio API 中下线 Imagen;Imagen 仍可在 Vertex AI 上使用。图片编辑需要原生模式和 Gemini 图片模型;不支持蒙版。关于参数映射和定价详情,请参阅 Images API 的提供商说明。
推理强度
在原生模式下,reasoning_effort(或 reasoning.effort)会被转换为 Gemini 的 thinkingConfig:
Gemini 3 无法关闭思考,并且 Pro 系列以及 3.7 和 3.8 Flash 会拒绝
minimal,因此 GoModel 会发送这些模型所接受的最低级别,而不是将 Google 的 400 错误返回给您。显式设置的 extra_body.google.thinking_config 始终会原样转发。
Gemini 3 上的采样参数
Google 的 Gemini 3 迁移指南建议从每个请求中移除temperature、top_p 和 top_k,因为这些模型已针对其默认值调优,并将 candidate_count 列为 Gemini 3.x 不支持的参数。因此在原生模式下,GoModel 会为 Gemini 3 及更高版本(gemini-3-*、gemini-3.5-*、gemini-3.8-* 等)丢弃这四个字段,而对 Gemini 2.5、Gemma 和其他模型仍会转发。max_tokens、stop、惩罚参数、response_format 和思考设置不受影响。
思考签名(Thought signatures)
Gemini 3 会为其发出的函数调用附加一个加密的thoughtSignature;当该调用在历史记录中回传时如果缺少这个签名,后续请求会被拒绝(HTTP 400,“Function call is missing a thought_signature”)。在原生模式下,GoModel 以与 Google 自己的兼容 OpenAI 端点相同的方式暴露该签名,因此原样回传助手消息的客户端可以继续正常工作:
extra_content 成员也会出现在流式的 tool_calls 增量、Responses API 的 function_call 输出项、Anthropic Messages API 的 tool_use 块上,以及(对于纯文本轮次)助手消息本身上。请原样回传;在并行调用批次中,只有第一个调用携带签名。其他提供商永远不会看到它;共享约定请参阅额外内容、思考块与思考签名。工具调用或其 function 对象上的扁平 thought_signature(或 thoughtSignature)也会被接受,因此为其他网关构建的客户端可以继续正常工作。
当 Gemini 3 的历史记录中包含没有任何签名的函数调用时(对话最初在其他模型上开始,或客户端丢弃了该字段),GoModel 会发送 Google 文档中说明的 skip_thought_signature_validator 占位符,而不是返回 400 错误。这会降低该轮次的推理连续性,因此建议回传真实的签名。
图片输入
在原生模式下使用 URL 托管的图片时,Google 自己的示例会先获取该 URL,再将字节发送到
generateContent。
视频输入
data: URL 会变为内联视频部分(当 data URL 未声明媒体类型时默认为 video/mp4),而 YouTube、Files API 和 Cloud Storage URI 会作为文件引用发送,由 Gemini 自行解析。其他任何远程 https://... URL 都会被拒绝而不是被丢弃,请先通过 Gemini Files API 上传。
消息与工具
在原生模式下,OpenAI 聊天字段按如下方式映射到generateContent:
Gemini 只在
ANY 或 VALIDATED 模式下接受 allowedFunctionNames,这就是 auto 子集会变为 VALIDATED 的原因:模型仍可以用文本回答,但它发起的任何调用都仅限于列出的工具。VALIDATED 作用于整个请求,因此只要有一个 strict 工具,所有已声明的工具都会进行 Schema 校验。
Gemini 无法将某一轮限制为只进行一次函数调用,指定单个工具也无济于事:Gemini 可以在一轮中多次调用同一个函数。如果 parallel_tool_calls: false(或 Anthropic 的 disable_parallel_tool_use)对您很重要,请在客户端中处理或拒绝多余的调用。
与 OpenAI 一样,tools 列表为空的 allowed_tools 选择会以 400 被拒绝。
尚未集成
- 在原生模式下自动获取远程
image_url值。 - 在聊天请求之前,通过 Gemini Files API 上传远程图片或视频。