ChatGPT5.6 中文文档 下载 App

GPT-5.6 批处理 API — 24 小时内任务节省 50% 成本

什么是 Batch API

Batch API 是 OpenAI 提供的异步批量处理接口。它允许你:

成本节省对比

模型标准费率(输入+输出)Batch 费率(输入+输出)节省
Sol$5 + $30 = $35 / 1M$2.5 + $15 = $17.5 / 1M50%
Terra$2 + $12 = $14 / 1M$1 + $6 = $7 / 1M50%
Luna$0.2 + $1.2 = $1.4 / 1M$0.1 + $0.6 = $0.7 / 1M50%

适合的场景

Batch API 适合非实时性的任务:

✅ 适合

❌ 不适合

使用步骤

1. 准备批量请求文件

创建一个 .jsonl 文件(每行一个 JSON 对象):

{"custom_id": "request-001", "method": "POST", "url": "/v1/responses", "body": {"model": "gpt-5.6-terra", "input": [{"role": "user", "content": "总结这段文本:..."}]}}
{"custom_id": "request-002", "method": "POST", "url": "/v1/responses", "body": {"model": "gpt-5.6-terra", "input": [{"role": "user", "content": "总结这段文本:..."}]}}
{"custom_id": "request-003", "method": "POST", "url": "/v1/responses", "body": {"model": "gpt-5.6-terra", "input": [{"role": "user", "content": "总结这段文本:..."}]}}

每个请求需要:

2. 提交批量任务

batch = client.batches.create(
    input_file_id="file-xxx",  # 先上传 jsonl 文件获取 file_id
    endpoint="/v1/responses",
    completion_window="24h"
)
print(batch.id)  # batch_xxx

3. 轮询进度

import time

while True:
    status = client.batches.retrieve(batch.id)
    print(f"状态: {status.status}, 完成: {status.request_counts.completed}/{status.request_counts.total}")
    
    if status.status in ("completed", "failed", "cancelled"):
        break
    
    time.sleep(60)  # 每分钟检查一次

4. 下载结果

if status.status == "completed":
    # 下载输出文件
    output_file = client.files.content(status.output_file_id)
    
    # 或者直接获取内容
    content = client.files.content(status.output_file_id).read()
    print(content.decode())

输出也是 .jsonl 格式,每行对应一个输入请求的结果。

完整示例

from openai import OpenAI
import json

client = OpenAI()

# 1. 准备批量输入
requests = [
    {"custom_id": f"task-{i}",
     "method": "POST",
     "url": "/v1/responses",
     "body": {
         "model": "gpt-5.6-luna",  # 高吞吐场景用 Luna
         "input": [{"role": "user", "content": text}],
         "reasoning": {"effort": "low"}
     }}
    for text in text_list  # 几千段待处理的文本
]

# 2. 写入 jsonl 文件
with open("batch_input.jsonl", "w") as f:
    for req in requests:
        f.write(json.dumps(req) + "\n")

# 3. 上传文件
with open("batch_input.jsonl", "rb") as f:
    file = client.files.create(file=f, purpose="batch")

# 4. 提交批量任务
batch = client.batches.create(
    input_file_id=file.id,
    endpoint="/v1/responses",
    completion_window="24h"
)

# 5. 等待完成(生产环境可以用 Webhook 通知)
while True:
    status = client.batches.retrieve(batch.id)
    if status.status == "completed":
        break
    time.sleep(60)

# 6. 下载和解析结果
results = client.files.content(status.output_file_id).read()
for line in results.decode().split("\n"):
    result = json.loads(line)
    print(result["custom_id"], result["response"]["output_text"])

限制和注意事项

24 小时窗口

Batch API 的 SLA 是 24 小时内完成。实际上 OpenAI 通常更快(数小时内),但不要指望秒级或分钟级。

请求数量限制

每个 batch 最多:

错误处理

如果某个请求失败(如模型不可用、内容被拦截),不会影响其他请求。失败的请求会在结果中标记状态,你可以单独重试。

模型选择

Batch API 对所有 GPT-5.6 系列模型都可用。对于批量任务,推荐:

什么时候用 Batch API vs 标准 API

维度标准 APIBatch API
延迟秒级分钟到小时级
成本基准-50%
并发受 QPS 限制排队处理,总量无限制
可靠性实时重试失败请求单独处理
适合实时、低量批量、非实时

经验法则:如果任务可以等 1 小时以上,而且数量大于 100 个,一定用 Batch API。50% 的成本节省是实质性的。