跳到正文

流式输出 ​

流式输出让应用在回答生成过程中逐段显示内容。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]

没有实时显示时 ​

  1. 确认请求确实带有 stream: true,客户端也逐段读取响应。
  2. 检查自己的服务端是否先收集完整结果再返回。
  3. 如经由自己的反向代理,检查是否缓冲了流式响应。
  4. 先用 SDK 最小示例验证,再排查界面渲染与代理。

中断与重试 ​

为界面提供停止按钮,并取消对应网络请求。流式响应开始后发生错误,可能通过流事件或连接中断体现,不一定能再修改 HTTP 状态码。

断线后重新请求可能产生新的生成结果和费用;不要把从头重试当作从断点续传。

协议参考:OpenAI · Streaming API responses,流式传输;Chat Completions Reference,流式增量字段。

豆子虽小,可能无限。