Gemini Wire API 接入说明
Xima AI 支持通过 Gemini 原生 Wire API 调用 Gemini LLM 模型。和 OpenAI-compatible Chat Completions 不同,Gemini Wire API 使用 contents[].parts[] 表达输入,把系统指令、生成参数、工具调用、结构化输出、多模态输入等能力放在 Gemini 原生字段里。
如果你只是普通聊天,继续使用 快速开始 中的 OpenAI-compatible /v1/chat/completions 即可;如果需要 Gemini 原生 generateContent、streamGenerateContent、thinkingConfig、函数调用、图片内容块等能力,建议使用本文的 Wire API。
接入信息
| 项目 | 值 |
|---|---|
| 控制台 | https://console.xima.ai/ |
| Base URL | https://api-long.xima.ai |
| Generate Content Endpoint | POST /v1/models/{model}:generateContent |
| Stream Endpoint | POST /v1/models/{model}:streamGenerateContent?alt=sse |
| 认证方式 | Authorization: Bearer <XIMA_API_KEY> |
建议先配置环境变量:
export XIMA_API_KEY="sk-替换为你的APIKey"
export XIMA_GEMINI_BASE_URL="https://api-long.xima.ai"
export XIMA_GEMINI_MODEL="gemini-3.8-flash"本文示例按 Xima AI 新接入域名写认证和域名;请求体字段保持 Gemini 官方 Wire API 形态。新接入请统一使用 https://api-long.xima.ai/v1/models/...。
本文示例覆盖文本、流式、系统指令、Thinking、结构化 JSON、函数调用和图片输入。
通用示例默认使用 gemini-3.8-flash。接入 gemini-4-argon 时,请先阅读下方「Gemini 4 Argon 支持与迁移」,不要直接沿用旧模型的思考预算或采样配置。
和 Chat Completions 的差异
| 能力 | OpenAI-compatible | Gemini Wire API |
|---|---|---|
| URL | /v1/chat/completions | /v1/models/{model}:generateContent |
| 模型位置 | body 中的 model | URL path 中的 {model} |
| 用户输入 | messages[].content | contents[].parts[] |
| 系统指令 | messages[0].role = "system" | system_instruction 或 SDK systemInstruction |
| 生成参数 | temperature、max_tokens 等 | generationConfig.temperature、generationConfig.maxOutputTokens 等 |
| 工具调用 | tools[].function | tools[].functionDeclarations |
| 工具调用配置 | tool_choice | toolConfig.functionCallingConfig |
| 多模态输入 | image_url 内容块 | inline_data 内容块 |
| 响应文本 | choices[0].message.content | candidates[0].content.parts[].text |
| 流式输出 | stream: true | /v1/models/{model}:streamGenerateContent?alt=sse |
不要把两套协议混写。例如 Gemini Wire API 不需要在 body 里再传 model,也不要把 messages、reasoning_effort、tool_choice 直接放进 generateContent 请求体。
模型选择
| 模型 ID | 建议用途 |
|---|---|
gemini-4-argon | 复杂推理、代码和工具调用;基础接入已验证,参数限制见下方专节 |
gemini-3.8-flash | 默认推荐;通用问答、代码、工具调用、长输出和多数生产聊天场景 |
gemini-3.7-flash | 通用生产任务、复杂摘要、代码和 Agent 场景 |
gemini-3.6-flash | 通用任务、成本和延迟更敏感的场景 |
gemini-3.5-flash | 稳定通用任务、批处理、摘要、分类 |
gemini-3.1-pro-preview | 更复杂推理、长上下文、多步骤分析 |
gemini-2.5-pro | 长上下文和复杂分析场景 |
gemini-2.5-flash | 轻量对话、低成本任务、兼容旧业务配置 |
模型可用状态、价格和最终计费以 模型与价格 和 Xima AI 控制台「模型与定价」页面为准。
Gemini 4 Argon 支持与迁移
gemini-4-argon 已支持本文的常用接入方式。以下是 2026-10-14 在 Xima API 上的实测范围;这些能力复用已有协议,并非都需要新增字段。
| 能力 | Gemini 4 实测结果 |
|---|---|
| OpenAI-compatible 普通与流式聊天 | 已通过,返回模型为 gemini-4-argon |
| Gemini Wire 普通与流式文本 | 已通过,SSE 正常返回文本和用量 |
thinkingLevel:low / medium / high | 三个级别均已通过 |
| 结构化 JSON | response_mime_type 与 response_schema 已通过,输出可解析 |
| 函数调用 | 函数名、参数、结果回传与最终回答闭环已通过 |
本次未验收图片、音视频、超长输出 continuation、长上下文或缓存命中;不要从基础文本测试推定全部高级能力已验证。
与旧模型的参数区别
| 配置 | 旧模型用法 | Gemini 4 Argon |
|---|---|---|
| 思考强度 | Gemini 3 系列使用 thinkingLevel,具体可选值按模型确认 | 只支持 low、medium、high;省略时默认为 medium |
| 思考预算 | 部分旧模型支持 thinkingBudget;不能跨模型直接复用 | 不支持,单独传入也会返回 400,并非仅不能与 level 混用 |
minimal / 关闭思考 | 取决于旧模型及其参数规则 | minimal 返回 400;不要通过预算设为 0 或旧 -nothinking 别名尝试关闭 |
| 采样参数 | 通用示例用 temperature、topP、topK 调整采样 | Google 忽略这些自定义值;保留字段不代表它们有效 |
| 输出上限 | 旧请求可能设置较小的 maxOutputTokens / max_tokens | 上限包含思考与最终回答,较小值可能先被思考消耗;遇到 MAX_TOKENS 应调整预算或思考级别 |
| 显式缓存 | 部分旧模型支持,Xima 管理接口需另行确认 | Google 不支持显式缓存;使用隐式缓存并按实际命中量核对 |
迁移时先使用基础模型名 gemini-4-argon,移除 thinkingBudget / thinking_budget。不要直接沿用可能生成旧预算参数的 -thinking、-thinking-N、-nothinking 模型别名。只需要普通聊天时,现有 OpenAI-compatible 接口仍可使用。
Gemini 4 最小验证示例
以下请求适合验证连接;512 只是短响应的测试上限,不是复杂任务的生产默认值。流式调用将 URL 末尾换成 :streamGenerateContent?alt=sse。
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/gemini-4-argon:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [{"role": "user", "parts": [{"text": "Reply with OK only."}]}],
"generationConfig": {
"maxOutputTokens": 512,
"thinkingConfig": {"thinkingLevel": "low"}
}
}'两种协议的思考字段位置不同:
| 协议 | 实际 HTTP JSON 请求体中的位置 |
|---|---|
| Gemini Wire | generationConfig.thinkingConfig.thinkingLevel |
| OpenAI-compatible Chat Completions | extra_body.google.thinking_config.thinking_level |
OpenAI-compatible 的实际 HTTP 请求体示例(POST https://api-long.xima.ai/v1/chat/completions):
{
"model": "gemini-4-argon",
"messages": [{"role": "user", "content": "Reply with OK only."}],
"max_tokens": 512,
"extra_body": {
"google": {"thinking_config": {"thinking_level": "low"}}
}
}这里展示的是线上已验证的 HTTP body;SDK 的 extra_body 参数可能会执行顶层合并,使用 SDK 时需核对最终发送的 JSON 结构。不要把 OpenAI 的 extra_body 直接放进 Gemini Wire 请求。
能力选择速查
| 需求 | 使用位置 | 说明 |
|---|---|---|
| 普通文本 | contents[].parts[].text | 单轮或多轮对话都使用 contents |
| 流式输出 | /v1/models/{model}:streamGenerateContent?alt=sse | 适合聊天 UI、长文本生成和 Agent 任务 |
| 系统指令 | system_instruction | 用于设定角色、输出风格和稳定约束 |
| 采样与长度 | generationConfig | 控制输出长度;采样参数是否生效取决于模型,Gemini 4 忽略自定义采样值 |
| Thinking | generationConfig.thinkingConfig | Gemini 3 / 4 使用 thinkingLevel;Gemini 4 不接受旧思考预算 |
| 结构化 JSON | generationConfig.response_mime_type、response_schema | 适合抽取、分类、可解析输出 |
| 函数调用 | tools[].functionDeclarations | 模型只返回函数名和参数;实际执行由业务系统负责 |
| 图片输入 | parts[].inline_data | 小图片可直接 base64 传入 |
| 安全设置 | safetySettings | 覆盖指定安全类别的默认阈值 |
| 缓存统计 | 控制台和 usageMetadata 中的缓存统计 | Gemini 4 仅支持隐式缓存;其他模型的显式缓存管理请先联系支持确认 |
本文覆盖 generateContent 和 streamGenerateContent 的常用接入方式。下方示例按常见接入顺序展开。Code execution、URL Context、Google Search grounding、大文件上传等能力如需使用,请联系 [email protected] 确认可用范围和推荐写法。显式 context cache 管理仅适用于上游支持该能力的模型,Gemini 4 不支持。
文本调用
最小请求只需要 contents:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{
"text": "用三句话介绍 Xima AI 的 Gemini Wire API 接入方式。"
}
]
}
]
}'成功时通常从 candidates[0].content.parts[].text 读取回答,并从响应里的 usageMetadata 或控制台日志查看 token 消耗。
多轮对话
Gemini Wire API 不使用 messages。多轮对话需要把历史轮次继续放在 contents 中,角色通常是 user 和 model:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"role": "user",
"parts": [
{ "text": "我们要设计一个订单系统。" }
]
},
{
"role": "model",
"parts": [
{ "text": "可以先确认订单、支付、库存和履约边界。" }
]
},
{
"role": "user",
"parts": [
{ "text": "请给出数据库表设计的第一版。" }
]
}
],
"generationConfig": {
"temperature": 0.4,
"maxOutputTokens": 1200
}
}'流式输出
流式输出使用 streamGenerateContent,并加上 alt=sse:
curl -N "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:streamGenerateContent?alt=sse" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"parts": [
{
"text": "写一份 300 字以内的技术方案摘要。"
}
]
}
]
}'客户端需要按 Server-Sent Events 逐段读取返回内容。不同 HTTP 客户端对缓冲策略不同,命令行调试建议使用 curl -N。
系统指令与生成参数
系统指令放在 system_instruction,普通采样和输出长度控制放在 generationConfig:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"system_instruction": {
"parts": [
{
"text": "你是 Xima AI 的技术支持助手。回答要简洁、准确,优先给出可执行步骤。"
}
]
},
"contents": [
{
"parts": [
{
"text": "用户说 API 返回 401,我应该如何排查?"
}
]
}
],
"generationConfig": {
"temperature": 0.3,
"topP": 0.8,
"maxOutputTokens": 800
}
}'常用生成参数(下表采样说明适用于支持这些参数的模型;Gemini 4 忽略自定义 temperature、topP、topK):
| 参数 | 说明 |
|---|---|
temperature | 随机性。越低越稳定,越高越发散 |
topP | nucleus sampling 概率截断 |
topK | 候选 token 截断 |
maxOutputTokens | 最大输出 token 数 |
stopSequences | 命中后停止生成的字符串列表 |
candidateCount | 候选回答数量;生产场景通常保持 1 |
Thinking 配置
Gemini 3 系列和 Gemini 4 Argon 可以通过 generationConfig.thinkingConfig.thinkingLevel 控制推理强度,具体可选值按模型确认。Gemini 4 支持 low、medium、high:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"parts": [
{
"text": "请给出一个数据库慢查询排查计划,并说明每一步判断依据。"
}
]
}
],
"generationConfig": {
"thinkingConfig": {
"thinkingLevel": "low"
},
"maxOutputTokens": 1800
}
}'注意事项:
| 项目 | 说明 |
|---|---|
| 推荐值 | 先从 low 开始;复杂推理再提高到 medium 或 high |
| 旧模型预算 | thinkingBudget(部分 SDK 写作 thinking_budget)仅用于支持它的旧模型,不要与 thinkingLevel 混用 |
| Gemini 4 限制 | 不接受 thinkingBudget 或 minimal,单独传入也会返回 400 |
| 输出长度 | Gemini 4 的输出上限包含思考与回答;复杂任务不要沿用最小连接测试的输出上限 |
| 计费 | thinking 相关 token 通常会进入输出或额外用量统计,最终以控制台用量明细为准 |
结构化 JSON 输出
如果业务需要稳定 JSON,不要只在 prompt 里写「请输出 JSON」。应使用结构化输出配置:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"parts": [
{
"text": "从这句话中抽取工单信息:用户反馈支付成功但订单仍显示待支付。"
}
]
}
],
"generationConfig": {
"response_mime_type": "application/json",
"response_schema": {
"type": "OBJECT",
"properties": {
"category": {
"type": "STRING",
"enum": ["payment", "account", "model", "other"]
},
"summary": {
"type": "STRING"
},
"priority": {
"type": "STRING",
"enum": ["low", "medium", "high"]
}
},
"required": ["category", "summary", "priority"]
}
}
}'结构化输出适合信息抽取、分类、路由和 Agent 工具参数生成。业务侧仍应对返回 JSON 做解析和 schema 校验,避免把模型输出直接当成可信数据。
函数调用
函数调用分四步:
- 在请求中定义函数名称、描述和参数 schema。
- 调用模型,让模型决定是否需要调用函数。
- 业务系统读取模型返回的函数名和参数,自己执行真实函数。
- 把函数结果回传给模型,让模型生成最终回答。
请求示例:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"system_instruction": {
"parts": [
{
"text": "你是订单系统助手。需要实时数据时必须调用工具。"
}
]
},
"tools": [
{
"functionDeclarations": [
{
"name": "get_order_status",
"description": "查询订单状态",
"parameters": {
"type": "OBJECT",
"properties": {
"order_id": {
"type": "STRING",
"description": "订单 ID"
}
},
"required": ["order_id"]
}
}
]
}
],
"toolConfig": {
"functionCallingConfig": {
"mode": "ANY",
"allowedFunctionNames": ["get_order_status"]
}
},
"contents": [
{
"role": "user",
"parts": [
{
"text": "帮我查一下订单 O202609100001 现在是什么状态。"
}
]
}
]
}'模型返回函数调用后,业务系统需要执行 get_order_status,再把结果放回下一轮请求。不同 SDK 对函数调用结果字段会做封装;HTTP Wire API 调试时,重点检查响应里的 functionCall 内容块,并保证下一轮传回的函数名、调用 ID 和结果能在服务端日志里对齐。
Gemini 4 的该闭环已验证。保存并回传模型返回的完整 content.parts,包括返回中可能存在的 thoughtSignature;不要只摘取函数名和参数后丢弃其他模型内容。工具结果使用对应的 functionResponse,保留可用的调用 ID。
图片输入
小图片可以用 base64 内联传入:
IMAGE_B64="$(base64 -i ./screenshot.png | tr -d '\n')"
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{
"parts": [
{
"text": "请识别这张截图中的主要错误信息。"
},
{
"inline_data": {
"mime_type": "image/png",
"data": "'"$IMAGE_B64"'"
}
}
]
}
]
}'如果图片、音频、视频或 PDF 文件较大,建议使用文件 URI 方式接入,而不是把超大的 base64 直接塞进请求体。大文件和文件 URI 接入方式请联系 [email protected] 确认。
安全设置
可以通过 safetySettings 调整指定安全类别的阻断阈值:
curl -sS "$XIMA_GEMINI_BASE_URL/v1/models/$XIMA_GEMINI_MODEL:generateContent" \
-H "Authorization: Bearer $XIMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"safetySettings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
}
],
"contents": [
{
"parts": [
{
"text": "请把这段用户反馈改写成客服工单摘要。"
}
]
}
]
}'生产环境建议保留默认安全策略,只有在明确评估业务风险和合规要求后再调整。
缓存说明
Google 官方 Gemini API 有两类缓存,支持范围因模型而异:
| 类型 | 说明 |
|---|---|
| Implicit caching | Gemini 2.5 及以上模型默认启用,用户不需要传额外参数;如果命中,响应用量中会体现缓存读取 token |
| Explicit caching | 支持该能力的模型可通过独立 cachedContents API 创建缓存,再用 cachedContent 引用;Gemini 4 不支持 |
Gemini 4 只支持隐式缓存,不需要创建缓存资源,也不要发送 cachedContent 引用。官方给出的隐式缓存最小输入门槛为 6,144 tokens,达到门槛并不保证命中。本次短提示测试未验证缓存命中。
生产接入建议先按 implicit caching 和 usageMetadata 做用量对账。Wire 响应关注 usageMetadata.cachedContentTokenCount,OpenAI-compatible 响应关注 usage.prompt_tokens_details.cached_tokens;缺少命中证据时,不把全部输入按缓存价格计费。其他支持显式缓存的模型如需缓存管理,请联系 [email protected] 确认当前可用范围和推荐字段。最终缓存命中和计费口径以控制台日志、用量和账单明细为准。
接入自检
正式接入前,建议用 API Key 检查以下项目:
| 检查项 | 判断标准 |
|---|---|
| 文本调用 | 200 返回,能从 candidates[].content.parts[] 读取文本 |
| 多轮对话 | user、model 历史顺序正确 |
| 流式输出 | SSE 分块正常,客户端不会被缓冲 |
| Thinking | thinkingConfig.thinkingLevel 不报错 |
| 结构化 JSON | 返回能被业务 schema 解析 |
| 函数调用 | 模型能返回函数名和参数,工具结果闭环字段和日志对得上 |
| 图片输入 | base64 图片能被识别,体积限制符合预期 |
如果接入结果与本文示例不一致,请先检查 Base URL、模型 ID、请求字段和控制台请求日志;仍无法定位时请联系 [email protected]。
常见错误
| 现象 | 常见原因 | 处理方式 |
|---|---|---|
401 或认证失败 | Key 错误、Key 未启用、认证头不是 Bearer | 检查 Authorization: Bearer <XIMA_API_KEY> 和控制台 Key 状态 |
404 | 模型 ID 不存在或路径写错 | 确认 URL 是 /v1/models/{model}:generateContent |
400 且提示未知字段 | 混入了 OpenAI 字段,或字段命名不符合 Gemini Wire API | 移除 messages、model、reasoning_effort 等 OpenAI 字段;对照控制台请求日志检查字段名 |
Gemini 4 报 Thinking budget is not supported | 传入了旧 thinkingBudget,即使未混用 level 也不支持 | 删除预算参数,改用 thinkingLevel |
Gemini 4 报 THINKING_LEVEL_MINIMAL | 使用了不支持的 minimal 级别 | 使用 low、medium 或 high |
| 其他 Thinking 参数报错 | 模型不支持该配置,或同时传入 level 和预算 | 按模型确认思考参数,避免混用 |
| Gemini 4 调整 temperature 后效果不变 | 模型忽略自定义采样参数 | 不依赖 temperature/topP/topK 控制该模型的随机性 |
Gemini 4 回答为空或截断,结束原因为 MAX_TOKENS | 总输出上限可能先被思考消耗 | 提高输出上限或降低思考级别,并检查用量 |
| 流式没有逐段输出 | 客户端缓冲或缺少 alt=sse | 命令行用 curl -N,并确认 endpoint 是 streamGenerateContent?alt=sse |
| JSON 无法解析 | 只靠 prompt 约束,未使用结构化输出配置 | 使用 response_mime_type 和 response_schema,业务侧继续做 schema 校验 |