Eszközök

Miért van szükség világos specifikációkra az AI-kódügynökök mellett

A cikk szerzője Markus Eisele azt állítja, hogy az AI-kódügynökök használata nem szünteti meg a specifikációk szükségességét, csak áthelyezi és fragmentálja a költségeket.

Miért van szükség világos specifikációkra az AI-kódügynökök mellett

A cikk szerzője: Markus Eisele

Ez a cikk eredetileg Markus Eisele The Main Thread című hírlevelében jelent meg, a szerző engedélyével közöljük újra.

Az utóbbi időben egy elterjedő fejlesztői gondolkodás szerint az ügynökök (agents) önállóan el tudják dönteni a részleteket: elegendő laza célmegfogalmazás, az ügynök „felfedez”, és menet közben korrigálunk. Gyors, rugalmas, korszerű. Eisele szerint ez tévút — nem azért, mert az ügynökök képtelenek volnának, sokszor képesek rá, hanem mert a költségeket rosszul számoljuk.

Az igazság az, hogy nem nullázunk költséget: eltoljuk, feldaraboljuk, és kevésbé láthatóvá tesszük azt.

Két véglet és a rejtett költségek

Vannak két szélső modell:

  • Minimális specifikáció: a szándékot laza módon írjuk le, az ügynök szabadon értelmez, a fejlesztés azonnal kezdődhet. Az előzetes emberi munka költsége szinte nulla. Viszont később felhalmozódik a javítási ciklusok költsége: tokenfelhasználás, emberi újraindítások, és az, hogy minden kimenetet embereknek kell ellenőrizni.

  • Teljes, formális specifikáció: TDD, BDD, Gherkin forgatókönyvek, elfogadási kritériumok lefixálva, mielőtt egy sor kód is lefutna. Az előzetes emberi ráfordítás jelentős és látható, de az utólagos ellenőrzés költsége alapvetően más: a tesztek lesznek az oracle-ok — automatikus, ismételhető, fáradhatatlan ellenőrzést adnak.

A csere az, hogy mikor és milyen „valutában” fizetünk: a minimális specifikáció előrehozza a tokenköltséget és hátrahagyja az emberi ítéletet; a nehéz specifikáció emberi időt frontálisan igényel, de az automatizált ellenőrzés után kevesebb emberi felügyelet szükséges.

A teljes költség a specifikáció teljességéhez képest U-alakú: a minimum valahol a jól strukturált elfogadási kritériumok vagy BDD forgatókönyvek körül van — nem a nulla specifikációnál, és nem egy 40 oldalas követelménydokumentumnál.

Több ügynök együttműködése (multi-agent) eltolja a minimumot jobbra, mert az eltérések összeadódnak az átadások során.

A specifikáció problémája nem tűnt el

A szoftvermérnökség valódi nehézsége mindig a „mi legyen” megválaszolása volt: mit kell megvalósítani, mi tilos, mely kompromisszumok számítanak, mit engedhet meg a rendszer, és mit jelent a „kész” egy kaotikus valóságban. Ezt a problémát sokáig belesűrítettük meetingekbe, backlogokba, review-kba és QA-ciklusokba.

Az ügynökök csökkentik a kód előállításának súrlódását — ez nagyszerű — de ugyanakkor a hiányzó döntések később bukkannak fel, mert a rendszer képes plausibilis implementációt előállítani még mielőtt bárki tisztázná a szándékot.

A holt tér a specifikáció és a verifikáció felé mozog.

A specifikáció írása csak a feladat fele

Gyakran elhanyagolt pont: a specifikációt validálni kell, mielőtt átadjuk az ügynöknek.

Egy specifikáció hibái csak akkor válnak láthatóvá, amikor az ügynök végrehajtja azt. Lehet belső ellentmondás, hiányosság (például nem kezeli a harmadik fél API-jának 429-es válaszát), tesztelhetetlenség vagy egyszerűen az, hogy pontosan azt írjuk le, amit gondoltunk, de nem azt, amit valójában szerettünk volna.

Ha egy ügynök pontosan végrehajt egy hibás specifikációt, a probléma nehezebben debuggolható: az implementáció megfelel a specifikációnak, a hiba a specifikációban van. A javítási ciklus ezután drágább, mert nemcsak kódot, hanem gondolatmenetet kell visszafejteni.

A specifikáció validálása külön költségkategória: meg kell vizsgálni a belső következetességet, a teljességet, a tesztelhetőséget, és azt, hogy a leírt viselkedés valóban azt a célt szolgálja-e, amit építeni akarunk.

Hogyan használhatók ügynökök a specifikációhoz

Van egy harmadik stratégia, amit a kétpólusú gondolkodás figyelmen kívül hagy: használjuk az ügynököket a specifikáció megírására és validálására, majd külön implementációs ügynököket a végrehajtásra.

Ez megváltoztatja a költségszerkezetet: egy specifikációt először egy draftoló ügynök készít el a durva szándékból; egy másik, ellenőrző (adversarial) ügynök stresszteszteli a vázlatot következetesség, teljesség és tesztelhetőség szempontjából; egy harmadik ügynök fordítja a túlélő állításokat futtatható tesztekre. Az ember felülvizsgálja a végeredményt, ami gyorsabb, mint nulláról írni.

Fontos, hogy az ügynök ne legyen puszta jegyző: legyen szkeptikus termékmérnök-szerű szerepe. Nevezzék meg a feltételezéseket, különítsék el a célokat a nem-céloktól, adjanak példákat és kontra-példákat, jelöljék a mechanikusan tesztelhető részeket, és mutassák meg a tipikus kudarci módokat.

