Sprievodca a prehľad

Spoľahlivé smerovanie LLM API: časové limity, opakované pokusy a výpadky modelu bez sémantických regresií

Praktická architektúra na klasifikáciu zlyhaní LLM API, vynútenie jedného rozpočtu latencie, výber kompatibilných záložných modelov, ochranu vedľajších účinkov a overenie každej prijatej odpovede.

Záložná žiadosť nie je úspešná len preto, že iný model vrátil HTTP 200. Náhrada môže prekročiť pôvodný rozpočet latencie, vynechať povinné polia JSON, zavolať iný nástroj alebo vytvoriť odpoveď s podstatne odlišnou sémantikou. Spoľahlivé smerovanie LLM API preto vyžaduje viac než len zoradený zoznam modelov: vyžaduje zmluvu, klasifikátor zlyhania, politiku ohraničeného pokusu a overenie pred prijatím.

Ústredné pravidlo je jednoduché: skúste to znova len vtedy, keď je zlyhanie vierohodne dočasné, a odstúpte iba vtedy, keď nasledujúca trasa stále spĺňa pôvodnú požiadavku.

Pred výberom modelov definujte zmluvu o smerovaní

Začnite popisom toho, čo musí poskytnúť úspešná odpoveď. Táto zmluva o smerovaní by mala byť strojovo čitateľná a pripojená ku každému pracovnému zaťaženiu alebo triede požiadaviek.

{
  "workload": "extrakcia_faktur",
  "modality": ["text", "image"],
  "max_input_tokens": 50 000,
  "requires_tools": nepravda,
  "structured_output": {
    "povinné": pravda,
    "schema_id": "faktúra-v3",
    "prísne": pravda
  },
  "allowed_model_classes": ["extrakcia dokumentu"],
  "max_cost_usd": 0,08,
  "deadline_ms": 8 000
}

Zmluva by mala zahŕňať požadované modality, kapacitu kontextu, podporu nástrojov, správanie sa štruktúrovaného výstupu, prijateľné triedy modelov, maximálne náklady a konečný termín. V prípade potreby pridajte obmedzenia špecifické pre aplikáciu, ako sú povolené oblasti, minimálna výstupná dĺžka alebo požadovaný dôvod dokončenia.

Odporúčanie: udržiavajte samostatné, testované skupiny trás pre obyčajný text, výstup s obmedzením schémy, používanie nástrojov, víziu a požiadavky s dlhým kontextom. Model, ktorý je prijateľným záložným textom, nie je automaticky prijateľným záložným nástrojom na volanie nástroja alebo zadávanie obrázkov.

Pred vykonaním akcie klasifikujte poruchu

Chyby overovania, chybne vytvorené požiadavky, limity rýchlosti a zlyhania servera vyžadujú rôzne reakcie. Zaobchádzanie s každou neúspešnou odpoveďou ako s opakovaným plytvaním kapacitou a môže skryť chyby.

Trieda zlyhaniaPríkladyPredvolená akcia Trvalé zlyhanie žiadostiNeplatné poverenia, nesprávne formátované parametre, nepodporovaná funkciaZastaviť a vrátiť jasnú chybu Nekompatibilita trasyPríliš veľký kontext, nepodporovaný vstup obrázkov, nedostupný režim schémyVyskúšajte iba kompatibilnú trasu Prechodné zlyhanie prenosuObnovenie pripojenia, zlyhanie DNS, vybratý časový limitSkúsiť znova v rámci zostávajúceho rozpočtu Zlyhanie kapacity alebo rýchlostiHTTP 429, preťažená služba, vybrané odpovede 5xxRešpektujte rady pre opakovaný pokus alebo použite zdravú rezervu Neplatná úspešná odpoveďPoškodený JSON, neznámy nástroj, chýbajúce povinné poleOdmietnite, potom to skúste znova alebo vráťte späť, ak to pravidlá povoľujú Nejednoznačné vykonanieSpojenie sa stratilo po tom, čo poskytovateľ pravdepodobne prijal žiadosťPred prehratím odstrániť duplikát

Fakt: neúspešné žiadosti s obmedzenou sadzbou sa môžu stále započítavať do limitov poskytovateľa. Agresívne okamžité opakovania môžu preto prehĺbiť škrtenie namiesto jeho vyriešenia. Opakované pokusy tiež spotrebúvajú dodatočnú kapacitu počas výpadku a zásady opakovania na niekoľkých aplikačných vrstvách môžu výsledné zaťaženie znásobiť.

