Enota 7 / 11

Paketne in asinhrone delovne obremenitve

Dobički:

  • Določa, za katere delovne obremenitve je primerna paketna obdelava
  • Razume razmerje med stroški in zakasnitvami med sinhrono, asinhrono in paketno obdelavo
  • Oblikuje robusten paketni potek dela, ki se ujema z custom_id in rezultati

Večina integracij LLM se osredotoča na scenarije »v živo«, kjer uporabnik čaka na odgovor pred zaslonom. Toda večina poklicnih delovnih obremenitev dejansko ni v živo: označevanje na tisoče dokumentov čez noč, povzemanje celotnega nabora podatkov, razvrščanje celotnih posnetkov klicev v arhiv. V teh zadevah nihče ne pričakuje takojšnjega odgovora; Pomembno je, da delo opravite poceni in zanesljivo. Serija je točno za te obremenitve. V tej enoti se boste naučili razlike med sinhrono, asinhrono in paketno obdelavo, kdaj je serija prava izbira, in robusten tok, ki se zanesljivo ujema z custom_id in rezultati.

Trije načini dela

način

Kako deluje

zamuda

Tipični stroški

primerno službo

sinhrono

Naredite zahtevo in počakate na odgovor

sekund

Standardno

Klepet v živo, takojšen pomočnik

asinhroni

Opravilo postavite v čakalno vrsto in prejmete obvestilo, ko je končano.

Sekunde – minute

Standardno

Naloge v ozadju, koraki avtomatizacije

Serija

Pošlje na tisoče zahtevkov v enem paketu, nato pa dobi rezultate

Minute–ure

Običajno znižano

Opravila z velikim obsegom, tolerantna na zamude

Paketna obdelava je naslednja: ponudniku pošljete na stotine/tisoč zahtevkov kot eno "opravilo"; Ponudnik jih obdela v svojem tempu in vrne vse rezultate v velikem obsegu, ko so dokončani. V zameno dobite dve stvari: (1) na splošno nižjo ceno na enoto, (2) možnost premikanja velikih količin, ne da bi se morali ukvarjati z omejitvami hitrosti. Cena je v tem, da rezultati ne pridejo takoj, ampak čez nekaj časa.

Kdaj serijsko, kdaj ne?

Odločitev se zmanjša na eno vprašanje: ali uporabnik zdaj čaka na rezultat?

  • Ne, lahko zadržim → serijski kandidat. Nočno označevanje, paketno seštevanje, arhivska klasifikacija, obogatitev podatkov, izvedba vrednotenja (eval).
  • Da, čakam na zaslonu → sinhronizacija. Klepet v živo, takojšnje svetovanje, pomoč pri izpolnjevanju obrazcev.
Nasvet: v istem izdelku lahko obstajata dva načina. Uporabnik deluje sinhrono v klepetu v živo; Ponoči daste vse pogovore tistega dne v skupino za kakovostno analizo. Ločevanje "živih potreb" od "kolektivnih potreb" je prva odločitev arhitekture.

Anatomija robustnega šaržnega toka

Najpomembnejše tehnično pravilo paketne obdelave je ujemanje rezultatov.

  1. Vsaki zahtevi dodelite edinstven `custom_id`. To je vaš ustvarjeni ID, ki identificira zahtevo (npr. račun-2026-07-18-000431).
  2. Oddajte delo. Vse zahteve so v enem paketu; vsak s svojim custom_id.
  3. Anketa o situaciji. V intervalih sprašujete za status, dokler delo ni "končano".
  4. Ujemite rezultate z `custom_id`. Rezultati se lahko vrnejo v drugačnem vrstnem redu kot v vrstnem redu oddaje; zato se nikoli ne ujemajte po položaju, temveč po meri_id, ki ga nosi vsak rezultat.
  5. Preverite vrsto vsakega rezultata. Ena zahteva je lahko uspešna, ena morda neuspešna, ena lahko poteče. Proces, ki temelji na uspehu/neuspehu.

