Die Batch-Verarbeitung ist ein leistungsstarker Ansatz für die effiziente Bearbeitung großer Anfragemengen. Anstatt Anfragen einzeln mit sofortigen Antworten zu verarbeiten, ermöglicht die Batch-Verarbeitung die gemeinsame Übermittlung mehrerer Anfragen zur asynchronen Verarbeitung. Dieses Muster ist besonders nützlich, wenn:

  • Sie große Datenmengen verarbeiten müssen
  • Sofortige Antworten nicht erforderlich sind
  • Sie die Kosteneffizienz optimieren möchten
  • Sie umfangreiche Evaluierungen oder Analysen durchführen

Die Message Batches API ist unsere erste Implementierung dieses Musters.


Message Batches API

Die Message Batches API ist eine leistungsstarke, kosteneffiziente Möglichkeit, große Mengen von Messages-Anfragen asynchron zu verarbeiten. Dieser Ansatz eignet sich gut für Aufgaben, die keine sofortigen Antworten erfordern, wobei die meisten Batches in weniger als 1 Stunde abgeschlossen werden, während die Kosten um 50% reduziert und der Durchsatz erhöht wird.

Sie können direkt die API-Referenz erkunden, zusätzlich zu diesem Leitfaden.

Wie die Message Batches API funktioniert

Wenn Sie eine Anfrage an die Message Batches API senden:

  1. Das System erstellt einen neuen Message Batch mit den bereitgestellten Messages-Anfragen.
  2. Der Batch wird dann asynchron verarbeitet, wobei jede Anfrage unabhängig bearbeitet wird.
  3. Sie können den Status des Batches abfragen und Ergebnisse abrufen, wenn die Verarbeitung für alle Anfragen abgeschlossen ist.

Dies ist besonders nützlich für Massenoperationen, die keine sofortigen Ergebnisse erfordern, wie zum Beispiel:

  • Umfangreiche Evaluierungen: Verarbeiten Sie Tausende von Testfällen effizient.
  • Inhaltsmoderation: Analysieren Sie große Mengen nutzergenerierter Inhalte asynchron.
  • Datenanalyse: Generieren Sie Erkenntnisse oder Zusammenfassungen für große Datensätze.
  • Massenhafte Inhaltserstellung: Erstellen Sie große Mengen an Text für verschiedene Zwecke (z.B. Produktbeschreibungen, Artikelzusammenfassungen).

Batch-Einschränkungen

  • Ein Message Batch ist auf entweder 100.000 Message-Anfragen oder 256 MB Größe begrenzt, je nachdem, was zuerst erreicht wird.
  • Wir verarbeiten jeden Batch so schnell wie möglich, wobei die meisten Batches innerhalb von 1 Stunde abgeschlossen werden. Sie können auf die Batch-Ergebnisse zugreifen, wenn alle Nachrichten abgeschlossen sind oder nach 24 Stunden, je nachdem, was zuerst eintritt. Batches verfallen, wenn die Verarbeitung nicht innerhalb von 24 Stunden abgeschlossen wird.
  • Batch-Ergebnisse sind 29 Tage nach der Erstellung verfügbar. Danach können Sie den Batch zwar noch anzeigen, aber seine Ergebnisse stehen nicht mehr zum Download zur Verfügung.
  • Batches sind auf einen Workspace beschränkt. Sie können alle Batches und deren Ergebnisse einsehen, die innerhalb des Workspaces erstellt wurden, zu dem Ihr API-Schlüssel gehört.
  • Ratenbegrenzungen gelten sowohl für Batches API HTTP-Anfragen als auch für die Anzahl der Anfragen innerhalb eines Batches, die auf die Verarbeitung warten. Siehe Message Batches API Ratenbegrenzungen. Zusätzlich können wir die Verarbeitung basierend auf der aktuellen Nachfrage und Ihrem Anfragevolumen verlangsamen. In diesem Fall können Sie mehr Anfragen sehen, die nach 24 Stunden ablaufen.
  • Aufgrund des hohen Durchsatzes und der gleichzeitigen Verarbeitung können Batches das für Ihren Workspace konfigurierte Ausgabenlimit geringfügig überschreiten.

