budoucnostai_a_photorealistic_image_of_a_persons_hands_typing_730ed900-b65d-422f-b5f1-7254560a2320_0

Prompt Engineering: Umění komunikace s AI

Co je Prompt Engineering a proč je tak důležitý? Odhalte tajemství efektivního zadávání dotazů v AI nástrojích a naučte se dostat z nich takové odpovědi, jaké chcete.

Uveřejněno

Rubrika

Autor

S raketovým nástupem tzv. reasoning modelů cítím potřebu se znovu, a tentokrát obzvlášť důkladně, podívat na to, co je to Prompt Engineering. O tomto fascinujícím tématu jsem tu psal už před rokem a půl ale mnoho i častých uživatelů AI chatbotů jej vlastně pořádně nezná. Zkusím to napravit a podělím se o mé oblíbené techniky, které s oblibou zařazuji i do svých AI školení, ale rovnou upozorňuji, že existuje mnoho dalších přístupů a strategií.

Ale co je to vlastně prompt (zadání)?

Nejdřív trocha lingvistiky – jak anglické slovo „prompt“ vlastně přeložit. Česky se mu říká různé – otázka, zadání, dotaz, příkaz… Liší se to i podle toho kontextu – někdy prostě pokládáte otázku, jindy dáváte AI nějaký úkol co má udělat… Já proto preferuji český termín „zadání“ (a sloveso „zadat“) které lze použít ve všech variantách, ale ne nijak striktně, v rámci čitelnosti jsou prostě všechny tyhle výrazy správně.

Položme si tuto zdánlivě jednoduchou otázku – Co je to prompt?. Vžijte se do situace AI a představte si, že vám někdo položí následující dotaz:

Jaké auto si mám koupit?

Co mu odpovíte? Nevíte o uživateli nic, nevíte k čemu ho chce, neznáte žádný kontext. Nebo ještě jeden příklad, napíšu vám, jakožto AI chatbotovi následující zadání:

4×4

Co odpovíte? Když se ptám na školeních, nejčastější odpověď je 16. Ale co když já nechci vědět výsledek matematického výpočtu, co když chci vědět, o jakou matematickou operaci se jedná. Co když chci vědět něco o autech s pohonem na všechny 4 kola, co když chci dřevěné desky 4 na 4 metry, co když chci hrát nějakou hru čtyřech proti čtyřem? …

Každá taková odpověď může být podle kontextu správná, jenže já vám žádný nedal. Dal jsem vám špatné zadání, protože je nejednoznačné, má mnoho různých správných odpovědí, která mě ale jako uživatele vůbec nezajímají.

A o tom je vlastně prompt engineering, česky asi nejlíp nějakým opisem, např. „ovládnutí AI dotazování“. Tím jak se AI stává stále důležitější součástí životů a práce, stává se to stejně nezbytnou znalostí, jako „ovládání počítače“, „umění efektivně hledat na internetu“, „pokročilá práce s Excelem“ a stejně tak se to už v mnohých zaměstnáních očekává. Když bych měl napsat vlastní definici, tak tedy

Prompt engineering je schopnost pokládat AI své dotazy s dostatečným kontextem, srozumitelně a jednoznačně tak, aby AI dokázalo kvalitně odpovědět – očekávaným způsobem a bez chyb.

Tahle schopnost je vlastně velmi podobná programování, proto často prompt engineeři (specialisti na AI dotazy) rekrutují z řad programátorů či nějakých systémových analytiků.

Dobře to popisuje známý vtip, jak manželka zadá manželovi programátorovi úkol „Kup mlíko a když budou mít rohlíky, vezmi jich 6“ a on donese 6 krabic mléka. Jenže zkuste jí říct, že vám dala špatný prompt!

Kontext, kontext a zase kontext!

Několikrát jsem v predchozích odstavcích zmínil slovo „kontext“. Na ten se totiž velmi často zapomíná, a to i rádoby odborníci, co píší stupidní seznamy typu 1000+1 promptů pro [doplň sám].

