Prompt engineering pre bežnú prácu: praktický návod
Napíšete do ChatGPT „naformátuj mi tento email" a dostanete zdvorilú odpoveď, ktorú aj tak musíte celú prepísať. Problém zriedka býva v modeli. Skoro vždy je v zadaní. Anthropic to v dokumentácii formuluje ako zlaté pravidlo: ukážte svoj prompt kolegovi, ktorý o úlohe nič nevie, a nechajte ho podľa neho konať. Ak by bol zmätený, model bude tiež.
Prompt engineering pre bežnú prácu nie je o tajných formulkách. Je to o tom, že modelu poviete to, čo by ste povedali šikovnému, ale úplne novému kolegovi: čo presne chcete, v akom formáte, pre koho a podľa akého vzoru. Techniky nižšie priamo odporúčajú OpenAI aj Anthropic a každú ukazujem na troch úlohách, ktoré riešite každý deň: emaily, sumarizácia a analýza.
Buďte konkrétni a oddeľte pokyn od vstupu
Najväčší skok v kvalite prinesie zvyčajne jediná zmena: prestaňte byť struční. Anthropic radí byť explicitný o požadovanom výstupe a uvádza priamy príklad. Pokyn „Vytvor analytický dashboard" je slabý. Pokyn „Vytvor analytický dashboard, zahrň čo najviac relevantných funkcií a interakcií, choď za základy a sprav plnohodnotnú implementáciu" dáva výrazne lepší výsledok. Model si vágne zadanie domyslí smerom k priemeru, nie k tomu, čo ste mali na mysli.
Druhá vec, ktorú obe firmy zdôrazňujú, je oddelenie pokynu od dát. Keď do jedného odseku zmiešate inštrukciu aj text, ktorý sa má spracovať, model nevie, kde jedno končí a druhé začína. OpenAI odporúča rozdeliť prompt na jasné sekcie: kto a aký tón (identita), pravidlá (pokyny), vzory (príklady) a podkladové dáta (kontext). V praxi stačí ohraničiť vstup. Namiesto „skráť tento text [text]" napíšte:
Zhrň text medzi značkami do troch viet. Píš vecne, bez hodnotenia.
<text>
... sem vložte text ...
</text>
Model teraz presne vie, čo je úloha a čo je materiál. Pri sumarizácii to je rozdiel medzi tým, či dostanete tri vety, alebo či model omylom poslúchne nejakú vetu zvnútra dokumentu ako pokyn.
Pri formátovaní povedzte, čo chcete, nie čo nechcete
Drobnosť, ktorá zlepší skoro každú odpoveď: formulujte pokyn pozitívne. Anthropic uvádza, že namiesto „Nepoužívaj odrážky" funguje lepšie „Tvoja odpoveď nech sú plynulé prózové odseky." Model lepšie spracuje opis cieľového stavu než zoznam zákazov.
To isté platí pri kontexte. Anthropic ukazuje rozdiel medzi pokynom „NIKDY nepoužívaj výpustky" a jeho lepšou verziou: „Tvoju odpoveď bude čítať hlasový syntetizátor, takže nepoužívaj výpustky, lebo ich nevie vysloviť." Keď model dostane dôvod, zovšeobecní ho aj na situácie, ktoré ste explicitne nespomenuli. Pri písaní emailu teda nepíšte len „buď stručný", ale „toto číta zaneprázdnený riaditeľ na mobile, takže drž to do piatich viet a pointu daj hneď do prvej".
Na bežnú prácu z tohto vyplýva jednoduchý vzor pre email:
Napíš odpoveď na priložený email. Kontext: klient mešká s platbou
14 dní, chceme zaplatenie, ale nechceme stratiť vzťah.
Tón: zdvorilý, ale jednoznačný. Dĺžka: do 6 viet.
Skonči konkrétnym návrhom termínu.
<email>
... pôvodný email ...
</email>
Všimnite si, že tu nie je nič o „prompt engineeringu". Je to len presný popis situácie, tónu, dĺžky a požadovaného konca. To je 80 % celej disciplíny.
Príklady fungujú spoľahlivejšie než opisy
Keď potrebujete konzistentný formát alebo tón, nevysvetľujte ho — ukážte ho. Tejto technike sa hovorí few-shot alebo multishot prompting a Anthropic ju označuje za jeden z najspoľahlivejších spôsobov, ako usmerniť výstup. Odporúča 3 až 5 príkladov, ktoré sú relevantné (zodpovedajú reálnemu použitiu) a dostatočne rôznorodé, aby si model nevybral nesprávny vzor. OpenAI uvádza rovnaký princíp s 2 až 5 príkladmi vstupov a výstupov.
V praxi to vyzerá tak, že pri triedení prichádzajúcich emailov modelu nepoviete „roztrieď ich podľa naliehavosti", ale dáte mu dva-tri hotové príklady:
Klasifikuj email do kategórie: URGENTNÉ / BEŽNÉ / SPAM.
Príklad 1
Email: "Server je dole, zákazníci nevedia objednať."
Kategória: URGENTNÉ
Príklad 2
Email: "Posielam faktúru za marec, splatnosť 14 dní."
Kategória: BEŽNÉ
Teraz klasifikuj tento:
<email> ... </email>
Dva príklady model naučia hranicu medzi kategóriami lepšie než odsek vysvetľovania. Tým, že jeden príklad je naliehavý a druhý nie, mu zároveň ukážete, čo presne odlišuje jednu kategóriu od druhej.
Pri analýze nechajte model premyslieť postup
Pre úlohy, kde treba logiku, porovnanie alebo viackrokový úsudok, existuje technika s tvrdými dátami za sebou. Volá sa chain-of-thought a spočíva v tom, že model požiadate, aby uvažoval krok za krokom, než dá odpoveď. Pôvodná štúdia Jasona Weia a kolegov z roku 2022 ukázala, že model PaLM s 540 miliardami parametrov dosiahol s ôsmimi takýmito príkladmi na zbierke matematických slovných úloh GSM8K presnosť 58 %, čím prekonal dovtedajších 55 %. Tá istá štúdia ale upozorňuje na hranicu: chain-of-thought pomáha až pri veľkých modeloch, zhruba od 100 miliárd parametrov. Pri malých modeloch presnosť nezlepší.
Pre vašu prácu to znamená dve veci. Pri jednoduchom preformulovaní emailu krokovanie netreba a len predĺži odpoveď. Pri analýze sa oplatí. Keď napríklad porovnávate dve ponuky, nepýtajte sa rovno „ktorá je lepšia", ale:
Porovnaj dve ponuky nižšie. Postupuj takto:
1. Vypíš cenu, dodaciu lehotu a záruku každej.
2. Označ, v čom sa líšia.
3. Až potom odporuč jednu a zdôvodni prečo.
Pri novších modeloch, ktoré majú zabudované uvažovanie, často stačí požiadať „premysli to dôkladne" namiesto vypisovania krokov. Anthropic dodáva užitočný doplnok: na koniec pridajte „pred dokončením skontroluj svoju odpoveď oproti zadaniu". Tento jeden riadok spoľahlivo odchytí chyby, najmä pri počtoch a logike.
Pri dlhých dokumentoch dajte text hore a otázku dole
Ak modelu vkladáte celý dokument na sumarizáciu alebo analýzu, záleží na poradí. Anthropic odporúča pri dlhých vstupoch (od približne 20-tisíc tokenov) umiestniť dokument nahor a samotnú otázku až pod neho. V ich testoch otázka na konci zlepšila kvalitu odpovede až o 30 % pri zložitých, viacdokumentových vstupoch.
Druhý trik pre dlhé texty je zakotvenie v citátoch. Namiesto okamžitej požiadavky o zhrnutie nechajte model najprv vypísať relevantné pasáže a až z nich vytvoriť výstup:
<dokument> ... celá zápisnica z porady ... </dokument>
Najprv vypíš doslovné vety, ktoré obsahujú rozhodnutie alebo úlohu.
Potom z nich sprav zoznam úloh: kto, čo, dokedy.
Model sa tým prebije cez šum zvyšku textu a nezabudne na vetu schovanú v strede. Pri zápisniciach z porád alebo dlhých emailových vláknach je to rozdiel medzi použiteľným a polovičatým zhrnutím.
Rola modelu mení tón aj zameranie
Posledná technika je lacná a podceňovaná. Keď modelu na začiatku priradíte rolu, zúžite jeho tón a zameranie. OpenAI aj Anthropic uvádzajú, že stačí jediná veta. „Si redaktor, ktorý škrtá zbytočné slová" dá pri úprave textu iný výsledok než to isté zadanie bez roly. „Si skúsený personalista" zmení spôsob, akým model prečíta životopis.
Rola nie je kostým pre efekt. Je to spôsob, ako modelu povedať, z akého uhla má na úlohu pozerať a čo považovať za dôležité. Pri kontrole zmluvy „si právnik, ktorý hľadá riziká pre kupujúceho" nasmeruje pozornosť na úplne iné vety než neutrálne „zhrň túto zmluvu".
Tri veci, ktoré zmeniť na vašich promptoch už dnes
Ak si z celého návodu máte odniesť len niečo, sú to tri zmeny, ktoré nestoja žiadnu námahu navyše a fungujú naprieč ChatGPT aj Claude.
Po prvé, oddeľte pokyn od materiálu značkami a vždy uveďte formát a dĺžku výstupu. Po druhé, pri opakovaných úlohách (triedenie, klasifikácia, jednotný štýl emailov) priložte tri hotové príklady namiesto opisu. Po tretie, pri akejkoľvek analýze pridajte krokovanie a vetu „pred dokončením skontroluj odpoveď".
Žiadna z týchto techník nevyžaduje, aby ste sa stali expertom. Vyžadujú len to, aby ste prestali písať modelu telegraficky a začali mu zadávať úlohu tak presne, ako by ste ju zadali človeku, ktorý ju má spraviť za vás. Rozdiel medzi priemerným a použiteľným výstupom je takmer vždy v tom, koľko kontextu ste ochotní do zadania vložiť.
Zdroje
- OpenAI — Prompt engineering guide: https://developers.openai.com/api/docs/guides/prompt-engineering
- Anthropic — Prompt engineering overview a best practices: https://platform.claude.com/docs/en/docs/build-with-claude/prompt-engineering/overview
- Wei et al. (2022) — Chain-of-Thought Prompting Elicits Reasoning in Large Language Models: https://arxiv.org/pdf/2201.11903
- Google Research — Language Models Perform Reasoning via Chain of Thought: https://research.google/blog/language-models-perform-reasoning-via-chain-of-thought/
- IBM — What is chain of thought (CoT) prompting: https://www.ibm.com/think/topics/chain-of-thoughts
