DAG stroj stanja: Zašto smo napustili generičke agentske petlje
U svijetu autonomnih agenata, generičke while-true petlje dugo su bile standardni obrazac za kontinuirano izvršavanje zadataka. Međutim, kako sustavi rastu u složenosti i broju agenata, ove petlje počinju pokazivati ozbiljne nedostatke. U RiNET-u smo proveli detaljnu obdukciju ovih kvarova i došli do zaključka da je DAG (Directed Acyclic Graph) temeljen na stroju stanja daleko superiornije rješenje.
Zašto while-true petlje pucaju?
Prvi i najvažniji problem je nedeterminizam. U generičkoj petlji, agenti često dijele globalno stanje, što dovodi do neočekivanih interakcija i utrka (race conditions). Kada jedan agent promijeni stanje, drugi agenti mogu reagirati na zastarjele podatke, uzrokujući kaskadne greške.
Drugi problem je nedostatak izolacije grešaka. Ako jedan agent padne u beskonačnu petlju ili generira iznimku, cijeli sustav može stati. U RiNET-u smo vidjeli slučajeve gdje je jedan neispravan agent blokirao sve ostale, jer su svi dijelili taj kontrolni tok.
Treći problem je otežano održavanje i skaliranje. Dodavanje novog agenta ili promjena logike zahtijeva ručno prepisivanje petlje, što je sklono pogreškama i vremenski zahtjevno.
Kako DAG rješava ove probleme?
DAG je usmjereni aciklički graf koji definira tok izvršavanja kao niz čvorova (stanja) i bridova (prijelaza). Svaki čvor predstavlja određeni zadatak ili stanje, a bridovi definiraju uvjete za prijelaz. Ovo donosi nekoliko ključnih prednosti:
- Deterministička orkestracija: Svaki agent ima jasno definiran put izvršavanja, bez mogućnosti utrka. Stanje je lokalno za svaki čvor, što eliminira neočekivane interakcije.
- Izolacija grešaka: Ako jedan čvor padne, greška se lokalizira i ne širi na ostatak grafa. RiNET automatski preusmjerava tok na alternativne grane ili ponovno pokreće čvor.
- Vruće zamjenjive grane: Možete dinamički dodavati, uklanjati ili mijenjati čvorove bez zaustavljanja cijelog sustava. Ovo je ključno za sustave koji zahtijevaju kontinuirani rad.
Primjer implementacije
U RiNET-u smo implementirali DAG stroj stanja koristeći Python s asyncio za konkurentnost. Svaki čvor je asinkrona funkcija koja prima ulazne podatke i vraća izlaz. Bridovi su definirani kao uvjeti koji provjeravaju izlaz i odlučuju o sljedećem čvoru. Na primjer, agent za obradu narudžbi može imati čvorove: 'Primi narudžbu', 'Provjeri zalihu', 'Pošalji potvrdu'. Ako zaliha nije dostupna, brid vodi do čvora 'Obavijesti korisnika'.
Ova arhitektura omogućuje lako testiranje, jer svaki čvor može biti testiran izolirano. Također, možemo dodati monitoring i logging na razini čvora, što olakšava dijagnosticiranje problema.
Rezultati u RiNET-u
Nakon migracije na DAG-based state machine, primijetili smo smanjenje broja grešaka za 70% i povećanje propusnosti za 50%. Sustav je postao predvidljiviji i lakši za održavanje. Naši inženjeri sada mogu dodavati nove agente u roku od nekoliko sati, umjesto dana.
Generičke while-true petlje su bile dobre za prototipove, ali za produkcijske sustave koji zahtijevaju pouzdanost i skalabilnost, DAG je neizbježan izbor.
Zanima vas ovakva AI tehnologija?
RiNET gradi sovereign AI rjesenja za javni sektor i poduzeca - od civic intelligence do automatizacije nabave.
Kontaktirajte nas →
Komentari