流式输出不是把一次完整回答切成随意的小段,而是持续接收服务端事件。程序必须识别文本增量、完成事件和异常,不能把调试事件或空增量直接展示给用户。
开始前准备
- 已完成一次非流式调用并确认 API Key 与 Model ID 有效。
- 使用方舟官方 SDK,并让密钥只从 ARK_API_KEY 环境变量读取。
- 准备一个足够长的测试问题,便于观察增量输出。
按顺序完成操作
- 在 Responses 请求中把 stream 设为 True。
- 遍历事件,只把 response.output_text.delta 的 delta 追加到文本数组并即时打印。
- 收到 response.completed 后再把数组拼成完整文本并保存;遇到异常则标记本次回答不完整。
import os
from arkruntime import Ark
client = Ark(base_url="https://ark.cn-beijing.volces.com/api/v3",
api_key=os.environ["ARK_API_KEY"])
parts = []
stream = client.responses.create(
model="your_doubao_model_id",
input="分四点解释如何检查 API 返回是否完整",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
parts.append(event.delta)
print(event.delta, end="", flush=True)
elif event.type == "response.completed":
print("\n[完成]")
full_text = "".join(parts)
怎样判断已经成功
- 测试时同时记录事件类型和文本长度,最终 full_text 应等于屏幕上所有文本增量按顺序拼接的结果。
- 主动中断一次网络,程序应给出“回答不完整”的状态,而不是把已收到的半段文字当作成功结果。
常见失败与处理边界
- 一直没有增量:确认调用的是流式方法且 stream=True,代理层也不能缓冲整个响应。
- 文本重复:不要同时追加 delta 和 done 事件里的聚合文本。
- 界面结束但后端仍占用连接:确保退出迭代器或使用上下文管理器释放流。
适用限制
事件名称和 SDK 对象结构可能随版本调整,本文未在读者当前 SDK 版本与账号中实测,运行前应对照官方流式输出页。

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