Zapamatujte si toto zlaté pravidlo: Vždy, když je to možné, dodávejte modelu v promptu relevantní kontext! Je mnohem efektivnější poskytnout AI potřebné informace, než spoléhat na to, že si je „domyslí“ ze své obecné znalostní báze. Ta totiž může být neúplná, nepřesná,, zastaralá nebo jednoduše neobsahovat specifika dané situace.

Kontext můžete poskytnout různým způsobem – z internetu , PDF, datovou analýzou, doplňujícími informacemi v zadání, obrázkem, některou z prompt engineering technik atd. Na školeních je procvičujeme.

Základní techniky AI dotazování

Pojďme si v rychlosti připomenout základní techniky prompt engineeringu.

Zero-Shot Prompting

Termínem „Shot“ se označuje v této terminologii „příklad“, tj. Zero-shot je jednoduché zadání bez příkladů, a pakliže jej nedoplním o jiné techniky, tak jde v podstatě výchozí stav, vhodný jen pro opravdu nejjednodušší dotazy.

Napiš báseň o podzimu.

One-Shot Prompting

Jak asi tušíte, one-shot znamená tedy jeden příklad. Proč může být tahle technika mnohem lepší? Protože tím příkladem jasně ukazujete, jak si představujete odpověď. AI se bude snažit odpovědět stejným stylem. Ale když dáte ten příklad špatně, může být odpověď mnohem horší než základní Zero-shot.

Správný one-shot

Tady je příklad krátkého popisu produktu: 
---
Produkt: Bezdrátová sluchátka "SoundWave X" Popis: "Užijte si křišťálově čistý zvuk a maximální pohodlí s bezdrátovými sluchátky SoundWave X. Díky aktivnímu potlačení hluku a ergonomickému designu se můžete plně soustředit na svou oblíbenou hudbu."
---
Nyní vytvoř podobný popis pro produkt: Chytré hodinky "TimeMaster Pro".

Všimněte si, že jsem například oddělil příklad od zadání (různé modely preferují různé oddělovače, v zásadě je ale skoro jedno, jaké použijete, jen je fajn aby bylo jasně vidět, kde začíná/končí zadání a kde příklad). Všimněte si, že jsem poskytl šablonu odpovědi, tedy očekávám dva řádky začínající „Produkt“ a „Popis“. Dal jsem mu najevo i očekávanou délku a styl odpovědi…

To všechno by šlo samozřejmě popsat i do instrukcí, ale mnohdy je příklad s takovou šablonou mnohem jednodušší, nebo je fajn to kombinovat.

Špatný one-shot

Příklad: 
---
Otázka: "Karel, Petr, Jan a Martin celkem odevzdali 47 kg papíru. Karel nasbíral dvakrát více než Petr, Jan o 8 kg méně než Petr a Martin o 3 kg více než Jan. Kolik kg papíru sebral Karel?"
Odpověď: "24"
---
Otázka: "Tři nejlepší účastníci soutěže si mají rozdělit celkovou výhru 4200 Kč. Druhý dostane o 20 % více než třetí a první dostane o 200 Kč méně než druhý a třetí dohromady. Kolik každý dostane Kč?"
Odpověď:

Takovým způsobem dojde u většiny modelů k jedné ze dvou špatných odpovědí – buď neodpoví stylem, jaký jste mu naznačili, nebo napíše s největší pravděpodobností špatnou odpověď. Důvody jsem již popisoval a znovu popíšu v části o Chain-of-thought.

Few-Shot Prompting (Multiple-Shot…)

Někdy je jeden příklad až příliš svazující nebo ne úplně jasný, když to jde, vyplatí se použít více příkladů. Ty nejlepší výsledky co vidíte v testech jsou právě s mnoha příklady.

Tady je několik příkladů vtipných a stručných shrnutí filmů:

Film: Pán prstenů
Shrnutí: Parta kamarádů se vydá na dlouhý výlet, aby zničili prsten.

Film: Harry Potter a Kámen mudrců
Shrnutí: Malý kouzelník zjistí, že je slavný, a jde studovat do Bradavic.

