OpenAI API 流式输出怎么实现?Python 逐条读取事件并判断完成

用 Python 读取 OpenAI Responses API 的流式文本事件,识别完成与失败信号,避免把连接断开后的片段当完整答案。

用 OpenAI API 做逐字显示时,关键不是反复请求接口,而是在 Responses API 调用中开启 stream=True,持续读取服务端发送的事件。下面的 Python 示例只把 response.output_text.delta 写到终端,并在完成或失败时明确结束。本题面向已经能在服务端使用 API 密钥的开发者。

准备一个最小可运行环境

按官方快速入门安装 openai Python 包,在运行环境配置 OPENAI_API_KEY。密钥只放在服务端环境变量或密钥管理服务,不放到网页 JavaScript。下面使用文档模型目录中的 gpt-6-luna;若项目没有该模型的访问权限,先在开发者控制台核对可用模型并替换。

OpenAI API 流式输出怎么实现?Python 逐条读取事件并判断完成

python -m pip install -U openai

按事件类型读取文本

将以下代码保存为 stream_demo.py,执行 python stream_demo.py。示例提示词固定,便于对照非流式结果;返回文本不保证每次相同。

import sys
from openai import OpenAI

client = OpenAI()
finished = False
stream = client.responses.create(
    model="gpt-6-luna",
    input="用两句话解释什么是向量检索。",
    stream=True,
)

for event in stream:
    if event.type == "response.output_text.delta":
        sys.stdout.write(event.delta)
        sys.stdout.flush()
    elif event.type == "response.completed":
        finished = True
    elif event.type in ("response.failed", "error"):
        raise RuntimeError(f"生成失败:{event.type}")

if not finished:
    raise RuntimeError("连接结束,但没有收到 response.completed;请勿把部分文本当成完整答案")
print("\n[完成]")

官方流式响应指南说明,Responses API 使用有类型的事件;文本增量、完成与错误应分别处理。某个请求也可能包含工具或其他内容事件,所以不能把每个事件都当成可见文字,更不能把连接关闭等同于成功。

怎样核对它真的完成了

  1. 终端应在生成过程中逐段出现文字,而不是只在最后一次性打印。
  2. 只有收到 response.completed 才打印“[完成]”。
  3. 临时断开网络或触发错误时,应看到异常;已显示的片段只是部分结果,不入库为最终答复。

如果你要转发给浏览器,先在自家后端接收这些事件,再定义前端可消费的消息格式和结束标记。生产应用还应处理用户取消、客户端断连和重连后的去重;本示例只演示服务端终端输出。流式内容在尚未完成时更难做完整审核,官方文档也提醒这一点。本文代码依据 2026 年 10 月 1 日官方文档整理,未使用你的密钥实际调用;以当前 SDK 和项目权限为准。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30912.html

赞 (0)
AI小管家的头像AI小管家
Claude Code 实战怎么做?从需求拆分到小功能提交的完整流程
上一篇 1天前
OpenAI API 遇到 429 速率限制怎么办?看请求与 Token 限额后安全重试
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部