开发者在发送数千个独立的 API 调用时,常常会遇到响应缓慢和网络成本高昂的问题。Batch API 通过将多个独立请求合并为一个操作,降低了延迟、带宽使用和连接开销。
本文将解释什么是 Batch API、它与标准 API 的区别,以及 Novita AI 的 Batch API 如何通过结构化的 JSONL 输入、高效的文件处理和可靠的错误追踪来实现大规模异步推理。同时,文章还将概述成本、延迟和吞吐量等关键效率因素,并提供简洁的实施与监控指南。
[试用批处理推理,享受 50% 折扣
更快、更便宜地运行大规模预测,支持以下模型:
qwen/qwen3-vl-235b-a22b-instruct, openai/gpt-oss-120b, deepseek/deepseek-r1-0528, qwen/qwen3-4b-fp8。](https://novita.ai/docs/guides/llm-batch-api)
试用批处理推理,享受 50% 折扣
更快、更便宜地运行大规模预测,支持以下模型:
qwen/qwen3-vl-235b-a22b-instruct, openai/gpt-oss-120b, deepseek/deepseek-r1-0528, qwen/qwen3-4b-fp8。
什么是 Batch API?
Batch API:将多个独立的 API 调用(如 GET、POST、PUT、DELETE)组合成一个 HTTP 请求。
响应结构:服务器按顺序返回所有子请求的结果,并标明每个请求的成功或失败状态。
Batch API 与标准 API 的关键区别
普通请求
Client
├──► Request 1 (/user/1)
│ └──► Server Response 1
├──► Request 2 (/user/2)
│ └──► Server Response 2
└──► Request 3 (/order)
└──► Server Response 3
批量请求
Client
└──► Single Request (/batch)
├─ Sub-request 1: GET /user/1
├─ Sub-request 2: GET /user/2
└─ Sub-request 3: POST /order
↓
Server processes all
↓
Combined Response:
[Result1, Result2, Result3]
Batch API 可以帮助:
减少网络延迟 —— 发送一个合并请求,而不是多个请求。
降低带宽和连接开销 —— 共享头部和握手过程。
提升客户端性能 —— 尤其是在移动端或慢速网络环境下。
简化事务逻辑 —— 实现统一的错误处理或回滚。
优化 API 网关吞吐量 —— 防止请求洪泛。
Batch API 的典型使用场景
| 场景 | 描述 |
|---|---|
| 1. 批量数据查询 | 一次性获取多个用户、产品或帖子,避免重复请求。 |
| 2. 批量写入或更新 | 一次操作创建或更新多条记录(如批量上传、库存更新)。 |
| 3. 前端性能优化 | 减少浏览器或移动应用发起的 HTTP 调用次数,加快加载速度。 |
| 4. 后端任务聚合 | 在微服务系统中,将多个内部 API 调用合并为一次外部调用。 |
| 5. 数据同步 | 同步多个资源状态或执行批量操作(如打标签、删除)。 |
| 6. 速率限制优化 | 通过合并请求降低 API 网关负载并节省带宽。 |
影响 Batch API 效率的关键因素
相比实时 API,Batch API 能节省多少成本?
行业分析 (Growth-onomics) 显示,成本可降低约 20–45%,主要得益于更少的网络往返、更低的连接开销以及集中的处理过程。但具体节省取决于调用频率、批次大小和系统设计。
延迟方面——Batch API 真的能“在 24 小时内”完成吗?
Batch API 通常异步运行,延迟远高于实时 API;许多系统会按小时或按天执行,因此“24 小时内”取决于 SLA 而非保证。
批次大小或文件大小会影响速度吗?
是的。更大的批次(例如更多 JSONL 行数)会几乎线性地增加传输和解析时间;虽然吞吐量得以提升,但每个批次的完成总时间会增加。
为什么 Batch API 更适合高吞吐量工作负载?
通过将数千个请求聚合成一个处理过程,Batch API 减少了每次调用的开销,并允许并行执行或缓存复用。在大规模操作中,吞吐量通常可提升 17–92%,但代价是更高的延迟。
如何使用 Batch API?
Novita 的 Batch API 与 OpenAI 的接口高度兼容,支持
/v1/chat/completions和/v1/completions,因此现有代码只需少量修改即可复用。它接受.jsonl输入文件,其中每一行代表一个发送给相同模型的独立请求,并通过唯一的custom_id进行跟踪。输出也采用 JSONL 格式,使大规模的后处理、分析和集成变得简单高效。
1. 准备批量输入文件
创建一个 .jsonl 文件,其中 每一行是一个 JSON 格式的 API 请求。
示例 (batch_input.jsonl):
{"custom_id": "req-1", "body": {"model": "deepseek/deepseek-v3-0324", "messages": [{"role": "user", "content": "Summarize: batch API basics"}], "max_tokens": 200}}
{"custom_id": "req-2", "body": {"model": "deepseek/deepseek-v3-0324", "messages": [{"role": "system", "content": "You are concise."},{"role": "user", "content": "List 3 batch API use cases"}], "max_tokens": 150}}
规则:
- 每行一个请求。
- 所有请求必须使用相同的模型。
- 每行必须包含一个唯一的
custom_id。
2. 上传输入文件并创建批次
使用 Python 或 curl 上传文件并立即启动批量任务。
Python
from openai import OpenAI
client = OpenAI(base_url="https://api.novita.ai/openai/v1", api_key="YOUR_API_KEY")
# Upload + create batch
uploaded = client.files.create(file=open("batch_input.jsonl", "rb"), purpose="batch")
batch = client.batches.create(
input_file_id=uploaded.id,
endpoint="/v1/chat/completions",
completion_window="48h"
)
print("file_id:", uploaded.id)
print("batch_id:", batch.id)
curl
export API_KEY="YOUR_API_KEY"
# Upload file
upload_response=$(curl -s -X POST \
-H "Authorization: Bearer ${API_KEY}" \
-F 'file=@batch_input.jsonl' -F 'purpose=batch' \
https://api.novita.ai/openai/v1/files)
# Extract file_id and start batch
file_id=$(echo $upload_response | jq -r '.id')
curl -X POST https://api.novita.ai/openai/v1/batches \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "{\"input_file_id\": \"$file_id\", \"endpoint\": \"/v1/chat/completions\", \"completion_window\": \"48h\"}"
3. 检查批次状态
你可以随时使用批次 ID 检查进度。
batch = client.batches.retrieve("batch_xxx")
print(batch.status)
状态包括:
VALIDATING– 输入文件正在校验PROGRESS– 运行中COMPLETED– 成功完成FAILED– 失败EXPIRED– 超出 48 小时窗口
4. 获取结果
完成后,通过 output_file_id 下载结果文件:
output = client.files.content("file_xxx")
print(output.read().decode("utf-8"))
输出中的每一行对应一个输入,通过 custom_id 匹配。
提示:
仅支持
deepseek/deepseek-r1-0528每批最多 50 000 个请求
输入文件 ≤ 100 MB
完成窗口固定为 48 小时
输出保留 30 天
Batch API 中如何处理失败的请求?
批量处理过程中遇到的错误会记录在单独的 错误文件 中,可通过 error_file_id 字段访问。每个失败的子请求都包含错误代码和描述。常见示例:
| 错误码 | 描述 | 解决方案 |
|---|---|---|
| 400 | 请求格式无效 | 检查 JSONL 语法和必填字段 |
| 401 | 身份验证失败 | 验证 API 密钥 |
| 404 | 批次未找到 | 检查批次 ID |
| 429 | 超过速率限制 | 降低请求频率 |
| 500 | 服务器错误 | 联系提供商或稍后重试 |
开发者应仅重新处理失败的条目(使用重试队列或较小的后续批次),而不是重新提交整个原始文件。
Novita AI 为 Batch API 操作提供了哪些端点?
| 端点 | 用途 |
|---|---|
| 创建批次 | 提交一个包含多个请求的批量任务。 |
| 检索批次 | 通过批次 ID 获取特定批次的状态或结果。 |
| 取消批次 | 在完成前停止正在运行的批量任务。 |
| 列出批次 | 列出账户下所有已提交的批量任务。 |
| 上传文件 | 上传输入数据文件(例如 JSONL)。 |
| 列出文件 | 查看所有已上传的文件。 |
| 检索文件 | 通过文件 ID 获取文件元数据。 |
| 删除文件 | 删除一个已上传的文件。 |
| 检索文件内容 | 下载文件的实际内容(例如结果或错误日志)。 |
Batch API 将许多小请求整合到一个高效的工作流中。通过使用 Novita AI 的 Batch API,开发者可以降低高达 45% 的网络成本,将吞吐量扩展至每批最多 50 000 个请求,并通过内置的日志和检索端点简化错误处理。虽然牺牲了实时性,但对于批量推理、同步和数据处理工作负载,它提供了卓越的效率。
Novita AI 是一个 AI 云平台,为开发者提供使用简单 API 部署 AI 模型的便捷方式,同时也提供经济实惠且可靠的 GPU 云服务用于构建和扩展。
