文档/API 接入

流式输出

把 stream 设为 true,通过 SSE 逐段接收,让首个 token 更早返回。

本页目录

长回复一次性返回会让用户盯着空白等好几秒。开启流式后,模型每生成一小段就推送一次,首字延迟通常能压到几百毫秒。

开启方式

bash
curl https://api.apione.ai/v1/chat/completions \
  -H "Authorization: Bearer $APIONE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4-6",
    "stream": true,
    "messages": [{ "role": "user", "content": "写一段 200 字的产品介绍" }]
  }'

数据格式

响应的 Content-Type 为 text/event-stream,每个分片是一行 data:,最后以 data: [DONE] 结束:

text
data: {"id":"chatcmpl-01J8Z","choices":[{"delta":{"role":"assistant"},"index":0}]}

data: {"id":"chatcmpl-01J8Z","choices":[{"delta":{"content":"APIONE"},"index":0}]}

data: {"id":"chatcmpl-01J8Z","choices":[{"delta":{"content":" 是一个"},"index":0}]}

data: {"id":"chatcmpl-01J8Z","choices":[{"delta":{},"finish_reason":"stop","index":0}],
       "usage":{"prompt_tokens":18,"completion_tokens":126,"total_tokens":144}}

data: [DONE]
  • 正文增量在 choices[0].delta.content,把它们按顺序拼接即可。
  • usage 只出现在最后一个带内容的分片上,要计费就别提前 break。
  • 流中可能出现空的 keep-alive 注释行(以 : 开头),直接忽略。

SDK 写法

python
stream = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "写一段 200 字的产品介绍"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)
javascript
const stream = await client.chat.completions.create({
  model: "claude-sonnet-4-6",
  messages: [{ role: "user", content: "写一段 200 字的产品介绍" }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

流中出错怎么办

HTTP 状态码在响应头阶段就已确定,因此流已经开始后才发生的错误不会改状态码,而是以一个错误分片下发:

json
data: {"type":"error","error":{"message":"upstream timed out","type":"upstream_error","code":"upstream_timeout","retryable":true}}
重要

已经推给用户的内容无法撤回。稳妥做法是:收到错误分片时保留已输出的部分,在界面上提示「生成中断」,由用户决定是否重试;不要静默重发整段请求,那会重复计费。

注意事项

  • 反向代理(Nginx 等)需要关闭响应缓冲,否则分片会被攒到一起再下发。
  • 浏览器端不要用 EventSource——它只支持 GET,无法带请求体;用 fetch 读 ReadableStream。
  • Serverless 平台常有 30s 响应上限,长回复要确认平台支持流式响应。

联系我们

文档没写清楚,或者需要人工协助?按问题类型选一个渠道即可。

邮箱

技术支持support@apione.ai

WhatsApp

Telegram

工单

计费与账户控制台 › 反馈