Enhed 7 / 11

Batch- og asynkrone arbejdsbelastninger

Gevinster:

  • Bestemmer, hvilke arbejdsbelastninger batchbehandling er egnet til
  • Forstår afvejningen mellem omkostninger og ventetid mellem synkron, asynkron og batchbehandling
  • Designer et robust batch-workflow, der matcher custom_id til resultater

De fleste LLM-integrationer fokuserer på "live"-scenarier, hvor en bruger venter på et svar foran en skærm. Men størstedelen af ​​de professionelle arbejdsbelastninger er faktisk ikke live: tagging af tusindvis af dokumenter natten over, opsummering af et helt datasæt, klassificering af hele opkaldsoptagelser i arkivet. I disse spørgsmål forventer ingen et øjeblikkeligt svar; Det vigtige er at afslutte jobbet billigt og pålideligt. Batch er præcis til disse arbejdsbelastninger. I denne enhed lærer du forskellen mellem synkron, asynkron og batchbehandling, når batch er det rigtige valg, og et robust flow, der sikkert matcher custom_id og resultater.

Tre arbejdstilstande

tilstand

Hvordan virker det

forsinkelse

Typisk omkostning

passende job

synkron

Du laver en anmodning og venter på svaret

sekunder

Standard

Live chat, øjeblikkelig assistent

asynkron

Du sætter jobbet i kø og får besked, når det er færdigt.

Sekunder – minutter

Standard

Baggrundsopgaver, automatiseringstrin

Batch

Sender tusindvis af anmodninger i én pakke og får derefter resultaterne

Minutter-timer

Normalt nedsatte

Højvolumen, forsinkelsestolerante job

Batchbehandling er dette: du sender hundredvis/tusindvis af anmodninger som et enkelt "job" til udbyderen; Udbyderen behandler dem i sit eget tempo og returnerer alle resultater i bulk, når de er afsluttet. Til gengæld får du to ting: (1) generelt lavere enhedsomkostninger, (2) evnen til at flytte høj lydstyrke uden at skulle håndtere hastighedsgrænser. Prisen er, at resultaterne ikke kommer med det samme, men efter noget tid.

Hvornår skal jeg batchere, hvornår ikke?

Beslutningen kommer ned til et spørgsmål: Venter brugeren på resultatet nu?

  • Nej, jeg kan holde det → batch-kandidat. Nattagging, batch-resumé, arkivklassificering, databerigelse, evaluering (eval) eksekvering.
  • Ja, venter på skærmen → synkronisering. Live chat, øjeblikkelig rådgivning, hjælp når du udfylder formularer.
Tip: To tilstande kan eksistere side om side i det samme produkt. Brugeren arbejder synkront i live chat; Om natten giver du alle dagens samtaler til partiet til kvalitetsanalyse. At adskille "levende behov" fra "kollektive behov" er arkitekturens første beslutning.

Anatomi af robust batchflow

Den vigtigste tekniske regel for batchbehandling er resultatmatchning.

  1. Giv hver anmodning et unikt `custom_id`. Dette er dit genererede id, der identificerer anmodningen (f.eks. faktura-2026-07-18-000431).
  2. Send jobbet. Alle anmodninger går i én pakke; hver med sit eget custom_id.
  3. Undersøg situationen. Du beder om status med mellemrum, indtil jobbet er "færdigt".
  4. Match resultaterne med `custom_id`. Resultater kan returneres i en anden rækkefølge end indsendelsesrækkefølgen; så aldrig match efter position, men efter custom_id hvert resultat bærer.
  5. Tjek typen af ​​hvert resultat. En anmodning kan lykkes, en kan mislykkes, en kan udløbe. Proces baseret på succes/fiasko.

{ "requests": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Klassificer faktura. Returner kun JSON.", "messages": [{ "role"{}invoice": "user": "user": "user" }] } }, { "custom_id": "invoice-000432", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Klassificer faktura. Returner kun JSON.", "messages": [{ "role": "invoice"_user", }] } } ]}

Forsigtig: Matchende resultater baseret på indsendelsesordre er den største fejl i batching. Køen er ikke bevaret. Uden custom_id kan du ikke med sikkerhed vide, hvilket resultat der hører til hvilket dokument - forkert matching fører lydløst til forkerte data.

Kopierbare skabeloner

# custom_id genereringsregel (unik og sporbar)Format: <isture>-<dato>-<sekvens>. Eksempel: request-20260718-000431Regel: gentag aldrig i arbejdet; Integrer ressourcepost-id'et i det.

# Batchjobkort (planlægningsskabelon)Jobnavn: .............Antal poster: .............Model: ............. (simpelt job → hurtig model)Max_tokens pr. forespørgsel: .............Forventet leveringstidstolerance: ......... timer Resultatmatchnøgle: custom_idI tilfælde af fejl: prøv igen / kø / rapport

# Enkelt anmodningsprompt i batch (kort og skematisk) Klassificer dette dokument. Bare returner denne JSON og kommentere:{"category":"...","urgency":"low|medium|high"}Dokument: """{{document}}"""

# Resultatbehandling af pseudokode for hvert resultat: hvis result.status == "success": record = find(custom_id) save(record, result.output) ellers: add_to_fail(custom_id, result.error) # prøv så igen

Svag prompt / stærk prompt (batchjobdesign)

# SVAG (fragilt design)Send 10.000 dokumenter i rækkefølge med den stærke model, gem de returnerede resultater i den rækkefølge, de ankommer.

