Connect with us

Budoucnost vytváření aplikací AI závisí na bezpečnosti typů

Myslitelé

Budoucnost vytváření aplikací AI závisí na bezpečnosti typů

mm

Kód generovaný umělou inteligencí (AI) může být zkompilován, ale bez přísné bezpečnosti typů je tento úspěch extrémně krátkodobý. Bezpečnost typů je zábrana, která brání křehkému kódu v rozkladu do skrytých chyb a selhání běhu v době, kdy se systém rozšiřuje.

Musíme začít nutit AI k přísnému typování prostřednictvím kontextu, instrukcí, lintingu a zpětných vazeb. Trvá to několik dalších hodin, ale produkuje kód, který vydrží.

Problém incentiv

AI chce vás potěšit. Optimalizuje se pro odměňovací funkci, kterou obdrží, a většinou se jedná pouze o to, zda kód zkompiluje. To znamená, že bude odstraňovat všechny rohy, aby dosáhla zelené značky. Tyto zkratky vypadají dobře v době kompilace, ale zhroutí se v době běhu.

To je důvod, proč AI miluje any. Nebo vybere široký typ, jako je string, kde se očekává něco přísnějšího, jako je UUID. Kód se zkompiluje, ale správnost je již ohrožena. Horší je, že AI nezapamatuje, co napsala před několika soubory, takže bez bezpečnosti typů projekt rychle zkolabuje pod svou vlastní vahou, jakmile se komplexita zvýší.

Dva typy chyb

Když kód generovaný AI běží, obvykle vidíte dva typy problémů s bezpečností typů:

1. Chyby v době kompilace

  • Co se stane: Kompilátor zachytí nesoulad mezi deklarovaným typem a tím, co bylo předáno.
  • Jak to člověk opraví: Rozhodne, zda je volající chybný (převést 42 na string) nebo zda je chybná funkce (změnit ji na akceptaci číslového typu).
  • Jak to AI „opraví“: Změnit typ argumentu na any. Problém „vyřešen“, ale jste právě odstranili zábranu, která by chyby v budoucnu zachytila.

2. Chyby v době běhu

  • Co se stane: Kompilátor si myslí, že vše je v pořádku (často proto, že typy byly uvolněny), ale skutečná hodnota v době běhu neodpovídá předpokladu.
  • Jak to člověk opraví: Vrátit se k proměnné zpět ke zdroji (jako API nebo dotazu na databázi) a opravit typ na hranici, aby data přišla jako správný string.
  • Jak to AI „opraví“: Bez kontextu, hádá. Možná obalí všechno v String(…), nebo prostě rozšíří typ znovu. Krach zmizí na tomto místě, ale logika je nyní rozbitá. Čísla určená pro matematiku jsou náhle řetězce.

Tento cyklus chyb v době běhu → AI „oprava“ → uvolnění typů se rychle sčítá. Výsledkem je kód, který se zkompiluje a vyhodí méně chyb v době běhu, ale nemůže být důvěryhodný. Představte si systém pro plánování lékařských směn, kde jsou směny lékařů spravovány aplikací. Typový nesoulad se dostane do systému: int pro hodiny je považován za řetězec. AI „opraví“ to uvolněním typu na any. Kód se zkompiluje a chyba zmizí, ale výpočty směn jsou nyní rozbité, dvojité rezervace lékařů a celý křídlo nemocnice zůstane bez lékařů.

Databázový násobitel

Okamžik, kdy se připojíte k databázi, chyby se mnohonásobně zvyšují a jejich příčiny se stávají obtížněji stopovatelnými. SQL je typován z důvodu. Každý schéma (INT, TEXT, UUID, BOOLEAN) kóduje předpoklady o vašich datech.

Když AI zplošťuje všechno na string | any, ztrácíte tyto záruky:

  • Špatné zápisy: vložení “true” do boolean pole zkompiluje, ale zkazí DB.
  • Špatné čtení: dotaz vrátí NULL, ale AI předpokládá řetězec, což vede k chybě v době běhu.
  • Rozbité vztahy: pokud je očekávána relační klíčová hodnota jako UUID, ale AI ji zpracovává jako řetězec a omylem pošle odpadové hodnoty, spojení se nezhroutí, ale nevrátí žádná data. To skrývá chyby, dokud se neobjeví později jako chybějící nebo nesourodé výsledky.

