Claude API 批量请求(Message Batches)怎么用:custom_id、轮询、取结果,价格 50% 与 24 小时规则

不赶时间的大批量请求,用 Message Batches 能按标准价的 50% 计费。本文讲创建批次、custom_id 的规则、轮询 processing_status、流式取结果、四种结果类型、取消批次,以及 10 万条或 256 MB、24 小时过期、结果保留 29 天等限制。

NNathaniel bigo··原创首发·AI 辅助撰写
8 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 Claude 官方《Batch processing》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 Anthropic 官方网站。API 是按用量计费的独立服务,与 Claude 订阅分开计算,Key 的获取见 /guides/claude-api-key-console。

适用于谁

  • 要一次处理几百、几万条文本的人:评测、分类、摘要、批量生成商品描述;
  • 对时效不敏感,但很在意成本的人;
  • 同步调用经常撞上限流(见 /guides/claude-api-error-429-rate-limit),想换个不占用实时额度思路的人。

结论先说

  1. 批量请求用 messages.batches:每个请求带唯一的 custom_id 和一份 params,params 就是普通 Messages 请求的参数。
  2. 官方写明费用为标准价格的 50%(2026-11-05 核对),多数批次在 1 小时内完成。
  3. 结果不保证按提交顺序返回,一定要用 custom_id 对应。
  4. 一个批次最多 100,000 个请求或 256 MB,先到为准;24 小时未处理完的请求会过期,结果保留 29 天。
  5. 失败、取消、过期的请求不收费。

批量请求的生命周期

图:本站根据 Claude 官方《Batch processing》 整理的示意图

一、创建批次

Python:

python
import anthropic
from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
from anthropic.types.messages.batch_create_params import Request

client = anthropic.Anthropic()

batch = client.messages.batches.create(
    requests=[
        Request(
            custom_id="my-first-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-5-5",  # 以官方模型页当天为准
                max_tokens=1024,
                messages=[{"role": "user", "content": "你好,世界"}],
            ),
        ),
        Request(
            custom_id="my-second-request",
            params=MessageCreateParamsNonStreaming(
                model="claude-opus-5-5",
                max_tokens=1024,
                messages=[{"role": "user", "content": "再问一个问题"}],
            ),
        ),
    ]
)
print(batch.id, batch.processing_status)

TypeScript(先安装 @anthropic-ai/sdk):

typescript
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

const batch = await client.messages.batches.create({
  requests: [
    {
      custom_id: "my-first-request",
      params: {
        model: "claude-opus-5-5",
        max_tokens: 1024,
        messages: [{ role: "user", content: "你好,世界" }],
      },
    },
    {
      custom_id: "my-second-request",
      params: {
        model: "claude-opus-5-5",
        max_tokens: 1024,
        messages: [{ role: "user", content: "再问一个问题" }],
      },
    },
  ],
});
console.log(batch.id, batch.processing_status);

规则:

  • custom_id 必须在批次内唯一,1 到 64 个字符,只能含字母、数字、连字符和下划线;
  • 批次里的请求可以混合不同类型:视觉、工具调用、系统提示、多轮对话、思考,官方说几乎都可以;
  • 每个请求的 max_tokens 至少为 1;
  • 官方列出批次不支持的参数:stream: true(批次结果是一个文件,不是流)、speed、fallbacks,以及 max_tokens: 0。

一个很容易忽略的点:params 的校验是异步的,写错了不会在创建时报错,而是整批结束后才在结果里以 errored 返回。所以官方建议先用普通的 Messages 请求把请求形状验证一遍,再批量提交。

二、查看进度:轮询 processing_status

刚创建时 processing_status 是 in_progress,全部请求处理完才变成 ended。request_counts 里会记录 processing、succeeded、errored、canceled、expired 各有多少。官方的轮询示例就是循环查询,直到状态变成 ended:

python
import time

while True:
    batch = client.messages.batches.retrieve(batch.id)
    if batch.processing_status == "ended":
        break
    print("仍在处理中……")
    time.sleep(60)

间隔多久查一次自己定,示例里是 60 秒。批次的列表、详情也能在 Claude Console 里看。

三、取结果

批次结束后,每个请求都有结果,四种类型:

