外观
流式输出
流式输出让应用在回答生成过程中逐段显示内容。Chat Completions 请求设置 stream: true,随后按 SSE 事件读取增量结果。
Python 示例
先按 Python SDK 安装依赖并设置环境变量。
python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["BEANC_API_KEY"],
base_url="https://api.beanc.cn/v1",
)
stream = client.chat.completions.create(
model="YOUR_MODEL_ID",
messages=[{"role": "user", "content": "写一段简短的春日问候。"}],
stream=True,
)
for chunk in stream:
if chunk.choices:
text = chunk.choices[0].delta.content
if text:
print(text, end="", flush=True)
print()这里读取的是 delta.content,不是非流式响应中的 message.content。某些事件只有角色信息或结束标志,不包含文字。
原始事件结构
以下为简化示意。直接处理 HTTP 流时,按 SSE 的空行分隔事件,再解析 data:;不能假定每个网络数据块都是一个完整 JSON。
text
data: {"choices":[{"delta":{"content":"你好"},"finish_reason":null}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]没有实时显示时
- 确认请求确实带有
stream: true,客户端也逐段读取响应。 - 检查自己的服务端是否先收集完整结果再返回。
- 如经由自己的反向代理,检查是否缓冲了流式响应。
- 先用 SDK 最小示例验证,再排查界面渲染与代理。
中断与重试
为界面提供停止按钮,并取消对应网络请求。流式响应开始后发生错误,可能通过流事件或连接中断体现,不一定能再修改 HTTP 状态码。
断线后重新请求可能产生新的生成结果和费用;不要把从头重试当作从断点续传。
协议参考:OpenAI · Streaming API responses,流式传输;Chat Completions Reference,流式增量字段。