本页目录16
- 六个核心端点(创建/列出/查询/取结果/取消/删除)的方法、路径与返回字段速查
- processing_status 与逐条结果 result.type 的全部枚举值及含义
- 批处理专属限流:每分钟请求数、处理队列上限、单批最大请求数(按 tier 区分)
- 批处理定价固定为标准价的 50%(输入输出token同折),可与 Prompt Caching 叠加,但不支持 Fast mode
- custom_id 是结果匹配的唯一依据,.jsonl 结果文件不保证与请求同序
本文是对 Anthropic 官方参考页 Message Batches API(批处理)的中文整理,完整与最新内容以原文为准:https://platform.claude.com/docs/en/build-with-claude/batch-processing
概述
Message Batches API 用于异步、低成本地处理大批量 Messages 请求,适合不需要即时响应的场景。
| 特性 | 说明 |
|---|---|
| 折扣 | 输入/输出 token 均为标准价的 50% |
| 典型处理时长 | 多数批次在 1 小时内完成 |
| 最长处理时长 | 24 小时(expires_at = 创建时间 + 24 小时) |
| 适用场景 | 大批量数据处理、无需即时响应、追求成本效率、大规模评测/分析等批量操作 |
工作原理
- 提交请求后系统创建一个新的 Message Batch。
- 批次进入异步处理,其中每个请求独立处理。
- 可轮询批次状态,处理结束后取回结果。
查询批次的端点(retrieve)是幂等的,可直接用于轮询批次是否完成;完成后通过响应中的 results_url 字段获取结果文件。
API 端点一览
| 方法 | 路径 | 作用 |
|---|---|---|
| POST | /v1/messages/batches | 创建 Message Batch |
| GET | /v1/messages/batches | 列出工作区内的 Message Batches(按创建时间倒序) |
| GET | /v1/messages/batches/{message_batch_id} | 查询单个 Message Batch(幂等,可轮询) |
| GET | /v1/messages/batches/{message_batch_id}/results | 以 .jsonl 流式返回批次结果 |
| POST | /v1/messages/batches/{message_batch_id}/cancel | 取消批次 |
| DELETE | /v1/messages/batches/{message_batch_id} | 删除批次(仅限已结束的批次) |
请求需带标准鉴权头:anthropic-version(如 2023-06-01)与 X-Api-Key;可选头 anthropic-user-profile-id(需配合 user-profiles beta 头)用于按用户画像归因。
创建批处理(POST /v1/messages/batches)
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
requests | array of object | 是 | 批次内的请求列表 |
requests 数组中每一项结构:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
custom_id | string | 是 | 开发者自定义标识,用于将结果与请求匹配,批次内必须唯一 |
params | object | 是 | 与 Messages API 相同的参数(model、messages、max_tokens 等) |
params 沿用 Messages API 全部参数,例如:
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
model | string | 是 | — | 模型 ID |
messages | array | 是 | — | 输入消息(单个请求内消息数上限 100,000) |
max_tokens | number | 是 | — | 最大生成 token 数 |
system | string 或 array | 否 | — | 系统提示词 |
temperature | number | 否 | 1.0 | 采样温度 |
stop_sequences | array of string | 否 | — | 自定义停止序列 |
stream | boolean | 否 | false | 批处理中通常不使用流式 |
metadata | object | 否 | — | 请求元数据(如 user_id) |
service_tier | "auto" 或 "standard_only" | 否 | "auto" | 服务层级 |
tools / tool_choice | array / object | 否 | — | 工具定义与工具选择策略 |
thinking | object | 否 | — | 扩展思考配置 |
示例请求
{
"requests": [
{
"custom_id": "request-1",
"params": {
"model": "claude-opus-4-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello, Claude"}]
}
}
]
}
Message Batch 对象字段
创建/查询/列出/取消四个端点返回同一个 MessageBatch 对象:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 批次唯一标识(格式与长度可能随时间变化) |
type | "message_batch" | 固定值 |
processing_status | "in_progress" | "canceling" | "ended" | 批次处理状态 |
created_at | string(RFC 3339) | 创建时间 |
expires_at | string(RFC 3339) | 过期时间,固定为创建时间 + 24 小时 |
ended_at | string 或 null | 全部请求进入终态(succeeded/errored/canceled/expired)后的时间 |
cancel_initiated_at | string 或 null | 发起取消的时间(仅当已发起取消时存在) |
archived_at | string 或 null | 批次被归档、结果不再可取的时间 |
results_url | string 或 null | 结果 .jsonl 文件地址,仅在处理结束后提供 |
request_counts | object | 见下表 |
request_counts 字段
| 字段 | 类型 | 说明 |
|---|---|---|
processing | number | 仍在处理中的请求数 |
succeeded | number | 成功的请求数(批次结束前恒为 0) |
errored | number | 出错的请求数(批次结束前恒为 0) |
canceled | number | 被取消的请求数(批次结束前恒为 0) |
expired | number | 过期未处理的请求数(批次结束前恒为 0) |
所有请求初始状态均为 processing,只有在整个批次结束后才会分流到其余四个终态,且各字段之和恒等于批次总请求数。
获取结果(GET .../results)
结果以 .jsonl 文件流式返回,每行是一个 MessageBatchIndividualResponse 对象,顺序不保证与提交顺序一致,须用 custom_id 匹配。
| 字段 | 类型 | 说明 |
|---|---|---|
custom_id | string | 对应请求的自定义 ID |
result | object | 处理结果,type 字段决定具体结构 |
result.type 取值
| 取值 | 含义 | 附带字段 |
|---|---|---|
succeeded | 请求成功 | message(标准 Messages API 响应对象,含 content、usage、stop_reason 等) |
errored | 处理出错 | error(标准 ErrorResponse,见下表) |
canceled | 因批次被取消而未完成 | 仅 type 字段 |
expired | 因超过 24 小时未处理完成 | 仅 type 字段 |
errored 结果中的 error.error.type 取值
| 取值 | 含义 |
|---|---|
invalid_request_error | 请求格式或参数无效 |
authentication_error | 鉴权失败 |
billing_error | 账单/计费问题 |
permission_error | 权限不足 |
not_found_error | 资源不存在 |
rate_limit_error | 触发限流 |
timeout_error | 网关超时 |
api_error | API 内部错误 |
overloaded_error | 服务过载 |
取消批处理(POST .../cancel)
- 可在处理结束前的任意时间取消。
- 取消发起后批次进入
canceling状态,系统可能先完成部分不可中断的进行中请求,再最终完成取消。 - 实际被取消的请求数体现在
request_counts.canceled中;若请求均不可中断,取消操作也可能不产生任何canceled结果。
删除批处理(DELETE .../{id})
- 仅能删除已结束处理的批次;若要删除进行中的批次,须先调用
cancel。 - 返回
DeletedMessageBatch对象:{ id, type: "message_batch_deleted" }。
限流(Message Batches API 专属)
批处理限流与 Messages API 的按模型限流相互独立,所有模型共享同一套批处理限流;其中「batch request」指一个批次中的一条子请求。
| Usage tier | 每分钟请求数(RPM) | 处理队列中最大 batch request 数 | 单批最大 batch request 数 |
|---|---|---|---|
| Start | 1,000 | 200,000 | 100,000 |
| Build | 2,000 | 300,000 | 100,000 |
| Scale | 4,000 | 500,000 | 100,000 |
| Custom | 需联系销售协商 | 需联系销售协商 | 需联系销售协商 |
「处理队列中的 batch request」指尚未被模型成功处理完成的子请求;单个批次内的请求数量存在 100,000 条上限(与 Create 端点文档中「单个请求内 messages 数组上限 100,000 条」是两个不同的限制,不要混淆)。
定价
Batch API 相比标准价固定提供 50% 折扣(输入、输出 token 同折)。示例(节选官方定价表):
| 模型 | 标准输入 | 标准输出 | Batch 输入 | Batch 输出 |
|---|---|---|---|---|
| Claude Opus 5 | $5 / MTok | $25 / MTok | $2.50 / MTok | $12.50 / MTok |
| Claude Sonnet 5 | $2 / MTok | $10 / MTok | $1 / MTok | $5 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $5 / MTok | $0.50 / MTok | $2.50 / MTok |
补充说明:
- Batch 折扣可与 Prompt Caching 的缓存写入/命中倍率叠加。
- Fast mode 不支持 Batch API(二者互斥)。
- Batch API 折扣不适用于 Claude Managed Agents(该产品为有状态交互式会话,无批处理模式)。
关键注意事项
| 事项 | 说明 |
|---|---|
| 结果顺序 | .jsonl 结果文件不保证与请求顺序一致,必须用 custom_id 匹配 |
custom_id 唯一性 | 仅需在同一批次内唯一 |
| 轮询方式 | retrieve 端点幂等,可安全轮询直到 processing_status 为 ended |
| 数据留存 | 批次归档后(archived_at 非空)结果不再可取;零数据留存(ZDR)对本功能的适用范围见官方「API and data retention」页面 |
| 过期处理 | 24 小时内未处理完的请求会以 expired 结果返回,而非报错阻塞整个批次 |
| 批次规模上限 | 单个批次上限为 100,000 条 Message 请求 或 256 MB 体积,以先到者为准 |
| 结果保留期 | 结果自批次 创建时间(created_at,不是处理结束时间)起保留 29 天;超过 29 天后仍可查看该 Batch,但结果不再可下载 |