Vyrobte si skvělého, na míru šitého učitele či pomocníka

Pokračování včerejšího článku o ChatGPT Custom Instructions vás naučí na konkrétním příkladě vytvoření vám na míru šitého pomocníka.

Uveřejněno

Rubrika

Autor

Když jsem včera psal článek Novinka – ChatGPT Custom Instructions – k čemu jsou a jak je využít?, přemýšlel jsem, na čem bych vám ukázal její použití. Připomínám, že hlavní přínos nové funkce je, že si můžete vytvořit různé AI asistenty, kteří vám budou pomáhat řešit vaše požadavky.

A protože mám v kruzích hodně lidí co tu tam něco programují, podobně jako já „v sebeobraně“, prostě proto, že něco potřebují vyřešit, ale ne tak, že by se tomu věnovali na full-time a měli tak v hlavě všechny funkce či si platili třeba GitHub Copilot (must have AI pro programátory, někdy o tom také napíšu), řekl jsem si, že by se jim mohl hodit třeba učitel programování, který jim bude pomáhat psát kód a ještě jim říkat, jak to funguje a proč.

Zdůrazňuji – úplně stejně bych mohl ale vymyslet lektora španělštiny, asistenta na psaní hezkých e-mailů, šikovného copywritera pro články na web, pubertální markeťačku, co mi bude vymýšlet příběhy na tik-tok… Neodcházejte tak od čtení, i když vás programování nezajímá, principy budou podobné u všech asistentů.

Nemusíte mít jen jednoho asistenta!

Díky Custom instructions si takových pomocníků můžete vymyslet kolik chcete a přepínat mezi nimi. Zároveň si u každého z nich můžete vybrat, jaké může používat pluginy, nebo jestli má mít k dispozici Code interpreter. Vše popisuji v tom včerejším článku, takže jestli jej bůhvíproč neviděli, tak si jej přečtěte, než budete pokračovat dál (a zaregistrujte se, aby vám už žádný z mých článků neutekl).

AI školení – nové termíny a místa (Praha, Brno, České Budějovice)

Chcete dostávat tyto články na e-mail, aby vám nic neuteklo?

Jak vymyslet perfektního asistenta

Když chcete mít dokonalou souhru se svým asistentem, aby dělal přesně to co chcete, jsou dvě věci, které potřebujete znát

  • kdo jste vy – tedy co máte rádi a nesnášíte, co umíte atd. Samozřejmě v souvislosti s daným úkolem – při výuce programování je asi irelevantní, jestli umíte dobře vařit, naopak když budete vytvářet asistenta šéfkuchaře, tak mu asi nepomůže znalost vašich předchozích zkušeností s programováním. Pakliže tedy nechcete vytvářet aplikaci pro kuchaře.
  • jaký má být váš asistent – jak má odpovídat – krátce vs. dlouze, polopaticky či odborně, vtipně nebo stroze, má být víc kreativní nebo se držet faktů…? Fajn je rovnou při tom přemýšlet nad tím, jak chcete aby vypadaly výstupy – třeba jestli na konci chcete, aby kriticky zhodnotil co napsal a našel možné nedostatky, jestli má navrhnout další relevantní témata a podobně.

No a jestli jste četli včerejší článek tak už víte, že přesně tohle jsou ta dvě pole, která lze v Custom instructions nastavit, tak se pojďme vrhnout na náš úkol.

Příklad – vyrábíme AI učitele programování

Už jsem zde také psal o postupu psaní pokročilých promptů, kterému se říká Prompt Engineering, například v článku Prompt Engineering ChatGPT prakticky – zpřehlednění a sumarizace textu pro sociální sítě.

Kdybych vytvářel takové vymazlené zadání™ pro mého vysněného učitele programování, vypadalo by nějak následovně:

Role: Jsi profesor Krajta, trpělivý, příjemný, zkušený a vtipný učitel programovacího jazyka Python. Já jsem programátor, co zná několik programovacích jazyků (např. PHP a Javascript), ale s Pythonem začínám. Tvým úkolem bude odpovídat mi na mé dotazy dle zadaných pravidel
Pravidla:
- Snaž se být stručný.
- Mám rád praktické příklady a nebo typické situace a ukázky
- Uvítám konstruktivní kritiku věcí, o kterých diskutuji, nemusíš se mnou souhlasit, jestli máš jiný názor, vysvětli mi, proč si myslíš, že je to jinak
- Je-li to potřebné, pokládej mi související a upřesňující dotazy, abychom  v tématu nějak pokročili. Každá tvá odpověď by měla končit nějakou relevantní otázkou nebo další pomoci
- Odpovídej pouze na dotazy, které souvisí nějak s tématem programování, jazyka Python či konkrétního programu, který budeme řešit. Bude-li chtít uživatel řešit něco jiného, odpověz, že tomu nerozumíš a odkaž ho na jiného vhodného učitele (jméno a jeho emoji si vymysli)
- Když mi budeš dávat příklady v jazyce Python, dodržuj programátorské "best practices"
- Buď příjemný a vtipný, ne příliš formální
- Každou svou odpověď uveď emoji hada
Začni tím, že se mě zeptáš, co by mě zajímalo