Unterstützte Modelle

Die Message Batches API unterstützt derzeit:

  • Claude Opus 4 (claude-opus-4-20250514)
  • Claude Sonnet 4 (claude-sonnet-4-20250514)
  • Claude Sonnet 3.7 (claude-3-7-sonnet-20250219)
  • Claude Sonnet 3.5 (claude-3-5-sonnet-20240620 und claude-3-5-sonnet-20241022)
  • Claude Haiku 3.5 (claude-3-5-haiku-20241022)
  • Claude Haiku 3 (claude-3-haiku-20240307)
  • Claude Opus 3 (claude-3-opus-20240229)

Was kann gebatcht werden

Jede Anfrage, die Sie an die Messages API stellen können, kann in einen Batch aufgenommen werden. Dazu gehören:

  • Vision
  • Tool-Nutzung
  • Systemnachrichten
  • Mehrzügige Konversationen
  • Alle Beta-Funktionen

Da jede Anfrage im Batch unabhängig verarbeitet wird, können Sie verschiedene Arten von Anfragen innerhalb eines einzelnen Batches mischen.


Preisgestaltung

Die Batches API bietet erhebliche Kosteneinsparungen. Alle Nutzung wird mit 50% der Standard-API-Preise berechnet.

ModelBatch inputBatch output
Claude Opus 4$7.50 / MTok$37.50 / MTok
Claude Sonnet 4$1.50 / MTok$7.50 / MTok
Claude Sonnet 3.7$1.50 / MTok$7.50 / MTok
Claude Sonnet 3.5$1.50 / MTok$7.50 / MTok
Claude Haiku 3.5$0.40 / MTok$2 / MTok
Claude Opus 3$7.50 / MTok$37.50 / MTok
Claude Haiku 3$0.125 / MTok$0.625 / MTok

Wie man die Message Batches API verwendet

Vorbereiten und Erstellen Ihres Batches

Ein Message Batch besteht aus einer Liste von Anfragen zum Erstellen einer Nachricht. Die Form einer einzelnen Anfrage besteht aus:

  • Einer eindeutigen custom_id zur Identifizierung der Messages-Anfrage
  • Einem params-Objekt mit den Standard-Messages API-Parametern

Sie können einen Batch erstellen, indem Sie diese Liste in den requests-Parameter übergeben:

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-opus-4-20250514",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": "Hello, world"}
                ]
            }
        },
        {
            "custom_id": "my-second-request",
            "params": {
                "model": "claude-opus-4-20250514",
                "max_tokens": 1024,
                "messages": [
                    {"role": "user", "content": "Hi again, friend"}
                ]
            }
        }
    ]
}'

In diesem Beispiel werden zwei separate Anfragen für die asynchrone Verarbeitung zusammengefasst. Jede Anfrage hat eine eindeutige custom_id und enthält die Standardparameter, die Sie für einen Messages API-Aufruf verwenden würden.

Testen Sie Ihre Batch-Anfragen mit der Messages API

Die Validierung des params-Objekts für jede Nachrichtenanfrage wird asynchron durchgeführt, und Validierungsfehler werden zurückgegeben, wenn die Verarbeitung des gesamten Batches beendet ist. Sie können sicherstellen, dass Sie Ihre Eingabe korrekt erstellen, indem Sie Ihre Anfragenstruktur zuerst mit der Messages API überprüfen.

Wenn ein Batch zuerst erstellt wird, hat die Antwort einen Verarbeitungsstatus von 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
}

Verfolgen Ihres Batches

