Einheit 7 / 11

Batch- und asynchrone Workloads

Gewinne:

  • Bestimmt, für welche Workloads die Stapelverarbeitung geeignet ist
  • Versteht den Kosten-Latenz-Kompromiss zwischen synchroner, asynchroner und Stapelverarbeitung
  • Entwirft einen robusten Batch-Workflow, der die benutzerdefinierte_ID mit den Ergebnissen abgleicht

Die meisten LLM-Integrationen konzentrieren sich auf „Live“-Szenarien, in denen ein Benutzer vor einem Bildschirm auf eine Antwort wartet. Aber die meisten beruflichen Arbeitsaufgaben sind nicht wirklich live: Tausende von Dokumenten über Nacht markieren, einen gesamten Datensatz zusammenfassen, ganze Anrufaufzeichnungen im Archiv klassifizieren. In diesen Angelegenheiten erwartet niemand eine sofortige Antwort; Wichtig ist, die Arbeit kostengünstig und zuverlässig zu erledigen. Batch ist genau für diese Workloads geeignet. In dieser Einheit lernen Sie den Unterschied zwischen synchroner, asynchroner und Stapelverarbeitung kennen, wann Batch die richtige Wahl ist und ein robuster Ablauf, der custom_id und Ergebnisse zuverlässig abgleicht.

Drei Arbeitsmodi

Modus

Wie funktioniert es

Verzögerung

Typische Kosten

passender Job

synchron

Sie stellen eine Anfrage und warten auf die Antwort

Sekunden

Standard

Live-Chat, sofortiger Assistent

asynchron

Sie stellen den Auftrag in die Warteschlange und werden benachrichtigt, wenn er abgeschlossen ist.

Sekunden–Minuten

Standard

Hintergrundaufgaben, Automatisierungsschritte

Charge

Sendet Tausende von Anfragen in einem Paket und ruft dann die Ergebnisse ab

Minuten–Stunden

Normalerweise rabattiert

Hochvolumige, verzögerungstolerante Aufträge

Bei der Stapelverarbeitung handelt es sich um Folgendes: Sie senden Hunderte/Tausende von Anfragen als einen einzigen „Job“ an den Anbieter. Der Anbieter verarbeitet sie in seinem eigenen Tempo und sendet nach Abschluss alle Ergebnisse in großen Mengen zurück. Im Gegenzug erhalten Sie zwei Dinge: (1) im Allgemeinen niedrigere Stückkosten, (2) die Möglichkeit, große Mengen zu bewegen, ohne sich mit Geschwindigkeitsbegrenzungen auseinandersetzen zu müssen. Der Preis ist, dass die Ergebnisse nicht sofort, sondern erst nach einiger Zeit eintreten.

Wann sollte man stapeln, wann nicht?

Die Entscheidung läuft auf eine Frage hinaus: Wartet der Benutzer jetzt auf das Ergebnis?

  • Nein, ich kann es halten → Batch-Kandidat. Nachtkennzeichnung, Stapelzusammenfassung, Archivklassifizierung, Datenanreicherung, Auswertung (Evaluierung).
  • Ja, warten auf dem Bildschirm → Synchronisierung. Live-Chat, sofortige Beratung, Hilfe beim Ausfüllen von Formularen.
Tipp: Im selben Produkt können zwei Modi gleichzeitig vorhanden sein. Benutzer arbeitet synchron im Live-Chat; Nachts geben Sie alle Gespräche des Tages zur Qualitätsanalyse an die Gruppe weiter. Die Trennung von „Lebensbedürfnis“ und „Kollektivbedürfnis“ ist die erste Entscheidung der Architektur.

Anatomie eines robusten Batch-Flows

Die wichtigste technische Regel der Stapelverarbeitung ist der Ergebnisabgleich.

  1. Geben Sie jeder Anfrage eine eindeutige „custom_id“. Dies ist Ihre generierte ID, die die Anfrage identifiziert (z. B. Rechnung-2026-07-18-000431).
  2. Senden Sie den Job. Alle Anfragen werden in einem Paket zusammengefasst. jedes mit seiner eigenen benutzerdefinierten_ID.
  3. Befragen Sie die Situation. Sie fragen in regelmäßigen Abständen nach dem Status, bis die Arbeit „erledigt“ ist.
  4. Ordnen Sie die Ergebnisse der „custom_id“ zu. Die Ergebnisse können in einer anderen Reihenfolge als der Einreichungsreihenfolge zurückgegeben werden. Passen Sie also niemals nach der Position an, sondern nach der benutzerdefinierten ID, die jedes Ergebnis trägt.
  5. Überprüfen Sie den Typ jedes Ergebnisses. Eine Anfrage könnte erfolgreich sein, eine andere könnte fehlschlagen, eine andere könnte ablaufen. Prozess basierend auf Erfolg/Misserfolg.

