Jaroslav Tuma
Vedoucí týmu umělé inteligence a strojového učení ve společnosti MULTIMA

Komentování kódu je nezbytnou součástí jakéhokoli vývojového procesu. Komentáře v kódu pomáhají ostatním vývojářům (a často i nám samotným) pochopit, co kód dělá a proč. Často se však jedná o velmi opomíjenou oblast vývoje. To byl i případ jednoho projektu se kterým jsem se nedávno setkal.  Jednalo se o projekt mého kolegy, který však potřeboval do existujícího kódu komentáře doplnit. Do celého projektu v .NET. Bylo třeba projít přes 100 souborů obsahující zdrojové kódy.

Chopil jsem se příležitosti předvést ve firmě, jak nám může posloužit generativní AI. Chtěl jsem, aby výsledek pokud možno nezměnil nic v existujícím kódu, ale přidal pouze komentáře, a aby se nezměnily ani existující komentáře.

 

Problémy na které jsem narazil a jak jsem je vyřešil

Jedním z problémů, na které jsem narazil, byly soubory které překračovaly limit tokenů. Rozdělit takový soubor v půlce by nebylo dobré, protože by to mohlo vést ke ztrátě kontextu a srozumitelnosti kódu. Nakonec jsem se pokusil hledat dobré místo pro rozdělení například pomocí definic regionů, v horším případě v místě definice třídy nebo metody.

V rámci mé implementace jsem pracoval jak se systémem prompt, tak s user message. Systém prompt je vstup, který poskytneme umělé inteligenci (AI), aby věděla, co má dělat. Na druhé straně, user message je konkrétní obsah, který chceme, aby AI zpracovala. V případě user message, tato zpráva obsahovala jak určitý prompt, tak obsah konkrétního souboru.

Dalším problémem byla neměnnost původního kódu. ChatGPT měnil existující komentáře, překládal do češtiny komentáře v generovaných částech kódu, nebo měnil obsah stringových konstant, z angličtiny do češtiny. Abych to vyřešil, zkoušel jsem různé system prompty, různé user messages, ale nic nefungovalo. Jako mávnutím kouzelného proutku problém vyřešilo přidání uvozovek (‘’’) před začátek kódu. Jakmile jsem zdrojový kód takto uvedl většina problémů byla vyřešená.

Shrnutí

Celkově jsem strávil zhruba 5 hodin laděním promptů a kódu pro zpracování celého projektu. Skript pro 140 .cs souborů byl zpracován za 2h 40min. Cena se vešla pod 2 eura včetně všech dotazů, které jsem potřeboval pro odladění promptů. Výsledek byl dobrý, vzniklé komentáře byly smysluplné, bylo možné vygenerovat ze vzniklého kódu XML dokumentaci. I když jsem strávil nějaký čas laděním promptů, tak to určitě bylo rychlejší než procházet vše ručně.

Co se týče delších souborů, chtěl bych položit otázku, zda by měly vůbec existovat. Vždyť i pro lidského programátora není zrovna komfortní probírat se kódem který má mnoho tisíc řádků v jednom souboru.

Jak používat AI k lepšímu, čistšímu a čitelnějšímu kódu? To je otázka, na kterou budu hledat odpověď příště.

Níže je uveden příklad kódu, který jsem okomentoval. Bohužel z pochopitelných důvodů nemohu použít originální kód, takže jsem použil pouze vzorový kód.

Kód s doplněnými komentáři: