Google 官方流式示例通常使用 streamGenerateContent。本服务使用同一个generateContentPath,并通过查询参数alt=sse开启流式响应。
user Content 中传入文本。user 和 model 历史消息,最后一条通常为新的 user 消息。parts 数组中组合 text、inlineData 或 fileData。systemInstruction.parts[].text 设置角色、规则或输出要求。generationConfig.responseMimeType=application/json,并按需提供 Schema。tools[].functionDeclarations 声明函数,不要传入 Google Search 工具。cachedContent 仅在对应缓存资源对所选上游渠道可见时可用。candidates[].content.parts[]。alt=sse,请求 Body 不变。generateContent Path 提供两种响应模式,不需要调用或配置streamGenerateContent 接口:| 调用方式 | 请求地址 | 响应 Content-Type | 客户端处理方式 |
|---|---|---|---|
| 非流式 | /v1beta/models/{model}:generateContent | application/json | 等待生成完成后解析一个完整的 GeminiChatResponse。 |
| 流式 | /v1beta/models/{model}:generateContent?alt=sse | text/event-stream | 按 SSE 事件逐条读取并解析每个 data: 后面的 GeminiChatResponse JSON。 |
data: {"candidates":[{"content":{"role":"model","parts":[{"text":"第一段文本"}]},"index":0}]}
data: {"candidates":[{"content":{"role":"model","parts":[{"text":"第二段文本"}]},"finishReason":"STOP","index":0}],"usageMetadata":{"promptTokenCount":12,"candidatesTokenCount":8,"totalTokenCount":20}}data: 后解析 JSON;candidates[].content.parts[].text;[DONE];usageMetadata 的事件进行用量记录和账单核对。totalTokenCount × 一个统一单价 计算费用。usageMetadata 的事件作为本次请求的最终用量。usageMetadata 用量,不返回价格版本、币种或本次最终金额。| 价格系列 | 请求模型示例 | 普通输入(文本/图片/视频) | 音频输入 | 缓存命中(普通输入) | 缓存命中(音频) | 缓存存储 | 文本/思考输出 |
|---|---|---|---|---|---|---|---|
| Gemini 2.5 Flash | gemini-2.5-flash | 0.30 | 1.00 | 0.030 | 0.100 | 1.00 | 2.50 |
| Gemini 2.5 Flash-Lite | gemini-2.5-flash-lite | 0.10 | 0.30 | 0.010 | 0.030 | 1.00 | 0.40 |
| Gemini 3 Flash | gemini-3-flash-preview | 0.50 | 1.00 | 0.050 | 0.100 | 1.00 | 3.00 |
| Gemini 3.1 Flash-Lite | gemini-3.1-flash-lite | 0.25 | 0.50 | 0.025 | 0.050 | 1.00 | 1.50 |
| Gemini 3.5 Flash | gemini-3.5-flash | 1.50 | 1.50 | 0.150 | 0.150 | 1.00 | 9.00 |
LEN = promptTokenCount + toolUsePromptTokenCount| 价格系列 | 请求模型示例 | LEN | 输入 | 缓存命中 | 缓存存储 | 文本/思考输出 |
|---|---|---|---|---|---|---|
| Gemini 2.5 Pro | gemini-2.5-pro | ≤ 200,000 | 1.25 | 0.125 | 4.50 | 10.00 |
| Gemini 2.5 Pro | gemini-2.5-pro | > 200,000 | 2.50 | 0.250 | 4.50 | 15.00 |
| Gemini 3.1 Pro | gemini-3.1-pro-preview | ≤ 200,000 | 2.00 | 0.200 | 4.50 | 12.00 |
| Gemini 3.1 Pro | gemini-3.1-pro-preview | > 200,000 | 4.00 | 0.400 | 4.50 | 18.00 |
P_TOTAL = promptTokenCount + toolUsePromptTokenCount
P_AUDIO = promptTokensDetails[AUDIO] + toolUsePromptTokensDetails[AUDIO]
P_OTHER = max(P_TOTAL - P_AUDIO, 0)
C_TOTAL = cachedContentTokenCount
C_AUDIO = cacheTokensDetails[AUDIO]
C_OTHER = max(C_TOTAL - C_AUDIO, 0)
U_AUDIO = max(P_AUDIO - C_AUDIO, 0)
U_OTHER = max(P_OTHER - C_OTHER, 0)
O_TEXT = candidatesTokenCount
O_THOUGHT = thoughtsTokenCountpromptTokenCount 已经包含缓存命中 Token,P_AUDIO 也已经包含缓存音频 Token。普通输入费用
= U_OTHER × 普通输入单价 ÷ 1,000,000
+ U_AUDIO × 音频输入单价 ÷ 1,000,000
缓存命中费用
= C_OTHER × 普通缓存单价 ÷ 1,000,000
+ C_AUDIO × 音频缓存单价 ÷ 1,000,000
文本/思考输出费用
= (O_TEXT + O_THOUGHT) × 输出单价 ÷ 1,000,000
请求总费用
= 普通输入费用 + 缓存命中费用 + 文本/思考输出费用LEN 选择整次请求的价格档位,再计算:U = max(P_TOTAL - C_TOTAL, 0)
C = C_TOTAL
O = candidatesTokenCount + thoughtsTokenCount
请求总费用
= (U × 当前档位输入单价
+ C × 当前档位缓存单价
+ O × 当前档位输出单价)
÷ 1,000,000generateContent 响应费用。若客户另外创建了缓存资源,缓存存储 费用
= 缓存资源 Token × 缓存存储单价 × 存储小时数 ÷ 1,000,000| 字段 | 类型 | 说明 |
|---|---|---|
candidates | array | 候选回复列表。通常读取索引 0,但客户端应允许多个候选。 |
promptFeedback | object | 整个输入提示的安全反馈。输入被拦截时可能没有 candidates。 |
usageMetadata | object | 本次请求的 Token 用量,是费用预估和账单核对的核心对象。 |
modelVersion | string | 上游实际执行请求的模型版本,建议与请求模型一起保存。 |
responseId | string | 上游响应 ID,用于请求定位和账单核对。 |
candidates[] 字段| 字段 | 类型 | 说明 |
|---|---|---|
candidates[].index | integer | 候选序号,通常从 0 开始。 |
candidates[].content | object | 当前候选的输出内容。 |
candidates[].finishReason | string | 结束原因。STOP 通常表示正常完成;MAX_TOKENS 表示达到输出限制;SAFETY 表示内容被安全策略终止。 |
candidates[].finishMessage | string | 对结束原因的可读补充说明,可能缺失。 |
candidates[].safetyRatings | array | 当前候选的安全分类和风险概率。 |
content 和 parts[] 字段| 字段 | 类型 | 说明 |
|---|---|---|
content.role | string | 输出角色,通常为 model。 |
content.parts | array | 输出片段列表,可能包含文本、思考摘要或函数调用。 |
parts[].text | string | 普通文本回复;当 thought=true 时表示可返回的思考摘要。 |
parts[].thought | boolean | 当前 Part 是否为思考内容。 |
parts[].thoughtSignature | string | 多轮对话或函数调用时可能需要原样回传的不透明签名。 |
parts[].functionCall.name | string | 模型希望调用的函数名称。 |
parts[].functionCall.args | object | 模型生成的函数参数。 |
parts[].inlineData | object | 模型返回的内联媒体;纯文本模型通常不会返回。 |
parts[].executableCode | object | 可选的模型生成代码。 |
parts[].codeExecutionResult | object | 可选的代码执行结果。 |
promptFeedback 和安全字段| 字段 | 类型 | 说明 |
|---|---|---|
promptFeedback.blockReason | string | 输入被拦截的原因,例如 SAFETY、BLOCKLIST 或 PROHIBITED_CONTENT。 |
promptFeedback.safetyRatings | array | 输入提示的安全评估列表。 |
safetyRatings[].category | string | 被评估的安全类别。 |
safetyRatings[].probability | string | 风险概率,例如 NEGLIGIBLE、LOW、MEDIUM、HIGH。 |
safetyRatings[].blocked | boolean | 是否因为该安全类别而被拦截。 |
usageMetadata 字段| 字段 | 类型 | 计费含义 |
|---|---|---|
promptTokenCount | integer | 输入提示总 Token,包含文本、图片、视频、音频和缓存命中用量。 |
toolUsePromptTokenCount | integer | 工具相关提示 Token,应加入输入总量。 |
cachedContentTokenCount | integer | 缓存命中总 Token,是输入总量的子集。 |
candidatesTokenCount | integer | 候选输出 Token,不包含 thoughtsTokenCount。 |
thoughtsTokenCount | integer | 思考 Token,按文本/思考输出单价计费。 |
totalTokenCount | integer | 总 Token 核验字段,不能直接乘以单一价格计算精确金额。 |
promptTokensDetails | array | 输入提示按 TEXT、IMAGE、VIDEO、AUDIO 等模态拆分。 |
toolUsePromptTokensDetails | array | 工具提示按模态拆分。 |
cacheTokensDetails | array | 缓存命中按模态拆分,是输入 Token 的子集。 |
candidatesTokensDetails | array | 候选输出按模态拆分;文本对话通常为 TEXT。 |
serviceTier | string | 上游实际服务层级,可能缺失;最终计费仍以平台有效价格为准。 |
*TokensDetails[].modality | string | Token 模态,例如 TEXT、IMAGE、VIDEO、AUDIO。 |
*TokensDetails[].tokenCount | integer | 对应模态的 Token 数量。 |
modelVersion、responseId、完整 usageMetadata、gemini-2.5-flash,音频输入并命中缓存{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "会议主要讨论了产品发布计划、风险事项和后续负责人。"
}
]
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": []
}
],
"usageMetadata": {
"promptTokenCount": 100000,
"toolUsePromptTokenCount": 0,
"cachedContentTokenCount": 30000,
"candidatesTokenCount": 1000,
"thoughtsTokenCount": 500,
"totalTokenCount": 101500,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 60000
},
{
"modality": "AUDIO",
"tokenCount": 40000
}
],
"cacheTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 20000
},
{
"modality": "AUDIO",
"tokenCount": 10000
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 1000
}
]
},
"modelVersion": "gemini-2.5-flash",
"responseId": "response-chat-example-001"
}普通非缓存输入费用
= 40,000 × USD 0.30 ÷ 1,000,000
= USD 0.01200
音频非缓存输入费用
= 30,000 × USD 1.00 ÷ 1,000,000
= USD 0.03000
普通缓存命中费用
= 20,000 × USD 0.030 ÷ 1,000,000
= USD 0.00060
音频缓存命中费用
= 10,000 × USD 0.100 ÷ 1,000,000
= USD 0.00100
文本/思考输出费用
= (1,000 + 500) × USD 2.50 ÷ 1,000,000
= USD 0.00375
请求总费用
= USD 0.01200 + USD 0.03000 + USD 0.00060
+ USD 0.00100 + USD 0.00375
= USD 0.04735gemini-2.5-pro,输入超过 20 万 Token{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "以下是对长文档的风险分析、结论和建议。"
}
]
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": []
}
],
"usageMetadata": {
"promptTokenCount": 250000,
"toolUsePromptTokenCount": 0,
"cachedContentTokenCount": 50000,
"candidatesTokenCount": 4000,
"thoughtsTokenCount": 1000,
"totalTokenCount": 255000,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 250000
}
],
"cacheTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 50000
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 4000
}
]
},
"modelVersion": "gemini-2.5-pro",
"responseId": "response-chat-example-002"
}LEN=250000,超过 200,000,因此整次请求使用长上下文档位。4000 + 1000 = 5000 Token。非缓存输入费用
= 200,000 × USD 2.50 ÷ 1,000,000
= USD 0.50000
缓存命中费用
= 50,000 × USD 0.250 ÷ 1,000,000
= USD 0.01250
文本/思考输出费用
= (4,000 + 1,000) × USD 15.00 ÷ 1,000,000
= USD 0.07500
请求总费用
= USD 0.50000 + USD 0.01250 + USD 0.07500
= USD 0.58750gemini-3.1-pro-preview,输入不超过 20 万 Token{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "这是基于材料生成的结构化决策建议。"
}
]
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": []
}
],
"usageMetadata": {
"promptTokenCount": 100000,
"toolUsePromptTokenCount": 0,
"cachedContentTokenCount": 20000,
"candidatesTokenCount": 2000,
"thoughtsTokenCount": 1000,
"totalTokenCount": 103000,
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 100000
}
],
"cacheTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 20000
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 2000
}
]
},
"modelVersion": "gemini-3.1-pro-preview",
"responseId": "response-chat-example-003"
}LEN=100000,不超过 200,000,因此使用标准上下文档位。2000 + 1000 = 3000 Token。非缓存输入费用
= 80,000 × USD 2.00 ÷ 1,000,000
= USD 0.16000
缓存命中费用
= 20,000 × USD 0.200 ÷ 1,000,000
= USD 0.00400
文本/思考输出费用
= (2,000 + 1,000) × USD 12.00 ÷ 1,000,000
= USD 0.03600
请求总费用
= USD 0.16000 + USD 0.00400 + USD 0.03600
= USD 0.20000