> ## Documentation Index
> Fetch the complete documentation index at: https://apione.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 流式输出与中断处理

> 接收 SSE 增量，正确处理空分片和生成中断。

在 Chat 请求中设置 `stream: true`，即可通过 SSE 逐步接收输出。流式改变的是接收方式，不保证固定的首字延迟或完成时间。

## Python 完整示例

按 [SDK 接入](https://apione.ai/docs/guides/sdks.md) 安装依赖，并设置 `APIONE_API_KEY` 和 `APIONE_MODEL`。保存为 `stream.py`，运行 `python stream.py`。

```python theme={null}
import os
from openai import OpenAI

with OpenAI(
    base_url="https://api.apione.ai/v1",
    api_key=os.environ["APIONE_API_KEY"],
    timeout=60.0,
    max_retries=0,
) as client:
    stream = client.chat.completions.create(
        model=os.environ["APIONE_MODEL"],
        messages=[{"role": "user", "content": "写一段简短的产品说明。"}],
        stream=True,
    )
    try:
        for chunk in stream:
            if not chunk.choices:
                continue
            text = chunk.choices[0].delta.content
            if text:
                print(text, end="", flush=True)
        print()
    finally:
        stream.close()
```

示例将 SDK 超时设为 60 秒，并关闭 SDK 自动重试，便于观察单次请求；生产环境按业务需要调整。发生异常时会结束本次执行并关闭流，已打印内容会保留。

## 用 cURL 检查原始事件

`-N` 关闭 cURL 的输出缓冲，适合判断是否正在收到 SSE 事件。

```bash theme={null}
: "${APIONE_API_KEY:?请先设置 APIONE_API_KEY}"
: "${APIONE_MODEL:?请先设置 APIONE_MODEL}"

curl -N -sS https://api.apione.ai/v1/chat/completions \
  -H "Authorization: Bearer $APIONE_API_KEY" \
  -H "Content-Type: application/json" \
  --data "{\"model\":\"$APIONE_MODEL\",\"messages\":[{\"role\":\"user\",\"content\":\"写一句产品说明。\"}],\"stream\":true}"
```

响应类型为 `text/event-stream`。正文增量通常位于 `choices[0].delta.content`，结束标记为 `data: [DONE]`。网络读取的一块字节不一定是完整的 SSE 事件；自行解析时，要累积完整事件并处理 UTF-8 边界。

## 空分片、错误与中断

| 情况 | 处理方式 |
| - | - |
| 只有角色、空 `choices` 或没有正文 | 跳过正文显示，不直接索引不存在的字段 |
| 用量在结束阶段返回 | 继续解析到结束，不提前关闭流 |
| HTTP 200 后出现错误或断连 | 标记本次未完成，保留已显示内容并提示用户 |
| 用户取消或应用停止消费 | 关闭流，释放连接 |
| 需要重试 | 由应用明确决定，避免静默重发整段请求导致重复生成和费用 |

浏览器应用通过自己的服务端转发请求，API Key 保留在服务端。完整说明见 [APIONE 流式文档](https://apione.ai/zh/api-docs/docs/streaming)，错误处理见 [错误码与排查](https://apione.ai/docs/support/errors.md)。

## 流式取消与计费

平台最终判定失败的模型调用不收费。客户端显示超时、主动取消、连接中断，或生成成功后下载失败，不等于平台调用失败；若平台已完成生成或确认了实际用量，相应费用按该模型和分组的规则结算。

流式请求应结合最终状态与实际用量判断，不能只看 HTTP 200、客户端错误提示或是否收到了全部输出。已生成的内容未被完整接收，也不代表没有发生调用。

状态或扣费有疑问时，保留请求 ID、发生时间和时区、模型、最终状态及错误信息，联系支持核查。核实误扣或重复扣费后更正账目；不要在状态未知时连续重新创建任务。

详见[失败与中断计费](https://apione.ai/docs/account/usage.md)。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.