Egy hasznos prompt példája: „Fogalmazd meg a legkisebb specifikációt, amivel egy másik ügynök biztonságosan megvalósíthatná ezt. Tartalmazzon feltételezéseket, nem-célokat, elfogadási kritériumokat, szélső eseteket, megfigyelhető kimeneteket és nyitott kérdéseket. Jelöld meg, mely részek automata tesztté alakíthatók, és melyek igényelnek emberi felülvizsgálatot.”

Majd fussuk át egy másik ügynökkel: „Támadd meg ezt a specifikációt: találj ellentmondásokat, homályos kifejezéseket, rejtett függőségeket, tesztelhetetlen állításokat és hiányzó kudarci módokat.”

A cél nem automatizált prózai specifikáció, hanem ember által jóváhagyott, ügynökök által előterjesztett és ellenségesen ellenőrzött specifikáció, aminek annyi része legyen végrehajtható oracle, amennyit a domain enged.

Hogyan segít a BDD

A behavior-driven development (BDD), jól csinálva, egyesíti a specifikáció-írást és -validációt ugyanabba az artefaktumba. A Gherkin forgatókönyv egyszerre leírás és futtatható teszt: egyből lefuttatható a vázimplementációval, és ha a forgatókönyv futtatható akar lenni, sok homályosságot fel kell oldani.

Ezért a költséggörbe minimuma részben azért van a BDD környékén, mert az eszköz maga beépített validációt nyújt. A formátum előnyt ad, mert a validáció automatizálható.

Ugyanakkor valaki még mindig jól meg kell írja a forgatókönyveket: Gherkin is rosszul írható, és a szintaxis nem szünteti meg a szemantikai homályosságot.

Mi történik a multi-agent csővezetékeknél

Egyetlen jól körülhatárolt feladatra futtatott ügynöknél az alulspecifikálás visszafordítható: a visszacsatolás rövid, a javítás lokális és költsége kiszámítható.

Multi-agent rendszerek esetén más osztályú problémával állunk szemben: ha Agent A kimenete Agent B bemenete, akkor A eltérése összeadódik B futásában. B keményen és magabiztosan dolgozik egy rossz alapon. Mire az emberhez visszaér a hiba, az több réteg koherensnek tűnő, de torz eredményét takarja.

Ez a töréspont a specifikáció felé tolódik: a specifikációnak itt koordinációs szerződésként kell viselkednie az ügynökök között — erősen tipizált interfészekkel, invariánsokkal, engedélyezett homályossággal és validációs ellenőrzésekkel.

Ha a koordináló specifikáció hibás, nem egy ügynök csinál rosszat, hanem sokan, párhuzamosan, különböző módon.

Mely metodológiák maradnak relevánsak

Nem lesz minden, amit eddig megtanultunk, felesleges, de megváltoznak azok a részek, amelyek valódi támaszt nyújtottak.

  • Az „Agile mint színjáték” problémás: a státuszfelmondások, a fikciós becslések és a ceremóniák, amelyek csak bizonyítéknak szolgálnak, hogy az incertiditást „megszelídítettük”, kevésbé szükségesek.
  • Az Agile mint visszacsatolási filozófia továbbra is értékes: rövid ciklusok, működő szoftver, ügyfélkollaboráció és a terv hajlékonysága fontosabbak lesznek, mert az ügynökök gyorsan sok téves dolgot tudnak létrehozni.
  • XP és tesztelő első megközelítések túlélnek, mert az implementáció olcsóbb lett, és az automatikus oracle-ok értéke nő.
  • Pair programming átalakul ember–ügynök párosítássá: a lényege megmarad: a tervezési ítélet legyen közel a kódtermeléshez.

A metodológiák, amelyek gyors visszajelzést hoznak, megmaradnak; amelyek csak státusz-jelentést szolgálnak, elhalványulnak.

Hol érdemes befektetni?

A gyakorlati következtetés nem az, hogy mindig írj teljes BDD specifikációt, és nem az, hogy mindig engedd az ügynököt szabadon bolyongani. A legjobb pont munkafüggő, és a kalkulációnak őszintén számolnia kell a specifikáció validálásának költségét.

  • Egyetlen ügynök kis, jól körülhatárolt feladatánál elég lehet a strukturált szándék: cél, példák, nem-célok és néhány elfogadási kritérium. A BDD itt túlzás lehet.
  • Determinisztikus, jól érthető munkáknál (API integrációk, CRUD, adattranzformációk) a töréspont jobbra van: több specifikáció hamar megtérül, mert a domain korlátozható és a tesztek automatikusíthatók.
  • Explorációs vagy kreatív munkáknál a túlzott specifikáció korlátozza az ügynök rugalmasságát: itt a töréspont balra tolódik.
  • Multi-agent rendszernél a sweet spot ismét jobbra tolódik: az átadási szerződés a termék. Minden ügynökhatárra szerződést, sémát, invariánsokat és validációs ellenőrzéseket kell tenni.

Minden esetben: validáld a specifikációt — emberrel, ügynökkel vagy végrehajtható formátummal (például BDD). Ha kihagyod, a költséget később, magasabb kamattal fizeted meg, rosszabb diagnosztikai lehetőséggel.

Az ügynökök ígérete a nulla-spec munkára csábító, de a könyvelés, amit figyelmen kívül hagy, valós. Az ügynökök egyre jobbak lesznek; a költségszámítás viszont még mindig az ember feladata marad.