Film: Star Wars: Epizoda IV - Nová naděje
Shrnutí: Farmářský kluk se přidá k rebelům a bojuje proti zlému Impériu.

Nyní vytvoř podobné shrnutí pro film: Matrix

Zkusil jsem to a ChatGPT mi odpověděl

Film: Matrix
Shrnutí: Chlápek zjistí, že celý svět je podvod, naučí se uhýbat kulkám a zachrání lidstvo.

Pokročilé techniky Prompt Engineeringu

Základní techniky už jsou tady mnoho let, s příchodem modelů typu GPT 3.5+, které se naučily chápat konverzace ale přišly na svět i pokročilé techniky, které doplňují zadání (a případně i příklady) o podrobnější instrukce

1. Chain-of-Thought (CoT) Prompting:

Tato technika nutí model rozepsat svůj myšlenkový postup krok za krokem. Je skvělá pro komplexní úlohy, u kterých chceme sledovat a ověřit uvažování modelu. V této technice se zásadně liší dvě varianty – jedna s příklady (One-Shot, Few-Shot), druhá bez nich.

One-shot CoT

Otázka: V sadu je 12 jabloní, 8 hrušní a 6 švestek. Kolik je v sadu celkem stromů?
Odpověď: Nejlepší způsob jak vyřešit tuto úlohu je sečíst počet jabloní, hrušní a švestek dohromady.
Výpočet: 12 + 8 + 6 = 26
V sadu je celkem 26 stromů.

Otázka: Pokud se v místnosti nachází 5 lidí a každý z nich si podá ruku s každým dalším člověkem v místnosti, kolik podání rukou celkem proběhne?
Odpověď:

Já zde vlastně říkám tím příkladem nejenom výsledek, ale i jak má nad tím uvažovat, že má ukázat výpočet a že má pak poskytnout slovní odpověď. Dám mu čas na rozmyšlení odpovědi (což je tedy trochu nepřesná formulace, protože jazykové modely nepřemýšlí nad odpovědí, ale píší jen pravděpodobné další slovo, pak další slovo…).

Klíčem je prostě dát AI prostor napsat si úvahy před tím, než se napíše výsledek. Opačně by to nefungovalo, stejně tak jako vy kdybyste měli nejdřív říct výsledek příkladu a teprve pak o něm přemýšlet.

Zero-shot CoT

Někdy je z mnoha důvodů těžké až nemožné dát příklad, ale kvalitní modely dnes zvládají se zamyslet, když je o to požádáte a mnohé to dnes už dělají rovnou, aniž je o to požádáte. Neexistuje jedna konkrétní formulace, Angličané třeba často říkají „take a deep breath“, my použijeme „zamysli se nejdříve, jak to nejlépe řešit“ nebo „postupuj krok za krokem“…

Vypočítej součet všech lichých čísel od 1 do 99. Uvažuj logicky a popiš svůj postup krok za krokem, a teprve poté uveď definitivní výsledek.

2. Self-Consistency

Touhle technikou byl dříve známý Google Bard, který pro každý dotaz generoval 3 odpovědi. Přincip je, že se model několikrát zeptá na stejnou otázku, třeba i s mírně pozměněnou formulací nebo parametry. Získáme tak více odpovědí, které se analyzují a porovnají.

Výsledná odpověď se vybere na základě konzistence. Zvyšuje spolehlivost, ale je výpočetně náročnější. Výhodou od některých jiných následujících metod je, že tento dotaz probíhá paralelně, tj. nezvyšuje nutně příliš čas na odpověď.

Aby to fungovalo opravdu takto nezávisle na sobě, musí se ty 3 dotazy položit ve 3 separátních konverzacích a pak v další separátní spojit, jinak by otázka v sobě zahrnovala i předchozí otázky a odpovědi. Proto se to spíš používá v AI aplikacích.

// V kódu (pseudokód):
odpovědi = []
For i in 1..5:
  odpovědi.push( VygenerujOdpověď(pro prompt "Kolik je 15 krát 23? Popiš svůj postup.") )
// Pak analyzuj pět odpovědí a vyber nejčastější výsledek

3. Prompt Chaining:

