当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > OpenAI Responses API 后台任务完成后如何取回结果

OpenAI Responses API 后台任务完成后如何取回结果

来源:17golang原创 2026-09-14 10:05:50 0浏览 收藏

把一个耗时较长的请求交给 OpenAI Responses API 后,服务端不会把完整结果一直挂在创建请求上。正确做法是让请求使用 background=true,先保存返回的 response.id,再通过 Responses 的取回接口读取状态和结果。只要状态仍是 queuedin_progress,就继续等待;离开这两个状态后,才进入成功、失败、取消或不完整的处理分支。

官方地址:https://developers.openai.com/api/docs/guides/background

要点速览
  • 后台任务的关键凭据是 Response ID,而不是创建请求的连接。
  • 轮询条件只覆盖 queuedin_progress,终态不能继续盲轮询。
  • 只有 completed 才适合读取正常输出,其他终态要保留 errorincomplete_details

先把后台响应拆成三个可保存的字段

创建请求返回的是一个 Response 对象,其中最重要的是 idstatus 和后续可取回的输出。业务队列至少应保存 response_id、创建时间和本地任务编号;不要把 Python SDK 对象直接塞进缓存。取回接口是 GET /v1/responses/{response_id},每次返回的状态都应当被视为新的事实。

OpenAI Responses API 后台任务中请求、Response ID、取回接口和输出对象的静态结构示意图
图1:Response ID 结构示意图,展示创建请求、Response 对象、取回接口与输出字段之间的静态关系。
字段或状态用途处理判断
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 应记录 errorincomplete 应检查 incomplete_detailscancelled 则说明任务被取消。把所有非进行态都当成成功,是后台任务最隐蔽的逻辑错误:队列会显示完成,但用户拿不到可用答案。

OpenAI Responses API 后台任务的状态字段、成功输出和失败诊断静态关系示意图
图2:终态关系示意图,展示 status 与 output_text、error、incomplete_details 之间的读取边界。

如果任务需要人工取消,官方指南还提供了 POST /v1/responses/{response_id}/cancel。取消动作应与本地任务状态一起记录,避免取消请求尚未被服务端确认时就把业务单标成成功。

生产轮询要补上超时与保存边界

第一,给每个任务设置本地总超时,超时后进入待重试或人工检查,而不是无限循环。第二,对大量任务采用指数退避并设置最大间隔,减少短时间内的集中取回。第三,响应 ID、当前状态和最后一次错误要落到可靠存储中,进程重启后从 ID 恢复,而不是重新创建任务。

后台响应的保存策略也要看项目配置。官方说明指出,ZDR 项目的后台响应会为异步执行和轮询临时保存大约 10 分钟;在启用 Modified Abuse Monitoring 的项目中,若希望轮询窗口后仍保留后台响应,需要显式设置 store=true。因此,长于这个窗口的业务不要把 Responses 当作永久任务数据库,应该及时取回并写入自己的结果存储。

常见问题

为什么创建请求返回后不能直接读取最终答案?

因为后台模式先返回任务对象,生成仍可能处于 queuedin_progress。必须使用同一个 ID 取回到终态。

轮询什么时候停止?

当状态不再是 queuedin_progress 时停止,再按终态分支处理。

拿不到 output_text 时先查什么?

先看 status,然后检查 errorincomplete_details;不要用空字符串掩盖失败原因。

一句话记忆:创建阶段保存 ID,进行态阶段轮询,终态阶段判定结果,成功输出和失败诊断走不同的数据路径。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Go sql.NullString 扫描 NULL 后如何避免空字符串混淆Go sql.NullString 扫描 NULL 后如何避免空字符串混淆
上一篇
Go sql.NullString 扫描 NULL 后如何避免空字符串混淆
Go bufio.Writer 写入成功但 Flush 报错如何处理
下一篇
Go bufio.Writer 写入成功但 Flush 报错如何处理
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    125次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    48次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    16次使用
  • OpenCompass大模型评测体系详解:功能、使用指南与应用场景
    OpenCompass
    OpenCompass是上海AI实验室推出的开源大模型评测平台,提供CompassKit、CompassHub和CompassRank三大核心组件,支持LLM及多模态模型的一站式标准化评估与排行榜查询。
    67次使用
  • AGI-Eval大模型评测平台:权威榜单、数据集与人机协同评测方案
    AGI-Eval
    AGI-Eval是由上海交大等高校联合发布的大模型评测社区,提供公正透明的LLM能力榜单、多领域评测集及Data Studio数据服务,助力AI模型性能评估与NLP科研开发。
    44次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码