Odporúčanie: nechajte jednu vrstvu vlastniť opakovanie generovania modelu. V typickej architektúre je brána AI API tým správnym vlastníkom, pretože vidí stav trasy, históriu pokusov, latenciu a náklady. Ak je to možné, zakážte automatické opakovania v klientoch nižšej úrovne alebo ich explicitne započítajte do rozpočtu na rovnaký pokus.

Miňte jeden komplexný rozpočet na latenciu

Časové limity na jeden pokus sú nedostatočné. Tri pokusy s päťsekundovým časovým limitom môžu premeniť zamýšľanú päťsekundovú operáciu na pätnásťsekundovú odozvu, kým sa nezapočítava stiahnutie a overenie.

Zaznamenajte absolútny termín, keď požiadavka vstúpi do brány. Pred každým pokusom vypočítajte zostávajúci čas:

zostávajúci = termín - aktuálny_čas
požadované = pripojenie_prídavok + generačný_príspevok + validačný_príspevok
ak zostáva < povinné:
    stop_without_launching_another_attempt

Pri 8-sekundovom termíne môže primeraná počiatočná alokácia vyhradiť 300 ms na prácu brány a záverečnú validáciu, ponechať až 4,5 sekundy pre primárnu cestu a ponechať približne 3,2 sekundy pre jednu núdzovú operáciu. Tieto hodnoty sú príkladom, nie benchmarkom. Musia byť odvodené z nameraných distribúcií latencie pre skutočných poskytovateľov, modely, regióny a veľkosti výstupov.

Použite obmedzené exponenciálne stiahnutie s chvením na prechodné opakované pokusy:

oneskorenie = náhodné(0, min(limit, základ * 2^index_opakovania))

Rady poskytovateľa na opätovný pokus, ako napríklad hodnota opätovného pokusu po, by mali mať prednosť, keď sa zmestia do zostávajúceho termínu. Po malom počte pokusov zastavte. Spoločnou politikou je jeden primárny pokus plus jeden záložný s voliteľným opakovaným pokusom o rovnakú cestu iba v prípade skorého zlyhania pripojenia, ktoré nemohlo vygenerovať účtovateľný výstup.

Trade-off: sekvenčné záložné riešenie zlepšuje dostupnosť, ale zvyšuje latenciu. Paralelné alebo zaistené požiadavky môžu znížiť latenciu počas spomalení, ale spotrebúvajú viac kapacity a môžu spôsobiť poplatky za niekoľko úspešných generácií. Hedging by sa mal obmedziť na záťaže kritické z hľadiska latencie a bez vedľajších účinkov so zrušením a kontrolou nákladov.

Vyberajte záložné reklamy podľa schopnosti, nie podľa hodnotenia

Záložná tabuľka by mala kódovať skôr kompatibilitu než globálne poradie preferencií. Pred zvážením zdravia, latencie alebo ceny filtrujte kandidátske trasy podľa zmluvy.

kandidáti = trasy
  .filter(supports_required_modalities)
  .filter(context_limit >= odhadovaná_veľkosť_vstupu)
  .filter(supports_required_tools)
  .filter(supports_requested_schema_mode)
  .filter(trieda_modelu v triedach povolených_modelov)
  .filter(odhadované_náklady <= zostávajúce_náklady_rozpočet)
  .filter(not_temporarily_suppressed)
vybraté = poradie (kandidáti, zdravie, latencia, náklady)

Podpora štruktúrovaného výstupu si zaslúži explicitné testovanie. Aj keď dve cesty inzerujú generovanie s obmedzením schémy, môžu podporovať rôzne podmnožiny schémy JSON alebo odlišne interpretovať okrajové prípady. Modely s nástrojmi sa môžu líšiť aj výberom nástrojov, konštrukciou argumentov a správaním paralelného volania.

Fakt: rodiny modelov prepínania môžu zachovať dostupnosť dopravy a zároveň zmeniť štýl, kvalitu uvažovania, bezpečnostné správanie, tokenizáciu a výber nástrojov. Úspech HTTP nie je dôkazom sémantickej ekvivalencie.

Predpoveď: ako sa katalógy modelov rozširujú, budú politiky smerovania výroby čoraz viac využívať profily verzií schopností a akceptačné testy špecifické pre pracovné zaťaženie namiesto zoznamov statických modelov. Berte to ako smer návrhu, nie záruku správania poskytovateľa.

