跳到主要内容

Google Gemini Interactions API

本文档说明客户端如何通过当前系统调用 Google Gemini Interactions API

这是 Gemini 的原生统一接口(文本、多模态、工具、Agent),入参和成功出参与 官方 Interactions API 对齐。系统按原始 JSON / SSE 透传,不转成 Chat Completions,也不走 generateContent

客户端使用当前系统签发的 API 令牌,不要使用 Google Gemini API Key,也不要使用 Vertex 服务账号。

BASE_URL=https://open-api.fancyai.com
API_KEY=sk-your-system-token

开发环境:

BASE_URL=https://platform-dev-api.xxd.fans

官方 SDK 只需改 base_url 和 key。完整字段、step 类型、工具声明等以官方文档为准;本文只写本系统已接入的路径、鉴权和与直连 Google 的差异。

各模型的可试调页面在 Gabrielle 侧边栏对应模型下(OpenAI 兼容 chat、原生 generateContent、以及 Interactions)。

1. 接口概览

功能方法路径当前是否支持
创建交互POST/v1beta/interactions支持
创建交互(稳定版路径)POST/v1/interactions支持
查询交互GET/v1beta/interactions/{id}不支持
取消后台任务POST/v1beta/interactions/{id}/cancel不支持
删除交互DELETE/v1beta/interactions/{id}不支持

/v1/interactions/v1beta/interactions 行为相同,只是转发时保留客户端选的版本号。推荐用 /v1beta/interactions,与官方 SDK 默认一致。

鉴权任选其一:

Authorization: Bearer sk-your-system-token
x-goog-api-key: sk-your-system-token
GET /v1beta/interactions?key=sk-your-system-token

官方 REST / google-genai SDK 常用 x-goog-api-key。不要把 Google 官方 Key 填到这里。

可选请求头(系统会原样转给上游):

Api-Revision: 2026-05-20
x-goog-api-client: google-genai-sdk/...

Api-Revision 用于选择官方 schema 版本。当前官方推荐 2026-05-20。详见 Interactions 破坏性变更说明

2. 创建交互

POST /v1beta/interactions
Content-Type: application/json

系统校验:body 必须能解析为 JSON;必须有 modelagent;必须有 input。其余字段原样转发。

渠道按 model 选择;没有 model 时用 agent。后台若配置了模型映射,只会改 body 里的 model 再发给上游。

2.1 常用字段

字段类型必填说明
modelstringagent 二选一模型名,例如 gemini-3.8-flash。必须是当前系统已开通的模型
agentstringmodel 二选一托管 Agent,例如 deep-research-preview-04-2026。没有 model 时用它选渠道
inputstring / 对象 / 数组用户输入。最简单是字符串;也可以是 content / steps 数组
streambooleantrue 时按 SSE 流式返回。也可用查询参数 ?alt=sse
system_instructionstring系统指令
generation_configobjectmodel 模式。如 max_output_tokensthinking_levelseed
toolsarray工具声明
response_formatobject / arrayJSON Schema 约束
previous_interaction_idstring多轮:接上一次 interaction 的 id
storeboolean是否在 Google 侧保存,供官方 GET 查询。本系统当前没有 GET 路由
backgroundboolean后台执行。本系统当前没有查询 / 取消路由,不要用

thinking_level 允许:minimallowmediumhigh

input 常见写法:

"input": "用一句话介绍 Interactions API"
"input": [
{
"type": "text",
"text": "这张图里有什么?"
},
{
"type": "image",
"data": "<base64>",
"mime_type": "image/jpeg"
}
]

2.2 流式

任选一种即可:

  • body:"stream": true
  • URL:POST /v1beta/interactions?alt=sse

响应 Content-Typetext/event-stream。系统整帧透传,包括 event: 行,不会改成 Chat Completions 的 data: {...} 格式。

常见事件:

event_type含义
interaction.created已创建,通常带 id
interaction.status_update状态变化
step.start / step.delta / step.stop某一步开始、增量、结束
interaction.completed整段结束,usage 一般在这里
error上游错误事件

客户端应一直读到 interaction.completed 或连接关闭。

3. 请求示例

3.1 同步文本

curl -X POST "${BASE_URL}/v1beta/interactions" \
-H "x-goog-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-H "Api-Revision: 2026-05-20" \
-d '{
"model": "gemini-3.8-flash",
"input": "用一句话介绍 Gemini Interactions API"
}'

3.2 流式文本

curl -N -X POST "${BASE_URL}/v1beta/interactions" \
-H "x-goog-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-H "Api-Revision: 2026-05-20" \
-d '{
"model": "gemini-3.8-flash",
"input": "写一首四行小诗",
"stream": true
}'

SSE 片段示例:

event: step.delta
data: {"event_type":"step.delta","index":0,"delta":{"type":"text","text":"Hello"}}

event: interaction.completed
data: {"event_type":"interaction.completed","event_id":"evt_123","interaction":{"id":"v1_...","status":"completed","usage":{...}}}

3.3 Python SDK

把官方 SDK 指向当前系统即可,路径仍是 /v1beta/interactions

from google import genai

client = genai.Client(
api_key="sk-your-system-token",
http_options={"base_url": "https://open-api.fancyai.com"},
)

interaction = client.interactions.create(
model="gemini-3.8-flash",
input="用一句话介绍 Gemini Interactions API",
)
print(interaction.id, interaction.status)
print(interaction.outputs)

流式:

stream = client.interactions.create(
model="gemini-3.8-flash",
input="写一首四行小诗",
stream=True,
)