{ "zahteve": [ { "custom_id": "invoice-000431", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Razvrsti račun. Vrni samo JSON.", "messages": [{ "role": "user", "content": "{{invoice_text}}" }] } }, { "custom_id": "invoice-000432", "params": { "model": "claude-haiku-4-5", "max_tokens": 128, "system": "Razvrsti račun. Vrni samo JSON.", "messages": [{ "role": "user", "content": "{{invoice_text_2}}" }] } } ]}

Pozor: Ujemanje rezultatov na podlagi vrstnega reda oddaje je napaka številka ena pri seriiranju. Čakalna vrsta ni ohranjena. Brez custom_id ne morete z gotovostjo vedeti, kateri rezultat pripada kateremu dokumentu – napačno ujemanje tiho vodi do napačnih podatkov.

Predloge, ki jih je mogoče kopirati

# pravilo za ustvarjanje custom_id (edinstveno in sledljivo) Oblika: <isture>-<date>-<sequence>. Primer: request-20260718-000431Pravilo: nikoli ne ponavljaj v delu; Vanj vdelajte ID zapisa vira.

# Kartica paketnega opravila (predloga za razporejanje) Ime opravila: .............Število zapisov: .............Model: ............. (enostavno opravilo → hiter model) Največ_tokenov na zahtevo: .............Toleranca pričakovanega časa dostave: ......... ur Ključ za ujemanje rezultata: custom_idV primeru napake: ponovi poskus / čakalna vrsta / poročilo

# Enotni poziv za zahtevo v paketu (kratko in shematično) Razvrstite ta dokument. Samo vrni ta JSON, komentiraj:{"category":"...","urency":"low|medium|high"}Dokument: """{{document}}"""

# Pseudo koda za obdelavo rezultatov za vsak rezultat: if result.status == "success": record = find(custom_id) save(record, result.output) drugače: add_to_fail(custom_id, result.error) # nato poskusite znova

Šibek poziv/močan poziv (paketno načrtovanje opravila)

# WEAK (krhka zasnova) Pošljite 10.000 dokumentov v vrstnem redu z močnim modelom, shranite vrnjene rezultate v vrstnem redu, kot so prispeli.

# MOČAN (trpežna oblika) Pošljite 10.000 dokumentov v enem paketu s hitrim modelom. Vsakemu dokumentu dodelite edinstveni custom_id, ki vsebuje ID izvornega zapisa. Ujemite rezultate z custom_id; neuspešne postavite v čakalno vrsto in poskusite znova. Zaženite v nočnem oknu; Toleranca dostave 6 ur.

Zmogljiva različica; Vnaprej definira izbiro modela, ujemajoči se ključ, obravnavanje napak in čas. To je razlika v varni obdelavi več deset tisoč zapisov.

Trije mini kovčki

Primer 1 – nočno označevanje. Ekipa za e-trgovino bi razvrstila 200.000 ocen izdelkov v oznake občutkov. Sinhrono pretakanje v živo je bilo predmet omejitev hitrosti in je bilo drago. Delo so prenesli v noč kot serijo s hitrim modelom; Cena na enoto je padla, celoten komplet je bil pripravljen zjutraj in ni bilo težav z omejitvami hitrosti.

2. primer – zmeda pri naročilu. Raziskovalna skupina je povzela 5000 člankov, vendar je rezultate zapisala v datoteke v vrstnem redu, kot so prispeli. Ker so bili rezultati vrnjeni v drugačnem vrstnem redu, je bilo približno 900 od 5000 povzetkov povezanih z napačnim člankom. Preslikali so ga na custom_id; problem rešen in ta izkušnja je postala trajno pravilo: "Vedno custom_id v paketu."

Primer 3 — Stanje pripravljenosti v živo v napačnem načinu. Skupina za podporo je poskušala dati serijo odgovorov v živo, ki jih je uporabnik pričakoval na zaslonu; Uporabniki so opustili, ker so rezultati prispeli nekaj minut pozneje. Delo v živo so premaknili nazaj na sinhronizacijo, pri čemer so v paketu pustili samo nočno analizo kakovosti. Nauk: serija ni za stanje pripravljenosti v živo.

Pogoste napake

  • Ujemanje rezultatov po položaju: Vrstni red ni ohranjen; Uporabi custom_id.
  • Prenos opravila v živo v paket: uporabnik ne more čakati več minut; serija je za opravila, tolerantna na zamude.
  • Ne obravnava primerov napak: nekatere zahteve se lahko vrnejo kot neuspele/potekle; Postavite ga v ločeno čakalno vrsto in poskusite znova.
  • Močan refleks uporabe modela v seriji: Hitri model + serija je najcenejša kombinacija pri preprostih opravilih.
  • Custom_id ni sledljiv: Če v ID ni vdelan izvorni zapis, postane rezultat težko povezati nazaj.
  • Pozabljanje preučiti situacijo: pričakovanje rezultatov, preden je delo končano; Preverite stanje dokončanja.

Deeper: Spremljanje serije in upravljanje delnih napak

Najbolj zrel vidik paketne obdelave je, da zahteva drugačno miselnost kot posamezni klici: paketno opravilo je "proces", ne "dogodek". Predpostavka, da bo vseh deset tisoč zahtevkov uspešnih, je krhka; Realistična zasnova že od samega začetka sprejme delno okvaro. Status vsakega rezultata je lahko različen: uspešen, neuspešen (npr. neveljaven vnos), preklican ali potekel. Robusten tok obdeluje status vsakega rezultata posebej, ko potuje skozenj, postavi napake v ločeno "čakalno vrsto za ponovni poskus" in to čakalno vrsto zažene ločeno.

Druga praksa je načrtovanje za idempotenco (da dvakratno izvajanje istega opravila ne povzroči nobene škode). Če je paket prekinjen in ga znova zaženete, ne smete ponovno obdelati in dvakrat zapisati že obdelanih zapisov. Vezava custom_id na vaš izvorni zapis deluje tudi tukaj: "ali je bil ta zapis že obdelan?" preden shranite rezultat. Preverjanje preprečuje dvojno tipkanje.

Tretja točka je razporeditev prenosov v živo s serijo. Nekatera opravila imajo žive in paketne dimenzije: ko uporabnik naloži dokument, mu daste hiter predhodni povzetek (sinhrono) in ponoči ponovno obdelate isti dokument za globljo analizo (paket). Zavestno ločevanje obeh načinov optimizira uporabniško izkušnjo in stroške.

Nazadnje je serijsko zbiranje tudi način reševanja omejitev hitrosti (enota 8). Pošiljanje velikega obsega v sinhronem toku v živo ustvari konstanto 429, medtem ko pošiljanje enakega obsega v paketne prenose omeji pritisk na ponudnikovo lastno načrtovanje in naredi delo bolj predvidljivo.

Če povzamem

Paketna obdelava je na splošno cenejši in robustnejši način za delovne obremenitve, ki so tolerantne na zakasnitve in velike količine. Njegova odločitev je bila "ali uporabnik zdaj čaka na rezultat?" določa vprašanje. Najpomembnejše tehnično pravilo je, da vsaki zahtevi dodelite edinstven custom_id, ujemate rezultate po ID-ju in ne po lokaciji ter obravnavate uspeh/neuspeh vsakega rezultata posebej.

Aplikacijska naloga

Izberite delo z velikim obsegom (npr. klasifikacija arhiva). (1) Odločite se, ali je to delo živo ali kolektivno in ga utemeljite. (2) Oblikujte obliko custom_id (vključite zapis vira). (3) Izpolnite kartico paketnega opravila (model, max_tokeni, toleranca, pravilnik o napakah). (4) Napišite psevdokodo za obdelavo rezultatov, da vključite neuspele zahteve.

kontrolni seznam

  • [ ] Razlikujem sinhrone, asinhrone in paketne načine na osi stroškov/zakasnitve.
  • [ ] Lahko se odločim, ali je delo primerno za serijo ali ne, tako da postavim pravo vprašanje.
  • [ ] Vsaki zahtevi dodelim edinstven custom_id in rezultate povežem z ID-jem.
  • [ ] Neuspele/potekle rezultate lahko obravnavam ločeno.
  • [ ] Poznam prednosti izbire hitrega modela pri preprostih serijskih opravilih.