Tato technika je nesmírně užitečná pro řešení složitých úloh, které lze rozložit na menší, lépe uchopitelné kroky. Princip je jednoduchý: výstup z jednoho promptu se stává vstupem pro prompt následující. Tímto způsobem „řetězíme“ jednotlivé kroky dohromady a postupně budujeme komplexní řešení.

Proč je Prompt Chaining tak efektivní?

  • Přehlednost a struktura: Rozdělení úkolu na menší části usnadňuje pochopení a sledování postupu jak pro nás, tak pro AI.
  • Soustředění: Model se v každém kroku může plně soustředit na dílčí úkol, aniž by ho rozptylovala komplexnost celého problému.
  • Kontrola a ladění: Můžeme snadno kontrolovat a upravovat jednotlivé kroky, aniž bychom museli začínat od začátku.
  • Flexibilita: Můžeme v průběhu řešení měnit pořadí kroků, přidávat nové nebo upravovat stávající dle potřeby.

Příklad použití Prompt Chainingu:

Řekněme, že chceme, aby nám AI napsala detailní analýzu trhu s elektromobily v České republice. Místo jednoho obřího promptu můžeme úkol rozdělit na sérii dílčích kroků:

1. Prompt:

Shromáždi relevantní data o prodejích elektromobilů v ČR za poslední 3 roky. Uveď zdroje dat.

2. Prompt:

Na základě dat z předchozího kroku [vložíme výstup z prvního promptu] analyzuj hlavní trendy v prodejích elektromobilů v ČR. Zaměř se na meziroční srovnání, nejoblíbenější značky a modely.

3. Prompt:

Identifikuj hlavní faktory, které ovlivňují poptávku po elektromobilech v ČR. Zohledni ekonomické, politické i technologické aspekty. Vstup: [vložíme výstupy z předchozích kroků]

4. Prompt:

Na základě předchozí analýzy [vložíme výstupy z předchozích kroků] navrhni strategii pro zvýšení prodeje elektromobilů v ČR v příštích 5 letech.

5. Prompt:

Napiš shrnutí celé analýzy trhu s elektromobily v ČR, včetně hlavních zjištění, trendů a doporučení. Vstup: [vložíme výstupy z předchozích kroků]

Poznámka: pakliže pokračujete v rámci jedné konverzace, nemusíte vstupy extra kopírovat.

4. Least-to-Most Prompting:

Tato technika je v principu velmi podobná Prompt Chainingu, ale klade větší důraz na postupné budování řešení od nejjednodušších konceptů ke složitějším. Vycházíme z předpokladu, že pro AI je snazší nejprve pochopit a vyřešit jednodušší úkoly a na nich pak stavět komplexnější úvahy a závěry.

Kdy se hodí Least-to-Most Prompting?

  • Vysvětlování komplexních konceptů: Postupné vysvětlování od základů po pokročilé detaily.
  • Výuka a trénink: Učení AI novým dovednostem krok za krokem.
  • Řešení úloh s hierarchickou strukturou: Kde je přirozené začít od nejnižší úrovně a postupovat vzhůru.

Příklad Least-to-Most Promptingu:

Chceme, aby nám AI vysvětlila, jak funguje blockchain. Můžeme začít od nejjednodušších konceptů a postupně přidávat na složitosti:

1. Prompt:

Vysvětli, co je to distribuovaná databáze.

2. Prompt:

Vysvětli, co je to hashovací funkce a jak se používá v kryptografii. Vstup: [případně vložíme výstup z předchozího promptu, pokud chceme aby na něj navazoval]

3. Prompt:

Vysvětli, co je to blockchain a jak se liší od tradiční databáze. Vstup: [vložíme výstupy z předchozích promptů]

4. Prompt:

Popiš, jak probíhá ověřování transakcí v blockchainu. Vstup: [vložíme výstupy z předchozích promptů]

5. Prompt:

Vysvětli, jaké jsou výhody a nevýhody použití blockchainu. Vstup: [vložíme výstupy z předchozích promptů]

