深度

Claude API 批量处理完全指南:Message Batches API 大规模数据处理实战

Claude API Message Batches 完整教程:批量 API 原理、与普通 API 的区别(50% 成本折扣)、Python/Node.js 提交批次代码示例、进度追踪与结果获取、错误处理策略、并发批次管理,以及文档摘要/数据分类/批量翻译等典型大规模处理场景实战。

2026/3/164分钟 阅读ClaudeEagle

当你需要处理大量文档、翻译海量内容或批量分类数据时, Claude 的 Message Batches API 是最经济高效的选择—— 比标准 API 节省 50% 成本,同时突破实时 Rate Limit 限制。

什么是 Message Batches API?

特性标准 APIBatches API
响应方式实时(秒级)异步(最长 24 小时)
成本100%50%(折半)
Rate Limit受 RPM/TPM 限制不受实时限流影响
适用场景需要实时结果可以等待批量结果
每批最大请求数-10,000 条

适合使用的场景

  • 批量翻译文档/文章
  • 大规模数据分类标注
  • 批量生成摘要/描述
  • 数据集质量评估
  • 批量代码审查

Python 完整示例

python
import anthropic
import json
import time

client = anthropic.Anthropic()

# === 1. 准备批量请求 ===
def create_batch_requests(texts: list[str], task: str) -> list:
    requests = []
    for i, text in enumerate(texts):
        requests.append({
            "custom_id": f"request-{i}",  # 用于匹配结果
            "params": {
                "model": "claude-haiku-3-5",  # 批量任务推荐 Haiku(更便宜)
                "max_tokens": 200,
                "messages": [{
                    "role": "user",
                    "content": f"{task}\n\n{text}"
                }]
            }
        })
    return requests

# === 2. 提交批次 ===
def submit_batch(requests: list):
    batch = client.beta.messages.batches.create(requests=requests)
    print(f"批次已提交: {batch.id}")
    print(f"状态: {batch.processing_status}")
    print(f"请求数: {batch.request_counts.processing}")
    return batch.id

# === 3. 轮询进度 ===
def wait_for_batch(batch_id: str, poll_interval: int = 30):
    while True:
        batch = client.beta.messages.batches.retrieve(batch_id)
        counts = batch.request_counts
        total = counts.processing + counts.succeeded + counts.errored
        done = counts.succeeded + counts.errored
        print(f"进度: {done}/{total} | 成功: {counts.succeeded} | 失败: {counts.errored}")

        if batch.processing_status == "ended":
            print(f"批次完成!结果文件: {batch.results_url}")
            return batch
        
        time.sleep(poll_interval)

# === 4. 获取结果 ===
def get_results(batch_id: str) -> dict:
    results = {}
    for result in client.beta.messages.batches.results(batch_id):
        if result.result.type == "succeeded":
            results[result.custom_id] = result.result.message.content[0].text
        else:
            results[result.custom_id] = f"ERROR: {result.result.error.type}"
    return results

# === 完整流程 ===
texts = [
    "Artificial intelligence is transforming software development...",
    "The latest Claude model shows significant improvements...",
    # ... 更多文本
]

requests = create_batch_requests(texts, "请将以下英文翻译成中文:")
batch_id = submit_batch(requests)
batch = wait_for_batch(batch_id)
results = get_results(batch_id)

for custom_id, translation in results.items():
    print(f"{custom_id}: {translation[:50]}...")

Node.js 示例

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

const client = new Anthropic();

async function batchClassify(items: string[]) {
  // 提交批次
  const batch = await client.beta.messages.batches.create({
    requests: items.map((item, i) => ({
      custom_id: `item-${i}`,
      params: {
        model: "claude-haiku-3-5",
        max_tokens: 50,
        messages: [{
          role: "user" as const,
          content: `将以下文本分类为:正面/负面/中性。只输出类别词。\n\n${item}`
        }]
      }
    }))
  });

  console.log(`批次 ID: ${batch.id}`);

  // 等待完成
  let current = batch;
  while (current.processing_status !== "ended") {
    await new Promise(r => setTimeout(r, 30000)); // 等 30 秒
    current = await client.beta.messages.batches.retrieve(batch.id);
    const { succeeded, errored, processing } = current.request_counts;
    console.log(`进度: 成功 ${succeeded}, 失败 ${errored}, 处理中 ${processing}`);
  }

  // 收集结果
  const results: Record<string, string> = {};
  for await (const result of await client.beta.messages.batches.results(batch.id)) {
    if (result.result.type === "succeeded") {
      results[result.custom_id] = result.result.message.content[0].type === "text"
        ? result.result.message.content[0].text : "";
    }
  }
  return results;
}

