You need to enable JavaScript to run this app.
文档中心
火山方舟

火山方舟

复制全文
下载 pdf
进阶使用
流式输出
复制全文
下载 pdf
流式输出
流式输出通过请求字段 stream=true 启用。服务端使用 SSE(Server-Sent Events,服务器发送事件)持续推送生成片段,客户端可以在完整响应结束前处理正文、思考内容或工具参数;默认的 stream=false 会等待模型生成完成后一次性返回结果。​
以下章节覆盖流式请求的启用、事件消费、终态判断和连接管理。完整字段定义以 Chat API、Responses API 和 Messages API 参考页为准。​
说明​
方舟平台的新用户?获取 API Key 及 开通模型等准备工作,请参见 快速入门。​
快速开始​
​
效果示意​
优势说明​
​非流式输出等待完整响应后一次返回,流式输出持续显示已生成内容并在终态完成的效果对比​​
更早展示内容:收到首个片段后即可开始渲染,不必等待完整响应。​
​
提供实时反馈:对话界面、长内容生成和思考过程可以持续更新。​
​
支持增量处理:客户端可以分别聚合正文、思考内容和工具参数。​
​
保留部分结果:终态前断连时可保留已接收内容,但必须标记为不完整。​
​
动画中的时间仅用于展示返回方式,不代表实际首段时延或总生成时间。​
按现有 API 接入​
启用流式输出不需要迁移 API。根据应用当前使用的 API,增加流式请求字段,并适配对应的响应事件:​
​
当前 API​
请求改动​
响应处理​
Chat API​
在请求体中设置 stream=true。​
按 choices[].index 聚合 delta,并根据 finish_reason 判断结果。实现方法参见 处理流式响应。​
Responses API​
在请求体中设置 stream=true;Go SDK 使用 CreateResponsesStream。​
按事件 type 分派并使用复合索引聚合。实现方法参见 处理流式响应。​
Messages API​
在请求体中设置 stream=true。​
按消息与内容块生命周期聚合,并结合 stop_reason 与 message_stop 判断结果。实现方法参见 处理流式响应。​
​
选择与现有应用相同的 API 示例。三类 API 的事件结构不同,不得共用事件解析分支。首次体验可直接运行 Chat API 的 cURL 或 Python 示例。​
运行 Python 方舟 SDK 示例前,执行 python -m pip install --upgrade arkruntime;运行 Go 方舟 SDK 示例前,执行 go get github.com/volcengine/ark-runtime-go@latest。Messages Python REST 示例需使用 Python 3.9 或更高版本并安装 requests。​
Chat API​
​
cURL
Python
Go
Java
OpenAI SDK
​
​
curl https://ark.cn-beijing.volces.com/api/v3/chat/completions \​
-H "Content-Type: application/json" \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [​
{​
"role": "user",​
"content": "常见的十字花科植物有哪些?"​
}​
],​
"stream": true​
}'​
​
​
Responses API​
以下 Go 示例调用专用流式方法 CreateResponsesStream,该方法会按流式模式发送请求,因此请求对象中无需再次设置 stream=true。​
​
cURL
Python
Go
Java
OpenAI SDK
​
​
curl https://ark.cn-beijing.volces.com/api/v3/responses \​
-H "Authorization: Bearer $ARK_API_KEY" \​
-H "Content-Type: application/json" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"input": "常见的十字花科植物有哪些?",​
"stream": true​
}'​
​
​
Messages API​
​
cURL
Python
Go
Java
​
​
curl -N https://ark.cn-beijing.volces.com/api/compatible/v1/messages \​
-H "Content-Type: application/json" \​
-H "x-api-key: $ARK_API_KEY" \​
-d '{​
"model": "doubao-seed-2-1-pro-260915",​
"max_tokens": 256,​
"stream": true,​
"messages": [​
{​
"role": "user",​
"content": "请用一句中文介绍什么是向量数据库。"​
}​
]​
}'​
​
​
Chat 和 Responses 示例优先复用方舟 SDK 或兼容 SDK。当前方舟 SDK 没有统一的 Messages 原生资源方法,因此 Messages 示例使用 REST;Java 示例复用方舟 SDK 的 API Key HTTP 客户端。三类 API 使用不同的事件结构,不得共用事件解析分支。​
支持模型​
流式输出适用于能够通过 Chat API、Responses API 或 Messages API 调用的 LLM 模型。代码中的 Model ID 只是示例值,不构成流式输出白名单。模型存在 API 或流式专项限制时,以 模型列表 和对应 API 参考为准。​
配置流式请求​
快速开始中的示例已经包含启用流式输出所需的 stream=true。当流式输出与深度思考或工具调用组合时,还需在同一请求体中配置对应能力字段。​
与深度思考组合​
​
Chat API
Responses API
Messages API
​
​
{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [{"role": "user", "content": "证明两个奇数之和是偶数。"}],​
"thinking": {"type": "enabled"},​
"stream": true​
}​
​
​
三类 API 的请求结构不能混用。思考内容与正文的分流方式参见 响应示例与解析。​
与工具调用组合​
​
Chat API
Responses API
Messages API
​
​
{​
"model": "doubao-seed-2-1-pro-260915",​
"messages": [{"role": "user", "content": "查询北京天气。"}],​
"tools": [{​
"type": "function",​
"function": {​
"name": "get_weather",​
"description": "Get weather for a city.",​
"parameters": {​
"type": "object",​
"properties": {"city": {"type": "string"}},​
"required": ["city"]​
}​
}​
}],​
"stream": true​
}​
​
​
工具参数可能跨多个事件返回。完整参数到达前不得解析 JSON 或执行工具;具体聚合键和完成边界参见 响应示例与解析 和 判断响应结果。​
​
处理流式响应​
响应示例与解析​
以下示例仅保留参与解析的字段,省略请求 ID、时间戳等通用元数据。事件中的文本和 token 数为结构示例,不代表固定输出。​
​
Chat API
Responses API
Messages API
​
​
data: {"choices":[{"index":0,"delta":{"reasoning_content":"正在整理常见植物。"}}],"usage":null}​
​
data: {"choices":[{"index":0,"delta":{"content":"常见的十字花科植物包括白菜、甘蓝和油菜。"}}],"usage":null}​
​
data: {"choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":null}​
​
data: [DONE]​
​
解析说明:​
  • 先按 choices[].index 为每个候选结果建立独立状态。默认只请求一个候选时,该索引通常为 0,但客户端不应将所有数据块固定写入同一缓冲区。​
  • 将同一候选结果的 delta.content 和 delta.reasoning_content 分别追加到正文与思考缓冲区;reasoning_content 的具体语义取决于模型。​
  • delta.encrypted_content 返回完整值时,应整体保存或覆盖,不按字符串增量拼接。​
  • 工具调用时,在候选结果下继续按 delta.tool_calls[].index 建立独立参数缓冲区。finish_reason 和 [DONE] 的结果分类参见 判断响应结果。​
