stream=True,并在客户端逐块读取返回内容。
使用场景
- 聊天 UI:边生成边展示模型回复,减少用户等待感。
- 长文本生成:生成报告、总结、方案或代码时,逐步展示输出内容。
- 代码与推理任务:让用户更早看到模型的输出进展,便于判断是否需要中止或调整请求。
- Agent 交互:在多步骤任务中展示模型的中间输出或执行进度。
支持的模型
不同模型对 Streaming 的支持情况可能不同。请通过 模型广场 的模型详情页查看最新支持情况。工作机制
开启 Streaming 后,一次请求通常包含以下流程:- 客户端发送请求,并设置
stream=True。 - 模型开始生成后,服务端持续返回增量内容。
- 客户端按顺序读取每个 chunk,从中提取需要展示或保存的增量字段。
- 客户端收到结束原因后,停止读取并完成本次响应。
如果中途断连或超时,客户端需要决定是否重试、提示用户,或保留已接收的部分输出。Streaming 只改变响应返回方式,不改变模型本身的生成逻辑。应用仍需要处理鉴权、超时、断连、用户取消、内容拼接和最终结果保存。
关键参数
stream:是否开启流式返回。设置为True时,客户端需要按流式方式消费响应。max_completion_tokens:控制最大生成长度。长回复仍需要设置合理的输出上限,避免输出过长导致成本或延迟不可控。
返回内容
流式响应由多个 chunk 组成。不同模型、不同能力组合下,chunk 中的字段可能不同,客户端应按字段是否存在进行兼容处理。 流式 chunk 的object 通常为 chat.completion.chunk,delta 中可能出现以下字段:
role:消息角色,通常出现在流式响应开始阶段。content:模型生成的文本增量,通常用于拼接最终展示给用户的回复。reasoning_content:模型生成过程中的推理内容或中间思考内容。是否返回、返回多少,取决于具体模型和请求结果。
不要假设每个 chunk 都包含
content。部分 chunk 可能只包含 role、reasoning_content、结束原因或用量信息。客户端应跳过不需要处理的空增量或非展示字段。finish_reason 表示本次生成结束的原因,通常出现在最后一个包含 choices 的 chunk 中。
usage 可能在流式响应末尾返回,用于查看本次请求的 token 用量。不同模型的返回情况和 usage 明细字段可能不同,请以实际返回结果为准。
调用示例
示例使用环境变量读取 API Key,避免将密钥写入代码。- 设置
stream=True开启流式返回。 - 遍历响应中的每个 chunk。
- 优先读取
delta.content并拼接为最终展示文本。 - 如需记录推理过程,可单独收集
delta.reasoning_content,不要默认混入最终回答。
delta.content。如果您的产品需要展示或保存推理过程,可以按业务需要处理 reasoning_trace;如果不需要,可以忽略 reasoning_content。
具体 chunk 字段结构可能随 API 版本、模型能力和请求参数变化,请以 API 指南和实际返回结果为准。
最佳实践
- 区分最终回答和推理内容:优先使用
delta.content拼接最终展示文本。如果返回reasoning_content,请按业务需要单独处理,不要默认和最终回答混在一起。 - 边展示边保存完整结果:前端可以逐步渲染文本,后端仍应保存完整响应,便于审计、重试和后续处理。
- 处理非内容 chunk:部分 chunk 可能不包含文本内容。客户端应跳过不需要处理的字段,而不是将其当作错误。
- 处理用户取消:在聊天或 Agent 场景中,用户可能中止生成。应用应停止读取流,并正确更新会话状态。
- 设置超时和重试策略:Streaming 连接持续时间可能较长。请设置合理的客户端超时,并明确断连后的处理方式。
- 不要提前解析不完整结构:如果结合 Structured Output 或 JSON 输出使用,请等到完整响应收齐后再解析 JSON。
- 控制输出长度:长回复建议设置合理的
max_completion_tokens,避免输出过长导致成本增加或连接持续时间过长。
限制说明
- Streaming 需要客户端持续读取响应流。如果客户端、代理或网关不支持长连接,可能无法稳定接收完整输出。
- Streaming 不保证模型更快完成生成,只是让部分内容更早返回。
- 如果请求中途断开,已接收内容可能是不完整输出。应用需要处理部分结果、重试和用户提示。
- 与 Function Calling、Structured Output、reasoning content 等能力组合使用时,具体返回结构和处理方式可能不同,请以 API 指南、模型详情和实际返回结果为准。
- token 用量、结束原因和 chunk 字段结构可能因模型而异,不建议在业务逻辑中依赖未确认的内部字段。
