Batch-Verarbeitung ist ein leistungsstarker Ansatz für die effiziente Bearbeitung großer Mengen von Anfragen. Anstatt Anfragen einzeln mit sofortigen Antworten zu verarbeiten, ermöglicht die Batch-Verarbeitung das gemeinsame Einreichen mehrerer Anfragen zur asynchronen Verarbeitung. Dieses Muster ist besonders nützlich, wenn:
Die Message Batches API ist unsere erste Implementierung dieses Musters.
Die Message Batches API ist ein leistungsstarker, kosteneffizienter Weg zur asynchronen Verarbeitung großer Mengen von Messages Anfragen. Dieser Ansatz eignet sich gut für Aufgaben, die keine sofortigen Antworten erfordern, wobei die meisten Batches in weniger als 1 Stunde fertiggestellt werden, während die Kosten um 50% reduziert und der Durchsatz erhöht wird.
Sie können die API-Referenz direkt erkunden, zusätzlich zu diesem Leitfaden.
Wenn Sie eine Anfrage an die Message Batches API senden:
Dies ist besonders nützlich für Bulk-Operationen, die keine sofortigen Ergebnisse erfordern, wie:
Alle aktiven Modelle unterstützen die Message Batches API.
Jede Anfrage, die Sie an die Messages API stellen können, kann in einem Batch enthalten sein. Dies umfasst:
Da jede Anfrage im Batch unabhängig verarbeitet wird, können Sie verschiedene Arten von Anfragen innerhalb eines einzigen Batches mischen.
Da Batches länger als 5 Minuten zur Verarbeitung benötigen können, erwägen Sie die Verwendung der 1-Stunden-Cache-Dauer mit Prompt-Caching für bessere Cache-Trefferquoten bei der Verarbeitung von Batches mit gemeinsam genutztem Kontext.
Die Batches API bietet erhebliche Kosteneinsparungen. Alle Nutzung wird zu 50% der Standard-API-Preise berechnet.
| Model | Batch input | Batch 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 (deprecated) | $7.50 / MTok | $37.50 / MTok |
| Claude Haiku 3 | $0.125 / MTok | $0.625 / MTok |
Ein Message Batch besteht aus einer Liste von Anfragen zur Erstellung einer Message. Die Form einer einzelnen Anfrage umfasst:
custom_id zur Identifizierung der Messages-Anfrageparams-Objekt mit den Standard-Messages API ParameternSie 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-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hallo, Welt"}
]
}
},
{
"custom_id": "my-second-request",
"params": {
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hallo nochmal, Freund"}
]
}
}
]
}'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 Message-Anfrage 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 Anfragform zuerst mit der Messages API überprüfen.
Wenn ein Batch erstmals erstellt wird, hat die Antwort einen Verarbeitungsstatus von in_progress.
{
"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
}Das processing_status-Feld des Message Batch zeigt die Verarbeitungsphase an, in der sich der Batch befindet. Es beginnt als in_progress, wird dann auf ended aktualisiert, sobald alle Anfragen im Batch die Verarbeitung beendet haben und 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 Verarbeitungsstatus ist \2/'Sie können diesen Endpunkt abfragen, um zu wissen, wann die Verarbeitung beendet ist.
Sobald die Batch-Verarbeitung beendet ist, hat jede Messages-Anfrage im Batch ein Ergebnis. Es gibt 4 Ergebnistypen:
| Ergebnistyp | Beschreibung |
|---|---|
succeeded | Anfrage war erfolgreich. Enthält das Message-Ergebnis. |
errored | Anfrage ist auf einen Fehler gestoßen und eine Message wurde nicht erstellt. Mögliche Fehler umfassen ungültige Anfragen und interne Serverfehler. Sie werden für diese Anfragen nicht belastet. |
canceled | Benutzer hat den Batch abgebrochen, bevor diese Anfrage an das Modell gesendet werden konnte. Sie werden für diese Anfragen nicht belastet. |
expired | Batch hat seine 24-Stunden-Ablaufzeit erreicht, bevor diese Anfrage an das Modell gesendet werden konnte. Sie werden für diese Anfragen nicht belastet. |
Sie sehen eine Übersicht Ihrer Ergebnisse mit den request_counts des Batches, die zeigen, wie viele Anfragen jeden dieser vier Zustände erreicht haben.
Ergebnisse des Batches sind zum Download unter der results_url-Eigenschaft des Message Batch verfügbar, und wenn die Organisationsberechtigung es erlaubt, 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 "Erfolg! $custom_id"
;;
"errored")
if [ "$error_type" = "invalid_request" ]; then
# Anfragekörper muss korrigiert werden, bevor die Anfrage erneut gesendet wird
echo "Validierungsfehler: $custom_id"
else
# Anfrage kann direkt wiederholt werden
echo "Serverfehler: $custom_id"
fi
;;
"expired")
echo "Abgelaufen: $line"
;;
esac
done
done
Die Ergebnisse werden im .jsonl-Format vorliegen, 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 etwas anderes tun. Hier ist ein Beispiel für eine Reihe von Ergebnissen:
{"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":"Hallo nochmal! Es ist schön, dich zu sehen. Wie kann ich dir heute helfen? Gibt es etwas Bestimmtes, worüber du sprechen möchtest oder Fragen, die du hast?"}],"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":"Hallo! Wie kann ich dir heute helfen? Stelle mir gerne Fragen oder lass mich wissen, wenn es etwas gibt, worüber du sprechen möchtest."}],"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 entsprechen möglicherweise nicht der Reihenfolge der Anfragen bei der Batch-Erstellung. Im obigen Beispiel wird das Ergebnis für die zweite Batch-Anfrage vor der ersten zurückgegeben. Um Ergebnisse korrekt mit ihren entsprechenden Anfragen zu verknüpfen, verwenden Sie immer das custom_id-Feld.
Die Message Batches API unterstützt Prompt-Caching, wodurch Sie möglicherweise Kosten und Verarbeitungszeit für Batch-Anfragen reduzieren können. Die Preisrabatte von Prompt-Caching und Message Batches können sich stapeln und noch größere Kosteneinsparungen bieten, wenn beide Features zusammen verwendet werden. Da Batch-Anfragen jedoch asynchron und gleichzeitig verarbeitet werden, werden Cache-Treffer nach bestem Bemühen bereitgestellt. Benutzer erleben typischerweise Cache-Trefferquoten zwischen 30% und 98%, abhängig von ihren Verkehrsmustern.
Um die Wahrscheinlichkeit von Cache-Treffern in Ihren Batch-Anfragen zu maximieren:
cache_control-Blöcke in jede Message-Anfrage innerhalb Ihres Batches einBeispiel 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-sonnet-4-5",
"max_tokens": 1024,
"system": [
{
"type": "text",
"text": "Du bist ein KI-Assistent, der mit der Analyse literarischer Werke beauftragt ist. Dein Ziel ist es, aufschlussreiche Kommentare zu Themen, Charakteren und Schreibstil zu liefern.\n"
},
{
"type": "text",
"text": "<der gesamte Inhalt von Stolz und Vorurteil>",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [
{"role": "user", "content": "Analysiere die Hauptthemen in Stolz und Vorurteil."}
]
}
},
{
"custom_id": "my-second-request",
"params": {
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"system": [
{
"type": "text",
"text": "Du bist ein KI-Assistent, der mit der Analyse literarischer Werke beauftragt ist. Dein Ziel ist es, aufschlussreiche Kommentare zu Themen, Charakteren und Schreibstil zu liefern.\n"
},
{
"type": "text",
"text": "<der gesamte Inhalt von Stolz und Vorurteil>",
"cache_control": {"type": "ephemeral"}
}
],
"messages": [
{"role": "user", "content": "Schreibe eine Zusammenfassung von Stolz und Vorurteil."}
]
}
}
]
}'In diesem Beispiel enthalten beide Anfragen im Batch identische System-Nachrichten und den vollständigen Text von Stolz und Vorurteil, der mit cache_control markiert ist, um die Wahrscheinlichkeit von Cache-Treffern zu erhöhen.
Um das Beste aus der Batches API herauszuholen:
custom_id-Werte, um Ergebnisse einfach mit Anfragen zu verknüpfen, da die Reihenfolge nicht garantiert ist.Bei unerwartetem Verhalten:
request_too_large-Fehler.custom_id hat.created_at-Zeit (nicht der Verarbeitungs-ended_at-Zeit) vergangen sind. Wenn mehr als 29 Tage vergangen sind, sind die Ergebnisse nicht mehr einsehbar.Beachten Sie, dass das Fehlschlagen einer Anfrage in einem Batch die Verarbeitung anderer Anfragen nicht beeinflusst.
Workspace-Isolation: Batches sind innerhalb des Workspace isoliert, in dem sie erstellt wurden. Sie können nur von API-Schlüsseln aufgerufen werden, die mit diesem Workspace verbunden sind, oder von Benutzern mit der Berechtigung, Workspace-Batches in der Console anzuzeigen.
Ergebnisverfügbarkeit: Batch-Ergebnisse sind 29 Tage nach der Batch-Erstellung verfügbar und bieten ausreichend Zeit für Abruf und Verarbeitung.