​
增量字段非空只表示当前事件带来新片段,不代表响应完整。usage 缺失或为 null 时,将统计标记为未采集,不记为 0。​
判断响应结果​
语义终态是 API 对本次生成结果状态的明确结论,用于判断结果是完整、部分、等待工具还是失败。[DONE]、EOF 或连接关闭只是传输结束,不能单独证明生成成功。​
​
API​
语义信号​
结果分类​
客户端动作​
Chat​
finish_reason=stop​
完整​
提交该 choice.index 的正文结果。​
Chat​
finish_reason=length 或 content_filter​
部分​
保留已接收内容并标记不完整;前者可在确认业务需要后调整输出或输入长度,后者不得通过自动重试规避拦截。​
Chat​
finish_reason=tool_calls​
工具中间态​
将该候选结果下各工具参数缓冲区标记为完整,解析参数并进入工具调用流程;不得当作最终文本回答。​
Chat​
data: [DONE]​
仅传输结束​
以此前各候选结果的 finish_reason 判定状态;缺少语义终态时按提前中断处理。​
Responses​
response.completed 且 response.status=completed​
完整​
提交已聚合的输出项。​
Responses​
response.incomplete​
部分​
读取 response.incomplete_details,保留部分结果,再决定是否续写或调整限制。​
Responses​
response.failed 或 error​
失败​
读取 response.error 或错误事件中的 code、message;仅在原因可重试且业务允许重复生成时重新请求。​
Responses​
data: [DONE]​
仅传输结束​
以此前的 response.completed、response.incomplete、response.failed 或 error 判定状态。​
Messages​
stop_reason=end_turn 或 stop_reason=stop_sequence,随后收到 message_stop​
完整​
提交已完成的内容块;命中停止序列时同时记录 stop_sequence。​
Messages​
stop_reason=max_tokens,随后收到 message_stop​
部分​
保留已接收内容并标记不完整;确认业务需要后调整 max_tokens 或输入长度。​
Messages​
stop_reason=tool_use,随后收到 message_stop​
工具中间态​
执行已完成的工具调用,并按 Messages 工具调用流程续接;不得当作最终文本回答。​
Messages​
error 事件或 HTTP 请求失败​
失败​
保留错误信息并关闭连接;仅在原因可重试且业务允许重复生成时重新请求。​
Messages​
仅收到 message_stop,没有可识别的 stop_reason​
未确认​
不将结果标记为完整,记录原始事件并按异常结果处理。​
​
记录用量​
​
Chat API
Responses API
Messages API
​
  • 完整用量:将请求体字段 stream_options.include_usage 设为 true。服务端通常在 data: [DONE] 前增加一个 choices=[] 的数据块,其 usage 表示整次请求的 token 用量。​
  • 逐块累计用量:将 stream_options.chunk_include_usage 设为 true。每个数据块的 usage 表示截至当前时刻的累计值;客户端只保留最新值,不得逐块相加。​
  • 模型例外:模型 deepseek-v4-1-flash-economy-260910 不受 stream_options.include_usage 控制。该模型默认在带 finish_reason 的数据块中返回 usage,不额外返回独立的用量数据块。​
