流式输出

通过 Server-Sent Events 流式接收 OpenAI 兼容的 Chat Completion 增量结果。

stream 设置为 true,即可通过 Server-Sent Events(SSE)增量接收文本和工具调用内容。

POST/chat/completions

使用标准 Chat Completions 端点,并在请求体中设置 stream: true

cURL

curl --no-buffer https://glm5.app/api/v1/chat/completions \
  -H "Authorization: Bearer $GLM5_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm-5.3",
    "messages": [
      {"role": "user", "content": "写一段四行的版本发布公告。"}
    ],
    "max_completion_tokens": 500,
    "stream": true
  }'

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["GLM5_API_KEY"],
    base_url="https://glm5.app/api/v1",
)

stream = client.chat.completions.create(
    model="glm-5.3",
    messages=[
        {"role": "user", "content": "写一段四行的版本发布公告。"}
    ],
    max_completion_tokens=500,
    stream=True,
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

事件格式

每个事件以 data: 开头,其中包含一个 chat.completion.chunk 对象:

data: {"id":"chatcmpl_01...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl_01...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"发布"},"finish_reason":null}]}

data: {"id":"chatcmpl_01...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: [DONE]

使用函数调用时,工具参数也可能通过 delta.tool_calls 分段到达。

Chunk 字段

字段含义
id同一次调用的多个 chunk 共用的 completion ID。
object固定为 chat.completion.chunk
createdUnix 秒级时间戳。
modelGLM 5 公开模型 ID。
choices[].indexChoice 索引;当前通常为 0。
choices[].delta.role通常在开头出现,值为 assistant
choices[].delta.content需要追加到输出缓冲区的文本片段。
choices[].delta.tool_calls需要按索引累积的函数调用增量。
choices[].finish_reason输出进行中为 null,结束时常见 stoptool_calls

使用 OpenAI 兼容客户端时,可继续沿用同样的基础解析逻辑:读取每行 data: 事件;遇到 data: [DONE] 结束;存在 choices[0].delta.content 时追加文本;使用工具时累积 delta.tool_calls

流式错误

如果响应已经开始流式传输,之后才发生错误,错误对象会出现在 SSE 数据流中,然后连接关闭:

data: {"error":{"message":"Internal server error.","type":"server_error","code":"internal_error","param":null}}

因此客户端既要处理开始流式输出前的非 2xx HTTP 状态,也要处理数据流中的 error 对象。

流式输出改善延迟,不减少输入成本

Streaming 可以让界面更早显示模型输出,但不会减少请求 messages 中已经发送的 Token 数量。

流式输出 | GLM 5 API