facebook LinkedIN LinkedIN - follow
IT SYSTEMS 4/2023 , AI a Business Intelligence

Experimentování s ChatGPT

Praktické ověření možností využití ChatGPT z pohledu vývojářů

Jiří Hanuš


ChatGPT společnosti OpenAI představuje revoluci v možnos­tech zpracování jazyka. Jako nejmoder­nější jazykový model byl ChatGPT vycvičen na obrov­ském množství dat a dokáže generovat konverzač­ní textové odpovědi podobné lidským. Díky svým výkonným schopnostem generování jazyka má ChatGPT potenciál výrazně pomoci a zefektivnit práci vývojářů v různých oblastech. Schopnosti ChatGPT nabízejí vývojářům obrovskou hodnotu – od generování fragmentů kódu přes poskytování dokumentace, pomoc při ladění až po funkci virtuálního týmového kolegy – a činí z něj slibný nástroj pro zvýšení produktivity a efektivity jejich práce.


V perexu tohoto článku popisuje ChatGPT sám sebe, protože co by to bylo za článek o umělé inteligenci, kdyby alespoň jeho část neby­la vygenerovaná (a přeložená do češtiny) pomocí AI. V následujícím textu se podíváme, jakou skutečnou hodnotu nabízí ChatGPT vývojářům z hlediska reálných vývojářů různé úrovně a zaměření.

K prozkoumání možností využití ChatGPT ve vývoji softwaru jsme s kolegy z Capgemini sestavili co možná nejrůznorodější tým. Zprvu jsme se chtěli zaměřit na role vývojář a tester. Pro každou z rolí jsme vybrali různě zkušené kolegy. V roli vývojáře byl seniorní .Net vývo­jář s předchozí zkušeností s neuronovými sítěmi z univerzity. Jako testera jsme vybrali kolegu, který doposud pracoval na jiné pozici, ale s testingem chtěl začít. Jelikož se později ukázalo, že ChatGPT může být nejvíce nápomocen juniorním pozicím, přibrali jsme další dva vývojáře, kteří zrovna dokončili náš Java Trainee program.

Cesta začínajícího testera

V tomto případě bylo naším cílem zjistit, jak může ChatGPT usnadnit první krůčky začínajícímu testerovi bez předchozí zkušenosti s programováním či testováním. Jeho první dotaz zněl následovně: „How can a complete beginner start with testing using Selenium in Visual Studio?“ Odpovědí byl výčet kroků obsahující, co si odkud nainstalovat, jak založit projekt, které knihovny si přidat a jak spustit první test. Následovalo vysvětlení pojmů, o kterých sám ChatGPT usoudil, že by bylo vhodné je znát (tj. náš začínající tester se na ně explicitně nezeptal).

Po několika vyjasňovacích dotazech a příkladech použití došlo na první test: „Create a test code using Selenium API.“ Bez konkrétního zadání ChatGPT navrhl test spočívající v navštívení google.com a vyhledání výrazu selenium testing.

Test neproběhl a vrátil 35 chyb. Po stížnosti, že test nefunguje a vrací chyby, se ChatGPT sám zeptal, jestli by náš tester dokázal poskytnout error kódy zmiňovaných chyb. Postupně chybu za chybou pak navrhoval řešení k jejich odstranění. Nakonec zbyla jediná chyba, kterou musel vyřešit seniorní tester.

Nutno ještě podotknout, že jedna z chyb plynula ze smíchání dvou technologií. To znamená, že ChatGPT v rámci jednoho diskusního vlákna navrhl pro stejný test útržky kódu různých přístupů, které dohromady nemohly fungovat. A to samozřejmě náš začínající tester nedokázal rozlišit.

Po prvním jednoduchém testu UI byly testy zesložiťovány, až jsme si troufli na reálný test námi vyvíjené webové aplikace, kde jsme narazili na limity ChatGPT 3. Z poskytnutých dílčích kousků kódu ChatGPT stránce nerozuměl a celý popis by se nevešel to tehdejšího limitu osmi tisíc tokenů.

Po dobu jednoho týdne jsme monitorovali počet a délku dotazů a odhadli jsme, že při použití nejdražšího modelu Davinci by dotazy našeho testera stály necelé 4 USD. (Počítáno z cen pro ChatGPT 3.)

I přestože bez rad seniorního testera se nelze obejít, konverzace s ChatGPT odfiltruje většinu dotazů a na ten zbytek juniora tak připraví, že diskuse se seniorem je efektivní.

Co jsme si z tohoto experimentu odnesli:

  • I začínající tester může vytvořit značnou část kódu sám.
  • Není třeba vše řešit se seniorními kolegy.
  • Ve většině případů je konverzace s ChatGPT jednodušší a rychlejší než hledat odpověď online.
  • Podpora seniorního kolegy je stále potřeba, ale v mnohem omezenější míře.
  • Tester bez předchozí zkušenosti nebude vědět, na co se v některých případech může zeptat.
  • Někdy je potřeba si vyžádat více alternativ řešení, aby uživatel získal funkční návrh.
  • Při řešení konkrétních chyb můžou návrhy ChatGPT skončit ve smyčce.

