Unitate 7 / 11

Sarcini de lucru batch și asincrone

Câștiguri:

  • Determină pentru ce încărcături de lucru este potrivită procesarea în lot
  • Înțelege compromisul cost/latență între procesarea sincronă, asincronă și în loturi
  • Proiectează un flux de lucru solid, care potrivește custom_id cu rezultatele

Majoritatea integrărilor LLM se concentrează pe scenarii „în direct” în care un utilizator așteaptă un răspuns în fața unui ecran. Dar majoritatea sarcinilor de lucru profesionale nu sunt de fapt live: etichetarea a mii de documente peste noapte, rezumarea unui întreg set de date, clasificarea întregii înregistrări de apeluri în arhivă. În aceste chestiuni, nimeni nu așteaptă un răspuns instantaneu; Important este să terminați treaba ieftin și fiabil. Lotul este exact pentru aceste sarcini de lucru. În această unitate, veți învăța diferența dintre procesarea sincronă, asincronă și batch, atunci când batch este alegerea potrivită și un flux robust care se potrivește cu încredere custom_id și rezultate.

Trei moduri de lucru

modul

Cum funcționează

întârziere

Costul tipic

loc de muncă potrivit

sincron

Faceți o cerere și așteptați răspunsul

secunde

Standard

Chat live, asistent instant

asincron

Puneți în coadă lucrarea și primiți o notificare când este terminată.

Secunde – minute

Standard

Sarcini de fundal, pași de automatizare

lot

Trimite mii de solicitări într-un singur pachet, apoi obține rezultatele

Minute – ore

De obicei reduse

Lucrări de volum mare, tolerante la întârziere

Procesarea în lot este aceasta: trimiteți sute/mii de solicitări ca un singur „job” către furnizor; Furnizorul le procesează în propriul ritm și returnează toate rezultatele în bloc odată ce sunt finalizate. În schimb, obțineți două lucruri: (1) cost unitar în general mai mic, (2) capacitatea de a muta volum mare fără a fi nevoit să faceți față limitelor de viteză. Prețul este că rezultatele nu vin instantaneu, ci după ceva timp.

Când să grupați, când nu?

Decizia se rezumă la o întrebare: utilizatorul așteaptă acum rezultatul?

  • Nu, îl pot ține → lot candidat. Etichetarea nocturnă, rezumarea loturilor, clasificarea arhivei, îmbogățirea datelor, execuția evaluării (evalării).
  • Da, în așteptare pe ecran → sincronizare. Chat live, sfaturi instantanee, ajutor la completarea formularelor.
Sfat: Două moduri pot coexista în același produs. Utilizatorul lucrează sincron în chat live; Noaptea, dai toate conversațiile din ziua respectivă lotului pentru analiza calității. Separarea „nevoie vie” de „nevoie colectivă” este prima decizie a arhitecturii.

Anatomia fluxului de lot robust

Cea mai importantă regulă tehnică a procesării loturilor este potrivirea rezultatelor.

  1. Dați fiecărei solicitări un „custom_id” unic. Acesta este ID-ul generat de dvs. care identifică solicitarea (de exemplu, invoice-2026-07-18-000431).
  2. Trimiteți jobul. Toate cererile merg într-un singur pachet; fiecare cu propriul custom_id.
  3. Sondați situația. Cereți statutul la intervale până când treaba este „terminată”.
  4. Potriviți rezultatele cu „custom_id”. Rezultatele pot fi returnate într-o ordine diferită de cea de trimitere; deci nu se potrivește niciodată după poziție, ci după custom_id-ul pe care îl poartă fiecare rezultat.
  5. Verificați tipul fiecărui rezultat. O solicitare poate reuși, una ar putea eșua, una ar putea expira. Proces bazat pe succes/eșec.

{ "requests": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Clasificați factura. Returnați numai JSON.", "messages": [{ "rol": ", "{}": "text:"{} }] } }, { "custom_id": "invoice-000432", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Clasificați factura. Returnați numai JSON.", "messages": [{ "rol": "rol": ""_,"{invoice:"_,{invoice:" }] } } ]}

Atenție: potrivirea rezultatelor pe baza ordinii de trimitere este greșeala numărul unu în lot. Coada nu este păstrată. Fără custom_id nu puteți ști cu încredere ce rezultat aparține aceluiași document - potrivirea greșită duce în tăcere la date greșite.

Șabloane copiabile

# regulă de generare a ID-ului personalizat (unic și urmăribil)Format: <isture>-<date>-<secvence>. Exemplu: cerere-20260718-000431Regulă: nu repeta niciodată în muncă; Încorporați ID-ul înregistrării resursei în el.

# Fișă de job lot (șablon de programare) Nume job: .............Număr de înregistrări: .............Model: ............. (lucrări simple → model rapid)Max_tokens per solicitare: .............Toleranță pentru timpul de livrare așteptat: ......... ore Cheie de potrivire a rezultatelor: custom_idÎn caz de eroare: reîncercați / coadă / raport

# Solicitare unică în lot (scurt și schematic) Clasificați acest document. Doar returnați acest JSON, comentând:{"category":"...","urgency":"low|medium|high"}Document: """{{document}}"""

# Procesarea rezultatelor pseudo-cod pentru fiecare rezultat: if result.status == „success”: record = find(custom_id) save(record, result.output) altfel: add_to_fail(custom_id, result.error) # apoi încercați din nou

Prompt slab/Prompt puternic (proiectare lot)

# WEAK (design fragil) Trimiteți 10.000 de documente în ordine cu modelul puternic, salvați rezultatele returnate în ordinea în care sosesc.