Myslím, že je to celkem samovysvětlující, pro neprogramátory jen doplním , proč tam píšu, že už znám nějaké jiné programovací jazyky – spousta teorie je společná pro všechny programovací jazyky – všechny mají proměnné, smyčky, podmínky… takže tím že říkám, že umím programovat, tak očekávám, že mi nebude vysvětlovat tyhle elementární základy.

Všimněte si, že taková definice je moje vlastní – vy máte možná jiné zkušenosti a také máte třeba rádi jiný styl komunikace… takže i když byste chtěli taky učitele Pythonu, tak by vaše definice byla dost možná jiná.

Jak už jsem vysvětlil v předchozím článku, takovýto prompt má tu nevýhodu, že je jen běžnou „user role“ definicí, takže časem „vybledne“ a proto z toho potřebujeme udělat zadání pro Custom instrukce – tedy rozdělit informace na ty, které se týkají mě a které se týkají asistenta.

Zadání – informace o mně

Já jsem programátor, co zná několik programovacích jazyků (např. PHP a Javascript), ale s Pythonem začínám. 
- Mám rád praktické příklady a nebo typické situace a ukázky
- Uvítám konstruktivní kritiku věcí, o kterých diskutuji

Zadání – požadavky na komunikaci asistenta

Jsi profesor Krajta, trpělivý, příjemný, zkušený a vtipný učitel programovacího jazyka Python. Tvým úkolem bude odpovídat mi na mé dotazy.
- Snaž se být stručný.
- Nemusíš se mnou souhlasit, jestli máš jiný názor, vysvětli mi, proč si myslíš, že je to jinak
- Je-li to potřebné, pokládej mi související a upřesňující dotazy, abychom  v tématu nějak pokročili. Každá tvá odpověď by měla končit nějakou relevantní otázkou nebo další pomoci
- Odpovídej pouze na dotazy, které souvisí nějak s tématem programování, jazyka Python či konkrétního programu, který budeme řešit. Budu-li chtít řešit něco jiného, odpověz, že tomu nerozumíš a odkaž ho na jiného vhodného učitele (jméno a jeho emoji si vymysli)
- Když mi budeš dávat příklady v jazyce Python, dodržuj programátorské "best practices"
- Buď příjemný a vtipný, ne příliš formální
- Každou svou odpověď uveď emoji hada

Výsledné zadání Custom instructions

Obě zadání pak jsem pak vložil do vlastních instrukcí (návod viz předchozí článek). Mimochodem později jsem si uvědomil, že bych mohl přidat ještě třeba informaci, že se jmenuju Tomáš – pak by mě nejspíš oslovoval a přidal tomu další osobní rozměr, který zlepšuje u uživatelů přijímání informací.

Nezapomeňte na pluginy / code interpreter

Mimochodem – podobného asistenta skutečně osobně používám, resp. několik podobných, a protože mám i placenou verzi ChatCPT Plus, tak se liší často jen tím, jakou verzi ChatGPT používají či jaké mají povolené pluginy a samozřejmě u jednoho programovacího mám zapnuté i Code interpreter. Takto pak mezi nimi přepínám.

Jak to nastavit a používat se opět dočtete v minulém článku.

Ukázky práce s mým „profesorem“

Ukázka 1 – naprogramujeme si hru

Vyzkoušel jsem „svého“ chatbota Profesora krajtu a docela jsme si pokecali, začali jsme obecně diskusí, já navrhl vytvořit nějakou jednoduchou hru a na konci naší diskuse jsme měl funkční piškvorky, aniž bych napsal jediný řádek kódu a aniž bych musel znát Python.

Jak vidíte, drží se nastavených instrukcí, dává příklady, není příliš formální, ptá se mě, poslouchá mé připomínky… Výsledný kód si můžete zkopírovat či vyzkoušet na mém Google Colab.

Co na to říkáte? Já bych takovéhoto trpělivého učitele miloval. Navíc jej mám k dispozici 24 hodin denně 7 dní v týdnu, prostě naprostý „edu changer“ – dejme žákům asistenty pro každou oblast, přizpůsobené jim samým, resp. naučme je je vytvářet a používat, dejme jim bezpečné prostředí a máte „AI vzdělání 2.0“.

Možná si teď říkáte „A programátoři nebudou mít co žrát“ – opak je (zatím?) pravdou – když se podíváte na záznam mé komunikace s botem vidíte, že nenapsal program správně na první dobrou, resp. tak jak bych si to představoval. Z části proto, že samozřejmě neví, co se mi líbí, ale i proto, že jsem mu nedal dostatečně přesné zadání, jestli se tedy vůbec dá větě „Piškvorky zní fajn“ říkat zadání :-).

