Ako orchestrovať jazykové modely: od jedného promptu k systému
Jeden prompt je demo. Aplikácia je niečo iné. O rozdeľovaní úloh, routovaní medzi modelmi a o tom, kde nechať obyčajný kód.
Prvá AI funkcia býva jeden veľký prompt. Napíšete do neho všetko, model to nejako zvládne a vy máte pocit, že to bolo ľahké.
Druhá verzia toho istého promptu má tristo riadkov, obsahuje osem „DÔLEŽITÉ:" a stále raz za čas vráti nezmysel. V tom bode zvyčajne príde otázka, či sa nedá použiť lepší model. Väčšinou nie. Problém nie je v modeli, ale v tom, že jedna úloha robí päť vecí naraz.
Prvý krok: rozbiť úlohu
Vezmite si spracovanie došlej faktúry. V jednom prompte to vyzerá takto: „prečítaj faktúru, over dodávateľa, skontroluj sumy, zaraď to do správnej kategórie a napíš zhrnutie".
Rozbité na kroky to vyzerá inak:
- vytiahni z dokumentu polia (dodávateľ, IČO, suma, dátum, položky),
- nájdi dodávateľa v našej databáze podľa IČO — obyčajný SQL dotaz, žiadny model,
- over, či súčet položiek sedí s celkovou sumou — aritmetika, žiadny model,
- navrhni kategóriu podľa histórie tohto dodávateľa,
- keď si niečím z toho nie si istý, pošli to človeku.
Zrazu sú z toho dve volania modelu namiesto jedného, ale každé má jednu jasnú úlohu. Krok dva a tri vôbec nepotrebujú AI — a to je tá dôležitejšia časť. Model, ktorý „overuje" súčty, je najdrahší spôsob, ako spraviť chybu v sčítaní.
Ak si máte z celého článku zapamätať jednu vetu: AI použite tam, kde pravidlá napísať neviete. Všade inde napíšte pravidlá.
Reťazenie a jeho cena
Keď kroky poskladáte za sebou, výstup jedného ide na vstup ďalšieho. Funguje to a má to dva háčiky.
Prvý: chyby sa nesčítavajú, ale násobia. Deväť krokov s deväťdesiatpercentnou spoľahlivosťou nedáva deväťdesiat percent. Dáva zhruba tridsaťosem. Preto sa oplatí mať krokov málo a po každom overiť, či výstup vôbec dáva zmysel.
Druhý: latencia. Každý krok je sieťové volanie, ktoré trvá sekundy. Päť krokov za sebou znamená, že používateľ čaká. Kroky, ktoré na sebe nezávisia, spustite paralelne — a to, čo môže bežať na pozadí, tam nechajte bežať.
Routovanie: nie každá úloha potrebuje najsilnejší model
Modely sa líšia cenou aj rýchlosťou, často rádovo. Posielať klasifikáciu „je toto reklamácia alebo dopyt?" najdrahšiemu modelu je ako voziť sa na nákup kamiónom.
Rozumné rozdelenie vyzerá zhruba takto: jednoduché a objemné úlohy (klasifikácia, extrakcia, krátke zhrnutie) na malý rýchly model. Úlohy, kde treba uvažovať, spojiť viac vecí alebo napísať kód, na silný model. A pre istotu jedno pravidlo navyše: keď si malý model nie je istý, nech úlohu posunie väčšiemu.
Prakticky to znamená mať v kóde jedno miesto, ktoré rozhoduje, ktorý model úlohu dostane. Nie desať miest, kde je názov modelu natvrdo napísaný v prompte. To druhé vás dobehne pri prvej zmene cenníka alebo pri prvom novom modeli.
Nech model vracia dáta, nie prózu
Toto je najlacnejšie vylepšenie, aké môžete spraviť. Pýtajte si štruktúrovaný výstup — JSON so schémou — namiesto vety, z ktorej potom regulárnym výrazom lovíte číslo.
Dôvod nie je estetika. Štruktúrovaný výstup sa dá overiť. Chýba pole? Zamietnuté. Suma nie je číslo? Zamietnuté. Kategória nie je z povoleného zoznamu? Zamietnuté. Zrazu máte medzi modelom a databázou bránu, ktorá halucináciu zastaví skôr, než niečo pokazí.
A keď výstup neprejde, skúste to znova. Modely sú nedeterministické — druhý pokus býva často v poriadku.
Kde to najčastejšie padne
Zopár vecí, ktoré sa v produkcii ukážu vždy a v deme nikdy:
- Externé API padajú. Nastavte timeouty a majte plán B. AI funkcia, ktorá zhodí objednávkový proces, lebo provider mal výpadok, je horšia než žiadna AI funkcia.
- Náklady rastú ticho. Tri centy za volanie sú nič, kým ich nemáte stotisíc mesačne. Merajte to od prvého dňa.
- Prompt je vstup, nie kód. Keď do promptu vkladáte text od používateľa alebo z e-mailu, počítajte s tým, že sa vás niekto pokúsi presvedčiť, aby ste ignorovali predchádzajúce inštrukcie. Oddeľujte inštrukcie od dát a nikdy nedávajte modelu právomoc, ktorú by ste nedali cudziemu človeku.
- Cachujte. Rovnaká otázka sa opakuje častejšie, než čakáte.
Kedy to celé nerobiť
Keď sa dá úloha vyriešiť podmienkou v kóde, vyriešte ju podmienkou v kóde. Je to lacnejšie, rýchlejšie, testovateľné a nepomýli sa.
Znie to ako samozrejmosť, ale videli sme dosť projektov, kde jazykový model rozhodoval o veciach, na ktoré stačil if. Orchestrácia nie je o tom, koľko modelov zapojíte. Je o tom, koľko z nich ste nezapojili, lebo neboli treba.
Riešite niečo podobné vo vašej firme?
Chcem nezáväznú konzultáciu