典型场景:批量文档摘要

python
import os, glob

def batch_summarize_documents(docs_dir: str):
    # 读取所有 .txt 文件
    files = glob.glob(f"{docs_dir}/*.txt")
    texts = {}
    for path in files:
        with open(path) as f:
            texts[os.path.basename(path)] = f.read()[:4000]  # 限制长度
    
    # 构建批量请求
    requests = [{
        "custom_id": filename,
        "params": {
            "model": "claude-haiku-3-5",
            "max_tokens": 300,
            "messages": [{
                "role": "user",
                "content": f"用 3 句话概括以下文档的核心内容:\n\n{content}"
            }]
        }
    } for filename, content in texts.items()]
    
    # 提交(每批最多 10000 条)
    batch = client.beta.messages.batches.create(requests=requests[:10000])
    print(f"提交 {len(requests)} 篇文档,批次 ID: {batch.id}")
    return batch.id

成本计算示例

处理 10,000 篇文章(每篇平均 500 token 输入 + 100 token 输出):

方式输入成本输出成本总计
标准 API(Haiku)$0.25/M → $1.25$1.25/M → $0.75$2.00
Batches API50% 折扣 → $0.6350% 折扣 → $0.38$1.01

每批 10K 条节省约 $1,大规模场景下节省显著。

最佳实践

  1. 选 Haiku 模型:批量任务通常不需要最强模型,Haiku 成本最低
  2. 合理设置 max_tokens:分类任务 50 token,摘要 300 token,翻译按原文比例
  3. 使用有意义的 custom_id:便于结果匹配,如文件名、数据库 ID
  4. 处理错误结果:批次中部分请求可能失败,代码要能处理 errored 状态
  5. 保存 batch_id:进程重启后可以根据 ID 继续获取结果

来源:Message Batches API - Anthropic 官方文档

相关文章推荐

深度Anthropic Batch API 完全指南:大批量处理 Claude 请求节省 50% 成本Anthropic Messages Batches API 完整教程:批量 API 是什么(异步批处理/24小时内完成)、与普通 API 的成本对比(50% 折扣)、Python/Node.js 创建批次请求、轮询批次状态、下载并处理结果、错误处理(部分失败的处理方式)、适合与不适合批量处理的场景、批次取消与数据保留策略,以及批量处理 1000 篇文章摘要的完整实战示例。2026/3/20深度Claude API Prompt Caching 详解:让重复内容成本降低 90%Claude API Prompt Caching 完整指南:工作原理、缓存命中条件、supported models、代码示例(系统提示缓存/文档缓存/对话历史缓存)、成本对比计算、TTL 机制与最佳实践。2026/3/14深度高级提示词工程完全指南 2026:CoT、Few-Shot 与 XML 结构化技巧面向 Claude API 开发者的高级提示词工程完整指南:Chain-of-Thought(思维链)的原理与触发方式、Few-Shot 示例选取策略、Zero-Shot CoT 触发词、XML 标签结构化输出控制(强制 JSON)、角色扮演提示的正确姿势、多步骤任务分解、Claude 专属优化技巧(正向指令 vs 禁止指令)以及提示词 A/B 测试框架。2026/3/21深度Claude API 错误码完全手册:所有错误类型、原因与解决方案Anthropic Claude API 错误码完整参考:authentication_error(401/403)、rate_limit_error(429)、invalid_request_error(400)、api_error(500)、overloaded_error(529)的详细说明,每种错误的常见触发原因、标准解决方案和代码示例(Python/Node.js),以及生产环境的错误处理最佳实践(区分可重试/不可重试错误)。2026/3/18深度Claude API 速率限制完全指南:限额说明、错误处理与优化策略Anthropic Claude API 速率限制完整说明:请求频率限制(RPM)、Token 用量限制(TPM/TPD)、不同使用层级的限额对比(免费层/Build/Scale/Enterprise)、429 错误的标准处理方式(指数退避重试)、提升限额的申请方法、Prompt Caching 和 Batch API 绕过限制的技巧,以及高并发场景的队列设计方案。2026/3/18深度Claude API 限流完全指南:Rate Limit 报错原因、重试策略与生产环境最佳实践Claude API Rate Limit 完整应对指南:限流类型(RPM/TPM/并发)、各套餐限额表、429 错误处理、指数退避重试实现、Prompt Caching 降低用量、请求队列设计、Tier 升级申请,以及高并发生产环境架构方案。2026/3/15