类型含义是否计费
succeeded成功,带完整的消息计费
errored出错,没有生成消息,可能是请求不合法或服务端错误不计费
canceled批次被取消,该请求还没发给模型不计费
expired批次 24 小时到期时该请求还没处理不计费

结果文件可能很大,官方建议流式读取,不要一次全下载:

python
for result in client.messages.batches.results(batch.id):
    outcome = result.result
    if outcome.type == "succeeded":
        print(result.custom_id, outcome.message.content[0].text)
    elif outcome.type == "errored":
        if outcome.error.error.type == "invalid_request_error":
            print("请求本身有问题,要修正后重发:", result.custom_id)
        else:
            print("服务端错误,可直接重试:", result.custom_id)
    elif outcome.type == "expired":
        print("已过期:", result.custom_id)

TypeScript 里用 for await (const result of await client.messages.batches.results(id)),判断 result.result.type 的方式相同。结果文件的网址在批次的 results_url 字段里。

最重要的提醒:结果的顺序不保证与提交一致,官方的示例里第二个请求的结果就排在第一个前面。永远用 custom_id 去对应你的原始数据。

四、取消批次

批次正在处理时可以取消:调用 client.messages.batches.cancel(batch_id)。取消后状态先变成 canceling,用同样的轮询等它变成 ended。终态仍是 ended,里面可能有取消前已经处理好的部分结果,未处理的就是 canceled,不收费。

五、限制与费用

批量请求的限制与规则

图:本站根据 Claude 官方《Batch processing》 整理的示意图

  • 数量与体积:一个批次最多 100,000 个请求或 256 MB,先到者为准;
  • 时间:多数批次在 1 小时内完成,但要等整批结束或满 24 小时才能取结果,24 小时未完成的请求过期;
  • 保留:结果在创建后 29 天内可下载,之后批次还能查看,结果不能再下载;
  • 费用:官方写明所有用量按标准 API 价格的 50% 计费。各模型的具体单价以官方价格页当天为准;
  • 花费上限:由于并发处理,批次的花费可能略微超过你在控制台给工作区设置的上限;
  • 限流:批次接口本身以及排队等待处理的请求数量都有速率限制;需求高峰时处理会变慢,更多请求可能在 24 小时后过期;
  • 数据保留:官方标明批处理不符合零数据保留资格,因为结果要保留 29 天。

六、和提示词缓存一起用

批次里的请求常常共享同一段很长的前缀,比如同一份文档或同一套指令,这时适合用提示词缓存。官方提醒:批次可能超过 5 分钟才处理完,默认的缓存时间可能已经过期,所以共享上下文的批次建议用 1 小时缓存时长以提高命中率。缓存的写法见 /guides/claude-prompt-caching。

常见问题

Q:能和流式一起用吗?

不能,批次里 stream: true 是不支持的。

Q:想批量处理一批 PDF 或图片?

可以,批次支持视觉等类型的请求,写法见 /guides/claude-api-pdf-support 与 /guides/claude-api-image-input。

Q:结果缺了一些请求?

先看 request_counts 里 errored、expired、canceled 各有多少,再逐个看结果类型。expired 通常是批次到期,可以拆小后重新提交。

Q:怎么知道一批请求大概多少 token?

先用 token 计数接口估算,见 /guides/claude-api-count-tokens。

参考资料

  • Claude 官方:Batch processing — https://platform.claude.com/docs/en/build-with-claude/batch-processing
  • Claude 官方:TypeScript SDK — https://platform.claude.com/docs/en/cli-sdks-libraries/sdks/typescript
  • Claude 官方:Claude API errors — https://platform.claude.com/docs/en/api/errors

