Die Stapelverarbeitung ist ein leistungsstarker Ansatz zur effizienten Verarbeitung großer Anfragemengen. Anstatt Anfragen einzeln mit sofortigen Antworten zu verarbeiten, ermöglicht die Stapelverarbeitung die gemeinsame Einreichung mehrerer Anfragen zur asynchronen Verarbeitung. Dieses Muster ist besonders nützlich, wenn:
Die Message Batches API ist Anthropics erste Implementierung dieses Musters.
This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.
Die Message Batches API ist eine leistungsstarke, kostengünstige 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 und dabei 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 Massenoperationen, die keine sofortigen Ergebnisse erfordern, wie z. B.:
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. Dazu gehören:
Da jede Anfrage im Batch unabhängig verarbeitet wird, können Sie verschiedene Arten von Anfragen innerhalb eines einzelnen Batches mischen.
Da die Verarbeitung von Batches länger als 5 Minuten dauern kann, sollten Sie die 1-Stunden-Cache-Dauer mit Prompt-Caching für bessere Cache-Trefferquoten bei der Verarbeitung von Batches mit gemeinsamem Kontext verwenden.
Die Batches API bietet erhebliche Kosteneinsparungen. Die gesamte Nutzung wird zu 50 % der Standard-API-Preise berechnet.
| Model | Batch input | Batch output |
|---|---|---|
| Claude Opus 4.6 | $2.50 / MTok | $12.50 / MTok |
| 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.6 | $1.50 / MTok | $7.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 Struktur 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-opus-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hello, world"}
]
}
},
{
"custom_id": "my-second-request",
"params": {
"model": "claude-opus-4-6",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Hi again, friend"}
]
}
}
]
}'In diesem Beispiel werden zwei separate Anfragen zur asynchronen 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 abgeschlossen ist. Sie können sicherstellen, dass Sie Ihre Eingabe korrekt aufbauen, indem Sie Ihre Anfragestruktur zuerst mit der Messages API überprüfen.
Wenn ein Batch erstmals erstellt wird, hat die Antwort den Verarbeitungsstatus 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 Feld processing_status des Message Batch gibt die Verarbeitungsphase des Batches an. Es beginnt als in_progress und wird dann zu ended aktualisiert, sobald alle Anfragen im Batch die Verarbeitung abgeschlossen haben und die Ergebnisse bereit sind. Sie können den Status Ihres Batches überwachen, indem Sie die Konsole besuchen oder den Abruf-Endpunkt verwenden.
Um einen Message Batch abzufragen, benötigen Sie seine id, die in der Antwort beim Erstellen eines Batches oder beim Auflisten von Batches angegeben wird. Sie können eine Abfrageschleife implementieren, die den Batch-Status regelmäßig überprüft, bis die Verarbeitung abgeschlossen ist:
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)Sie können alle Message Batches in Ihrem Workspace mit dem Listenendpunkt auflisten. Die API unterstützt Paginierung und ruft bei Bedarf automatisch weitere Seiten ab:
import anthropic
client = anthropic.Anthropic()
# Ruft bei Bedarf automatisch weitere Seiten ab.
for message_batch in client.messages.batches.list(limit=20):
print(message_batch)Sobald die Batch-Verarbeitung abgeschlossen ist, hat jede Messages-Anfrage im Batch ein Ergebnis. Es gibt 4 Ergebnistypen:
| Ergebnistyp | Beschreibung |
|---|---|
succeeded | Anfrage war erfolgreich. Enthält das Nachrichtenergebnis. |
errored | Bei der Anfrage ist ein Fehler aufgetreten und eine Nachricht wurde nicht erstellt. Mögliche Fehler umfassen ungültige Anfragen und interne Serverfehler. Für diese Anfragen werden Ihnen keine Kosten berechnet. |
canceled | Der Benutzer hat den Batch abgebrochen, bevor diese Anfrage an das Modell gesendet werden konnte. Für diese Anfragen werden Ihnen keine Kosten berechnet. |
expired | Der Batch hat seine 24-Stunden-Ablaufzeit erreicht, bevor diese Anfrage an das Modell gesendet werden konnte. Für diese Anfragen werden Ihnen keine Kosten berechnet. |
Sie sehen eine Übersicht Ihrer Ergebnisse mit den request_counts des Batches, die zeigen, wie viele Anfragen jeden dieser vier Zustände erreicht haben.
Die Ergebnisse des Batches stehen zum Download unter der results_url-Eigenschaft des Message Batch zur Verfügung und, wenn die Organisationsberechtigung es erlaubt, in der Konsole. Aufgrund der potenziell großen Größe der Ergebnisse wird empfohlen, die 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 liegen im .jsonl-Format vor, 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 Beispielsatz von Ergebnissen:
{"custom_id":"my-second-request","result":{"type":"succeeded","message":{"id":"msg_014VwiXbi91y3JMjcpyGBHX5","type":"message","role":"assistant","model":"claude-opus-4-6","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-6","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 enthält, wird result.error auf die standardmäßige Fehlerform gesetzt.
Batch-Ergebnisse stimmen möglicherweise nicht mit der Eingabereihenfolge überein
Batch-Ergebnisse können in beliebiger Reihenfolge zurückgegeben werden und stimmen möglicherweise nicht mit der Reihenfolge der Anfragen bei der Batch-Erstellung überein. Im obigen Beispiel wird das Ergebnis der zweiten Batch-Anfrage vor dem ersten zurückgegeben. Um Ergebnisse korrekt mit ihren entsprechenden Anfragen abzugleichen, verwenden Sie immer das Feld custom_id.
Sie können einen Message Batch, der gerade verarbeitet wird, mit dem Abbruch-Endpunkt abbrechen. Unmittelbar nach dem Abbruch hat der processing_status eines Batches den Wert canceling. Sie können die oben beschriebene Abfragetechnik verwenden, um zu warten, bis der Abbruch abgeschlossen ist. Abgebrochene Batches enden mit dem Status ended und können Teilergebnisse für Anfragen enthalten, die vor dem Abbruch verarbeitet wurden.
import anthropic
client = anthropic.Anthropic()
message_batch = client.messages.batches.cancel(
MESSAGE_BATCH_ID,
)
print(message_batch)Die Antwort zeigt den Batch im Status canceling:
{
"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
}Die Message Batches API unterstützt Prompt-Caching, wodurch Sie potenziell Kosten und Verarbeitungszeit für Batch-Anfragen reduzieren können. Die Preisnachlässe durch 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-Trefferquoten zwischen 30 % und 98 %, abhängig von ihren Traffic-Mustern.
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-opus-4-6",
"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-6",
"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 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 leicht mit Anfragen abzugleichen, da die Reihenfolge nicht garantiert ist.Bei unerwartetem Verhalten:
request_too_large-Fehler.custom_id hat.created_at-Zeitpunkt des Batches (nicht dem ended_at-Zeitpunkt der Verarbeitung) weniger als 29 Tage 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 beeinträchtigt.
Workspace-Isolierung: Batches sind innerhalb des Workspace isoliert, in dem sie erstellt wurden. Sie können nur von API-Schlüsseln zugegriffen werden, die mit diesem Workspace verknüpft sind, oder von Benutzern mit der Berechtigung, Workspace-Batches in der Console anzuzeigen.
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.
Die Batch-Verarbeitung speichert Anfrage- und Antwortdaten bis zu 29 Tage nach der Batch-Erstellung. Sie können einen Message-Batch jederzeit nach der Verarbeitung mit dem Endpunkt DELETE /v1/messages/batches/{batch_id} löschen. Die asynchrone Verarbeitung erfordert eine serverseitige Speicherung sowohl der Eingaben als auch der Ausgaben bis zum Abschluss des Batches und dem Abruf der Ergebnisse.
Informationen zur ZDR-Berechtigung für alle Funktionen finden Sie unter API und Datenspeicherung.
Was this page helpful?