≡ 全部文档

模型 API / 批量任务 Batch

批量任务 Batch

更新时间:2026-09-19

接口说明

把成千上万条请求打包成一个 JSONL 文件一次提交,24 小时内异步跑完。适合离线评测、批量打标、数据清洗这类不赶时间的场景。批量价按模型各自标注(模型详情页上标了 Batch 价的就按那个价结算,没标的按实时价)。兼容 OpenAI Batch API,官方 SDK 的 client.files.* / client.batches.* 直接可用。

完整流程

  • ① 上传输入文件:POST /files(purpose=batch),拿到 file id
  • ② 创建批任务:POST /batches,带上 input_file_id
  • ③ 轮询状态:GET /batches/{batch_id},直到 status 变成 completed
  • ④ 下载结果:GET /files/{output_file_id}/content
# ① 上传
curl -X POST "https://www.wangyidaai.com/v1/files" \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "purpose=batch" \
-F "file=@requests.jsonl"
# ② 建单
curl -X POST "https://www.wangyidaai.com/v1/batches" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_file_id": "file-xxxxxxxx",
"endpoint": "/v1/chat/completions",
"completion_window": "24h"
}'
# ③ 查状态
curl "https://www.wangyidaai.com/v1/batches/batch_xxxxxxxx" \
-H "Authorization: Bearer YOUR_API_KEY"
# ④ 取结果
curl "https://www.wangyidaai.com/v1/files/file-yyyyyyyy/content" \
-H "Authorization: Bearer YOUR_API_KEY"

输入文件格式

JSONL —— 每行一个独立的 JSON 对象,一行就是一次请求。custom_id 由你自己指定,用来把输出行映射回输入行(输出顺序不保证与输入一致)。

cURL
{"custom_id":"req-1","method":"POST","url":"/v1/chat/completions","body":{"model":"gpt-4o-mini","messages":[{"role":"user","content":"介绍一下量子纠缠"}],"max_tokens":500}}
{"custom_id":"req-2","method":"POST","url":"/v1/chat/completions","body":{"model":"gpt-4o-mini","messages":[{"role":"user","content":"介绍一下相对论"}],"max_tokens":500}}
整个文件必须使用同一个 model、同一个 url;custom_id 不能重复。这三条任意一条不满足,建单时会直接返回 400 并指出出问题的行号。

文件接口

POST/files
GET/files
GET/files/{file_id}
DELETE/files/{file_id}
GET/files/{file_id}/content
参数类型必需说明
filefile必需multipart 文件字段,内容为 JSONL
purposestring可选只支持 batch,缺省即 batch

批任务接口

POST/batches
GET/batches
GET/batches/{batch_id}
POST/batches/{batch_id}/cancel
参数类型必需说明
input_file_idstring必需上一步上传得到的文件 id
endpointstring可选批内每行要打的路径,如 /v1/chat/completions。缺省取文件第一行的 url
completion_windowstring可选完成窗口,缺省 24h
metadataobject可选自定义键值对,原样回显

status 取值:validating → in_progress → finalizing → completed,以及三个失败终态 failed / expired / cancelled。终态之后 output_file_id 与 error_file_id 才会出现(成功行与失败行分别在这两个文件里)。

计费

批量价怎么定

批量价 = 该模型的实时价 × Batch 折扣,输入与输出用同一个折扣系数。折扣按模型各自标注,没有一个全站统一的数字 —— 上游各家给的批量折扣并不一致,也有模型完全不打折。

去哪看:模型广场点进模型详情页,价格里的「Batch 输入价格」「Batch 输出价格」两行就是批量单价。标出来的价就是实际结算的价 —— 看得到这两行,批任务就按它扣;看不到,说明这个模型没有批量折扣,走 /batches 与实时调用同价(不是不能提交)。

阶梯计费的模型(价格按上下文长度分档的那些)没有单一的输入 / 输出价,所以标的不是两行价,而是档位表下面那句「每一档都 × 折扣」。结算同样是逐条请求各自落档、各自打折 —— 批里每条请求按它自己的上下文长度选档,不是拿整批的 token 总数去选。

扣费流程

  • 提交时按输入文件估算并预扣额度(输入按文本估算,输出按每行声明的 max_tokens),预扣同样按批量价算
  • 跑完后按输出文件里逐行的真实 usage 重新结算,与预扣多退少补
  • 分组折扣照常生效,与 Batch 折扣相乘(详情页那两行按默认分组算,你所在分组另有折扣时再乘一次)
  • 整批失败、被取消、或一行都没跑成时,预扣额度全额退还
  • expired(超过完成窗口)会按已经跑完的那部分收费,剩下的退
提交那一刻冻结的是估算额度,通常高于最终实际扣费 —— 差额会在批任务结束后退回。所以余额要留出估算值的空间,否则会在建单时被判额度不足。
按次计费的模型(价目上给的是每次调用多少钱,而不是每千 tokens 多少钱)不能走批量提交:批量一律按 token 结算,对按次价定不出价,建单时会直接返回 400。

限制与差异

  • 单个文件最大 32MB,单批最多 50000 行
  • 同一账号同时进行中的批任务最多 50 个
  • purpose 只支持 batch(不支持 fine-tune / assistants / vision)
  • 整批必须使用同一个 model —— 混模型请拆成多个批任务
  • 文件(输入、输出、错误)默认保留 30 天,过期自动清理,请及时下载结果

没有找到想看的内容?联系我们 →