Poznámka: pakliže pokračujete v rámci jedné konverzace, nemusíte vstupy extra kopírovat.

5. Self-Refine:

Tato technika dává AI prostor pro sebereflexi a iterativní vylepšování vygenerovaných výstupů. Po vytvoření prvotní odpovědi dostane model za úkol tuto odpověď zkritizovat, najít v ní slabiny a navrhnout vylepšenou verzi.

Jak Self-Refine funguje v praxi?

  1. Prvotní generování: AI vygeneruje odpověď na základě zadaného promptu.
  2. Kritika: AI dostane za úkol zhodnotit svou předchozí odpověď a identifikovat chyby, nedostatky, nejasnosti nebo chybějící informace.
  3. Vylepšení: Na základě kritiky AI přepíše a vylepší původní odpověď.

Tento cyklus se může opakovat několikrát, dokud nedosáhneme uspokojivého výsledku.

Příklad Self-Refine

1. Prompt:

Napiš krátký příběh o robotovi, který se učí lidským emocím.

2. Prompt:

Přečti si svůj příběh a zamysli se, jak bys ho mohl/a vylepšit. Zaměř se na: a) Propracovanost postavy robota, b) Originalitu zápletky, c) Emocionální hloubku příběhu. Navrhni konkrétní změny. Vstup: [vložíme příběh z předchozího promptu]

3. Prompt:

Přepiš příběh s ohledem na navrhovaná vylepšení. Vstup: [vložíme příběh a kritiku z předchozích promptů]

6. Role-Playing (Act-Like):

Jednoduchá a hodně oblíbená je tato technika, někdy také označovaná jako Act-Like. Spočívá v přiřazení specifické role nebo osobnosti jazykovému modelu. Tím můžeme výrazně ovlivnit styl, tón, slovní zásobu a úhel pohledu generovaných výstupů. Model se vžije do zadané role a snaží se odpovídat tak, jak by to dělala daná postava nebo expert v daném oboru.

Kdy se Role-Playing hodí?

  • Kreativní psaní: Vytváření příběhů, scénářů, dialogů s autentickým vyzněním.
  • Generování textů v specifickém stylu: Například psaní marketingových textů, technických dokumentací, právních smluv, atd.
  • Simulace rozhovorů: Například s historickou postavou, fiktivním charakterem nebo expertem v určité oblasti.
  • Přizpůsobení jazyka cílové skupině: Například zjednodušení komplexních informací pro laiky nebo naopak použití odborné terminologie pro experty.

Příklady Role-Playing:

Prompt:

Představ si, že jsi zkušený someliér. Popiš toto víno [vložíme popis vína] a doporuč vhodné jídlo, které se k němu hodí.

nebo například:

Jsi zkušený copywriter specializující se na marketing pro sociální média. Napiš poutavý příspěvek na Instagram pro propagaci nového produktu - chytrých hodinek pro seniory.

Důležité aspekty Role-Playing:

  • Jasná definice role: Čím detailněji popíšete roli, tím lépe se model dokáže vcítit a generovat relevantní výstupy.
  • Konzistence: Model by se měl držet zadané role v průběhu celé konverzace.
  • Přiměřenost: Role by měla odpovídat kontextu a účelu zadání.

Kombinování technik – síla synergie

Nejlepších výsledků dosáhnete, když budete kombinovat různé techniky Prompt Engineeringu. Například můžete spojit Prompt Chaining s Least-to-Most pro strukturované řešení komplexního problému s postupným budováním řešení od nejjednodušších částí. Nebo můžete využít Self-Refine v rámci jednotlivých kroků Prompt Chainingu pro iterativní vylepšování mezivýsledků. A to vše se dá krásně doplnit i o Role-playing. Kdyby mi záleželo ještě přesně na formátu výstupu, mohl bych jej taky popsat nebo použít třeba One-shot techniku…

Příklad kombinace technik (Prompt Chaining, Least-to-Most, Self-Refine, Role-Playing):

Chceme, aby nám AI naplánovala dovolenou na míru.

1. Prompt (Least-to-Most, Role-Playing):