Overte odpoveď pred jej prijatím

Spustite každú odpoveď, vrátane primárnej odpovede, cez rovnaký kanál prijatia. Overenie by malo prebehnúť skôr, ako sa výsledok uloží do vyrovnávacej pamäte, interne sa zaúčtuje ako úspešný alebo sa odošle vykonávateľovi nástroja.

  1. Potvrďte, že prenos bol dokončený a obálka odpovede môže byť analyzovaná.
  2. Skontrolujte dôvod dokončenia a odmietnite skrátenie, keď sa vyžaduje úplný výstup.
  3. Overte štruktúrovaný výstup oproti pôvodnej schéme.
  4. Overte povinné polia, enum hodnoty a invarianty aplikácie.
  5. Povoliť iba registrované názvy nástrojov a overiť argumenty proti každej schéme nástroja.
  6. Aplikujte sémantické kontroly špecifické pre pracovné zaťaženie tam, kde by nesprávne prijatie bolo nákladné.

Na extrakciu faktúr môžu sémantické kontroly vyžadovať nezáporný súčet, podporovaný kód meny a súčty riadkových položiek v rámci explicitne definovanej tolerancie. Pre klasifikáciu si vyžiadajte štítok z povolenej sady. Na generovanie kódu môže byť vhodná analýza alebo kompilácia. Tieto kontroly nedokazujú kvalitu, ale bránia tomu, aby sa predvídateľné porušenia zmluvy považovali za úspechy.

Neopravujte potichu každú chybnú odpoveď. Deterministická normalizácia, ako je odstránenie neškodných okolitých bielych miest, môže byť prijateľná. Hádanie chýbajúcich finančných polí alebo prepisovanie argumentov nástroja mení význam modelu a malo by vyvolať odmietnutie alebo kontrolu človekom.

Oddelené generovanie opakovaní od vedľajších účinkov

Žiadosti LLM bežne používajú HTTP POST, ktorý vo svojej podstate nie je idempotentný. Ešte dôležitejšie je, že odpoveď modelu môže spustiť externú akciu, ako je spoplatnenie spôsobu platby, odoslanie správy, vytvorenie lístka alebo úprava infraštruktúry. Opätovný pokus o generovanie a prehratie tejto akcie sú samostatné rozhodnutia.

Každému volaniu modelu priraďte ID operácie na hranici aplikácie a ID pokusu. Pretrvávať stav vykonávania nástroja proti deterministickému kľúču, ako napríklad:

execution_key = operation_id + tool_name + canonical_arguments_hash

Pred spustením nástroja skontrolujte, či daný kľúč nie je čakajúci, dokončený alebo zlyhal. Namiesto opätovného spustenia vráťte uložený výsledok na dokončené vykonanie. Pre operácie, ktorých argumenty sa môžu legitímne zmeniť, vyžadujú schválenie na úrovni aplikácie alebo nové ID operácie.

Nejednoznačný časový limit si vyžaduje špeciálne zaobchádzanie. Ak spojenie zlyhá po odoslaní požiadavky, brána nemusí vedieť, či došlo ku generovaniu. Kľúč idempotencie podporovaný poskytovateľom môže pomôcť, ak je k dispozícii. V opačnom prípade zapíšte výsledok ako neznámy a namiesto toho, aby ste predpokladali, že sa nič nestalo, použite politiku opakovania špecifickú pre pracovné zaťaženie.

Potláčajte nezdravé trasy a odhaľte každý pokus

Istič alebo dočasné obmedzenie zdravotného stavu bráni každej novej požiadavke znovu nájsť tú istú neúspešnú cestu. Otvorte okruh po definovanej chybovosti alebo prahovej hodnote po sebe idúcich poruchách, potom pripustite obmedzené sondy v polootvorenom stave. Vylaďte prahové hodnoty podľa trasy a triedy zlyhania, aby chybná požiadavka klienta nemohla spôsobiť, že zdravý model bude nedostupný.

Zaznamenajte jednu udalosť na úrovni požiadavky a jednu udalosť na pokus. Užitočné polia zahŕňajú ID operácie, ID pokusu, vybraného poskytovateľa a model, triedu zlyhania, kód stavu, latenciu, počet tokenov, odhadované náklady, dôvod núdzového riešenia, výsledok overenia, stav okruhu a konečný výsledok. Upravte alebo hashujte výzvy, výstupy a argumenty nástrojov podľa ich požiadaviek na citlivosť a uchovávanie.

