OpenAI Batch API 适合不要求立即返回的大量任务,例如离线分类、评测和批量生成。流程是把每个请求写成一行 JSONL,上传后创建批任务,完成时下载结果,并用 custom_id 与原始记录对账。
准备 JSONL 文件
官方 Batch API 指南要求每行是独立请求,同一个批次使用同一目标端点。下面的 requests.jsonl 有两行,真实文件中每个 JSON 对象必须独占一行。

{"custom_id":"row-0001","method":"POST","url":"/v1/responses","body":{"model":"gpt-6-luna","input":"把‘已发货’归类为订单状态,只返回标签"}}
{"custom_id":"row-0002","method":"POST","url":"/v1/responses","body":{"model":"gpt-6-luna","input":"把‘等待付款’归类为订单状态,只返回标签"}}
custom_id 应对应你自己的稳定记录 ID,并在批内唯一。不要用姓名、手机号或完整订单内容作为 ID。提交前逐行解析 JSON,确认没有空行、重复 ID 或混入不同端点。
上传并创建批任务
from openai import OpenAI
client = OpenAI()
with open("requests.jsonl", "rb") as fh:
batch_file = client.files.create(file=fh, purpose="batch")
job = client.batches.create(
input_file_id=batch_file.id,
endpoint="/v1/responses",
completion_window="24h",
)
print(job.id, job.status)
批处理是异步任务,创建成功不代表每一行都成功。应保存批任务 ID,并在状态完成后读取输出文件和错误文件。官方文档给出的完成窗口为 24 小时,适合离线任务,不适合聊天页面的即时回答。
按 custom_id 对账
- 读取输出 JSONL,每行解析后取得
custom_id。 - 用它找到原始记录,核对 HTTP 状态和响应正文。
- 把失败行单独列出并判断是否可重试,不能把整个批次标成全成功。
- 结果顺序可能与输入不同,禁止按文件行号直接写回业务表。
先用 2 至 5 行小文件完成演练:输入有两个唯一 ID,最终也必须找到两个对应结果;故意加入一行错误请求,报告应明确出现一条失败。通过后再扩大批量。
常见问题
Batch API 会更快吗?它提供异步处理、独立限额和批量价格优势,不保证适合实时响应。
为什么任务完成却少了结果?先查错误文件、重复 custom_id 和单行格式。本文没有提交你的真实文件,实际成本、限额和完成时间以账号及官方页面为准。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31673.html