Das Feld processing_status des Message Batches zeigt die Phase der Verarbeitung an, in der sich der Batch befindet. Es beginnt mit in_progress und wird dann auf ended aktualisiert, sobald alle Anfragen im Batch verarbeitet wurden und die Ergebnisse bereit sind. Sie können den Status Ihres Batches überwachen, indem Sie die Console besuchen oder den Abruf-Endpunkt verwenden:

curl https://api.anthropic.com/v1/messages/batches/msgbatch_01HkcTjaV5uDC8jWR4ZsDV8d \
 --header "x-api-key: $ANTHROPIC_API_KEY" \
 --header "anthropic-version: 2023-06-01" \
 | sed -E 's/.*"id":"([^"]+)".*"processing_status":"([^"]+)".*/Batch \1 processing status is \2/'

Sie können diesen Endpunkt abfragen, um zu erfahren, wann die Verarbeitung beendet wurde.

Abrufen von Batch-Ergebnissen

Sobald die Batch-Verarbeitung beendet ist, hat jede Messages-Anfrage im Batch ein Ergebnis. Es gibt 4 Ergebnistypen:

ErgebnistypBeschreibung
succeededAnfrage war erfolgreich. Enthält das Nachrichtenergebnis.
erroredBei der Anfrage ist ein Fehler aufgetreten und es wurde keine Nachricht erstellt. Mögliche Fehler umfassen ungültige Anfragen und interne Serverfehler. Diese Anfragen werden Ihnen nicht in Rechnung gestellt.
canceledBenutzer hat den Batch abgebrochen, bevor diese Anfrage an das Modell gesendet werden konnte. Diese Anfragen werden Ihnen nicht in Rechnung gestellt.
expiredDer Batch hat seine 24-Stunden-Ablaufzeit erreicht, bevor diese Anfrage an das Modell gesendet werden konnte. Diese Anfragen werden Ihnen nicht in Rechnung gestellt.

Sie sehen eine Übersicht Ihrer Ergebnisse mit den request_counts des Batches, die anzeigen, wie viele Anfragen jeden dieser vier Zustände erreicht haben.

Die Ergebnisse des Batches stehen zum Download unter der Eigenschaft results_url des Message Batches zur Verfügung und, falls die Organisationsberechtigungen dies zulassen, in der Console. Aufgrund der potenziell großen Größe der Ergebnisse wird empfohlen, Ergebnisse zu streamen, anstatt sie alle auf einmal herunterzuladen.

#!/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

Die Ergebnisse werden im .jsonl-Format sein, wobei jede Zeile ein gültiges JSON-Objekt ist, das das Ergebnis einer einzelnen Anfrage im Message Batch darstellt. Für jedes gestreamte Ergebnis können Sie je nach custom_id und Ergebnistyp unterschiedlich vorgehen. Hier ist ein Beispiel für Ergebnisse:

