Wczoraj o 15:08 kliknąłem „Make a Submission" w panelu wydawnictwa EAI. Dwa tygodnie wcześniej, 9 sierpnia, nie miałem jeszcze ani hipotezy, ani jednej liczby, tylko przeczucie, że mój asystent AI robi coś ciekawego i nikt tego nie zmierzył. Między tymi dwoma datami była jedna noc, w której zabrakło kredytów na API, jedna literatura, która wywróciła moją tezę, i jeden wynik, którego się nie spodziewałem.
Nie jestem naukowcem. Prowadzę agencję automatyzacji dla małych firm, i to, co radzę klientom, najpierw testuję na sobie. Ten tekst jest o tym, jak taki test zamienia się w artykuł naukowy: co trzeba zmierzyć, czego nie wolno udawać, ile to kosztuje i dlaczego warto sprawdzić literaturę, zanim się ogłosi odkrycie. Jeśli masz w firmie asystenta AI podpiętego do bazy wiedzy, część z tego dotyczy Ciebie bardziej, niż myślisz.
Spis treści
- Po co praktykowi artykuł naukowy?
- Jaka była hipoteza i dlaczego nie przeżyła nocy?
- Co trzeba było dobudować, żeby w ogóle coś zmierzyć?
- Jak wyglądał pomiar: 900 przebiegów za 34 dolary
- Co powiedziała literatura i gdzie się z nią rozeszliśmy?
- Trzy metody, które zawiodły, i dlaczego to też jest wynik
- Ile to kosztowało naprawdę?
- Co zmieniłem u siebie po tym badaniu?
- Słownik pojęć
Po co praktykowi artykuł naukowy?
Szczerze? Na początku chodziło o markę. Ktoś, kto wdraża AI w firmach, powinien mieć coś więcej niż opinie, a recenzowany artykuł to najtwardsza waluta wiarygodności, jaka istnieje. Tyle że po pierwszym dniu pracy motywacja się zmieniła. Odkryłem, że od roku mam w firmie system, o którym wiem mniej, niż sądziłem.
Mój asystent to dwa agenty. Alex obsługuje korespondencję, pilnuje terminów, przygotowuje odpowiedzi i ma do tego dziesięć narzędzi. Vera jest agentem wiedzy: ma szesnaście narzędzi sięgających do indeksu dokumentów, archiwum poczty, dysku sieciowego i bazy klientów. Alex nie ma bezpośredniego dostępu do wiedzy. Gdy potrzebuje kontekstu, woła Verę jak każde inne narzędzie, a ona prowadzi własne wyszukiwanie i zwraca odpowiedź. Opisywałem go już na blogu, gdy budowałem własną wyszukiwarkę wiedzy o klientach, ale wtedy pisałem, co ten system robi. Nie miałem pojęcia, co daje.
Pierwszego dnia zrobiłem rozbiór trzech prawdziwych artykułów z czasopism EAI, żeby zrozumieć, co odróżnia pracę badawczą od opisu produktu. Granica okazała się ostra: artykuł badawczy ma jawną lukę w wiedzy, formalizację, ewaluację z punktem odniesienia, ablację i zmierzone dane. Sam „działający system" to opis produktu, i takie prace odrzucają. Najważniejsze zdanie, jakie wtedy zapisałem: liczby bez metody są gorsze niż brak liczb.
Dobra wiadomość dla każdego, kto myśli o podobnej drodze: EAI Endorsed Transactions to seria recenzowanych czasopism, do których może zgłosić się każdy. Bez afiliacji uczelnianej, bez doktoratu. Złożenie jest bezpłatne, opłata 400 - 800 dolarów pojawia się dopiero po akceptacji. Jedynym filtrem jest recenzja merytoryczna. I właśnie ona wymusiła całą resztę tej historii.
Jaka była hipoteza i dlaczego nie przeżyła nocy?
Pierwsza wersja tezy brzmiała dumnie: lekka orkiestracja dwuagentowa z człowiekiem w pętli poprawia jakość i redukuje korekty w automatyzacji komunikacji małej firmy. Miałem na to, jak sądziłem, dowód w logach. Rok danych produkcyjnych: 665 wysłanych maili, 371 wywołań modelu, historia follow-upów. Czego akademicy nie mają, ja mam, bo u mnie system pracuje na żywej firmie.
Napisałem skrypt analizy retrospektywnej i uruchomiłem go tego samego wieczoru. Wynik: odsetek korekt człowieka wyniósł 1,5 procent, dziesięć na 665 maili, i był płaski w czasie. Przez chwilę wyglądało to jak triumf. System prawie nie wymaga poprawek! Potem zajrzałem głębiej i zrozumiałem, że flaga „poprawiono" po prostu nie była logowana. To nie był genialny system. To był błąd w instrumentacji, który udawał wynik.
Tej samej nocy wyszły dwie kolejne rzeczy. Dane o kosztach obejmowały tylko Verę, bo Alex nie logował zużycia tokenów. A przy okazji grzebania w kodzie znalazłem błąd produkcyjny, przez który Alex od pewnego czasu w ogóle nie wykonywał wywołań modelu. Pracował tak rzadko, że nikt tego nie zauważył. Przypomniało mi to lekcję z tekstu o automatach, które umierają w ciszy: proces bez czujnika, który krzyczy, gdy stanie, nie jest skończony.
Hipoteza o uczeniu się preferencji na danych historycznych poszła do kosza. Została decyzja, że rdzeń dowodu musi pochodzić z kontrolowanego eksperymentu, a retrospektywa będzie tylko tłem. Było dobrze po północy. Powiedziałem wtedy zdanie, które dziś brzmi trochę patetycznie, ale tamtej nocy było prawdziwe: jeśli dziś przerwiemy, jutro mogę nie wejść na ten poziom. Idziemy dalej.
Co trzeba było dobudować, żeby w ogóle coś zmierzyć?
Eksperyment na systemie, który jednocześnie obsługuje prawdziwych klientów, ma jeden warunek wstępny: nie może nic wysłać. Pierwszym elementem był więc sandbox, czyli tryb, w którym agent myśli, że wysyła maila, rejestruje to w logu, ale wiadomość nigdzie nie wychodzi. Przetestowałem go zanim uruchomiłem cokolwiek dalej. Mail nie wyszedł, rejestr wysyłek pozostał nietknięty.
Drugim elementem była telemetria. Każde zadanie dostało identyfikator, a Vera wywołana przez Alexa dziedziczy go, więc da się policzyć pełny koszt jednego zadania razem z delegacją. Do tego czas, liczba iteracji pętli, ślad wywołanych narzędzi, wynik. Zasada przy modyfikowaniu żywego kodu agentów była jedna: telemetria nigdy nie może wywalić agenta. Jeśli nie wstanie, agent ma pracować dalej, jakby jej nie było.
Trzeci element to warianty. Zmienna środowiskowa przełącza system w jeden z trzech trybów: pełny, czyli Alex z dostępem do Very; solo, czyli Alex z narzędziami, ale bez agenta wiedzy; i sam model, bez żadnych narzędzi. Bez tego porównania nie byłoby ablacji, a bez ablacji nie byłoby artykułu.
Pilot na ośmiu zadaniach pokazał, że wszystko działa, i od razu dał pierwszy sygnał, który potem okazał się ważniejszy niż cała teza. Wariant solo zapytany o jeden z projektów hokejowych odpowiedział, że to sklep internetowy. Zmyślił. Wariant pełny podał poprawny kontekst, bo Vera go znalazła. Ale w innym zadaniu pełny wariant szukał przez 257 sekund osoby, która nie istnieje, bo sam ją wymyślił w trakcie. To był pierwszy moment, w którym zobaczyłem, że pytanie „czy wiedza pomaga" jest źle postawione. Właściwe brzmi: kiedy pomaga, a kiedy szkodzi.
Jak wyglądał pomiar: 900 przebiegów za 34 dolary
Zbiór testowy to 60 zadań. Trzydzieści wymaga wiedzy o firmie: historia współpracy z klientem, status projektu, cennik, kto jest kim. Trzydzieści jest prostych: obliczenia, redakcja tekstu, krótki mail. Każde zadanie wymagające wiedzy ma twardy klucz odpowiedzi, czyli złote punkty spisane ręcznie ze stanu faktycznego na sierpień 2026. Każde zadanie uruchomione w trzech wariantach, pięć razy, bo model jest niedeterministyczny. Razem 900 przebiegów.
Decyzja, którą podjąłem świadomie i którą warto wyjaśnić: dane testowe zawierają prawdziwe nazwy klientów i prawdziwe kwoty. Inaczej nie da się testować wyszukiwania w prawdziwej bazie. Anonimizacja weszła dopiero na etapie prezentacji wyników. W artykule nie ma ani jednej nazwy firmy, która nie jest moja.
Ocenę wystawiał model językowy w roli sędziego, według rubryki: poprawność, kompletność, halucynacja, fakty spoza klucza, użyteczność. Wiedziałem z literatury, że sędzia automatyczny ma systematyczne skrzywienia, więc oceny powtórzył drugi sędzia z innej rodziny modeli, a zgodność policzyłem współczynnikiem kappa. Przy decyzji binarnej „czy to halucynacja" wyszło 0,79, co jest wartością wysoką. Przy ocenie w skali pięciostopniowej tylko 0,40. Sędziowie zgadzają się, czy coś jest błędem, a rozchodzą się przy stopniowaniu. O tym, czy sędziemu AI w ogóle można ufać, napiszę osobno, bo to temat na własny tekst.
Nocny run 900 przebiegów wystartował około pół do pierwszej. O drugiej stanął na trzecim przebiegu. Komunikat z API: saldo kredytów jest za niskie. Dwa pierwsze przebiegi zużyły resztkę środków, a potem 447 pustych odrzutów poleciało jeden za drugim, każdy zapisany jako „wynik". Rano trzeba było wyczyścić plik, doładować konto i wznowić z checkpointu. Lekcja na stałe: przed długim płatnym wsadem najpierw próba za grosz i sprawdzenie salda. Druga lekcja, równie prozaiczna: komputer nie może zasnąć w trakcie, a Windows Update nie może go zrestartować. Oba zabezpieczenia dopisałem po fakcie.
Główne wyniki już opisałem w tekście o tym, że mój agent przy zwykłym mailu jest dwa razy gorszy od gołego modelu, więc tu tylko skrót, bo to nie o nich jest ten artykuł. Na zadaniach wymagających wiedzy wariant pełny ma poprawność 3,00 wobec 1,24 dla solo, i wygrał we wszystkich trzydziestu zadaniach bez wyjątku. Na prostym mailu goły model dostał 3,68, a agent z pełnym dostępem 1,96, bo zamiast napisać wiadomość zaczął dopytywać i szukać kontekstu. Delegacja do agenta wiedzy kosztuje szesnaście razy więcej. I 49 procent odpowiedzi z dostępem do wiedzy sędzia oznaczył jako halucynacje, wobec 3 procent bez dostępu.
Ta ostatnia liczba wyglądała jak katastrofa dla całej idei podpinania AI do bazy wiedzy. I wyglądałaby tak nadal, gdybym nie przeczytał literatury.
Co powiedziała literatura i gdzie się z nią rozeszliśmy?
Tu przyznam się do rzeczy, która kosztowała mnie najwięcej nerwów w całym projekcie. Przez pierwsze dni byłem przekonany, że odkryłem zjawisko. Odpowiedzi oznaczone jako halucynacje, gdy je przejrzałem ręcznie, w większości wcale nie były zmyślone. Agent znajdował w bazie dokument, cytował z niego liczbę, a liczba była nieaktualna. Cennik sprzed czterech miesięcy. Status projektu z notatki, po której były trzy kolejne. Jeden fakt o mojej własnej usłudze istniał w bazie w czterech wersjach z czterech różnych miesięcy, żadna nieoznaczona jako obowiązująca. Opisałem to zresztą w tekście o czterech cennikach w jednej bazie.
Zacząłem pisać, że to nowy rodzaj błędu. A potem zrobiłem to, co powinienem zrobić pierwszego dnia: sprawdziłem, czy ktoś już to zbadał. Po angielsku, bo polskie hasła nie dają prawie nic. I znalazłem całą linię prac. Zjawisko ma nazwę: halucynacja czasowa, odpowiedź ugruntowana w materiale nieaktualnym. Jest praca o systemie VersionRAG, w której autorzy pokazują na stu pytaniach o 34 wersjonowane dokumenty techniczne, że standardowe wyszukiwanie trafia w 58 procentach, a ich metoda z jawnym grafem wersji w 90. Są prace o unieważnianiu przeterminowanych faktów, o bazach wektorowych z wyszukiwaniem po czasie.
Pierwsza reakcja: wszystko na nic, ktoś to już zrobił. Druga, po dobie: nie, zrobili coś obok. Każda z tych prac zakłada, że dokumenty mają numery wersji albo jawną kolejność. Dokumentacja techniczna je ma. Baza wiedzy małej firmy nie ma nic takiego. Notatka ze spotkania i prezentacja ofertowa to po prostu dwa pliki z różnych miesięcy, bez relacji następstwa. Metody oparte na strukturze wersji nie mają się tu czego uchwycić. Nikt też nie zmierzył, jaką część błędów faktograficznych to zjawisko stanowi w korpusie, który rósł przez rok bez myśli o ewaluacji. I nikt nie pokazał, co się dzieje, gdy taki system ocenia się standardową rubryką halucynacji: przeterminowany fakt zostaje policzony jako konfabulacja, a wynik sugeruje, że wyszukiwanie pogarsza wiarygodność modelu. To wniosek fałszywy, i prowadzi do złych decyzji wdrożeniowych.
Teza artykułu zmieniła się więc całkowicie. Nie „nasz system jest lepszy", tylko: standardowe metryki mylą wierny cytat z nieaktualnego źródła ze zmyśleniem, choć te dwie sytuacje wymagają zupełnie różnych zabezpieczeń. Tytuł angielski brzmi „Stale Retrieval, Not Hallucination". Polski wybrałem sam i jest mi bliższy: „Wierny cytat z nieaktualnego źródła".
Z tej jednej lekcji zrobiłem zasadę, której trzymam się od tamtej pory przy każdym pomyśle na badanie: najpierw literatura, potem pomiar. Dwa tygodnie później ta sama zasada uratowała mnie przed budową orkiestry trzech agentów, bo literatura o debacie wieloagentowej pokazała, że wzorzec jest zmierzony i przegrywa z prostszymi metodami. Ale to już inna historia.
Trzy metody, które zawiodły, i dlaczego to też jest wynik
Skoro wiedziałem, że większość „halucynacji" to przeterminowane cytaty, naturalnym krokiem było to policzyć automatycznie. Mam 94 przypadki oznaczone jako halucynacja w wariancie pełnym. Ile z nich to konfabulacja, a ile wierny cytat ze starego dokumentu? Zaprojektowałem trzy metody. Wszystkie zawiodły, i w artykule są opisane jako wynik, nie jako wstydliwy przypis.
Metoda pierwsza: sprawdź, czy liczba z odpowiedzi agenta występuje gdziekolwiek w bazie wiedzy. Jeśli tak, to cytat, nie zmyślenie. Dała 46,8 procent trafień i wyglądała obiecująco. Dopóki nie zastosowałem jej do wariantu, który fizycznie nie miał dostępu do bazy. Ten wariant dostał 50 procent. Korpus zawiera 132 978 unikalnych liczb, więc dowolna kwota trafia się w nim przypadkiem. Metoda mierzyła szum.
Metoda druga: zawęź do dokumentów związanych tematycznie z zadaniem. Liczba musi wystąpić w pliku zawierającym słowa kluczowe zadania. Nadal zawodne. Kwota 30 000 dla cennika usługi mailingowej została odnaleziona w raporcie wywiadowczym o zupełnie innej firmie. Dokumenty firmowe poruszają wiele tematów naraz, a słowa kluczowe są zbyt pojemne.
Metoda trzecia: nie zgaduj, która liczba jest sporna, tylko wyciągnij ją z uzasadnienia sędziego, który wskazuje ją wprost. Eliminuje szum, ale ma ograniczony zasięg: tylko 22 z 94 uzasadnień zawierało jednoznaczną liczbę. Reszta opisuje sprzeczność słowami.
Wniosek, który poszedł do artykułu: dopasowanie leksykalne nie wystarcza. Rozstrzygnięcie, czy fakt pochodzi z bazy, wymaga sprawdzenia kontekstu, w jakim występuje, a to zadanie porównywalne z samym wyszukiwaniem. Zostaje jako problem otwarty. I właśnie to, jak sądzę, czyni tę pracę uczciwą. Gdybym opisał tylko, co się udało, recenzent miałby prawo zapytać, dlaczego nie zmierzyłem skali zjawiska. Odpowiedź brzmi: próbowałem trzy razy i tu są przyczyny.
Była też jedna porażka sędziego, którą zostawiłem w ograniczeniach badania, bo jest pouczająca. Sędzia uznał za błąd poprawną pisownię nazwiska jednej z moich klientek, twierdząc, że prawidłowa jest inna. Wiedza lokalna, oczywista dla każdego w firmie, pozostaje poza zasięgiem automatu oceniającego. Dlatego kappa 0,79 dowodzi tylko powtarzalności ocen, nie ich trafności. Dwaj sędziowie mogą zgodnie popełniać ten sam błąd.
Ile to kosztowało naprawdę?
Liczby, bo bez nich ten tekst byłby opinią.
Sam benchmark: 900 przebiegów za około 34 dolary, płacone przez API. Tu podjąłem decyzję, która brzmi nieintuicyjnie: nie przepisałem eksperymentu na abonament, choć byłoby taniej. Jedno z pytań badawczych mierzy koszt w tokenach. Gdybym przeniósł się na subskrypcję, zniszczyłbym zmienną, którą mierzę.
Czas: dwa tygodnie, od 9 do 22 sierpnia, przy czym pierwsze trzy dni to były maratony do drugiej, trzeciej w nocy. Pisząc uczciwie, nie wszystko to był czas „na artykuł". Spora część to naprawy w produkcyjnym systemie, które i tak należało zrobić: błąd blokujący wywołania Alexa, brak logowania kosztów, brak czujnika stanu. Badanie było pretekstem, żeby wreszcie zajrzeć pod maskę.
Rzeczy, których nie ma w wytycznych na stronie wydawcy, a wyszły dopiero z oficjalnego szablonu: abstrakt musi być strukturalny, z pięcioma sekcjami, i mieć najwyżej 1000 znaków. Mój miał 1689. Skrócony do 948. Pełna wersja narracyjna została w osobnym pliku i przyda się gdzie indziej. Bibliografia urosła z 17 do 24 pozycji, każda cytowana w tekście, zero odwołań bez pozycji i zero pozycji bez odwołania, sprawdzone automatem. Tekst przywoływał „rysunek 1", a pliku nie było. Narysowałem. Tabela dziesięciokolumnowa łamała nagłówki po literze w układzie dwukolumnowym, więc poszła przez sekcję jednokolumnową, co w Wordzie oznacza walkę z definicjami sekcji, o której wolałbym zapomnieć.
Wersję polską napisałem najpierw, bo po polsku myślę. Angielską przygotował model, a ja ją przeczytałem zdanie po zdaniu względem oryginału i poprawiłem. W artykule jest to zadeklarowane wprost, razem z konfliktem interesów: jestem właścicielem firmy, w której system pracuje. Udawanie, że go nie ma, byłoby gorsze niż jego opisanie.
Co zmieniłem u siebie po tym badaniu?
Artykuł, który nic nie zmienia w firmie autora, jest ćwiczeniem. Ten zmienił trzy rzeczy, i wszystkie trzy mogę polecić każdej firmie, która podpięła asystenta AI do własnych dokumentów.
Pierwsza: agent ma obowiązek wymienić wszystkie znalezione wersje faktu z datami, zamiast wybierać jedną. Jeśli w bazie leżą cztery cenniki, mam zobaczyć cztery cenniki i cztery daty, a decyzję podejmuję sam. To zmiana w zachowaniu modelu, czyli w instrukcji, i działa tak długo, jak model jej słucha.
Druga, ważniejsza: dokumenty z nieaktualnymi danymi dostały nagłówek ostrzegawczy. Ta zmiana działa na poziomie danych, więc obowiązuje niezależnie od tego, który agent sięgnie po plik. Zasada ogólna, do której doszedłem przez to badanie: co da się wymusić na danych albo w kodzie, wymuszaj tam, nie w instrukcji dla modelu. Instrukcje są do interpretacji. Dane nie.
Trzecia: przed pełnym przetwarzaniem warto postawić bramkę rozstrzygającą, czy zadanie w ogóle wymaga kontekstu firmowego. Prosty mail nie wymaga. Agent, który i tak idzie szukać, kosztuje szesnaście razy więcej i pisze gorzej.
I jedno zalecenie, które zostawiłem w ostatnim akapicie artykułu, bo uważam je za najważniejsze zdanie całej pracy. Zanim podłączysz model do bazy wiedzy, sprawdź, ile wersji tej samej informacji w niej leży. Jeśli odpowiedź brzmi „nie wiem", to jest pierwszy problem do rozwiązania. Wcześniejszy niż wybór modelu, narzędzia czy metody wyszukiwania.
Co dalej z artykułem, zdecydują recenzenci. Numer zgłoszenia mam, potwierdzenie przyszło, cover letter poszedł. Jest w nim zdanie, które najlepiej streszcza, po co to wszystko: ta praca daje coś, czego literatura rzadko dostarcza, czyli pomiar na żywym korpusie produkcyjnym, a nie na przygotowanym zbiorze testowym. To jedyna przewaga praktyka nad akademikiem. Warto z niej korzystać.
Słownik pojęć
- RAG (generowanie wspomagane wyszukiwaniem) - metoda, w której model przed odpowiedzią przeszukuje bazę dokumentów i cytuje, zamiast zgadywać z pamięci. Działa dobrze, gdy baza jest spójna. Gorzej, gdy ta sama informacja leży w niej w kilku wersjach.
- Halucynacja - twierdzenie modelu niepokryte źródłem albo z nim sprzeczne. Standardowa definicja nie odróżnia zmyślenia od wiernego cytatu z nieaktualnego dokumentu, i o tym jest cały artykuł.
- Halucynacja czasowa - odpowiedź poprawnie ugruntowana w materiale, który przestał być aktualny. Termin z literatury; u mnie w tekście funkcjonuje jako „wierny cytat z nieaktualnego źródła".
- Ablacja - sprawdzenie, co daje każdy element systemu, przez wyłączanie go po kolei i mierzenie różnicy. U mnie: pełny system, system bez agenta wiedzy, sam model.
- LLM w roli sędziego - model językowy oceniający odpowiedzi innego modelu według rubryki. Tani i powtarzalny, ale ma systematyczne skrzywienia, dlatego potrzebuje drugiego sędziego i walidacji ręcznej.
- Kappa Cohena - współczynnik zgodności dwóch oceniających, poprawiony o zgodność przypadkową. Mierzy powtarzalność ocen, nie ich trafność.
- Człowiek w pętli - projekt systemu, w którym automat przygotowuje, a człowiek zatwierdza. U mnie każdy mail do klienta przechodzi przez kolejkę akceptacji.
- Sandbox - tryb, w którym agent wykonuje całe rozumowanie, ale realne akcje, jak wysyłka maila, są symulowane. Bez niego eksperyment na produkcyjnym systemie byłby niebezpieczny.
Jeśli chcesz zmierzyć własnego asystenta
Nie potrzebujesz do tego czasopisma. Potrzebujesz zbioru zadań z twardym kluczem odpowiedzi, trybu, w którym nic nie wychodzi na zewnątrz, i uczciwego porównania z wariantem bez wiedzy. Jeśli masz w firmie asystenta AI podpiętego do dokumentów i chcesz wiedzieć, co naprawdę daje, napisz do mnie na [email protected]. Najpierw policzymy, ile wersji tej samej informacji leży w Twojej bazie. Z doświadczenia: wynik zaskakuje każdego.
Członek Polskiego Stowarzyszenia Badań nad AI. Artykuł naukowy dopuszczony do emisji przez The European Alliance for Innovation (EAI). Praktyk. 31 wdrożeń komercyjnych.
własnej firmie cybulski.ai JC