Oblasti použití pro vývojáře

Využití ChatGPT pro vývojáře jsme ověřovali v těchto oblastech:

  • Generování zdrojového kódu – konkrétní úkol v libovolném jazyce, např. čtení csv, parsování JSON souboru, skripty pro správu serverů
  • Generování šablon
  • Refaktoring a asistence při úpravách kódu
  • Generování dokumentace
  • Asistence, například při řešení chyb
  • Testing, např. generování šablon pro unit testy
  • Code review
  • Vysvětlení kódu

Jako příklad generování zdrojového kódu rozebereme podrobněji generování skriptu v powershellu. Powershell je vhodná ukázka využití ChatGPT, protože je syntakticky složitý a nepoužívá se tak často. Takže i zkušený vývojář si jej musí oprášit. Navíc množina jeho využití je užší (zejména administrace serverů) např. proti C#, ve kterém je vyvíjena spousta různorodých aplikací. Zároveň existuje na internetu mnoho jednoduchých příkladů jeho použití, takže ChatGPT je na něj dobře natrénován.

Na rozdíl od předchozích zkušeností juniorního testera, kde to byl ChatGPT, který vedl testera základy tvorby testů v Seleniu, zde je to vývojář, který vede ChatGPT svými dotazy a postupně rozšiřuje funkčnost skriptu. To je zároveň i námi doporučovaný postup. Nejlépe rozdělit úlohu na drobné funkční celky a ty pak ručně spojit. U složitějších případů vývojář nedostane výsledek na první dotaz, takže je potřeba iterovat k výsledku. Rozdělení na funkční fragmenty kódu je lepší než postupné nabalování funkčnosti, protože od určitého momentu ChatGPT začne svévolně měnit původně zadanou funkčnost. Pokud například bylo zadání vytvořit čtyři složky na začátku skriptu, může se stát, že po několika iteracích a rozšíření funkčnosti ChatGPT bude vracet skript, který vytváří jen dvě složky.

Dalším příkladem využití ChatGPT k urychlení vývoje je generování šablon. Například vytvoř třídu v C# na základě předloženého tabulkového typu.

Během testování možností refaktoringu byl náš tým rozdělen na dva tábory. Závěr seniorních vývojářů byl: „Je dobré si návrhy ChatGPT přečíst, ale uživatel nesmí očekávat, že by ho přivedl na něco, na co by sám po přečtení kódu nepřišel.“ Na druhou stranu juniorní kolego­vé si schopnosti ChatGPT pro refaktoring pochvalovali. Navržené úpravy do jejich kódu byly mnohem výraznější a výsledná čitelnost mnohem lepší. Tím lze i ušetřit čas seniorních kolegů během code review. Na druhou stranu ChatGPT do jejich kódu zavedl funkční změny, na které upozornil až seniorní vývojář právě při code review.

Co se týče generování dokumentace, současná IDE umí předgenerovat XML taky, ale neumí vyplnit jejich obsah. Zde by ChatGPT jako nejmodernější jazykový model měl zazářit. Ale často se stane, že tupě popíše to, co je z kódu na první pohled vidět. Nejlepších výsledků jsme dosáhli u kódu, který už byl částečně okomentován i heslovitě. ChatGPT z kombinace kódu a stručného popisku vygeneroval smysluplný popis.

Dalším praktickým využitím ChatGPT je nechat si vysvětlit existující kód. Málokdy vývoj začíná na zelené louce. Nejčastěji je třeba zasa­dit úpravu do existujícího řešení a juniorní vývojář si takto může udělat dobrou představu o kontextu. Ale i seniorní vývojář může díky tomu nahlédnout pod pokličku jiné vrstvy vyvíjené na odlišné tech­no­lo­gii. Vysvětlení poskytnuté ChatGPT je velice detailní a srozumi­tel­ně strukturované. Nakonec ChatGPT přidá i krátké slovní shrnutí analyzovaného kódu. Dokáže popsat i větší celky kódu, ale čím větší fragment kódu je, tím větší je riziko, že vynechá deklaraci nebo naplnění proměnné a dál vysvětlení nebude dávat smysl. Vysvětlení závisí na kontextu dané konverzace. Jinými slovy, může vysvětlit stejný kód různě v závislosti na obsahu předchozích dotazů.

Na základě našeho experimentu jsme sestavili následující sadu doporučení:

  1. Jasná definice požadavku. V jakém jazyce je výstup požadován, jaký algoritmus se má použít, v jaké formě má být výstup. Na druhou stranu, čím je zadání vágnější, tím různorodější výstupy může uživatel dostat.
  2. Start simple! Začněte s malými a jednoduchými úlohami, izolovanou funkčností.
  3. Experimentujte s parametry modelu. Zejména parametr Temperature může pomoci při zacyklení. Čím vyšší hodnota temperature, tím náhodnější výstup.
  4. Vždy pečlivě zkontrolujte vygenerovaný kód. Viz naše příklady zanesení chyby při refaktoringu, vynechání původně zadané funkčnosti nebo smíchání dvou druhů kódu do jedné odpovědi.
  5. Zvažte Fine Tuning. Pokud ChatGPT vrací neuspokojivé nebo příliš obecné výstupy, lze model doučit pro vlastní potřebu.

