流式输出与多轮对话
什么是流式输出
流式输出会在生成过程中逐段返回内容,客户端可以边接收边显示。它改变的是返回方式,不代表免费或更少消耗。
在支持 Chat Completions 流式输出的模型请求中,设置:
{
"model": "替换成实际模型 ID",
"messages": [{"role": "user", "content": "你好"}],
"stream": true
}
如何处理流式响应
OpenAI 兼容聊天流通常使用 SSE 格式,每段数据以 data: 开头。文本增量通常位于 choices[0].delta.content,结束标志通常为 data: [DONE]。
- 不要对整个响应直接调用一次
response.json()。 - 事件中可能没有文本,需处理角色信息、空增量、工具调用和错误。
- 网络分块不等于完整 SSE 事件,应缓冲后按事件边界解析。
- 响应中断或没有收到结束标志时,不要把部分回答当成完整成功。
使用成熟客户端或适配该协议的 SDK,通常能省去手动处理流的工作。Responses 和 Claude 等其他协议的事件结构不同,不要混用解析逻辑。
多轮对话需要携带历史
使用 Chat Completions 时,下一次请求要把希望模型记住的消息放入 messages,例如:
[
{"role": "user", "content": "请介绍一下太阳系。"},
{"role": "assistant", "content": "太阳系由太阳和围绕它运行的天体组成。"},
{"role": "user", "content": "那地球排第几?"}
]
历史越长,输入用量可能越大;超过模型上下文长度时,需要减少或总结历史内容。
中断后是否重试
先查看客户端结果和使用日志。网络断开不代表服务端一定没有执行,自动重试可能产生新的请求与费用。
对于 429 等限制错误,可等待后有限次重试;对于无效密钥、错误模型名或参数错误,应先修正配置。