# PUTERNIC (design durabil) Trimiteți 10.000 de documente într-un singur lot cu un model rapid. Dați fiecărui document un custom_id unic care conține ID-ul înregistrării sursă. Potriviți rezultatele cu custom_id; puneți-le la coadă pe cele eșuate și încercați din nou. Rulați în fereastra de noapte; Toleranta de livrare 6 ore.

Versiune puternică; Pre-definește selecția modelului, cheia de potrivire, gestionarea erorilor și sincronizarea. Aceasta este diferența în procesarea în siguranță a zeci de mii de înregistrări.

Trei mini carcase

Cazul 1 — Etichetarea nocturnă. O echipă de comerț electronic ar sorta 200.000 de recenzii ale produselor în etichete de sentiment. Streamingul sincron live era supus limitelor de viteză și era costisitor. Au dus munca în noapte ca un lot cu un model rapid; Costul unitar a scăzut, întregul set a fost gata dimineața și nu au fost probleme cu limita de viteză.

Cazul 2 — Confuzia de ordine. O echipă de cercetare a extras 5.000 de articole, dar a scris rezultatele în fișiere în ordinea în care au ajuns. Deoarece rezultatele au fost returnate într-o ordine diferită, aproximativ 900 din cele 5.000 de rezumate au fost legate de articolul greșit. L-au remapat la custom_id; problema a fost rezolvată și această experiență a devenit o regulă permanentă: „Întotdeauna custom_id în lot”.

Cazul 3 — Standby live în modul greșit. O echipă de asistență a încercat să ofere lotului răspunsurile în direct așteptate de utilizator pe ecran; Utilizatorii au abandonat deoarece rezultatele au ajuns câteva minute mai târziu. Au mutat lucrarea live înapoi la sincronizare, lăsând doar analiza calității nocturne în lot. Lecție: lotul nu este pentru standby live.

Greșeli comune

  • Potrivirea rezultatelor în funcție de poziție: Ordinea nu este păstrată; Folosiți custom_id.
  • Transferarea lucrării live în lot: utilizatorul nu poate aștepta minute; lotul este pentru lucrări tolerante la întârziere.
  • Nu se gestionează cazurile de eroare: unele solicitări pot returna eșuate/expirate; Puneți-l într-o coadă separată și încercați din nou.
  • Reflex puternic de utilizare a modelului în lot: model rapid + lot este cea mai ieftină combinație în lucrări simple.
  • Nu se face trasabil custom_id: Dacă nu este încorporată nicio înregistrare sursă în ID, devine dificil să legați rezultatul înapoi.
  • Uitarea de a examina situația: așteptarea rezultatelor înainte ca munca să fie terminată; Verificați starea de finalizare.

Mai profund: monitorizarea lotului și gestionarea defecțiunilor parțiale

Cel mai matur aspect al procesării în lot este că necesită o mentalitate diferită de apelurile individuale: un job în lot este un „proces”, nu un „eveniment”. Presupunând că zeci de mii de cereri vor reuși toate este fragilă; Designul realist acceptă defecțiunile parțiale de la început. Starea fiecărui rezultat poate fi diferită: reușit, eșuat (de exemplu, intrare invalidă), anulat sau expirat. Un flux robust procesează starea fiecărui rezultat separat pe măsură ce trece prin el, plasează eșecurile într-o „coadă de reîncercări” separată și rulează acea coadă separat.

A doua practică este de a proiecta pentru idempotence (că executarea aceleiași lucrări de două ori nu provoacă niciun rău). Dacă un lot este întrerupt și îl reporniți, nu trebuie să reprocesați și să scrieți de două ori înregistrările deja procesate. Legarea custom_id-ului la înregistrarea sursă funcționează și aici: „a fost deja procesată această înregistrare?” înainte de a salva rezultatul. Verificarea previne dubla tastare.

Al treilea punct este eșalonarea fluxurilor live cu lot. Unele lucrări au atât dimensiuni live, cât și în lot: atunci când utilizatorul încarcă un document, le oferiți un rezumat preliminar rapid (sincron) și reprocesați același document pentru o analiză mai profundă noaptea (loc). Separarea în mod conștient a celor două moduri optimizează atât experiența utilizatorului, cât și costul.

În cele din urmă, lotizarea este, de asemenea, o modalitate de a face față limitelor de viteză (unitatea 8). Trimiterea unui volum mare în flux sincron live produce 429 constantă, în timp ce trimiterea aceluiași volum la transferuri în loturi limitează presiunea asupra programării proprii a furnizorului și face munca mai previzibilă.

În concluzie

Procesarea în loturi este, în general, un mod mai ieftin și mai robust pentru sarcinile de lucru tolerante la latență și cu volum mare. Decizia lui a fost „utilizatorul așteaptă acum rezultatul?” determină întrebarea. Cea mai importantă regulă tehnică este de a acorda fiecărei solicitări un custom_id unic, de a potrivi rezultatele după ID și nu de locație și de a trata succesul/eșecul fiecărui rezultat separat.

Sarcina de aplicare

Alegeți o lucrare cu volum mare (de exemplu, clasificarea arhivei). (1) Decide dacă această lucrare este reală sau colectivă și justifică-l. (2) Proiectați un format custom_id (includeți înregistrarea resursei). (3) Completați cardul de lucru pe lot (model, max_tokens, toleranță, politică de eroare). (4) Scrieți pseudocodul de procesare a rezultatului pentru a include cererile eșuate.

lista de verificare

  • [ ] Pot distinge modurile sincrone, asincrone și batch pe axa cost/întârziere.
  • [ ] Pot decide dacă un job este potrivit pentru lot sau nu punând întrebarea corectă.
  • [ ] Dau fiecărei solicitări un custom_id unic și potrivesc rezultatele după ID.
  • [ ] Pot gestiona separat rezultatele eșuate/expirate.
  • [ ] Cunosc beneficiile alegerii unui model rapid în lucrări de lot simple.