Další řešené případy

Jeden z řešených případů, který nezapadá ani do role vývojáře, ani do role testera, byl vytvořit chatbota, který pomůže uživateli s ori­en­ta­cí na webu. Příklad otázky může být: „Kde najdu výpis z účtu?“

Vycházeli jsme z předpokladu, že ChatGPT už je natrénován na obrovském množství textu, díky čemuž rozumí kontextu. On sám na otázku, jestli rozumí kontextu, odpoví, že ano. Díky tomuto porozumění by nebylo třeba velkého množství dat, tj. párů (možná otázka; správná odpověď) k jeho doučení.

Ale náš předpoklad byl špatný. Vzhledem k tomu, že se jedná o matematický model, který podle pravděpodobnosti skládá slova. Jeho porozumění kontextu je natolik limitované, jestli vůbec nějaké, že náš use case naučit ho odpovídat na různorodé dotazy pouze na základě doučení na jednotkách párů, a tím ušetřit práci týmům, které připravují trénovací data pro chatboty, selhal. Byly by potřeba stovky záznamů (konverzace s helpdeskem, e-maily).

Dosáhli jsme dílčích výsledků upřesněním dotazů ve skrytém poli, které lze k chatu připojit společně s promptem uživatele. Ale nic, co by zásadně zmírnilo vytížení zmíněných týmů nebo urychlilo nasazení chatbota. Na druhou stranu naše množina trénovacích dat byla smyšlená a omezená. Za zvážení by stál skutečný PoC s reálnými daty, který by ukázal, jestli lze snížit požadavky na objem trénovací množiny dat.

Mimo využití ChatGPT ve vývoji softwaru jsme narazili i na příklady z jiných oblastí. Například vygenerování popisu pozice od HR na základě vágního nebo heslovitého zadání od managementu.

Závěr: žádná revoluce se zatím nekoná

Během experimentování jsme u různých úloh došli ke stejným obecným závěrům:

  • Uživatel musí vědět, co chce, a zároveň musí dané problematice rozumět.
  • K uspokojivému výsledku lze dojít až po několika iteracích upřesňování dotazu.
  • Během těchto iterací může ChatGPT zapomenout (nebo ignorovat?) část původního zadání.
  • Vhodnější pro juniorní pozice.
  • Explicitně jej požádejte, aby vás upozornil, jestli si není jist, nebo aby se případně doptal na upřesnění.
  • Nejčastěji jsme narazili na omezení z hlediska porozumění, o čem je řeč. Přestože syntakticky jsou odpovědi srozumitelné, sémantika je statisticky poskládaná z naučených textů a u složitějších problémů nedává smysl.

Závěrem stojí za to se zastavit nad tím, jakou skutečnou hodnotu přináší ChatGPT vývojářům a do jaké míry dokáže zvýšit produktivitu a efektivitu jejich práce, jak sám o sobě vygeneroval v úvodu našeho článku. Testovali jsme jej v identických oblastech, které sám vyjmenovává, tj. generování fragmentů kódu nebo dokumentace, pomoc při ladění až po virtuálního asistenta. Význam a efektivita ChatGPT jako pomocníka klesá se senioritou uživatele. Jak jsme si mohli všimnout v části začínajícího testera, ChatGPT je dobrým a levným průvodcem, ale pro seniornější pozice se jedná o zefektivnění drobností. Například nastudování nasazení Blazor projektu do Firebase bez předchozí znalosti podle návodu na YouTube zabral 15 až 20 minut a podle rad ChatGPT okolo osmi. Takových příkladů lze vyjmenovat desítky. Uspoření času je sice 50%, ale ve skutečnosti se jedná o minutu k minutě, takže žádná revoluce se podle našich závěrů nekoná. Minimálně co se týká našich pozic na pracovním trhu, jak některé titulky na internetu straší. Bohužel budeme muset dál ještě přemýšlet sami.

Jiří Hanuš
Autor článku pracuje na pozici IT analytik ve společnosti Capgemini Česká republika, kde se přes 5 let věnuje projektům ve finančnictví a kde vede tým pro výzkum ChatGPT.
Chcete získat časopis IT Systems s tímto a mnoha dalšími články z oblasti informačních systémů a řízení podnikové informatiky? Objednejte si předplatné nebo konkrétní vydání časopisu IT Systems z našeho archivu.

Inzerce

Transformace bankovnictví a pojišťovnictví v éře umělé inteligence

Umělá inteligence se stala hy­ba­te­lem digitální revoluce ve finančním sektoru. Přináší bezprecedentní možnosti automatizace, personalizace služeb a optimalizace rizik. Přestože potenciál AI je enormní, jen malá část bank má připravenou komplexní strategii pro její implementaci.