Představ si, že jsi zkušený cestovní agent. Zeptej se mě na mé preference pro dovolenou. Začni s nejobecnějšími otázkami např. na rozpočet a postupně se ptej na detailnější informace. (Možnosti: aktivní, relaxační, poznávací, u moře, na horách, ve městě, atd.)

3. Prompt (Prompt Chaining, Role-Playing):

Jako zkušený cestovní agent na základě mých preferencí navrhni 3 vhodné destinace pro moji dovolenou.

4. Prompt (Self-Refine, Role-Playing – neuvedená ale bude ji vědět z předchozí konverzace):

Zhodnoť navržené destinace z předchozího kroku. Jsou v souladu s mými preferencemi a rozpočtem? Jsou dostatečně rozmanité? Navrhni případné úpravy. a zeptej se mě na vybranou destinaci.

5. Prompt (Prompt Chaining, Role-Playing – neuvedená, doplnění kontextu z internetu):

Zjisti z internetu co nejvíce informací o vybrané destinaci a navrhni detailní itinerář dovolené na 7 dní, včetně ubytování, dopravy a aktivit. 

6. Prompt (Self-Refine, Role-Playing):

Jako zkušený cestovní agent zhodnoť navržený itinerář. Je realistický? Je dostatečně pestrý a zábavný? Jsou zahrnuty všechny důležité informace? Navrhni případné úpravy.

Pozor na Prompt engineering a reasoning modely

O reasoning (uvažujících) „modelech“ budu psát někdy příště (takže se neváhejte zdarma registrovat, aby vám přišla informace o novém článku do mailu), ale velmi v krátkosti to jsou vlastně nejsou ani tak modely jako spíš „framework“ – postup, při kterém AI nástroj automaticky rozdělí vaše zadání na menší podúkoly, v podstatě dělá sám z velké části hodně z toho, o čem jsem psal v tomto článku.

Teoreticky by tak pak mohlo stačit napsat jednoduchý dotaz a AI nástroj si sám udělá rozvahu a postupně to vyřeší.

Pravda ale není tak růžová, protože prostě stále záleží na tom, jak kvalitně umíte vaše zadání napsat, jestli je skutečně zcela jasné a jednoznačné, co má model dělat. Zmiňuji to ale hlavně z jednoho důvodu, o kterém ani mnozí profíci co začínají reasoning modely používat neví:

Reasoning modely se tlučou s některými prompt engineering technikami, nepoužívejte je dohromady (když nevíte přesně co děláte).

Jde o to, že aby se mohl uvažující model rozparádit, musíte mu dát možnost uvažovat, dělat všechny ty věci které je naučený že má provést předtím, než začne generovat odpověď. A těch je i mnohem víc než jsem tady napsal. Když mu dáte příliš svazující instrukce co má dělat, můžete výrazně omezit jeho schopnost uvažovat a dostanete horší výsledek.

Závěr – školení a cvičení dělá mistra

V tomto článku jsem zmínil jen asi ty hlavní techniky, existují mnohé další, na mých školeních se to snažím učit v zásadě tak, abyste se je vlastně vůbec učit nemuseli, když se nad nimi zamyslíte, jsou totiž vlastně strašně logické. Mimochodem – jestli máte někdo zájem – ještě mám jedno až dvě volná místa na dvoudenním školení hned zítra až pozítří v Praze, registrujte se a případně mi zavolejte a ještě to stihnem zprocesovat.

Prompt Engineering je mocný nástroj, který vám umožní naplno využít potenciál jazykových modelů. Nebojte se experimentovat, zkoušet různé přístupy a kombinovat techniky. S trochou cviku a kreativity se brzy stanete mistry v komunikaci s AI. Věřte, že tenhle skill se vám bude hodně hodit, stejně jako právě ta znalost počítačů, excelu či schopnost efektivního hledání na internetu.

Nové články sem přidávám porůznu, tak jestli nechcete, aby vám něco uniklo, přidejte si můj feed do RSS čtečky, sledujte můj Twitter, Facebook a LinkedIn, případně si nechte nové příspěvky posílat mailem (žádný spam!)