Halucinacije AI botova: zašto „dobro smo ga naučili" nije odgovor
Svaki LLM bot ponekad izmisli podatak — to je svojstvo tehnologije, ne kvar. Razlika između dobavljača je da li su to rešili strukturno ili se nadaju da neće ispasti.
Bot u jednoj web prodavnici je počeo da izmišlja linkove proizvoda.
Ne uvek. Ne očigledno. Kupac pita za proizvod, bot lepo odgovori — naziv tačan, cena tačna, dostupnost tačna — i doda link. Link izgleda savršeno ispravno. Ima domen prodavnice, ima ime proizvoda u putanji, izgleda kao svaki drugi link sa tog sajta. Samo što ne postoji. Kupac klikne i završi na 404.
Ono što ovu priču čini vrednom nije to što se desilo. Nego to što je link stizao ispravan.
Reprodukcija je pokazala nešto neprijatno
Prva pretpostavka je bila banalna: verovatno prodavnica ne vraća link, pa ga bot popunjava kako zna. Da je bilo tako, popravka bi bila trivijalna.
Nije bilo tako. Podaci koje je bot dobijao iz prodavnice su sadržali tačan link, svaki put. Bot je imao ispravan podatak u ruci — i ponekad bi umesto njega napisao svoj.
Ponekad. Isto pitanje, isti podaci, drugi odgovor. Ponekad tačan link, ponekad izmišljen. To je najvažniji detalj u celoj priči, jer ruši način na koji većina ljudi testira botove: probate tri puta, tri puta radi, zaključite da radi. Nedeterministička greška se ne hvata tako. Ona se hvata tek u produkciji, kod kupca, u trenutku kad je bio spreman da kupi.
Zašto prompt nije rešenje
Prirodna reakcija je da se to popravi uputstvom. Dopišete botu: „Koristi isključivo link koji si dobio. Nikad ne sastavljaj URL sam.” Testirate. Radi.
I zaista — biće bolje. Ali „biće bolje” i „neće se desiti” nisu ista stvar.
Prompt je molba, ne ograničenje. Jezički model ne izvršava instrukcije onako kako program izvršava naredbe — on ih uzima kao vrlo jak nagoveštaj šta je verovatan nastavak teksta. Vrlo jak nagoveštaj i dalje nije garancija. Ako uputstvo smanji učestalost greške sa jedne na sto na jednu na hiljadu, to zvuči kao rešeno — dok ne pustite bota da radi mesecima i dok hiljadu pitanja ne postane broj koji dostignete za nedelju dana.
Rešenje nije bio bolji prompt. Rešenje je bilo strukturno, u kodu: link koji kupac vidi prestao je da bude nešto što model uopšte sastavlja. To više nije odluka jezičkog modela.
Kako je tačno izvedeno je naš problem, ne vaš. Vas zanima druga stvar — a to je i poenta ovog teksta.
Ovo nije priča o našem botu
Lako je ovo pročitati kao „njihov bot je grešio, pa su ga popravili”. To bi bio pogrešan zaključak, i pogrešna pouka.
Svaki bot zasnovan na jezičkom modelu ponekad izmisli podatak. Svaki. To nije kvar koji se javio kod nas, nego svojstvo tehnologije: model proizvodi verovatan nastavak teksta, a izmišljen link izgleda tačno kao pravi link — isti oblik, isti domen, ista struktura. Model nema pojam „ovo postoji” naspram „ovo zvuči kako bi trebalo da izgleda”. Ta razlika njemu nije dostupna. Zato se od njega ne može ni tražiti da je poštuje.
Pitanje, dakle, nije da li bot nekog dobavljača izmišlja. Izmišlja. Pitanje je šta je dobavljač uradio povodom toga:
- Ništa — ne zna da se dešava, jer nije gledao.
- Napisao je uputstvo u promptu — smanjio učestalost i nazvao to rešenjem.
- Rešio je strukturno — one tvrdnje koje ne smeju da budu izmišljene, model ne može da izmisli, jer ih uopšte ne sastavlja.
Sve tri opcije izgledaju identično na demou. Razlika se vidi tek posle šest meseci u produkciji, i to obično tako što je vidi kupac.
Zašto je baš link opasan
Vredi reći zašto je ovo bilo prioritet, a ne kozmetika.
Izmišljena cena je vidljiva greška — neko je primeti i javi. Izmišljen radni sat takođe. Ali izmišljen link je tiha greška: bot deluje maksimalno korisno, kupac klikne, dobije 404 i ode. Niko vam ništa ne prijavi. U analitici to izgleda kao uspešan razgovor — bot je odgovorio, kupac je bio zadovoljan, razgovor završen. Jedini trag je izgubljena prodaja koju nikad ne povežete sa botom.
Najgore greške nisu one koje se vide. Nego one koje se dese tačno u trenutku kad je čovek bio spreman da plati.
Pitanja koja treba da postavite bilo kom dobavljaču bota
Ako birate bota, ovo su pitanja koja razdvajaju ozbiljne od onih koji se nadaju. Postavite ih i nama:
- „Kako sprečavate da bot izmisli podatak?” Ako odgovor bude „dobro smo ga naučili”, „koristimo najbolji model” ili „podesili smo mu prompt” — nije rešeno. To su tri načina da se kaže „nadamo se da neće”.
- „Da li je to rešeno u kodu ili u promptu?” Pitanje je namerno neprijatno. Odgovor je informativan u oba slučaja.
- „Da li ste ikad reprodukovali izmišljanje kod sebe?” Ko nije, ne zna da li je rešio. Ne možete popraviti grešku koju niste videli da se dešava.
- „Koje tvrdnje vaš bot ne može da izmisli, čak i kad bi ,hteo’?” Dobar odgovor je konkretna, kratka lista. Loš odgovor je „pa, sve”.
- „Šta bot radi kad nema podatak?” Ako nema jasan odgovor na ovo, znači da bot popunjava prazninu — a popunjava je onim što zvuči verovatno.
- „Kako ću ja saznati da je izmislio?” Ako ne postoji mesto gde vidite šta je bot rekao i na šta nije znao odgovor, saznaćete od kupca. Ili nećete.
Poštena tvrdnja koju dobavljač može da napravi nije „naš bot ne halucinira”. Takav bot ne postoji. Poštena tvrdnja je: „znamo gde može, znamo šta smo od toga zatvorili u kodu, i možemo da vam pokažemo šta se dešava kad ne zna.”
To je nivo na kojem se ovaj posao radi. Sve ispod toga je nada.