OpenAI Responses API 后台任务完成后如何取回结果
把一个耗时较长的请求交给 OpenAI Responses API 后,服务端不会把完整结果一直挂在创建请求上。正确做法是让请求使用 background=true,先保存返回的 response.id,再通过 Responses 的取回接口读取状态和结果。只要状态仍是 queued 或 in_progress,就继续等待;离开这两个状态后,才进入成功、失败、取消或不完整的处理分支。
官方地址:https://developers.openai.com/api/docs/guides/background
- 后台任务的关键凭据是 Response ID,而不是创建请求的连接。
- 轮询条件只覆盖
queued和in_progress,终态不能继续盲轮询。 - 只有
completed才适合读取正常输出,其他终态要保留error或incomplete_details。
先把后台响应拆成三个可保存的字段
创建请求返回的是一个 Response 对象,其中最重要的是 id、status 和后续可取回的输出。业务队列至少应保存 response_id、创建时间和本地任务编号;不要把 Python SDK 对象直接塞进缓存。取回接口是 GET /v1/responses/{response_id},每次返回的状态都应当被视为新的事实。

| 字段或状态 | 用途 | 处理判断 |
|---|---|---|
id | 后续取回的唯一标识 | 创建成功后立即持久化 |
queued / in_progress | 任务仍未结束 | 等待后再次 retrieve |
completed | 结果可用 | 读取 output_text 或输出项 |
| 其他终态 | 失败、取消或不完整 | 记录诊断,不当作成功 |
用 SDK 按状态取回结果
下面的最小写法把轮询封装成一个函数。创建阶段只负责拿到 ID;取回阶段只在两个进行态内等待,这样可以避免任务已经结束后继续制造无意义请求。
import os
import time
from openai import OpenAI
def wait_for_response(response_id, timeout_seconds=600):
# 复用同一个客户端,并给后台任务设置本地总超时。
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
deadline = time.monotonic() + timeout_seconds
response = client.responses.retrieve(response_id)
while response.status in {"queued", "in_progress"}:
# 固定间隔足够演示;生产环境可改为带上限的退避。
if time.monotonic() >= deadline:
raise TimeoutError(f"后台响应轮询超时: {response_id}")
time.sleep(2)
response = client.responses.retrieve(response_id)
if response.status != "completed":
# 非成功终态也要带回服务端诊断,便于重试或人工处理。
detail = response.error or response.incomplete_details
raise RuntimeError(f"后台响应结束于 {response.status}: {detail}")
return response
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
created = client.responses.create(
model="gpt-6-astra",
input="整理这份任务的三条执行建议。",
background=True,
)
result = wait_for_response(created.id)
print(result.output_text)
这里的关键不是把 sleep(2) 当成固定最佳值,而是把“进行态”和“终态”分开。若你使用结构化输出,取回时仍要根据终态判断数据是否完整;不要只判断对象存在就强行解析。
终态处理决定任务是否真的完成
completed 表示可以按成功路径读取输出。failed 应记录 error,incomplete 应检查 incomplete_details,cancelled 则说明任务被取消。把所有非进行态都当成成功,是后台任务最隐蔽的逻辑错误:队列会显示完成,但用户拿不到可用答案。

如果任务需要人工取消,官方指南还提供了 POST /v1/responses/{response_id}/cancel。取消动作应与本地任务状态一起记录,避免取消请求尚未被服务端确认时就把业务单标成成功。
生产轮询要补上超时与保存边界
第一,给每个任务设置本地总超时,超时后进入待重试或人工检查,而不是无限循环。第二,对大量任务采用指数退避并设置最大间隔,减少短时间内的集中取回。第三,响应 ID、当前状态和最后一次错误要落到可靠存储中,进程重启后从 ID 恢复,而不是重新创建任务。
后台响应的保存策略也要看项目配置。官方说明指出,ZDR 项目的后台响应会为异步执行和轮询临时保存大约 10 分钟;在启用 Modified Abuse Monitoring 的项目中,若希望轮询窗口后仍保留后台响应,需要显式设置 store=true。因此,长于这个窗口的业务不要把 Responses 当作永久任务数据库,应该及时取回并写入自己的结果存储。
常见问题
为什么创建请求返回后不能直接读取最终答案?
因为后台模式先返回任务对象,生成仍可能处于 queued 或 in_progress。必须使用同一个 ID 取回到终态。
轮询什么时候停止?
当状态不再是 queued 或 in_progress 时停止,再按终态分支处理。
拿不到 output_text 时先查什么?
先看 status,然后检查 error 和 incomplete_details;不要用空字符串掩盖失败原因。
一句话记忆:创建阶段保存 ID,进行态阶段轮询,终态阶段判定结果,成功输出和失败诊断走不同的数据路径。
Go sql.NullString 扫描 NULL 后如何避免空字符串混淆
- 上一篇
- Go sql.NullString 扫描 NULL 后如何避免空字符串混淆
- 下一篇
- Go bufio.Writer 写入成功但 Flush 报错如何处理
-
- 科技周边 · 人工智能 | 9分钟前 | 人工智能 · openai api · 检索增强生成 · 文件搜索 · OpenAI Attributes 元数据过滤 Responses API File Search vector store
- OpenAI File Search 元数据过滤怎样缩小检索范围
- 426浏览 收藏
-
- 科技周边 · 人工智能 | 21小时前 |
- 引用支撑度评估怎么配置或排查
- 115浏览 收藏
-
- 科技周边 · 人工智能 | 22小时前 |
- LoRA 数据字段怎么配置或排查
- 171浏览 收藏
-
- 科技周边 · 人工智能 | 23小时前 | 人工智能 · 性能排查 · 提示词工程 · Hugging Face · 模型推理 · KV Cache · 提示词缓存动态字段 DynamicCache KV缓存 Transformers缓存 past_key_values use_cache StaticCache
- 提示词缓存动态字段怎么配置或排查
- 397浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- 批量推理长度分桶怎么配置或排查
- 221浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 |
- 工具调用参数校验怎么配置或排查
- 264浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | json schema · 结构化输出 · Hugging Face · AI接口 Hugging Face 结构化输出 JSON Schema
- 结构化输出失败怎么配置或排查
- 447浏览 收藏
-
- 科技周边 · 人工智能 | 1天前 | Reranker
- reranker 召回评估怎么配置或排查
- 388浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 125次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 48次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 16次使用
-
- OpenCompass
- OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
- 67次使用
-
- AGI-Eval
- AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
- 44次使用
-
- 基于golang channel实现的轻量级异步任务分发器示例代码
- 2023-01-07 371浏览
-
- Go encoding/json Decoder 如何拒绝尾随数据:单个 JSON 文档的结束判定
- 2026-08-27 494浏览
-
- Go encoding/json.Decoder.DisallowUnknownFields 如何拦截多余字段:API 入参校验
- 2026-08-28 487浏览
-
- Go json.Decoder 连续 JSON 怎么读:Decode 循环、EOF 与尾部数据校验
- 2026-07-27 458浏览
-
- Go context.WithCancel 为什么还会泄漏:defer cancel 与请求生命周期
- 2026-08-27 427浏览

