Měla to být velká pomoc programátorům. Umělá inteligence GitHub Copilot umí programátorům navrhnout kód, který nejspíš chtějí napsat. Řídí se přitom analýzou kódu mnoha open source projektů. Aktuální studie však ukázala, že 40 procent návrhů vytvořených na základě strojového učení obsahuje bezpečnostní chyby. To je samozřejmě bezprostřední problém, ale ukazuje to i na obecné limity toho, čemu rádi říkáme umělá inteligence.

Programátoři jsou při psaní kódu v moderních editorech zvyklí na to, že jim počítač pomáhá. Doplňuje například názvy proměnných, metod a funkcí a kontroluje syntaktickou správnost kódu (jestli někde nechybí uzavřená závorka a podobně). To lze přirovnat ke kontrole překlepů v běžném textovém editoru. Ta sice nezajistí, že napsaný text bude správně (po obsahové ani pravopisné stránce), ale odhalí běžné chyby jazykového charakteru (třeba když napíšete „ajko“  místo „jako“).

Nedávno jste již předplatné aktivoval

Je nám líto, ale nabídku na váš účet v tomto případě nemůžete uplatnit.

Pokračovat na článek

Tento článek pro vás někdo odemknul

Obvykle jsou naše články jen pro předplatitele. Dejte nám na sebe e-mail a staňte se na den zdarma předplatitelem HN i vy!

Navíc pro vás chystáme pravidelný výběr nejlepších článků a pohled do backstage Hospodářských novin.

Zdá se, že už se známe

Pod vámi uvedenou e-mailovou adresou již evidujeme uživatelský účet.

Děkujeme, teď už si užijte váš článek zdarma

Na váš e-mail jsme odeslali bližší informace o vašem předplatném.

Od tohoto okamžiku můžete číst neomezeně HN na den zdarma. Začít můžete s článkem, který pro vás někdo odemknul.

Na váš e-mail jsme odeslali informace k registraci.

V e-mailu máte odkaz k nastavení hesla a dokončení registrace. Je to jen pár kliků, po kterých můžete číst neomezeně HN na den zdarma. Ale to klidně počká, zatím si můžete přečíst článek, který pro vás někdo odemknul.

Pokračovat na článek

Další úroveň pomoci při programování představuje statická analýza kódu, jejímž výsledkem je nejenom jistota, že kód bude možné zkompilovat, ale také odhalení těch nejběžnějších chyb, jako je třeba deklarování proměnné, která není později použita (a je tedy deklarována zbytečně). To lze přirovnat ke kontrole pravopisu, která disponuje nejenom tupým seznamem slov, ale snaží se porozumět jazyku a jeho morfologii.

Poslední dobou se s rozvojem technologií rozmáhá třetí stupeň asistence, kdy se vývojový nástroj snaží porozumět smyslu kódu, který píšete, a navrhuje vám jeho vylepšení. Může se jednat o návrh využití nových funkcí příslušného programovacího jazyka, ale třeba i o detekci potenciálních výkonových a bezpečnostních chyb. To se dá přirovnat k funkci kontroly gramatiky, která se snaží pochopit daný text a navrhovat gramatické opravy v něm, například chápe koncept shody podmětu s přísudkem či pravidla pro používání čárky ve větách.

GitHub Copilot jde ještě dál. Snaží se pochopit, čeho chce programátor svým kódem dosáhnout, a napsat části kódu zcela za něj. Je velice obtížné to vysvětlit neprogramátorovi, ale přesto se o to pokusím. I v běžném lidském jazyce se vyskytují určité fráze, často opakované sekvence slov, zejména v konkrétních částech psaného textu. Například pokud na začátku textu začnete psát „váž“, může vám textový editor nabídnout automatické doplnění na „vážený pane“ nebo „vážená paní“. Stejně tak pokud na konec dopisu napíšete „s“, může textový editor doplnit „s upřímným pozdravem“.

