302API
实用教程 / 02 · 稳定调用

模型流式接口返回 200,为什么还要检查结束状态?

更新于 2026-09-29。依据本站当前公开文档编写,SDK 示例已完成本地模拟响应验证;本次没有执行真实模型调用。

流式输出可以让用户逐步看到模型回答,但连接建立成功和回答完整结束是两件不同的事。服务开始输出后发生错误,HTTP 状态也可能仍然是 200。

Chat Completions 要检查什么

设置 stream=True,并请求 stream_options={"include_usage": True}。使用 SDK 解析 SSE,避免自己把每个网络数据块当成完整 JSON。

import os
from openai import OpenAI

usage = None
finish_reason = None
with OpenAI(
    api_key=os.environ["API302_KEY"],
    base_url="https://api.302api.com/v1",
    max_retries=0,
    timeout=210.0,
) as client:
    stream = client.chat.completions.create(
        model="gpt-6-astra",
        messages=[{"role": "user", "content": "请用一句话解释什么是 API。"}],
        max_completion_tokens=256,
        stream=True,
        stream_options={"include_usage": True},
    )
    try:
        for chunk in stream:
            if chunk.usage is not None:
                usage = chunk.usage
            for choice in chunk.choices:
                if choice.delta.content:
                    print(choice.delta.content, end="", flush=True)
                if choice.finish_reason is not None:
                    finish_reason = choice.finish_reason
    finally:
        stream.close()

print("\n结束原因:", finish_reason)
print("用量:", usage)
if finish_reason != "stop" or usage is None:
    raise RuntimeError("未确认完整文本结束及用量;先核对记录,不自动重试")

最终 usage 帧的 choices 可能是空列表,不能忽略它。SDK 会消费原始流里的 [DONE] 标记。这个示例只处理单条文本结果,不执行工具;length、tool_calls 等需要分别处理。

已显示出来的部分回答也可能是不完整结果。生产应用应先显示“生成中”,收到结束信息后再更新状态。

Responses 不能复用 Chat 的事件解析

项目 Chat Completions Responses
文本增量 choices[].delta.content response.output_text.delta
用量 chunk 的 usage 完成事件里的 response.usage
结束检查 finish_reason 与流结束 response.completed
非正常结束 异常、缺少结束或用量等 response.failed、response.incomplete、error 等

Responses 不应发送 Chat 的 stream_options.include_usage。完整示例见 本站接入文档。

出错后先做什么

情况 处理
400 检查 JSON、模型、接口路径及输出上限;原样重试不能修复参数
401 检查 Key、Bearer 格式和密钥状态
402 检查账户余额、Key 额度和请求所需预占
403 结合 error.code 检查模型可用性;不要仅凭状态判定为网络问题
404 / 405 检查路径拼接与请求方法
429 区分频率限制和日额度;读取 Retry-After,它不保证重试安全
5xx、超时、连接中断 请求可能已经执行;先看调用记录和结算状态

只有确定请求未执行、且错误可以重试时,才采用有次数上限的退避。本文示例默认关闭 SDK 自动重试。

图片请求另有 Idempotency-Key 去重规则;它会拒绝重复任务,并不重放图片结果。不要把该规则当作普通文本接口的保证。

给支持人员的信息

提供请求时间及其时区、模型 ID、路径、HTTP 状态、错误码、客户端版本,以及本站请求编号(有返回时)。不要公开 API Key、Authorization、Cookie、完整对话或私密图片。

下一步:在 控制台 对照调用记录,并查阅 错误码说明。