用 OpenAI API 做逐字显示时,关键不是反复请求接口,而是在 Responses API 调用中开启 stream=True,持续读取服务端发送的事件。下面的 Python 示例只把 response.output_text.delta 写到终端,并在完成或失败时明确结束。本题面向已经能在服务端使用 API 密钥的开发者。
准备一个最小可运行环境
按官方快速入门安装 openai Python 包,在运行环境配置 OPENAI_API_KEY。密钥只放在服务端环境变量或密钥管理服务,不放到网页 JavaScript。下面使用文档模型目录中的 gpt-6-luna;若项目没有该模型的访问权限,先在开发者控制台核对可用模型并替换。

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 使用有类型的事件;文本增量、完成与错误应分别处理。某个请求也可能包含工具或其他内容事件,所以不能把每个事件都当成可见文字,更不能把连接关闭等同于成功。
怎样核对它真的完成了
- 终端应在生成过程中逐段出现文字,而不是只在最后一次性打印。
- 只有收到
response.completed才打印“[完成]”。 - 临时断开网络或触发错误时,应看到异常;已显示的片段只是部分结果,不入库为最终答复。
如果你要转发给浏览器,先在自家后端接收这些事件,再定义前端可消费的消息格式和结束标记。生产应用还应处理用户取消、客户端断连和重连后的去重;本示例只演示服务端终端输出。流式内容在尚未完成时更难做完整审核,官方文档也提醒这一点。本文代码依据 2026 年 10 月 1 日官方文档整理,未使用你的密钥实际调用;以当前 SDK 和项目权限为准。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30912.html