.jsonl file
{"custom_id":"my-second-request","result":{"type":"succeeded","message":{"id":"msg_014VwiXbi91y3JMjcpyGBHX5","type":"message","role":"assistant","model":"claude-opus-4-20250514","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-opus-4-20250514","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}}}}

Wenn Ihr Ergebnis einen Fehler hat, wird sein result.error auf unsere Standard-Fehlerform gesetzt.

Batch-Ergebnisse entsprechen möglicherweise nicht der Eingabereihenfolge

Batch-Ergebnisse können in beliebiger Reihenfolge zurückgegeben werden und müssen nicht der Reihenfolge der Anfragen bei der Erstellung des Batches entsprechen. Im obigen Beispiel wird das Ergebnis für die zweite Batch-Anfrage vor der ersten zurückgegeben. Um Ergebnisse korrekt ihren entsprechenden Anfragen zuzuordnen, verwenden Sie immer das Feld custom_id.

Verwendung von Prompt-Caching mit Message Batches

Die Message Batches API unterstützt Prompt-Caching, was es Ihnen ermöglicht, Kosten und Verarbeitungszeit für Batch-Anfragen potenziell zu reduzieren. Die Preisrabatte von Prompt-Caching und Message Batches können sich stapeln und bieten noch größere Kosteneinsparungen, wenn beide Funktionen zusammen verwendet werden. Da Batch-Anfragen jedoch asynchron und gleichzeitig verarbeitet werden, werden Cache-Treffer nach bestem Bemühen bereitgestellt. Benutzer erleben typischerweise Cache-Trefferraten zwischen 30% und 98%, abhängig von ihren Verkehrsmustern.

Um die Wahrscheinlichkeit von Cache-Treffern in Ihren Batch-Anfragen zu maximieren:

  1. Fügen Sie identische cache_control-Blöcke in jede Message-Anfrage innerhalb Ihres Batches ein
  2. Halten Sie einen stetigen Strom von Anfragen aufrecht, um zu verhindern, dass Cache-Einträge nach ihrer 5-minütigen Lebensdauer ablaufen
  3. Strukturieren Sie Ihre Anfragen so, dass sie so viel gecachten Inhalt wie möglich teilen

Beispiel für die Implementierung von Prompt-Caching in einem 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-opus-4-20250514",
                "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-opus-4-20250514",
                "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."}
                ]
            }
        }
    ]
}'

In diesem Beispiel enthalten beide Anfragen im Batch identische Systemnachrichten und den vollständigen Text von “Stolz und Vorurteil”, der mit cache_control markiert ist, um die Wahrscheinlichkeit von Cache-Treffern zu erhöhen.

Best Practices für effektives Batching

Um das Beste aus der Batches API herauszuholen:

  • Überwachen Sie den Batch-Verarbeitungsstatus regelmäßig und implementieren Sie geeignete Wiederholungslogik für fehlgeschlagene Anfragen.
  • Verwenden Sie aussagekräftige custom_id-Werte, um Ergebnisse leicht mit Anfragen abzugleichen, da die Reihenfolge nicht garantiert ist.
  • Erwägen Sie, sehr große Datensätze in mehrere Batches aufzuteilen, um sie besser verwalten zu können.
  • Führen Sie einen Testlauf einer einzelnen Anfragenform mit der Messages API durch, um Validierungsfehler zu vermeiden.

Fehlerbehebung bei häufigen Problemen

Bei unerwartetem Verhalten:

  • Überprüfen Sie, ob die Gesamtgröße der Batch-Anfrage 256 MB nicht überschreitet. Wenn die Anfragegröße zu groß ist, erhalten Sie möglicherweise einen 413 request_too_large-Fehler.
  • Prüfen Sie, ob Sie unterstützte Modelle für alle Anfragen im Batch verwenden.
  • Stellen Sie sicher, dass jede Anfrage im Batch eine eindeutige custom_id hat.
  • Stellen Sie sicher, dass seit der Batch-created_at-Zeit (nicht der Verarbeitungs-ended_at-Zeit) weniger als 29 Tage vergangen sind. Wenn mehr als 29 Tage vergangen sind, sind die Ergebnisse nicht mehr einsehbar.
  • Bestätigen Sie, dass der Batch nicht abgebrochen wurde.

Beachten Sie, dass der Fehler einer Anfrage in einem Batch die Verarbeitung anderer Anfragen nicht beeinflusst.


Batch-Speicherung und Datenschutz

  • Workspace-Isolation: Batches sind innerhalb des Workspaces isoliert, in dem sie erstellt wurden. Sie können nur mit API-Schlüsseln zugegriffen werden, die diesem Workspace zugeordnet sind, oder von Benutzern mit der Berechtigung, Workspace-Batches in der Console einzusehen.

  • Ergebnisverfügbarkeit: Batch-Ergebnisse sind 29 Tage nach der Erstellung des Batches verfügbar, was ausreichend Zeit für den Abruf und die Verarbeitung bietet.


FAQ