{ "requests": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Rechnung klassifizieren. Nur JSON zurückgeben.", "messages": [{ "role": "user", "content": "{{invoice_text}}" }] } }, { „custom_id“: „invoice-000432“, „params“: { „model“: „claude-haiku-4-5“, „max_tokens“: 128, „system“: „Rechnung klassifizieren. Nur JSON zurückgeben.“, „messages“: [{ „role“: „user“, „content“: „{{invoice_text_2}}“ }] } } ]}

Achtung: Das Abgleichen von Ergebnissen basierend auf der Übermittlungsreihenfolge ist der häufigste Fehler bei der Stapelverarbeitung. Die Warteschlange bleibt nicht erhalten. Ohne „custom_id“ können Sie nicht sicher wissen, welches Ergebnis zu welchem ​​Dokument gehört – ein falscher Abgleich führt stillschweigend zu falschen Daten.

Kopierbare Vorlagen

# benutzerdefinierte_ID-Generierungsregel (eindeutig und nachverfolgbar)Format: <isture>-<date>-<sequence>. Beispiel: request-20260718-000431Regel: Niemals in der Arbeit wiederholen; Betten Sie die Ressourceneintrags-ID darin ein.

# Stapelauftragskarte (Planungsvorlage)Auftragsname: .............Anzahl der Datensätze: .............Modell: ............. (einfacher Auftrag → schnelles Modell)Max_tokens pro Anfrage: .............Erwartete Lieferzeittoleranz: ......... StundenErgebnisübereinstimmungsschlüssel: custom_idIm Fehlerfall: erneut versuchen / in die Warteschlange stellen / melden

# Einzelne Anforderungsaufforderung im Stapel (kurz und schematisch)Klassifizieren Sie dieses Dokument. Geben Sie einfach diesen JSON-Code zurück und kommentieren Sie:{"category":"...","urgency="low|medium|high"}Document: """{{document}}"""

# Pseudocode zur Ergebnisverarbeitung für jedes Ergebnis: if result.status == "success": record = find(custom_id) save(record, result.output) andernfalls: add_to_fail(custom_id, result.error) # dann erneut versuchen

Schwache Eingabeaufforderung / Starke Eingabeaufforderung (Batch-Job-Design)

# SCHWACH (fragiles Design) Senden Sie 10.000 Dokumente der Reihe nach mit dem starken Modell und speichern Sie die zurückgegebenen Ergebnisse in der Reihenfolge, in der sie eintreffen.

# STARK (robustes Design) Senden Sie 10.000 Dokumente in einem Stapel mit einem schnellen Modell. Geben Sie jedem Dokument eine eindeutige „custom_id“, die die Quelldatensatz-ID enthält. Ordnen Sie die Ergebnisse der benutzerdefinierten_ID zu. Stellen Sie die fehlgeschlagenen in die Warteschlange und versuchen Sie es erneut. Im Nachtfenster ausführen; Lieferungstoleranz 6 Stunden.

Leistungsstarke Version; Es definiert die Modellauswahl, den passenden Schlüssel, die Fehlerbehandlung und das Timing vor. Das ist der Unterschied bei der sicheren Verarbeitung Zehntausender Datensätze.

Drei Mini-Hüllen

Fall 1 – Tagging bei Nacht. Ein E-Commerce-Team würde 200.000 Produktbewertungen in Sentiment-Tags sortieren. Für synchrones Live-Streaming galten Geschwindigkeitsbegrenzungen und es war kostspielig. Sie trugen die Arbeit als Charge mit einem schnellen Modell bis in die Nacht hinein; Die Stückkosten sanken, das gesamte Set war am Morgen fertig und es gab keine Probleme mit der Geschwindigkeitsbegrenzung.

Fall 2 – Verwirrung bei der Bestellung. Ein Forschungsteam fasste 5.000 Artikel zusammen, schrieb die Ergebnisse jedoch in der Reihenfolge, in der sie eintrafen, in Dateien. Da die Ergebnisse in einer anderen Reihenfolge zurückgegeben wurden, waren etwa 900 der 5.000 Abstracts mit dem falschen Artikel verlinkt. Sie haben es auf „custom_id“ umgestellt; Problem gelöst und diese Erfahrung wurde zur dauerhaften Regel: „Immer benutzerdefinierte_ID im Batch.“

Fall 3 – Live-Standby im falschen Modus. Ein Support-Team hat versucht, stapelweise die Live-Antworten zu geben, die der Benutzer auf dem Bildschirm erwartet hatte. Benutzer brachen ab, weil die Ergebnisse Minuten später eintrafen. Sie haben den Live-Job wieder in die Synchronisierung verschoben und nur die nächtliche Qualitätsanalyse im Stapel belassen. Lektion: Batch ist nicht für Live-Standby geeignet.

Häufige Fehler

  • Übereinstimmungsergebnisse nach Position: Reihenfolge wird nicht beibehalten; Verwenden Sie „custom_id“.
  • Live-Job an Batch übertragen: Der Benutzer kann nicht mehrere Minuten warten; Batch ist für verzögerungstolerante Jobs.
  • Fehlerfälle werden nicht behandelt: Einige Anfragen geben möglicherweise „fehlgeschlagen/abgelaufen“ zurück. Stellen Sie es in eine separate Warteschlange und versuchen Sie es erneut.
  • Starker Modellnutzungsreflex im Batch: Schnelles Modell + Batch ist die günstigste Kombination bei einfachen Jobs.
  • Custom_id nicht nachverfolgbar machen: Wenn kein Quelldatensatz in die ID eingebettet ist, wird es schwierig, das Ergebnis zurückzuverknüpfen.
  • Vergessen, die Situation zu untersuchen: Ergebnisse erwarten, bevor die Arbeit abgeschlossen ist; Überprüfen Sie den Abschlussstatus.

Tiefer: Überwachung von Chargen und Verwaltung von Teilfehlern

Der ausgereifteste Aspekt der Stapelverarbeitung besteht darin, dass sie eine andere Denkweise erfordert als einzelne Aufrufe: Ein Stapelauftrag ist ein „Prozess“, kein „Ereignis“. Die Annahme, dass Zehntausende von Anfragen alle erfolgreich sein werden, ist fragil. Ein realistisches Design nimmt von Anfang an einen teilweisen Misserfolg in Kauf. Der Status jedes Ergebnisses kann unterschiedlich sein: erfolgreich, fehlgeschlagen (z. B. ungültige Eingabe), abgebrochen oder abgelaufen. Ein robuster Fluss verarbeitet den Status jedes Ergebnisses separat, während er es durchläuft, stellt die Fehler in eine separate „Wiederholungswarteschlange“ und führt diese Warteschlange separat aus.

Die zweite Vorgehensweise besteht darin, auf Idempotenz zu entwerfen (dass die doppelte Ausführung desselben Jobs keinen Schaden anrichtet). Wenn ein Stapel unterbrochen wird und Sie ihn neu starten, sollten Sie die bereits verarbeiteten Datensätze nicht erneut verarbeiten und doppelt schreiben. Das Binden der „custom_id“ an Ihren Quelldatensatz funktioniert auch hier: „Wurde dieser Datensatz bereits verarbeitet?“ bevor Sie das Ergebnis speichern. Die Überprüfung verhindert Doppeleingaben.

Der dritte Punkt besteht darin, Livestreams mit Batch zu versetzen. Einige Jobs haben sowohl Live- als auch Batch-Dimensionen: Wenn der Benutzer ein Dokument lädt, geben Sie ihm eine kurze vorläufige Zusammenfassung (synchron) und verarbeiten dasselbe Dokument nachts für eine tiefere Analyse erneut (Batch). Die bewusste Trennung der beiden Modi optimiert sowohl das Benutzererlebnis als auch die Kosten.

Schließlich ist die Stapelung auch eine Möglichkeit, mit Geschwindigkeitsbegrenzungen umzugehen (Einheit 8). Das Senden eines hohen Volumens im synchronen Live-Fluss erzeugt eine konstante 429, während das Senden des gleichen Volumens an Batch-Transfers den Druck auf die eigene Planung des Anbieters begrenzt und den Job vorhersehbarer macht.

Zusammenfassend

Die Stapelverarbeitung ist im Allgemeinen ein kostengünstigerer und robusterer Modus für latenztolerante und hochvolumige Arbeitslasten. Seine Entscheidung war: „Wartet der Benutzer jetzt auf das Ergebnis?“ bestimmt die Frage. Die wichtigste technische Regel besteht darin, jeder Anfrage eine eindeutige benutzerdefinierte_ID zu geben, die Ergebnisse nach ID und nicht nach Standort abzugleichen und den Erfolg/Misserfolg jedes Ergebnisses separat zu behandeln.

Anwendungsaufgabe

Wählen Sie einen Auftrag mit hohem Volumen (z. B. Archivklassifizierung). (1) Entscheiden Sie, ob diese Arbeit live oder kollektiv ist, und begründen Sie dies. (2) Entwerfen Sie ein benutzerdefiniertes_ID-Format (einschließlich des Ressourcendatensatzes). (3) Füllen Sie die Batch-Jobkarte aus (Modell, max_tokens, Toleranz, Fehlerrichtlinie). (4) Schreiben Sie den Pseudocode für die Ergebnisverarbeitung, um fehlgeschlagene Anforderungen einzuschließen.

Checkliste

  • [ ] Ich kann synchrone, asynchrone und Batch-Modi auf der Kosten-/Verzögerungsachse unterscheiden.
  • [ ] Ich kann entscheiden, ob ein Job für Batch geeignet ist oder nicht, indem ich die richtige Frage stelle.
  • [ ] Ich gebe jeder Anfrage eine eindeutige benutzerdefinierte_ID und ordne die Ergebnisse anhand der ID zu.
  • [ ] Ich kann fehlgeschlagene/abgelaufene Ergebnisse separat behandeln.
  • [ ] Ich kenne die Vorteile der Auswahl eines schnellen Modells bei einfachen Batch-Jobs.