Nathaniel 的更多内容

  1. 01

    Claude Code 处理大仓库:怎么让它只看需要的目录(子目录 CLAUDE.md、claudeMdExcludes、deny 规则)

    仓库太大,Claude Code 总在读无关文件、读进别的包的规则?本文按官方大仓库指南讲:从哪个目录启动、子目录 CLAUDE.md、claudeMdExcludes、Read 的 deny 规则、worktree.sparsePaths、additionalDirectories,以及一份合并后的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 里跑:从本机 claude -p 到 GitHub Actions 的完整例子(自动审 PR、控成本)

    一条线走完 Claude Code 的 CI 用法:先在本机用 claude --bare -p 配 --json-schema 跑通,再写进 GitHub Actions 用 claude-code-action@v1 自动审 PR,最后加上 --max-turns、超时、并发限制来控成本,并附上常见故障的排查顺序。

    Claude0
  3. 03

    Claude Code 自定义 subagent 实例:测试员、调试员、只读调研员、只读数据库员怎么写

    四个可直接改的 subagent 实例:跑测试的 test-runner、找根因的 debugger、只读调研员、用 PreToolUse hook 限成只读 SQL 的 db-reader;讲 tools、disallowedTools、model、maxTurns 怎么配,怎么点名调用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、后端、数据分析各一份,附拆分与自检方法

    直接拿去改的三份 CLAUDE.md 模板(前端、后端、数据分析),每份都控制在官方建议的 200 行以内;再讲怎么用 .claude/rules 的 paths 拆出专属规则、用 @ 导入长文档,以及用 /context all 和 /doctor prompt-audit 检查是否生效。

    Claude0
  5. 05

    Claude Code 自己写一个插件并发布到 marketplace:plugin.json、marketplace.json、validate 到团队安装的完整流程

    想把自己写的 Skill、Hook 打包给团队用?按 Claude Code 官方 Plugins 文档,从目录结构、plugin.json、claude plugin validate,到写 marketplace.json、推到 Git、让同事一条命令安装,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 写一个会自动触发的 Skill:从需求到触发,用 description、when_to_use 和 paths 控制它什么时候出场

    写好的 Skill 总是不触发,或者什么都触发?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整实例:把「改数据库迁移前先检查」写成一个会自动出场的 Skill,包含 description、when_to_use、paths、附带脚本、触发测试和评估。

    Claude0

同产品的其他教程

  1. 01

    Claude Code 配 Sentry MCP 排查线上报错:添加命令、浏览器授权、贴 issue 链接修 bug 和插件子智能体

    线上报错只能手动复制堆栈给 Claude Code?Sentry 官方提供 MCP 服务,可以让它直接读 issue、堆栈和 trace。本文按 Claude Code 官方 MCP 文档和 Sentry MCP 官方说明,讲添加命令、/mcp 授权、典型排查流程、插件方式和自托管注意事项。

    Claude0
  2. 02

    Claude Code 配 Context7 MCP 查最新文档:两种安装方式、use context7 怎么写、指定库和版本

    Claude Code 写出来的代码用了旧版 API?Context7 是一个把库的最新文档喂给编程助手的 MCP 服务。本文按 Context7 官方仓库和文档,讲两种安装方式、在 Claude Code 里的添加命令、use context7 与 library ID 的写法,以及使用时的注意事项。

    Claude0
  3. 03

    Claude API 用量层级与速率限制:Evaluation / Start / Build / Scale 怎么分、月度花费上限、自设上限和怎么申请提额

    Claude API 的限额到底按什么算?按官方《Rate limits》讲清用量层级、RPM / ITPM / OTPM、缓存读取为何不占 ITPM、各层级月度花费上限、自设花费上限的 400、工作区限额、响应头,以及在 Console 里 Request tier increase 提额。

    Claude0
  4. 04

    Claude API 模型 ID 怎么写、怎么查可用模型:dateless 命名、别名区别、Models API 的 lifecycle 和 capabilities

    model 参数该填什么?按官方《Models overview》《Model IDs and versioning》《List Models》讲清 Claude 模型 ID 的格式、4.6 之前带日期与之后不带日期的区别、别名是什么,以及用 GET /v1/models 查可用模型、生命周期和能力字段。

    Claude0
  5. 05

    Claude API 代码执行工具(code execution)怎么用:tools 写法、上传文件分析、取回生成文件、容器限制和计费

    想让 Claude API 真的跑代码做数据分析、生成图表和文件?按官方《Code execution tool》讲清三个工具版本、最小请求、上传 CSV 分析、$OUTPUT_DIR 取回文件、容器内存与联网限制、错误码、容器复用和计费规则。

    Claude0
  6. 06

    Claude API 联网搜索工具(web search tool)怎么用:tools 写法、max_uses、域名过滤、引用字段和计费

    想让 Claude API 回答带最新信息?按官方《Web search tool》讲清 web_search 工具的三个版本、请求写法、max_uses、域名过滤、引用字段、错误码和计费,附排查表。

    Claude0

0 条评论

登录 后参与评论

还没有评论,来抢沙发~