Tekoälyagentit tuntuvat lupaavilta: anna niille pääsy koodikantaan, kerro mitä haluat, ja katso kun ne tekevät muutoksia. Mutta kun kyseessä on oikea, vuosia vanhentunut legacy-järjestelmä, tämä lähestymistapa voi olla suorastaan vaarallinen.
Miksi legacy-koodi on eri asia
Uusi koodikanta on kuin uusi kaupunki: kadut on nimetty loogisesti, kartta pitää paikkansa. Legacy-koodi on vanha kaupunki, joka on kasvanut orgaanisesti vuosikymmenten ajan. Kadut on nimetty syistä, joita kukaan ei enää muista. Muutama silta on suljettu, mutta kukaan ei ole poistanut niitä kartalta. Osa rakennuksista on purettu, mutta viittaukset niihin elävät edelleen.
Legacy-koodikannassa on kolme asiaa, joita agentti ei pysty päättelemään pelkästä koodista:
- Dokumentoimattomat päätökset — miksi jokin tehtiin niin kuin tehtiin. Vastaus on usein jossakin palaverimuistiossa tai kollegan päässä.
- Piilevät riippuvuudet — suorien kutsujen alla on implisiittisiä oletuksia, ajoituksia ja sivuvaikutuksia, joita staattinen analyysi ei näe.
- Tekninen velka rakenteena — nopeat korjaukset ovat vuosien myötä kerrostuneet arkkitehtuuriksi. Mikä näyttää redundantilta, saattaa olla kriittinen.
Ralph-looppi: kun agentti sokaisee itsensä
Ralph-looppi on tilanne, johon naivisti ohjelmoitu tekoälyagentti legacy-koodissa helposti ajautuu: agentti tekee muutoksen, jokin hajoaa, agentti yrittää korjata sen, se hajoaa toisella tavalla, agentti tekee lisää muutoksia — ja kierros jatkuu. Edistymistä ei tapahdu, mutta vahinkoa kertyy.
Vaarallista on se, että lyhyellä aikavälillä voi näyttää siltä, että agentti etenee: testejä menee läpi, syntaksivirheet katoavat. Mutta samalla koodi etääntyy alkuperäisestä tarkoituksestaan, ja muutosten kumulatiivinen vaikutus järjestelmän käyttäytymiseen jää näkymättömäksi.
Mitä tarvitaan sen sijaan
Ratkaisua ei löydy lisäämällä kontekstia promptiin tai tekemällä agentista nopeampi. Tarvitaan rakenteellisesti erilainen lähestymistapa:
- Riippuvuusgraafi ennen muutoksia — ennen kuin mikään muuttuu, on ymmärrettävä mikä riippuu mistäkin. Tähän tarvitaan staattista analyysiä, ei arvailua.
- Vaikutusanalyysi jokaiselle muutokselle — mitä hajoaa, jos tätä muuttaa? Vastaus pitää saada ennen muutosta, ei sen jälkeen.
- Vaiheistus ja tarkistuspisteet — agentin ei pidä saada tehdä pitkiä muutosjonoja ilman verifiointia. Jokainen vaihe tarkistetaan ennen seuraavaa.
- Metaontologinen viitekehys — kompleksissa järjestelmissä tarvitaan tapa jäsentää sekä rakenne (mitä on) että tarkoitus (miksi on). Ilman tätä agentti optimoi väärää asiaa.
Metaontologia apuvälineenä
Metaontologia kuulostaa abstraktilta, mutta käytännössä se tarkoittaa: ennen kuin tehdään mitään, sovitaan siitä miten asioita jäsennetään. Millä tasolla tarkastellaan? Mitä pidetään rakenteena, mitä käyttäytymisenä, mitä tavoitteena? Kun agentti toimii tässä viitekehyksessä, sen tekemät päätökset ovat perusteltuja — ei vain syntaktisesti oikeita.
Tämä on yksi keskeinen syy, miksi pelkkä RAG (Retrieval-Augmented Generation) ei riitä legacy-kontekstissa. RAG hakee relevanttia koodia, mutta se ei ymmärrä järjestelmän intentioita. Metaontologinen lähestymistapa pakottaa mallintamaan myös sen, miksi asiat ovat niin kuin ovat.
Kuule lisää
Softagramin Ville Laitila piti aiheesta esityksen Business Oulun tiloissa 25.2.2026. Esitys käy läpi konkreettisia esimerkkejä, ansat joihin agentit tyypillisesti jäävät, ja sen miten järjestelmällisempi lähestymistapa muuttaa lopputuloksen.