Užitočné prevádzkové metriky zahŕňajú záložnú mieru, počet pokusov na dokončenú požiadavku, mieru vyčerpania termínu, mieru odmietnutia overenia, nejednoznačné výsledky, cenu za prijatú odpoveď a latenciu podľa konečnej cesty. Rastúca miera úspešnosti HTTP spolu s rastúcou mierou odmietnutia overenia je varovaním, že dostupnosť prenosu maskuje zlyhania zmluvy.

Kontrolný zoznam zavádzania produkcie

  • Definujte verzovanú zmluvu o smerovaní pre každú triedu pracovného zaťaženia.
  • Zmapujte chyby poskytovateľa do trvalých, prechodných, nekompatibilných, neplatných odpovedí a nejednoznačných kategórií.
  • Vyberte jedného vlastníka opätovného pokusu a obmedzte celkový počet pokusov.
  • Propagujte absolútny termín prostredníctvom brány, klienta poskytovateľa, overenia a spustenia nástroja.
  • Namiesto jedného globálneho modelového reťazca vytvorte záložné skupiny s testovanými schopnosťami.
  • Overujte schémy, volania nástrojov, dôvody dokončenia a invarianty domény.
  • Odstraňujte duplicitné vedľajšie efekty pomocou prevádzkových a spúšťacích kláves.
  • Pridajte potlačenie trasy pomocou ohraničených polootvorených sond.
  • latencia, tokeny, cena, zlyhania a výsledky prijatia na úrovni pokusov o protokolovanie.
  • Časové limity vloženia, 429 s, vybraté chyby 5xx, chybný formát JSON, pretečenie kontextu a pomalé úspechy pri príprave.

Začnite s primárnou cestou a jedným kompatibilným záložným riešením pre jedno nízkorizikové pracovné zaťaženie. Pred rozšírením pravidiel porovnajte kvalitu prijatej odozvy, latenciu a cenu. Cieľom nie je čo najvyššia miera záložných práv. Ide o ohraničený systém, ktorý buď vráti odpoveď spĺňajúcu pôvodný kontrakt, alebo jednoznačne zlyhá skôr, než spôsobí duplicitnú prácu alebo sémantické poškodenie.

Súvisiace čítanie

FAQ

Často kladené otázky

Ktoré chyby LLM API by mali spustiť opakovaný pokus?
Opakujte iba zlyhania klasifikované ako prechodné, ako sú vybrané zlyhania pripojenia, časové limity, limity rýchlosti a chyby servera poskytovateľa. Neskúšajte automaticky znova neplatné poverenia, chybné požiadavky, nepodporované funkcie alebo chyby súvisiace s obmedzením kontextu. Chyba kontextového limitu môže odôvodniť kompatibilný výpadok s dlhým kontextom, ale opakovanie tej istej požiadavky na rovnakej trase ju nevyrieši.
Koľko pokusov o návrat modelu by mala brána umožňovať?
Univerzálny počet neexistuje, ale limit by mal byť malý a mal by sa riadiť jedným konečným termínom. Praktickým východiskovým bodom je jeden primárny pokus a jedna kompatibilná náhrada. Ďalší pokus pridajte len vtedy, keď namerané zisky spoľahlivosti odôvodnia dodatočnú latenciu, kapacitu a náklady.
Je bezpečné zopakovať požiadavky na volanie nástroja?
Generovanie modelu sa môže opakovať v rámci obmedzenej politiky, ale spustenie externého nástroja sa musí deduplikovať samostatne. Použite ID operácie a deterministický kľúč vykonania, zachovajte výsledok nástroja a vyhnite sa prehrávaniu platieb, správ alebo iných vedľajších účinkov len preto, že sa generovanie opakovalo.
Dá sa použiť lacnejší model ako automatický záložný?
Iba vtedy, keď spĺňa rovnakú zmluvu o smerovaní a prejde akceptačnými testami špecifickými pre pracovné zaťaženie. Samotná cena nezaručuje kompatibilitu. Pred umiestnením akéhokoľvek modelu do záložnej skupiny skontrolujte modalitu, kontext, štruktúrovaný výstup, nástroj, latenciu a kvalitu.