Jak zkontrolovat kód napsaný AI, než ho použijete?

Kód od AI může vypadat přesvědčivě a přitom dělat něco jiného, než jste zadali. Před použitím si proto napište několik vstupů a výsledků, které od něj čekáte, uložte první verzi a teprve pak ji spusťte. Ukážeme to na malé offline kalkulačce rozdělení účtu. Tentokrát kontrola chybu neodhalila; i to je poctivý výsledek, nikoli důvod nějakou dodatečně vymyslet.

Schéma kontroly kódu od AI: zadání, první verze a ověření výsledků
Tři kroky naší ukázky. Schéma vysvětluje postup; naměřené výsledky jsou níže.

Nejdřív určete, co má program dělat

Zadání pro model bylo konkrétní: vytvořit jediný offline soubor index.html, který rozdělí částku v korunách mezi 1 až 100 lidí. Částku zadáváte s desetinnou čárkou, nejvýše se dvěma desetinnými místy. Výpočet musí probíhat v celých haléřích; když nejde účet rozdělit rovnoměrně, přebytečné haléře dostanou první osoby v seznamu. Chybné zadání musí vyvolat srozumitelnou zprávu a smazat předchozí výsledek. Bez knihoven, síťových volání a ukládání dat.

Ještě před vytvořením kódu jsme uložili přesné zadání a očekávané výsledky do pre-registered.json. Mezi příklady patří 100,01 Kč / 3 → 33,34 + 33,34 + 33,33 Kč a 0,01 Kč / 3 → 0,01 + 0,00 + 0,00 Kč. Taková kontrola odděluje zadání od první odpovědi AI: neměníte pravidla až podle toho, co vám program zrovna vypíše.

První verzi uložte, než začnete opravovat

První HTML soubor vznikl pomocí modelu gpt-6-sol v Hermes Agentu. Nedotčená kopie first-pass.html se shoduje s testovaným index.html. Nejde o porovnání různých modelů ani o test GitHub Copilotu. Když si schováte původní výstup, uvidíte, zda oprava skutečně změnila chybnou část, nebo jen přepsala test.

Podstatná část výpočtu pracuje s haléři:

const base = Math.floor(total / count);
const remainder = total % count;
const shares = Array.from({length: count}, (_, index) => {
  const cents = base + (index < remainder ? 1 : 0);
  return `${Math.floor(cents / 100)},${String(cents % 100).padStart(2, '0')}`;
});

Čitelný výpočet ještě není důkaz správnosti. Ověřte i převod vstupu na haléře, hranice povolených hodnot a chování formuláře při chybě.

Co ukázaly předem určené testy?

Spustili jsme node test.mjs: 22 z 22 automatických kontrol prošlo. Zahrnují 16 předem zapsaných vstupů, pět kontrol součtu podílů a jednu omezenou kontrolu externích zdrojů v souboru. V prohlížeči jsme navíc ověřili dva stavy: správné rozdělení a odstranění starého výsledku po neplatném vstupu. Záznamy jsou součástí stažitelného balíčku.

VstupOčekávaný i skutečný výsledekShoda
120,00 / 340,00 / 40,00 / 40,00Ano
100,01 / 333,34 / 33,34 / 33,33Ano
0,01 / 30,01 / 0,00 / 0,00Ano
1,001 / 3Chyba, bez podílůAno
10,00 / 0Chyba, bez podílůAno
Výběr z předem zapsaných případů, nikoli odhadované výsledky. Úplná sada je v balíčku.
Skutečný výsledek: rozdělení 100,01 Kč mezi tři osoby na 33,34 Kč, 33,34 Kč a 33,33 Kč
Výřez skutečného snímku první verze kalkulačky: podíly dávají dohromady přesně 100,01 Kč.

Teprve test v prohlížeči prověřil i vazbu mezi tlačítkem, vstupními poli a zobrazením výsledku. Po zadání 1,001 jako neplatné částky se předchozí podíly ztratily a objevila se chyba:

Po neplatném vstupu 1,001 se objeví chybová zpráva a předchozí podíly zmizí
Neplatný vstup nevystavuje starý výsledek jako aktuální. Jde o výřez skutečného snímku stejné aplikace.

Jak si pokus zopakovat

  1. Stáhněte si zdroják, zadání, testy a výsledky (ZIP). Balíček obsahuje i původní verzi first-pass.html; neobsahuje žádné účty ani přístupové údaje.
  2. Otevřete index.html lokálně v prohlížeči a zkuste 100,01 a 3. Potom místo částky napište 1,001 a zkontrolujte, že zmizí předchozí podíly.
  3. Máte-li Node.js, otevřete terminál v rozbalené složce a spusťte node test.mjs. Skript znovu vytvoří test-results.json; porovnejte počet průchodů i jednotlivé případy.

Cizí kód obecně nespouštějte s vlastními hesly nebo v důležité pracovní složce. Tento příklad je lokální, bez závislostí a bez síťového požadavku podle kontroly zdrojáku; jednoduchá textová kontrola ale není bezpečnostní audit ani záruka pro jiné projekty. Před použitím vlastního AI kódu zkontrolujte importy, síťové požadavky, přístupy k souborům a případné nové balíčky.

Co když test skutečně selže?

Nejdřív si uložte vstup, očekávaný a skutečný výsledek. Přidejte právě tento případ do testů a ověřte, že na první verzi selže. Pak opravte zdrojový kód, nikoli očekávání jen proto, aby se rozsvítila zelená. Znovu spusťte nový test i všechny původní případy a v prohlížeči prověřte stejný scénář. V našem konkrétním pokusu žádný test neselhal, a proto zde nemáme opravu ani porovnání „před a po“.

Stejný princip doporučuje i dokumentace GitHubu ke kontrole kódu od AI: ověřovat funkčnost, soulad se zadáním, závislosti a možná bezpečnostní rizika. Jedna malá úspěšná ukázka neprokazuje bezchybnost všech vstupů ani připravenost k nasazení. U aplikace, která pracuje s platbami, účty nebo osobními daty, je potřeba důkladnější kontrola a odpovídající odborník.

Pokud teprve vybíráte pomocníka pro psaní kódu, máme zvlášť přehled AI nástrojů pro programování. Ten řeší výběr nástroje; tady šlo o ověření jednoho jeho konkrétního výstupu.