Pokud editor rozumí žánru vašeho dokumentu, může být ještě víc nápomocen. Například v právních a lékařských textech se velice často opakují tytéž pojmy, části vět, nebo dokonce celé věty a textový editor vám s nimi může pomoci. Jeden můj kamarád, pohybující se v oboru práva, již léta používá automatické opravy ve Wordu k tomu, že napíše několik vybraných písmen a symbol a Word automaticky doplní typicky používanou frázi. On si seznam těch svých pracně buduje již několik desítek let, ale pokud dáte učícímu se algoritmu k dispozici dostatek vstupních dat (tedy existujících textů), dokáže se je naučit sám. Budou-li to texty jednoho autora, dokáže algoritmus přejmout i jeho styl, typické fráze a obraty.

Text programu (programový kód) je v tomto ohledu pro automatickou analýzu ještě vhodnější. Prvně protože jeho syntaktická struktura je mnohem přísnější a je podrobněji definována než u běžného lidského jazyka. Programovací jazyky mají jednoznačná pravidla „pravopisu“ a „gramatiky“. No a také protože těch opakujících se sekvencí je v typickém programu mnoho. U typických aplikací je velká část kódu „boilerplate“, který tam sice být musí, ale nepředstavuje individuální intelektuální vklad svého autora. Je to obecná konstrukce, u níž existuje jeden nebo několik málo způsobů, jak je napsat, a to je všechno.

Přirovnáno opět k lidskému jazyku, představte si „zdeúřední ptydepe“ klasických správních rozhodnutí. Značná část textu – začátek, konec, různá poučení –, ale i jeho celková struktura je buďto přímo předepsána zákonem, nebo vyplývá ze zvykového práva a konvencí. Část textu, která se týká konkrétní věci a která je „jedinečným výsledkem tvůrčí činnosti autora“ (což je část definice autorského díla ze zákona 121/2000 Sb. o právu autorském), je ve skutečnosti velice malá.

GitHub Copilot funguje tak, že jeho algoritmus je vytrénován na obrovském množství open source programů, kterým se snaží „porozumět“. Když potom programátor začne psát kód, který připomíná něco, co algoritmus už viděl, nabídne mu pokračování. Už jenom výše popsaný postup se stal po představení technologie zdrojem kontroverzí. Z hlediska autorského práva totiž není jisté, zda je takové použití open source zdrojového kódu vůbec možné a zda se v případě vygenerovaného nového zdrojáku nejedná o dílo odvozené, které je nutně podle řady open source licencí (např. dle populární GNU General Public License) kryto toutéž licencí – musí tedy být také dostupné jako open source.

Nově zveřejněná studie ale ukazuje na zcela jiný problém: totiž na kvalitu takto vygenerovaného kódu. Ve čtyřiceti procentech případů totiž kód navržený algoritmem obsahoval známé a typické bezpečnostní chyby. Pokud by byl bezmyšlenkovitě použit, ohrozilo by to bezpečnost programu, v němž je zahrnut.

Samozřejmě že lze poněkud uštěpačně utrousit, že problém je právě v oné bezmyšlenkovitosti. Že je lhostejno, zda se kód tupě a bez porozumění použije, protože ho navrhl počítačový algoritmus, nebo zda si ho programátor sám našel a zkopíroval ze StackOverflow (populární programátorské diskusní fórum). Nicméně přesvědčení, že počítače se nemýlí, je kupodivu mezi vývojáři rozšířené stejně jako mezi mudlovskou populací a návrh algoritmu bude principiálně pokládán za důvěryhodnější.

Část problému je v tom, čemu dost optimisticky říkáme umělá inteligence neboli AI. Pod tuhle zkratku se – zejména v marketingových materiálech a politických projevech nedouků – schová ledacos. Bohužel, naprostá většina AI algoritmů funguje poněkud opičím, kargokultickým způsobem. Kvalita výstupu pak extrémně závisí na datech, na kterých byla příslušná „AI“ vytrénována. A jak říká staré programátorské úsloví: „Garbage in, garbage out.“ Z odpadu se vyrobí zase jenom odpad. Trénink na kódu nízké kvality způsobí zase kód nízké kvality, včetně bezpečnostních aspektů.