# STÆRK (holdbart design) Send 10.000 dokumenter i én batch med en hurtig model. Giv hvert dokument et unikt custom_id, der indeholder kildepost-id'et. Match resultaterne med custom_id; sæt de mislykkede i kø og prøv igen. Kør i natvinduet; Leveringstolerance 6 timer.

Kraftig version; Den foruddefinerer modelvalg, matchende nøgle, fejlhåndtering og timing. Dette er forskellen i sikker behandling af titusindvis af poster.

Tre mini etuier

Case 1 — Natmærkning. Et e-handelsteam ville sortere 200.000 produktanmeldelser i sentiment-tags. Live synkron streaming var underlagt hastighedsbegrænsninger og var dyrt. De bar arbejdet ud i natten som et parti med en hurtig model; Enhedsprisen faldt, hele sættet var klar om morgenen, og der var ingen problemer med fartgrænsen.

Sag 2 — Ordensforvirring. Et forskerhold abstraherede 5.000 artikler, men skrev resultaterne ind i filer i den rækkefølge, de ankom. Fordi resultaterne blev returneret i en anden rækkefølge, var cirka 900 af de 5.000 abstracts knyttet til den forkerte artikel. De omdannede det til custom_id; problemet løst, og denne oplevelse blev permanent regel: "Altid custom_id in batch."

Tilfælde 3 — Live standby i forkert tilstand. Et supportteam forsøgte at give batch de live-svar, som brugeren forventede på skærmen; Brugere forlod, fordi resultaterne ankom minutter senere. De flyttede live-jobbet tilbage til synkronisering, så kun den natlige kvalitetsanalyse blev tilbage i partiet. Lektion: batch er ikke til live standby.

Almindelige fejl

  • Matchende resultater efter position: Rækkefølgen er ikke bevaret; Brug custom_id.
  • Overførsel af levende job til batch: Brugeren kan ikke vente i minutter; batch er til forsinkelsestolerante job.
  • Håndterer ikke fejltilfælde: Nogle anmodninger kan returnere mislykkede/udløbne; Sæt den i en separat kø, og prøv igen.
  • Stærk modelbrugsrefleks i batch: Hurtig model + batch er den billigste kombination i simple opgaver.
  • Gør ikke custom_id sporbar: Hvis der ikke er indlejret en kildepost i ID'et, bliver det svært at linke resultatet tilbage.
  • Glemmer at undersøge situationen: Forventer resultater før jobbet er færdigt; Tjek færdiggørelsesstatus.

Dybere: Overvågning af batch og håndtering af delvise fejl

Det mest modne aspekt af batchbehandling er, at det kræver en anden tankegang end individuelle opkald: et batchjob er en "proces", ikke en "begivenhed". At antage, at titusindvis af anmodninger alle vil lykkes, er skrøbeligt; Realistisk design accepterer delvis fejl fra starten. Status for hvert resultat kan være forskellig: vellykket, mislykket (f.eks. ugyldig input), annulleret eller udløbet. Et robust flow behandler status for hvert resultat separat, mens det bevæger sig igennem det, sætter fejlene i en separat "genforsøgskø" og kører den kø separat.

Den anden praksis er at designe for idempotens (at at køre det samme job to gange ikke forårsager nogen skade). Hvis en batch afbrydes, og du genstarter den, bør du ikke genbehandle og skrive to gange de allerede behandlede poster. At binde custom_id til din kildepost virker også her: "er denne post allerede blevet behandlet?" før du gemmer resultatet. Kontrol forhindrer dobbelttastning.

Det tredje punkt er at forskyde livestreams med batch. Nogle opgaver har både live- og batchdimensioner: Når brugeren indlæser et dokument, giver du dem en hurtig foreløbig oversigt (synkront) og genbehandler det samme dokument til en dybere analyse om natten (batch). Bevidst adskillelse af de to tilstande optimerer både brugeroplevelsen og omkostningerne.

Endelig er batching også en måde at håndtere hastighedsgrænser på (enhed 8). Sending af høj volumen i levende synkron flow producerer konstant 429, mens afsendelse af samme volumen til batchoverførsler begrænser trykket til udbyderens egen planlægning og gør jobbet mere forudsigeligt.

Sammenfattende

Batchbehandling er generelt en billigere og mere robust tilstand til latencytolerante og store arbejdsbelastninger. Hans beslutning var "venter brugeren på resultatet nu?" afgør spørgsmålet. Den mest kritiske tekniske regel er at give hver anmodning et unikt custom_id, matche resultater efter ID i stedet for placering og behandle hvert resultats succes/fiasko separat.

Ansøgningsopgave

Vælg et stort job (f.eks. arkivklassificering). (1) Beslut, om dette arbejde er levende eller kollektivt, og retfærdiggør det. (2) Design et custom_id-format (inkluder ressourceposten). (3) Udfyld batchjobkortet (model, max_tokens, tolerance, fejlpolitik). (4) Skriv resultatbearbejdningspseudokoden for at inkludere mislykkede anmodninger.

tjekliste

  • [ ] Jeg kan skelne mellem synkrone, asynkrone og batch-tilstande på omkostning/forsinkelse-aksen.
  • [ ] Jeg kan afgøre, om et job er egnet til batch eller ej, ved at stille det rigtige spørgsmål.
  • [ ] Jeg giver hver anmodning et unikt custom_id og matcher resultaterne efter ID.
  • [ ] Jeg kan håndtere mislykkede/udløbne resultater separat.
  • [ ] Jeg kender fordelene ved at vælge en hurtig model i simple batchjobs.