Loni na jaře jsem se snažil přesvědčit AI asistenta, aby mi přepsal poznámky z rozhovorů do jednotné struktury. Napsal jsem instrukci na deset řádků. Pak na dvacet. Vysvětloval jsem, co má být tučně, kde má být odrážka, jak dlouhé mají být věty. Výsledek se pokaždé lišil od toho předchozího.

Nakonec jsem to vzdal a udělal jednu věc: vzal jsem jednu poznámku, přepsal si ji ručně přesně tak, jak jsem ji chtěl, a vložil obojí do promptu. Vstup a vedle něj hotový výstup. Od té chvíle to sedělo.

Té technice se říká few-shot prompting a je to jeden z těch případů, kdy je řešení jednodušší než problém.

Zero-shot, one-shot, few-shot

Pojmenování zní odborně, princip je banální. Rozhoduje jen to, kolik hotových příkladů dáte modelu k dispozici.

Zero-shot znamená prompt bez příkladu. Jen popíšete úkol: „přepiš tuhle poznámku do odrážek“. Většina lidí pracuje takhle a u jednoduchých věcí to stačí.

One-shot je prompt s jedním příkladem. Ukážete jednu dvojici, tedy vstup a k němu hotový výstup, a pak dáte model na ostro.

Few-shot je totéž s dvěma až pěti příklady. Modelu tím ukážete nejen cíl, ale i hranice: co je ještě v pořádku a co už ne.

Rád to přirovnávám k zaučování brigádníka. Můžete mu půl hodiny vysvětlovat, jak se skládá objednávka. Nebo mu ukážete tři hotové a necháte ho dělat čtvrtou. Druhá cesta bývá rychlejší, protože instrukce vždycky něco vynechá, kdežto příklad ukáže i to, co byste popsat nedokázali.

Proč ukázka porazí popis

Jazyk je na popisování formátu překvapivě špatný nástroj. Zkuste slovy vysvětlit, jak dlouhý má být „krátký odstavec“. Dva řádky? Padesát slov? Model si to vyloží po svém a vy se pak divíte.

Příklad tenhle problém obchází. Nese v sobě délku, rytmus, interpunkci, míru formálnosti i to, co v textu být nemá, aniž byste cokoli z toho museli pojmenovat.

Druhá výhoda je konzistence. Když stejný prompt spustíte dvacetkrát, zero-shot varianta vám dá dvacet mírně odlišných formátů. S příklady se rozptyl výrazně zmenší, protože model má co kopírovat.

Few-shot se ale nevylučuje s ostatními technikami. Naopak se s nimi dobře kombinuje. Když modelu nejdřív přidělíte roli a teprve pak přidáte příklady, dostanete lepší výsledek než z každé techniky zvlášť.

Tři vzory, které fungují

Teorie je hezká, tady jsou konkrétní ukázky. Všechny tři jsem odzkoušel a všechny fungují napříč běžnými asistenty.

Vzor první: sjednocení formátu. Hodí se, když z nestrukturovaného textu potřebujete pokaždé stejnou strukturu.

Přepiš poznámku do jednotné struktury podle příkladů.

Vstup: Volal Novák z Brna, chce nabídku na 20 kusů, spěchá to, ozve se v pátek.
Výstup:
Kontakt: Novák, Brno
Poptávka: 20 kusů
Termín: nabídku do pátku

Vstup: Psala paní Dvořáková, ptá se na servis té staré řady, nemá to naspěch.
Výstup:
Kontakt: Dvořáková
Poptávka: servis starší řady
Termín: neurgentní

Vstup: [sem vložte svou poznámku]
Výstup:

Vzor druhý: udržení tónu. Nejužitečnější u odpovědí zákazníkům, kde nejde o obsah, ale o to, aby text zněl jako vy.

Odpověz na dotaz ve stejném tónu jako v příkladech.

Dotaz: Objednávka nedorazila, co s tím?
Odpověď: Mrzí nás to. Podívali jsme se na zásilku a je u dopravce.
Ozveme se vám zítra s přesnějším termínem doručení.

Dotaz: Můžu zboží vrátit i po měsíci?
Odpověď: Bohužel ne, lhůta je čtrnáct dní od převzetí.
Když jde o reklamaci vady, ta se řídí jinými pravidly a tam vám rádi pomůžeme.

Dotaz: [sem vložte skutečný dotaz]
Odpověď:

Všimněte si, že druhý příklad je záměrně odmítavý. Kdybych oba dal vstřícné, model by se naučil vyhovět vždycky. Rozmanitost příkladů je tady důležitější než jejich počet.

