Weryfikacja cytowań i liczb w odpowiedziach agenta na bazie PubMed
Modele językowe potrafią brzmieć niezwykle przekonująco, gdy powołują się na rzekome badania naukowe. W medycynie i sporcie to śmiertelnie niebezpieczna cecha: bot potrafi zmyślić nazwisko autora, rok publikacji, a nawet numer PMID.
Problem: przekonujący tekst bez pokrycia w faktach
W pytaniach badawczych kierowanych do botów trenerskich pojawiał się stały problem: model generował płynne, logicznie brzmiące wyjaśnienie, ale przypisywał mu zmyślone źródła lub podawał liczby niezgodne z przywoływanym badaniem. Co gorsza, użytkownik nie miał szybkiej metody sprawdzenia, czy cytowana praca naukowa w ogóle istnieje, ani czy nie została oficjalnie wycofana (retraction).
Równolegle w testach automatycznych (evals) pojawił się szum: testy były zbyt mocno powiązane z watchdogiem, a handshake MCP potrafił przekroczyć domyślny timeout, powodując fałszywe alarmy o regresji.
Co zrobiłem: silnik PubMed z kontrolą liczb i dowodów
- Zbudowałem od zera moduł PubMed w pięciu etapach (P0-P4): czytnik surowego XML z oznaczaniem wycofanych prac, klienta E-utilities z wyszukiwarką CLI, system oceny siły dowodów oraz kontroler weryfikujący zgodność cytowań.
- Zaimplementowałem automatyczny walidator odpowiedzi: porównuje identyfikatory PMID oraz liczby podane w odpowiedzi bota z rzeczywistą treścią pobranego abstraktu z bazy NCBI. Jeśli bot twierdzi, że suplement zwiększa siłę o 15%, a w pracy jest 5%, kontroler odrzuca odpowiedź.
- Wdrożyłem moduł w botach
gymicoachingz zabezpieczeniem prywatności zapytań: treść zapytania użytkownika jest anonimizowana przed wysłaniem do zewnętrznego API PubMed. - Odizolowałem potok testów
evalod watchdoga systemowego, dodałem flagi--gatewayoraz--casesi zlikwidowałem tworzenie nadmiarowych kopii bazy danych podczas testowania. - Zaktualizowałem bibliotekę
dane-sportowe(0.1.0 -> 0.3.0), ujednolicając wzory matematyczne logów treningowych i wskaźnik sRPE między botem a portalem webowym.
Dlaczego to ważne (Use Case)
Opieranie się na niesprawdzonych odpowiedziach modelu w tematach zdrowotnych przypomina zatrudnienie asystenta, który przepisuje etykiety leków z pamięci, zamiast sięgnąć po oficjalną ulotkę z apteki. Pomyłka o jedno zero w dawce lub powołanie się na wycofaną publikację może mieć realne konsekwencje.
Dzięki nowemu silnikowi każda odpowiedź bota ma sprawdzalny ślad: identyfikator PMID jest weryfikowany w bazie NCBI, a liczby muszą w 100% zgadzać się ze źródłem. Jeśli publikacja została wycofana przez wydawcę, bot natychmiast oznacza ją czerwoną flagą zamiast polecać jej wnioski.
Czego się nauczyłem
- Modele językowe nie powinny same cytować badań z pamięci wag. Pobranie surowego XML przez zaufane API i mechaniczne porównanie liczb przed wyświetleniem odpowiedzi całkowicie eliminuje halucynacje bibliograficzne.
- Prywatność zapytań badawczych wymaga izolacji: zapytania wysyłane do publicznych baz wiedzy muszą być oczyszczane z kontekstu użytkownika, aby historia wyszukiwań nie łączyła się z tożsamością pytającego.
- Testy regresyjne agentów (evals) muszą działać w odizolowanym środowisku. Powiązanie testów z produkcyjnym watchdogiem wprowadzało niestabilność, maskując prawdziwe błędy w kodzie.