/v1beta generateContent)调用时,响应是 Google 的 candidates / parts 结构,与 OpenAI 兼容格式不同。本页讲清非流式(generateContent)与流式(streamGenerateContent)两种响应怎么解析。
请求侧(base_url 为
https://api.apiyi.com 不带 /v1、x-goog-api-key 鉴权、thinking_level 思考控制)见 Gemini 原生格式调用指南。本页只讲响应侧。示例用轻量模型 gemini-3.1-flash-lite。非流式响应
端点…:generateContent,正文在 candidates[0].content.parts[]:
parts 拼接每个 text:
finishReason 是大写 STOP(不是 OpenAI 的小写 stop),其它取值如 MAX_TOKENS、SAFETY。一个 part 可能只含 thoughtSignature 而无 text,遍历时要用 if "text" in p 过滤,否则会 KeyError。thoughtSignature(思维签名)
Gemini 3 系列会在 part 上附带thoughtSignature(加密的推理状态)——实测连轻量的 gemini-3.1-flash-lite 也会返回。
- 单轮:用不到,忽略即可。
- 多轮 / 函数调用:要把上一轮响应里的
thoughtSignature原样回传到下一轮的contents中,模型才能延续推理链。官方google-genaiSDK 自动处理;手写 REST 时注意不要丢弃该字段。详见 Gemini 函数调用。
流式响应(SSE)
端点…:streamGenerateContent,每行 data: {...},每块的增量在 candidates[0].content.parts[0].text:
usageMetadata 每块都带,且是累计值(candidatesTokenCount 随输出增长)——以最后一块为准即可,无需自己累加。与 OpenAI 兼容格式的关键差异
usage 与计费
thoughtsTokenCount(思考 token)按输出价计费,可用thinking_level控档省钱。- 缓存命中
cachedContentTokenCount的折扣见 Gemini 缓存计费。 - 各字段完整说明见 Gemini 原生格式调用指南 的「用量字段」一节。
相关链接
- 同组页面:Gemini 原生格式调用指南 · 多模态与代码执行 · 函数调用
- 兼容格式对照:OpenAI 兼容模式响应数据处理
- 获取 / 管理令牌:
https://api.apiyi.com/token