很多 AI 应用并不需要每个请求都立刻返回结果。比如批量改写商品标题、给历史文章生成摘要、清洗几万条客户反馈、给知识库文档打标签,这些任务更像“后台加工”,不适合一条条同步调用 API。同步请求能做,但成本、重试、限流和结果对账都会变得麻烦。
OpenAI Batch API 适合处理这类不要求实时返回的大批量任务。它的思路很直接:先把任务整理成 JSONL 文件上传,再创建批处理任务,让系统在后台执行,最后下载结果文件和错误文件。你可以把本文和 OpenAI专题、AI智能体与自动化专题 一起看,尤其适合内容站、数据清洗、运营批处理和内部工具开发。
先判断:哪些任务适合 Batch API
Batch API 不是用来替代所有实时接口的。判断一个任务适不适合批处理,可以看三个问题:
- 用户是否在等结果:如果用户正在页面前等回复,通常不适合批处理。
- 任务量是否足够大:几十条以内可以同步处理,成百上千条开始更适合批处理。
- 结果是否可以晚点拿:比如夜间跑、后台跑、定时汇总,都比较适合。
常见适用场景包括:批量生成 SEO 摘要、历史内容标签归类、评论情绪分析、客服记录总结、商品信息规范化、知识库文档预处理、离线评测样本打分。站内之前写过 OpenAI API成本控制,Batch API 可以看作其中“把非实时任务移出同步链路”的具体做法。
Batch API 的基本流程
官方 Batch API 文档给出的核心流程可以概括成五步:
- 准备一个 JSONL 输入文件,每一行是一条独立请求。
- 上传文件,并把用途标记为批处理输入。
- 创建 batch,指定 endpoint 和 completion window。
- 轮询或查看 batch 状态,等待后台处理完成。
- 下载 output file 和 error file,对照 custom_id 合并结果。
这里最关键的不是“会不会调用接口”,而是任务文件设计和结果对账。批处理结果不一定按输入顺序返回,所以每一行都要有一个稳定的 custom_id,用来把输出和原始业务记录对应起来。
JSONL 输入文件怎么设计
JSONL 的好处是每行都是一条独立 JSON 任务,适合流式生成、分片上传和失败重跑。一个批处理输入行通常要包含这些信息:
custom_id:你自己的业务编号,例如文章 ID、商品 ID、客户反馈 ID。method:一般是POST。url:本批次调用的接口路径。body:真正发给模型的请求体,包括模型、输入、提示词和输出格式要求。
实际做项目时,建议 custom_id 不要只写递增数字。更稳的方式是带上业务类型和原始 ID,比如 post_7717_summary、product_1024_title。这样错误文件里一眼就能看出是哪类任务失败。
如果你的输出必须进数据库或表格,建议优先使用结构化输出思路。站内的 OpenAI API结构化输出 可以作为配套阅读:批处理不是让模型随便写一段话,而是要让结果能被后续程序稳定消费。
不要把所有任务塞进一个超大批次
批处理任务越大,管理成本越高。更稳的做法是按业务、时间或数据来源分批。
- 按任务类型分:摘要、分类、改写、质检不要混在一个批次里。
- 按数据来源分:文章、商品、客服记录、知识库文档分开跑。
- 按风险分:低风险清洗任务和高风险内容生成任务分开跑。
- 按时间分:每天、每周或每次导入一批,方便复盘。
这样做的好处是,一旦某个提示词有问题,不会污染所有任务;某个批次失败,也更容易定位和重跑。对内容站来说,可以先从“历史文章摘要补齐”“旧文标签归类”“专题页素材整理”这类低风险任务开始。
结果文件和错误文件要一起看
很多人第一次用批处理,只盯着 output file,忽略 error file。实际上,错误文件才是优化流程的关键。
建议每次批处理完成后做三件事:
- 用
custom_id把成功结果合并回原始数据。 - 把失败任务单独导出,记录失败原因、输入长度、模型、提示词版本。
- 只重跑失败任务,不要无脑重跑整个批次。
如果任务和 AI Agent 工作流有关,还要记录这批结果进入了哪个后续流程。比如“摘要结果写入 CMS 草稿”“分类结果进入人工审核表”“异常结果创建待办”。这和 MCP工具调用日志 的思路类似:只要是自动化,就要能追踪和回滚。
成本控制:Batch API 不是省钱按钮,而是治理工具
Batch API 的成本优势很适合离线任务,但它不是“随便丢进去就会省钱”。真正影响成本的,还是提示词长度、上下文重复、输出长度、模型选择和失败重试。
建议在批处理前做一轮成本预估:
- 抽样 20 到 50 条任务,估算平均输入和输出 token。
- 确认哪些任务需要高能力模型,哪些可以用更轻量的模型。
- 把固定提示词压短,把可复用资料改成引用或预处理结果。
- 限制输出格式和长度,避免模型写出很长的解释。
- 设置批次命名、日志和结果归档,方便后续查账。
对小团队来说,最推荐的用法不是一上来跑几十万条,而是先拿一个明确场景做小批量验证:100 条样本跑通后,再扩大到 1000 条、10000 条。成本控制不是靠猜,而是靠抽样、记录和复盘。
上线前检查清单
正式跑批处理前,可以按这份清单检查:
- 每条任务都有唯一且可追溯的
custom_id。 - 输入文件已经抽样检查,没有空字段、乱码和明显越界内容。
- 提示词版本已经记录,方便对比不同批次效果。
- 输出格式有明确要求,能被程序解析或人工快速审核。
- 错误文件有处理方案,失败任务可以单独重跑。
- 结果写回前有人工抽检,避免坏结果直接污染正式库。
- 批次成本有预估,运行后能按批次复盘。
如果你已经在用 Responses API,可以把同步接口继续留给实时交互,把 Batch API 用在后台加工和离线任务。两者不是互相替代,而是把不同响应时效的任务放到合适的位置。站内的 OpenAI Responses API 入门 可以帮助你理解实时接口和 Agent 工作流的基础。
老达点评
Batch API 最适合解决的,不是“我不会写循环调用接口”,而是“我需要用更可控的方式处理大量非实时 AI 任务”。一旦任务量上来,真正麻烦的是对账、错误复盘、成本估算和结果写回。把 JSONL、custom_id、错误文件和日志设计好,Batch API 才能从一个接口功能变成小团队可持续使用的批处理能力。