To je důvod, proč vážné týmy používají typované jazyky a vynucují bezpečnost typů od schématu po API. Pokud to neuděláte, databáze přestane chránit vás a skryté problémy se sčítají.

Proč zavedené týmy vynucují přísné typování

Přísné typování není o tom, zpomalovat vývojáře. Je to o tom, aby škálování bylo možné.

Typy:

  • Kódují záměr do kódu.
  • Učiní refaktoring bezpečným a předvídatelným.
  • Chytí celou třídu chyb, než se dostanou do produkce.
  • Ukáží budoucím vývojářům (a AI) přesně, jak použít funkci nebo objekt.

Bez bezpečnosti typů se sčítá nepořádnost kódu AI. S ní produkuje AI kód, kterýmu můžete důvěřovat a rozšiřovat.

Jak nutit AI do bezpečnosti typů

Musíte AI zacházet jako s junior vývojářem. Rychlým, talentovaným, ale bezohledným bez směru.

Poskytnout správný kontext

Dejte mu rozhraní a typy, které může použít. Ukážete příklady použití. Buďte názoroví ohledně správného způsobu strukturování kódu.

Poskytnout přísné instrukce

Velmi jasně dejte AI najevo, aby nepoužíval any, nikdy neumožňoval neznámé a aby každý metoda, objekt a proměnná byly typovány. Očekávejte, že bude mít těžkou dobu dodržování těchto instrukcí (zejména na prvním průchodu).

Vynutit pomocí lintingu

Stejně jako při recenzi kódu junior vývojáře, musíte zkontrolovat kód AI. Navrhněte vlastní lint pravidla, která definují, co „dobrý kód“ znamená pro vás. Dejte zpětnou vazbu modelu, dokud neprojde. Může to trvat několik kol, ale posune odměňovací funkci směrem k zahrnutí bezpečnosti typů.

Iterovat s kontrolami

Chyby v době kompilace, protokolování v době běhu, kliknutí na testy. Každá iterace nutí AI, aby utáhl typy a přiblížil se k produkčnímu kódu.

Lepší způsob budování

Naučil jsem se, že obětování surové generace rychlosti za vyšší kvalitu se vyplatí v dlouhodobém horizontu. To znamená bojovat za nulovou toleranci pro any typy, vynucování více zpětných vazeb a přísných linting pravidel, která AI musí projít, než nazvete kód „hotovým“. To vyžaduje stálé úsilí, ale je to jediný způsob, jak udržet kvalitu od poklesu.

Dříve jsem zmínil klíčový bod: jednou, kdy AI začne opravovat chyby v době běhu uvolňováním typů, vstoupíte do škodlivého cyklu. Každá oprava odstraňuje další zábranu, a výsledkem je kód, který se zkompiluje, ale je křehký a nedá se udržovat. Opak je také pravdivý: pokud budete AI nutit, aby respektoval bezpečnost typů na každém průchodu, vytvoříte ctnostný cyklus. Každá iterace utahuje zábrany, kód se stává čistějším, a kvalita se sčítá do něčeho, čemu můžete důvěřovat a na čem můžete stavět.

To je systém, který podle mého názoru dodává trvalou kvalitu kódu. Každá iterace je navržena tak, aby utáhla standardy, ne oslabila je. Je to stejný důvod, proč nejlepší inženýrské týmy volí silně typované jazyky. Bezpečnost typů je základní zábranou pro udržovatelnost, a dovolit AI ignorovat ji zajišťuje, že vaše aplikace nikdy nedosáhne produkční úrovně.

Brad Eckert je celoživotní podnikatel a technologický lídr s více než desetiletou zkušeností s výrobky od fáze nápadu až po dodání zákazníkům a dále. Absolvent MIT je nyní spoluzakladatel a technologický ředitel Woz, platformy s umělou inteligencí podporované Y Combinator, která umožňuje komukoli budovat a škálovat softwarové podniky bez nutnosti kódování.