Vzor třetí: třídění do kategorií. Nejspolehlivější použití few-shot vůbec, protože příklady zároveň vymezují, co která kategorie znamená.

Zařaď e-mail do jedné z kategorií: objednávka, reklamace, dotaz, spam.

E-mail: Dobrý den, chtěl bych 5 kusů modelu X na adresu Praha 4.
Kategorie: objednávka

E-mail: Zboží přišlo rozbité, přikládám fotky.
Kategorie: reklamace

E-mail: Zaručený výdělek 50 000 měsíčně, klikněte zde.
Kategorie: spam

E-mail: [sem vložte e-mail]
Kategorie:

Kolik příkladů má vlastně smysl dát

Zlomový je posun z nuly na jeden. Rozdíl mezi promptem bez příkladu a promptem s jedním bývá větší než mezi třemi a deseti.

Praktické pravidlo, které mi funguje: začněte se dvěma. Když se výstup rozchází s tím, co chcete, přidejte třetí a vyberte ho tak, aby pokrýval právě ten případ, na kterém to selhalo. Většina úkolů se ustálí do pěti příkladů.

Nad tuhle hranici narazíte na dva problémy. Příklady zabírají místo v promptu, takže u delších textů se to prodraží. A model se začne fixovat na povrchní rysy vašich ukázek, třeba že všechny odpovědi mají tři věty, i když to s úkolem nesouvisí.

Kam příklady v promptu umístit

Na pořadí záleží víc, než by člověk čekal. Osvědčené schéma má tři části: nejdřív krátká instrukce, co se má dělat, pak příklady, nakonec skutečný vstup.

Instrukce na začátku dává příkladům rámec. Bez ní model tápe, co má z ukázek odvodit, jestli formát, tón, nebo délku. Stačí jedna věta, dlouhý popis je právě to, čemu se chcete vyhnout.

Skutečný vstup patří úplně nakonec a je dobré ho oddělit stejným návěštím jako v příkladech. Když jsou vzory psané jako „Vstup:“ a „Výstup:“, má i poslední blok začínat „Vstup:“ a končit prázdným „Výstup:“. Model tím dostane jasný signál, kde má navázat.

Vyplatí se taky nechat mezi příklady prázdný řádek. Zní to malicherně, ale u delších ukázek pomáhá modelu poznat, kde jedna dvojice končí a další začíná.

Kdy few-shot nepomůže

Není to univerzální lék a stojí za to vědět, kde končí.

U úkolů, kde jde o fakta, příklady nepřidají nic. Když se ptáte, kdy byla postavena Karlova mostní věž, ukázky odpovědí správnost nezlepší. Model buď informaci má, nebo ne.

U vícekrokových úvah, kde model musí něco spočítat nebo odvodit, je few-shot slabší než techniky zaměřené na postup řešení. Ty mají vlastní články, sem nepatří.

A pokud si sami nejste jistí, jak má výstup vypadat, technika vám nepomůže. Příklad musíte umět vyrobit. To zní jako triviálnost, ale právě na tom to nejčastěji ztroskotá: člověk chce po AI něco, co si sám nedokáže představit.

Na co si dát pozor

Chyby v příkladech se kopírují. Když ve vzoru necháte překlep nebo nekonzistentní interpunkci, model to nepovažuje za nedopatření, ale za součást zadání. Příklady si přečtěte pozorněji než samotnou instrukci.

Hlídejte si rozmanitost. Když všechny ukázky vypadají podobně, model si z nich odvodí pravidlo, které jste nezamýšleli. Klasický případ je klasifikace, kde dáte tři příklady a všechny náhodou spadnou do jedné kategorie. Model pak zařadí do téže kategorie skoro všechno.

Pozor na osobní údaje. Příklady se často berou z reálné komunikace, a jména zákazníků, adresy nebo čísla objednávek tam nemají co dělat. Nahraďte je smyšlenými hodnotami.

A poslední věc: formát držte v příkladech naprosto stejný. Když v jednom napíšete „Výstup:“ a ve druhém „Odpověď:“, zbytečně tím model matete.

Co si z toho odnést

Few-shot prompting není trik, spíš přiznání, že popisovat formát slovy je práce navíc. Dvě až tři hotové dvojice vstup a výstup zaberou minutu a nahradí odstavec instrukcí, který stejně nebude přesný.

Vyplatí se u opakované práce se stálým formátem, u udržení tónu a u třídění do kategorií. Nepomůže tam, kde jde o fakta nebo o výpočet.

Pokud s prompty začínáte, dává smysl projít nejdřív základy jejich psaní a teprve pak přidávat techniky jako je tahle. Few-shot totiž špatně zadaný prompt nezachrání, jen ho zpřesní.