​
处理连接中断​
在正常终态前出现 EOF、超时或网络断开时,已接收内容只是部分结果。客户端应标记部分结果并释放连接;仅在具备幂等策略且业务允许重复生成时重新请求。本文不定义断点续传。​
Messages 以 message_stop 收尾,不使用 [DONE] 代替消息终态;结果分类仍由此前 message_delta.delta.stop_reason 决定。​
工作原理​
​客户端、方舟 API 和模型之间的流式请求、增量推送与终态收尾时序​​
  • 建立连接:客户端发送包含 stream=true 的请求,并为每个并发请求维护独立的 SSE 连接。​
  • 聚合增量:客户端按所选 API 的事件类型分派数据,再使用该事件声明的索引将片段追加到对应输出项。​
  • 判断完成:客户端使用所选 API 的语义终态提交结果;若在终态前断连,则将已接收内容标记为部分结果并释放连接。​
使用说明与限制​
运行观测​
​
观测维度​
预期影响​
指标或信号​
阈值或单位​
首段内容等待时间​
客户端可在完整响应结束前开始处理内容;这不代表总生成时间缩短。​
从发出请求到收到首个正文或思考 delta 的时间,并以毫秒记录。​
毫秒;本文不提供固定阈值。​
token 用量​
三类 API 的统计位置不同,中断时统计可能缺失。​
Chat 的有效 usage 数据块;Responses 终态事件的 response.usage;Messages 的 message_start.message.usage 或 message_delta.usage。​
token;缺失不记为零,累计快照不重复相加。​
连接资源​
流对象未关闭会持续占用客户端连接资源。​
活跃连接数、客户端超时、消费循环是否退出、流对象是否关闭。​
连接数、秒;按业务容量设置告警。​
​
限制与不支持项​
​
维度​
具体值​
后果​
处理方式​
参数类型​
stream 不是 boolean​
请求参数类型不符合 Chat API、Responses API 或 Messages API 定义。​
仅传 true 或 false。​
能力组合​
Responses API 创建前缀缓存时 stream=true​
无法在创建前缀缓存的同一次请求中使用流式输出。​
先以非流式请求创建前缀缓存,再通过 previous_response_id 续接后续请求。​
连接释放​
客户端停止消费但未关闭流对象​
连接和套接字资源可能继续占用。​
正常和异常路径都关闭流对象;设置有界的连接与读取超时。​
​
相关文档​
  • Chat API:核对数据块结构、delta、finish_reason 和 stream_options。​
  • Responses API:核对类型化事件、响应状态和 response.usage。​
  • Messages API:核对消息与内容块事件、stop_reason 和公开用量字段。​
  • Function Calling:了解工具定义、参数回传和多轮工具执行流程。​
  • 上下文缓存:了解流式输出与隐式缓存、显式缓存及前缀缓存的组合限制。​
​
最近更新时间:2026.10.23 16:58:40
这个页面对您有帮助吗?
有用
有用
无用
无用