for event in stream:
if getattr(event, "event_type", None) == "step.delta":
delta = getattr(event, "delta", None)
if delta is not None and getattr(delta, "type", None) == "text":
print(delta.text, end="", flush=True)

JavaScript:

import { GoogleGenAI } from "@google/genai";

const client = new GoogleGenAI({
apiKey: "sk-your-system-token",
httpOptions: { baseUrl: "https://open-api.fancyai.com" },
});

const interaction = await client.interactions.create({
model: "gemini-3.8-flash",
input: "用一句话介绍 Gemini Interactions API",
});
console.log(interaction.id, interaction.status);

3.4 图像模型

协议上可用图像模型,例如 gemini-3.1-flash-imagegemini-3-pro-image。流式出图请优先用官方流式示例里的图像模型(如 gemini-3.1-flash-image)。gemini-3-pro-image 流式经常只出思考、不出成品图。

curl -N -X POST "${BASE_URL}/v1beta/interactions" \
-H "x-goog-api-key: ${API_KEY}" \
-H "Content-Type: application/json" \
-H "Api-Revision: 2026-05-20" \
-d '{
"model": "gemini-3.1-flash-image",
"input": "一只坐在窗台上的橘猫,午后阳光,写实照片",
"stream": true
}'

可用的具体模型名以控制台开通列表为准,不要假设官方文档里的每一个名字当前系统都已配置。

4. 成功响应

非流式成功时,body 是官方 Interaction 对象,系统不改写。典型字段:

字段说明
id本次 interaction ID
object一般为 "interaction"
statuscompletedin_progressrequires_actionfailed
model / agent实际上游使用的模型或 Agent
steps输出步骤。POST 成功响应通常只有输出 steps;完整时间线(含 user_input)要靠官方 GET,本系统暂无
usagetoken 用量,snake_case
created / updated时间

示例:

{
"id": "v1_ChdPU0F4YWFtNkFwS2kxZThQZ05lbXdROBIXT1NBeGFhbTZBcEtpMWU4UGdOZW13UTg",
"object": "interaction",
"status": "completed",
"model": "gemini-3.8-flash",
"created": "2025-11-26T12:22:47Z",
"updated": "2025-11-26T12:22:47Z",
"steps": [
{
"type": "model_output",
"content": [
{
"type": "text",
"text": "Interactions API 是 Gemini 的统一原生接口。"
}
]
}
],
"usage": {
"total_input_tokens": 12,
"total_output_tokens": 40,
"total_thought_tokens": 80,
"total_cached_tokens": 0,
"total_tool_use_tokens": 0,
"total_tokens": 132,
"input_tokens_by_modality": [
{ "modality": "text", "tokens": 12 }
]
}
}

statusrequires_action 时,需要按官方协议把工具结果再发一次 POST /interactions(或带 previous_interaction_id 继续)。本系统只负责转发,不代跑工具。

5. 错误

网关或渠道错误时,响应体不一定是官方 Interactions 错误格式,可能被包成现有 Gemini 原生转发同一套 OpenAI 风格:

{
"error": {
"message": "...",
"type": "...",
"code": "..."
}
}

HTTP 状态码仍会尽量跟随上游(4xx / 5xx)。客户端不要只按官方 error.code 解析网关失败。

流式过程中,上游也可能推一条 event_typeerror 的 SSE 帧,这一帧会原样到达客户端。

6. 计费

系统按上游返回的 usage 扣费:

  • 非流式:响应体里的 usage
  • 流式:interaction.completed(或事件上的 usage

映射关系:

计费项上游字段
Prompttotal_input_tokens + total_tool_use_tokens
Completiontotal_output_tokens + total_thought_tokens
Reasoningtotal_thought_tokens
图 / 音频*_tokens_by_modalitymodalityimage / audio 的 tokens

价格以控制台该模型的倍率 / 计费表达式为准。

7. 与直连 Google 的差异

项目本系统直连 Google
创建 POST /interactions支持,成功 JSON / SSE 原样回写支持
GET /interactions/{id}不支持查状态、拉完整 steps、断线后续流
POST /interactions/{id}/cancel不支持取消仍在跑的 background 任务
DELETE /interactions/{id}不支持删除服务端记录
background: true不要用。创建后无法在本系统查询或取消适合超长 Agent / 深度研究
多轮 previous_interaction_id可以转发,但必须打到同一把上游 Key。渠道多 Key 负载均衡时可能 404同一项目 Key 即可
错误体网关失败可能是 OpenAI 风格官方错误对象
模型名必须是本系统已开通且渠道已配置的名字;可能被渠道映射改写官方模型列表

storebackground 是 Google 服务端能力。即使请求里带了 store: true,本系统也没有查询入口。

background 的用途:任务在 Google 侧后台跑,创建接口立刻返回 id,再用 GET 轮询。深度研究、多步 Agent 常超过约 60 秒 HTTP 超时,才需要它。当前请改用同步或 SSE("stream": true),并给客户端足够长的超时。

8. 建议

  • 普通对话、流式出字、流式出图:用 POST + 可选 "stream": true 即可。
  • 客户端超时建议大于上游实际耗时;思考模型和图像模型可能明显长于普通文本。
  • 不要因为几十秒没有返回就重试同一条请求,可能重复计费。
  • 多轮优先自己把需要的 steps 带回下一次 input;不要依赖本系统提供 GET 历史。
  • 完整 schema 见官方文档:Interactions API