Tyto chatboty mohou velmi výrazně pomoci zadavatelům vytvářet kvalitní zadávací dokumentaci. Ale stále minimálně ještě nějakou dobu a hlavně pro rozsáhlejší aplikace bude třeba programátorů a programátorských týmů. Ale i oni budou používat podobné AI / chatboty, často již integrované do jejich vývojových prostředí, jestli máte zájem, dejte mi na sockách vědět a také o tom napíšu.

Ukázka 2 – Nechme si vysvětlit program či napsat zadání

Správný učitel programování nemusí samozřejmě jen psát jen program za vás ale naopak vám může pochopit cizí kód, opravit jej, upravit do jiného programovacího jazyka / pro jiné knihovny či prostředí, doplnit do něj komentáře či unit testy… prostě dělat spoustu té děsně otravné a nekreativní práce, která programátory děsně nudí a zdržuje.

Zkusme tedy opačný příklad – mám nějaký kód (použiji ten, který vygenerovat můj profesor Krajta v předchozí ukázce) a necháme z něj udělat kompletní zadání, tak, abych jej mohl poslat jinému programátorovi a dostal bych od něj pokud možno stejně funkční aplikaci.

Poznámka: správně abych zamezil tomu, že můj profesor zná mé připomínky a požadavky z naší diskuse při tvorbě kódu, bych mu to měl dát jsem to vypracovat v novém chatu, pouze na základě kódu.

Můj požadavek (jak můžete vidět v záznamu naší komunikace) byl

Nyní napiš dokumentaci k programu, která bude obsahovat všechny instrukce, ze kterých půjde tento program perfektně a bez chyb napsat.

Nejdřív to napsal jinak než jsem si představoval, včetně nějakých vzorků kódu, tak jsem jej požádal o změnu.

Druhá verze zadání byla tak jak jsem si představoval, ale měla jednu zajímavou „chybu“, viz poslední řádek obrázku – v piškvorkách, které předtím vytvořil, se totiž zadával řádek a sloupec zvlášť. Vlastně je škoda, že mě tahle možnost nenapadla, už jsem to ale nechtěl předělávat, a tak jsem nechal vygenerovat poslední verzi zadání přesně vygenerovaného podle kódu:

Samozřejmě, omlouvám se za tu odlišnost. Zde je upravené zadání podle mého řešení:

Herní Pole:
Vytvořte mřížku 3x3, kde hráči mohou umisťovat své symboly.
Každá buňka bude identifikována zvlášť řádkem a sloupcem (oba od 1 do 3).
Hráči:
Vytvořte dvě role hráčů - 'X' a 'O'.
Hráči se střídají v tahách.
Před každým tahem vypište, který hráč je na tahu.
Tahy:
Zeptejte se hráče na řádek a sloupec (čísla od 1 do 3), kam chce umístit svůj symbol.
Zkontrolujte, zda je pozice volná, a pokud ne, žádejte nový vstup.
Po každém tahu vyčistěte konzoli.
Vyhrávající Podmínky:
Zkontrolujte, zda některý z hráčů vyhrál po každém tahu (3 stejné symboly v řadě, sloupci nebo na diagonále).
Remíza:
Pokud je pole plné a nikdo nevyhrál, oznámte remízu.
Ukončení a Nová Hra:
Po skončení hry zobrazte výsledný stav pole.
Zeptejte se hráčů, zda chtějí hrát znovu, a pokud ne, ukončete program.
Rozhraní pro Google Colab:
Použijte speciální metody pro vyčištění výstupu v prostředí Google Colab.
Doufám, že toto je již přesně podle tvého očekávání! Mám pro tebe něco dalšího, nebo chceš něco dalšího prozkoumat v této velké zemi Pythonie?

Ukázka 3 – bezplatný ChatGPT a tvorba kódu

Uvedené ukázky generoval můj profesor Kobra s modelem GPT 4, který je dostupný v placené verzi ChatGPT Plus. Ale nastavení custom instructions jsou společná, takže když spustíte nový chat se starším modelem, bude fungovat i v něm (byť samozřejmě méně schopně).

Dal jsem mu výše uvedené zadání a nechal jej vygenerovat opět celou hru. Pouze jsem u musel ještě říct, aby napsal celý kód, viz záznam našeho chatu.

Vygenerovaný kód funguje velmi dobře, jak se můžete přesvědčit opět v mém Google Colab (tato část začíná v druhé půlce), pouze chybí funkce na čištění výstupu mezi tahy.

Jaké asistenty si vytvoříte vy?

Doufám, že jsem předchozími odstavci neodradil ty, které programování nezajímá. Zajímá mě, jaké asistenty vytvoříte vy – nasdílejte můj článek, dejte mi mention a pošlete vaše zadání, problémy, otázky, zkušenosti. Možná i dokážu poradit a navrhnout nějaká zlepšení.

Tlačítka na sdílení jsou ⬇️⬇️⬇️ tady dole, nezapomeňte se také registrovat, ať vám žádný článek neunikne, případně mě začít sledovat na Facebooku, Twitteru a LinkedIn.

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!)