Loading...
    • 开发者指南
    • API 参考
    • MCP
    • 资源
    • 发布说明
    Search...
    ⌘K
    快速开始
    Claude 简介快速入门
    模型与定价
    模型概览选择模型Claude 4.5 新功能迁移到 Claude 4.5模型弃用定价
    使用 Claude 构建
    功能概览使用 Messages API上下文窗口提示词最佳实践
    能力
    提示词缓存上下文编辑扩展思考工作量流式消息批量处理引用多语言支持Token 计数嵌入视觉PDF 支持Files API搜索结果结构化输出
    工具
    概览如何实现工具使用细粒度工具流式传输Bash 工具代码执行工具程序化工具调用计算机使用工具文本编辑器工具Web 获取工具Web 搜索工具内存工具工具搜索工具
    Agent Skills
    概览快速入门最佳实践在 API 中使用 Skills
    Agent SDK
    概览快速入门TypeScript SDKTypeScript V2(预览版)Python SDK迁移指南
    API 中的 MCP
    MCP 连接器远程 MCP 服务器
    第三方平台上的 Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    提示词工程
    概览提示词生成器使用提示词模板提示词改进器清晰直接使用示例(多轮提示)让 Claude 思考(CoT)使用 XML 标签给 Claude 一个角色(系统提示词)预填充 Claude 的响应链接复杂提示词长上下文提示扩展思考提示
    测试与评估
    定义成功标准开发测试用例使用评估工具降低延迟
    加强防护栏
    减少幻觉提高输出一致性缓解越狱流式拒绝减少提示词泄露保持 Claude 的角色
    管理和监控
    Admin API 概览使用和成本 APIClaude Code Analytics API
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    能力

    批量处理

    了解如何使用 Message Batches API 高效处理大量请求

    批量处理是一种强大的方法,可以高效处理大量请求。与其一次处理一个请求并立即获得响应,批量处理允许您将多个请求一起提交进行异步处理。这种模式在以下情况下特别有用:

    • 您需要处理大量数据
    • 不需要立即响应
    • 您想优化成本效率
    • 您正在运行大规模评估或分析

    Message Batches API 是我们对这种模式的首次实现。


    Message Batches API

    Message Batches API 是一种强大且经济高效的方式,可以异步处理大量 Messages 请求。这种方法非常适合不需要立即响应的任务,大多数批次在 1 小时内完成,同时将成本降低 50% 并提高吞吐量。

    您可以 直接探索 API 参考,以及阅读本指南。

    Message Batches API 如何工作

    当您向 Message Batches API 发送请求时:

    1. 系统使用提供的 Messages 请求创建一个新的 Message Batch。
    2. 然后异步处理该批次,每个请求独立处理。
    3. 您可以轮询批次的状态,并在所有请求处理完成后检索结果。

    这对于不需要立即结果的批量操作特别有用,例如:

    • 大规模评估:高效处理数千个测试用例。
    • 内容审核:异步分析大量用户生成的内容。
    • 数据分析:为大型数据集生成见解或摘要。
    • 批量内容生成:为各种目的创建大量文本(例如,产品描述、文章摘要)。

    批次限制

    • Message Batch 限制为 100,000 个 Message 请求或 256 MB 大小,以先达到的为准。
    • 我们尽快处理每个批次,大多数批次在 1 小时内完成。当所有消息完成或 24 小时后(以先发生者为准),您将能够访问批次结果。如果处理在 24 小时内未完成,批次将过期。
    • 批次结果在创建后 29 天内可用。之后,您仍然可以查看批次,但其结果将不再可供下载。
    • 批次的范围限定为 Workspace。您可以查看在您的 API 密钥所属的 Workspace 中创建的所有批次及其结果。
    • 速率限制适用于 Batches API HTTP 请求和批次中等待处理的请求数。请参阅 Message Batches API 速率限制。此外,我们可能会根据当前需求和您的请求量减慢处理速度。在这种情况下,您可能会看到更多请求在 24 小时后过期。
    • 由于高吞吐量和并发处理,批次可能会略微超过您的 Workspace 配置的 支出限制。

    支持的模型

    所有 活跃模型 都支持 Message Batches API。

    可以批处理的内容

    任何您可以对 Messages API 进行的请求都可以包含在批次中。这包括:

    • 视觉
    • 工具使用
    • 系统消息
    • 多轮对话
    • 任何测试版功能

    由于批次中的每个请求都是独立处理的,您可以在单个批次中混合不同类型的请求。

    由于批次处理可能需要超过 5 分钟,请考虑在处理具有共享上下文的批次时使用 1 小时缓存持续时间 和提示缓存以获得更好的缓存命中率。


    定价

    Batches API 提供显著的成本节省。所有使用费用按标准 API 价格的 50% 收费。

    ModelBatch inputBatch output
    Claude Opus 4.5$2.50 / MTok$12.50 / MTok
    Claude Opus 4.1$7.50 / MTok$37.50 / MTok
    Claude Opus 4$7.50 / MTok$37.50 / MTok
    Claude Sonnet 4.5$1.50 / MTok$7.50 / MTok
    Claude Sonnet 4$1.50 / MTok$7.50 / MTok
    Claude Sonnet 3.7 (deprecated)$1.50 / MTok$7.50 / MTok
    Claude Haiku 4.5$0.50 / MTok$2.50 / MTok
    Claude Haiku 3.5$0.40 / MTok$2 / MTok
    Claude Opus 3 ()

    如何使用 Message Batches API

    准备并创建您的批次

    Message Batch 由创建 Message 的请求列表组成。单个请求的形状包括:

    • 用于标识 Messages 请求的唯一 custom_id
    • 包含标准 Messages API 参数的 params 对象

    您可以通过将此列表传递到 requests 参数来 创建批次:

    在此示例中,两个单独的请求被批处理在一起进行异步处理。每个请求都有一个唯一的 custom_id 并包含您用于 Messages API 调用的标准参数。

    使用 Messages API 测试您的批次请求

    每个消息请求的 params 对象的验证是异步执行的,验证错误在整个批次处理结束时返回。您可以通过首先使用 Messages API 验证您的请求形状来确保您正确构建输入。

    首次创建批次时,响应的处理状态将为 in_progress。

    JSON
    {
      "id": "msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d",
      "type": "message_batch",
      "processing_status": "in_progress",
      "request_counts": {
        "processing": 2,
        "succeeded": 0,
        "errored": 0,
        "canceled": 0,
        "expired": 0
      },
      "ended_at": null,
      "created_at": "2024-09-24T18:37:24.100435Z",
      "expires_at": "2024-09-25T18:37:24.100435Z",
      "cancel_initiated_at": null,
      "results_url": null
    }

    跟踪您的批次

    Message Batch 的 processing_status 字段指示批次处理所处的阶段。它首先为 in_progress,然后在批次中的所有请求完成处理且结果准备好后更新为 ended。您可以通过访问 Console 或使用 检索端点 来监控批次的状态。

    轮询 Message Batch 完成

    要轮询 Message Batch,您需要其 id,这在创建批次时的响应中提供,或通过列出批次获得。您可以实现一个轮询循环,定期检查批次状态,直到处理结束:

    列出所有 Message Batches

    您可以使用 列表端点 列出 Workspace 中的所有 Message Batches。API 支持分页,根据需要自动获取其他页面:

    检索批次结果

    批次处理结束后,批次中的每个 Messages 请求都将有一个结果。有 4 种结果类型:

    结果类型描述
    succeeded请求成功。包括消息结果。
    errored请求遇到错误,未创建消息。可能的错误包括无效请求和内部服务器错误。您不会为这些请求付费。
    canceled用户在此请求发送到模型之前取消了批次。您不会为这些请求付费。
    expired批次在此请求发送到模型之前达到了 24 小时过期时间。您不会为这些请求付费。

    您将看到批次 request_counts 的概览,其中显示有多少请求达到了这四种状态中的每一种。

    批次的结果可在 Message Batch 上的 results_url 属性处下载,如果组织权限允许,也可在 Console 中下载。由于结果的潜在大小,建议 流式传输结果 而不是一次性下载所有结果。

    结果将采用 .jsonl 格式,其中每一行都是一个有效的 JSON 对象,代表 Message Batch 中单个请求的结果。对于每个流式传输的结果,您可以根据其 custom_id 和结果类型执行不同的操作。以下是一组示例结果:

    .jsonl file
    {"custom_id":"my-second-request","result":{"type":"succeeded","message":{"id":"msg_014VwiXbi91y3JMjcpyGBHX5","type":"message","role":"assistant","model":"claude-sonnet-4-5-20250929","content":[{"type":"text","text":"Hello again! It's nice to see you. How can I assist you today? Is there anything specific you'd like to chat about or any questions you have?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":11,"output_tokens":36}}}}
    {"custom_id":"my-first-request","result":{"type":"succeeded","message":{"id":"msg_01FqfsLoHwgeFbguDgpz48m7","type":"message","role":"assistant","model":"claude-sonnet-4-5-20250929","content":[{"type":"text","text":"Hello! How can I assist you today? Feel free to ask me any questions or let me know if there's anything you'd like to chat about."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":10,"output_tokens":34}}}}

    如果您的结果有错误,其 result.error 将设置为我们的标准 错误形状。

    批次结果可能与输入顺序不匹配

    批次结果可以按任何顺序返回,可能与创建批次时请求的顺序不匹配。在上面的示例中,第二个批次请求的结果在第一个之前返回。要正确匹配结果与其对应的请求,始终使用 custom_id 字段。

    取消 Message Batch

    您可以使用 取消端点 取消当前正在处理的 Message Batch。取消后立即,批次的 processing_status 将为 canceling。您可以使用上面描述的相同轮询技术等待取消完成。已取消的批次最终状态为 ended,可能包含取消前处理的请求的部分结果。

    响应将显示处于 canceling 状态的批次:

    JSON
    {
      "id": "msgbatch_013Zva2CMHLNnXjNJJKqJ2EF",
      "type": "message_batch",
      "processing_status": "canceling",
      "request_counts": {
        "processing": 2,
        "succeeded": 0,
        "errored": 0,
        "canceled": 0,
        "expired": 0
      },
      "ended_at": null,
      "created_at": "2024-09-24T18:37:24.100435Z",
      "expires_at": "2024-09-25T18:37:24.100435Z",
      "cancel_initiated_at": "2024-09-24T18:39:03.114875Z",
      "results_url": null
    }

    在 Message Batches 中使用提示词缓存

    Message Batches API 支持提示词缓存,允许您为批处理请求潜在地降低成本和处理时间。提示词缓存和 Message Batches 的定价折扣可以叠加,当同时使用这两个功能时可以提供更大的成本节省。但是,由于批处理请求是异步并发处理的,缓存命中是尽力而为的基础上提供的。用户通常会根据其流量模式体验 30% 到 98% 的缓存命中率。

    为了最大化批处理请求中缓存命中的可能性:

    1. 在批处理中的每个 Message 请求中包含相同的 cache_control 块
    2. 保持稳定的请求流以防止缓存条目在其 5 分钟的生命周期后过期
    3. 构造您的请求以共享尽可能多的缓存内容

    在批处理中实现提示词缓存的示例:

    在此示例中,批处理中的两个请求都包含相同的系统消息和标记有 cache_control 的完整《傲慢与偏见》文本,以增加缓存命中的可能性。

    有效批处理的最佳实践

    为了充分利用 Batches API:

    • 定期监控批处理状态并为失败的请求实现适当的重试逻辑。
    • 使用有意义的 custom_id 值来轻松匹配结果与请求,因为顺序不能保证。
    • 考虑将非常大的数据集分解为多个批处理以获得更好的可管理性。
    • 使用 Messages API 对单个请求形状进行干运行以避免验证错误。

    常见问题故障排除

    如果遇到意外行为:

    • 验证总批处理请求大小不超过 256 MB。如果请求大小过大,您可能会收到 413 request_too_large 错误。
    • 检查您是否为批处理中的所有请求使用支持的模型。
    • 确保批处理中的每个请求都有唯一的 custom_id。
    • 确保自批处理 created_at(不是处理 ended_at)时间以来已不足 29 天。如果已超过 29 天,结果将不再可查看。
    • 确认批处理未被取消。

    请注意,批处理中一个请求的失败不会影响其他请求的处理。


    批处理存储和隐私

    • 工作区隔离:批处理在创建它们的工作区内是隔离的。它们只能由与该工作区关联的 API 密钥或有权限在控制台中查看工作区批处理的用户访问。

    • 结果可用性:批处理结果在创建批处理后的 29 天内可用,为检索和处理提供充足的时间。


    常见问题

    • Message Batches API 如何工作
    • 如何使用 Message Batches API
    • 列出所有 Message Batches
    • 取消 Message Batch
    • 在 Message Batches 中使用提示词缓存
    deprecated
    $7.50 / MTok
    $37.50 / MTok
    Claude Haiku 3$0.125 / MTok$0.625 / MTok
    curl https://api.anthropic.com/v1/messages/batches \
         --header "x-api-key: $ANTHROPIC_API_KEY" \
         --header "anthropic-version: 2023-06-01" \
         --header "content-type: application/json" \
         --data \
    '{
        "requests": [
            {
                "custom_id": "my-first-request",
                "params": {
                    "model": "claude-sonnet-4-5",
                    "max_tokens": 1024,
                    "messages": [
                        {"role": "user", "content": "Hello, world"}
                    ]
                }
            },
            {
                "custom_id": "my-second-request",
                "params": {
                    "model": "claude-sonnet-4-5",
                    "max_tokens": 1024,
                    "messages": [
                        {"role": "user", "content": "Hi again, friend"}
                    ]
                }
            }
        ]
    }'
    import anthropic
    import time
    
    client = anthropic.Anthropic()
    
    message_batch = None
    while True:
        message_batch = client.messages.batches.retrieve(
            MESSAGE_BATCH_ID
        )
        if message_batch.processing_status == "ended":
            break
    
        print(f"Batch {MESSAGE_BATCH_ID} is still processing...")
        time.sleep(60)
    print(message_batch)
    import anthropic
    
    client = anthropic.Anthropic()
    
    # Automatically fetches more pages as needed.
    for message_batch in client.messages.batches.list(
        limit=20
    ):
        print(message_batch)
    #!/bin/sh
    curl "https://api.anthropic.com/v1/messages/batches/msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d" \
      --header "anthropic-version: 2023-06-01" \
      --header "x-api-key: $ANTHROPIC_API_KEY" \
      | grep -o '"results_url":[[:space:]]*"[^"]*"' \
      | cut -d'"' -f4 \
      | while read -r url; do
        curl -s "$url" \
          --header "anthropic-version: 2023-06-01" \
          --header "x-api-key: $ANTHROPIC_API_KEY" \
          | sed 's/}{/}\n{/g' \
          | while IFS= read -r line
        do
          result_type=$(echo "$line" | sed -n 's/.*"result":[[:space:]]*{[[:space:]]*"type":[[:space:]]*"\([^"]*\)".*/\1/p')
          custom_id=$(echo "$line" | sed -n 's/.*"custom_id":[[:space:]]*"\([^"]*\)".*/\1/p')
          error_type=$(echo "$line" | sed -n 's/.*"error":[[:space:]]*{[[:space:]]*"type":[[:space:]]*"\([^"]*\)".*/\1/p')
    
          case "$result_type" in
            "succeeded")
              echo "Success! $custom_id"
              ;;
            "errored")
              if [ "$error_type" = "invalid_request" ]; then
                # Request body must be fixed before re-sending request
                echo "Validation error: $custom_id"
              else
                # Request can be retried directly
                echo "Server error: $custom_id"
              fi
              ;;
            "expired")
              echo "Expired: $line"
              ;;
          esac
        done
      done
    
    import anthropic
    
    client = anthropic.Anthropic()
    
    message_batch = client.messages.batches.cancel(
        MESSAGE_BATCH_ID,
    )
    print(message_batch)
    curl https://api.anthropic.com/v1/messages/batches \
         --header "x-api-key: $ANTHROPIC_API_KEY" \
         --header "anthropic-version: 2023-06-01" \
         --header "content-type: application/json" \
         --data \
    '{
        "requests": [
            {
                "custom_id": "my-first-request",
                "params": {
                    "model": "claude-sonnet-4-5",
                    "max_tokens": 1024,
                    "system": [
                        {
                            "type": "text",
                            "text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n"
                        },
                        {
                            "type": "text",
                            "text": "<the entire contents of Pride and Prejudice>",
                            "cache_control": {"type": "ephemeral"}
                        }
                    ],
                    "messages": [
                        {"role": "user", "content": "Analyze the major themes in Pride and Prejudice."}
                    ]
                }
            },
            {
                "custom_id": "my-second-request",
                "params": {
                    "model": "claude-sonnet-4-5",
                    "max_tokens": 1024,
                    "system": [
                        {
                            "type": "text",
                            "text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n"
                        },
                        {
                            "type": "text",
                            "text": "<the entire contents of Pride and Prejudice>",
                            "cache_control": {"type": "ephemeral"}
                        }
                    ],
                    "messages": [
                        {"role": "user", "content": "Write a summary of Pride and Prejudice."}
                    ]
                }
            }
        ]
    }'