Halucynacja AI to odpowiedź, która brzmi pewnie i jest fałszywa: zmyślony fakt, cytat z artykułu, który nie istnieje, funkcja, której biblioteka nigdy nie miała. Robi to każdy model czatowy, także ChatGPT, Claude i Gemini. To nie błąd, który ktoś załata; wynika to ze sposobu, w jaki modele językowe tworzą tekst. Prompty mogą sprawić, że halucynacje będą rzadsze, a te, które zostaną, wychwyci tylko sprawdzanie.
Dlaczego modele językowe halucynują
Model językowy pisze po jednym tokenie, a każdy wybiera dlatego, że prawdopodobnie pasuje do dotychczasowego tekstu. Prawdopodobnie, biorąc pod uwagę wszystko, co model zobaczył podczas treningu. Nic w tym procesie nie sprawdza faktów. Gdy odpowiedź była częsta w danych treningowych, prawdopodobna kontynuacja zwykle jest prawdziwa. Gdy była rzadka, świeża albo w ogóle jej tam nie było, model i tak tworzy najbardziej wiarygodną kontynuację, a wiarygodny tekst o fakcie, którego model nie zna, to właśnie halucynacja.
Niektóre rodzaje pytań są bardziej narażone niż inne:
- Konkretne szczegóły: dokładne liczby, daty, nazwiska, numery wersji, numery stron. Kształt odpowiedzi łatwo przewidzieć, szczegół już nie.
- Cytaty i linki. Odwołanie ma przewidywalny format (autorzy, rok, tytuł, czasopismo), więc model potrafi wygenerować poprawnie wyglądające odwołanie do artykułu, którego nikt nigdy nie napisał.
- Rzadkie albo świeże tematy: mała biblioteka, lokalny przepis, wszystko, co nastąpiło po końcu danych treningowych modelu.
- Pytania z fałszywym założeniem. Zapytaj, co robi jakaś funkcja, a model zwykle odpowie tak, jakby ta funkcja istniała.
Płynność nie świadczy o trafności. Zhalucynowana odpowiedź ma ten sam pewny ton, to samo formatowanie i ten sam poziom szczegółowości co poprawna, i dlatego łatwo ją przeoczyć.
Pułapka fałszywego założenia
Poniższe zakładki pytają o DataFrame.smart_merge() w pandas. Taka metoda nie istnieje. Pierwsze pytanie zakłada, że istnieje; drugie pozwala modelowi to powiedzieć.
DataFrame.smart_merge() łączy dwa DataFrame'y i sama wykrywa klucze złączenia, porównując nazwy i typy danych kolumn. Używaj jej, gdy twoje ramki mają wspólne kolumny kluczowe o nieco innych nazwach, na przykład user_id i userId, bo potrafi dopasować je automatycznie.
Jeśli chcesz mieć pełną kontrolę nad kluczami i typem złączenia, merge() nadal jest lepszym wyborem.
Pierwsza odpowiedź to halucynacja zbudowana z prawdziwych elementów: pandas rzeczywiście łączy DataFrame'y, a dopasowywanie kluczy to rozsądna potrzeba. Pytanie dostarczyło założenie, a model dostarczył wiarygodną funkcję, która do niego pasuje. Obecne modele częściej niż starsze wychwytują fałszywe założenia, ale pytanie sformułowane jako założenie nadal popycha odpowiedź w stronę zgody.
Drugi prompt zrobił dwie rzeczy. Zapytał, czy metoda istnieje, zanim zapytał, co robi, i dał wyraźne pozwolenie na niepewność. Odpowiedź dodatkowo podsunęła sposób weryfikacji i ten nawyk warto zachować: hasattr sprawdza prawdziwą bibliotekę w jednej linii.
Odpowiedź ze źródła, z cytatami
Najskuteczniejszy sposób na ograniczenie halucynacji to umieszczenie faktów w prompcie. Gdy odpowiedź jest w tekście, który model widzi, nie musi niczego sobie przypominać, a ty możesz porównać każde twierdzenie z tym tekstem. Prośba o cytat na poparcie każdego twierdzenia przyspiesza sprawdzanie, a powiedzenie modelowi, co ma napisać, gdy dokument milczy, zmniejsza szansę, że wypełni lukę zgadywaniem.
Jak długo są przechowywane produkcyjne kopie zapasowe: 30 dni. Dokument podaje 30 dni dla kopii zapasowych ogólnie, a 7 dni tylko dla stagingu. "Kopie zapasowe są wykonywane każdej nocy o 02:00 UTC i przechowywane przez 30 dni."
Czy mogę sam przywrócić kopię: Brak w dokumencie. Mówi on tylko, jak prosić o przywrócenie: "O przywrócenie prosi się na kanale #ops i zwykle jest ono wykonywane w ciągu czterech godzin." To sugeruje, że robi to inny zespół, ale dokument nie mówi, czy istnieje samodzielne przywracanie.
Zobacz, jak odpowiedź potraktowała drugie pytanie. Model odpowiadający z wiedzy ogólnej mógłby opisać polecenie przywracania. Ograniczony do dokumentu oddzielił to, co tekst mówi, od tego, co tylko sugeruje. Wyłącz część z ograniczeniami i zapytaj ponownie, żeby zobaczyć, czy odpowiedź nadal je rozdziela.
Tagi <document> oddzielają materiał źródłowy od twoich instrukcji; delimitery i tagi XML wyjaśniają, dlaczego to ważne, a context engineering opisuje, jak dostarczać modelom właściwe dokumenty na dużą skalę. Ta sama idea stoi za aplikacjami czatowymi z wyszukiwaniem w sieci albo przesyłaniem plików: odpowiedź jest tak dobrze ugruntowana, jak źródła obecne w rozmowie, więc czytaj cytowane źródło, a nie tylko jego streszczenie.
Inne nawyki, które pomagają
- Pytaj, nie zakładaj. "Czy da się zrobić X?" przed "Jak zrobić X?". Fałszywe założenie to najłatwiejszy sposób na wywołanie halucynacji.
- Poproś o zaznaczenie niepewności. "Oznacz każde twierdzenie, co do którego nie masz pewności" daje ci listę miejsc do sprawdzenia w pierwszej kolejności. Te oznaczenia nie są skalibrowanymi prawdopodobieństwami, ale często wskazują słabe punkty.
- Proś o źródła, które da się otworzyć. A potem je otwórz. Nieotwarte źródło nie jest sprawdzone, a link może istnieć i mówić coś innego niż twierdzenie, które ma popierać.
- Zaczynaj od nowa, gdy czat robi się długi. Szczegóły z początku długiego czatu mogą się mieszać albo gubić w miarę rozrastania się rozmowy. Przy ważnych faktach otwórz nową rozmowę i wklej do niej potrzebny materiał; tokeny i okno kontekstu wyjaśniają dlaczego.
- Zapytaj drugi raz, od zera. Jeśli dwie niezależne odpowiedzi na to samo pytanie o fakty się różnią, co najmniej jedna jest błędna. Zgodność jest słabszym dowodem, bo model może powtórzyć ten sam błąd.
Sprawdzaj to, co ważne
Żaden prompt nie usuwa halucynacji, więc o tym, co sprawdzać, decyduj według kosztu pomyłki. Burza mózgów albo pierwszy szkic mogą zawierać kilka błędów. Liczba w raporcie, twierdzenie prawne albo medyczne, cytat przypisany konkretnej osobie czy odwołanie w twojej pracy wymagają źródła pierwotnego.
Kod najłatwiej zweryfikować, bo jego uruchomienie jest testem. Zmyślona metoda kończy się błędem AttributeError albo jego odpowiednikiem, gdy tylko uruchomi się linia, która ją wywołuje, więc upewnij się, że twój test do tej linii dociera. Ryzykowny przypadek to zmyślona nazwa pakietu. Jeśli model każe ci zainstalować nieznany ci pakiet, przed instalacją sprawdź, czy istnieje, czy to projekt, o który ci chodzi, i czy jest powszechnie używany. Badacze bezpieczeństwa pokazali, że modele często wymyślają te same fałszywe nazwy pakietów raz za razem, a atakujący, który opublikuje pakiet pod jedną z tych nazw, sprawia, że jego kod instaluje każdy, kto posłucha sugestii. Sprawdzanie kodu pisanego przez AI opisują prompty do pisania kodu.
Najczęściej zadawane pytania
Czym jest halucynacja AI?
Halucynacja AI to odpowiedź modelu językowego, która brzmi pewnie i płynnie, ale jest fałszywa albo nieuzasadniona: zmyślony fakt, cytat z artykułu, który nie istnieje, funkcja, której biblioteka nigdy nie miała. Model nie kłamie celowo. Wygenerował tekst, który wydawał się najbardziej prawdopodobny, a prawdopodobny nie znaczy prawdziwy.
Dlaczego ChatGPT zmyśla?
Modele czatowe generują tekst, przewidując kolejny token, jeden po drugim, na podstawie wzorców wyuczonych podczas treningu. Jeśli w rozmowie nie ma narzędzia takiego jak wyszukiwarka albo dokumentu, nic nie sprawdza odpowiedzi. Gdy poprawna odpowiedź była rzadka w danych treningowych albo w ogóle jej tam nie było, model i tak tworzy najbardziej wiarygodną kontynuację, a wiarygodna błędna odpowiedź czyta się dokładnie tak samo jak poprawna.
Czy da się całkowicie powstrzymać AI przed halucynacjami?
Nie. Obecne modele halucynują rzadziej niż wcześniejsze, a odpowiadanie na podstawie dostarczonych dokumentów albo wyników wyszukiwania ogranicza to jeszcze bardziej, ale żaden prompt tego nie usuwa. Każdy istotny fakt, liczbę, cytat, odwołanie czy API traktuj jak twierdzenie, które trzeba sprawdzić w źródle pierwotnym.
Jakie prompty ograniczają halucynacje AI?
Najbardziej pomagają trzy rzeczy. Daj wyraźne pozwolenie na odpowiedź "nie wiem". Dostarcz materiał źródłowy i poproś model, żeby odpowiadał tylko na jego podstawie. Poproś o dosłowny cytat na poparcie każdego twierdzenia, żeby móc je porównać z tekstem. Unikaj pytań, które zakładają, że coś jest prawdą, bo model ma skłonność do przyjmowania tego założenia.
Jakie są przykłady halucynacji AI w programowaniu?
Wywołanie metody, której biblioteka nie ma, przekazanie nieistniejącej opcji, import pakietu, którego nikt nie opublikował, i opisywanie zachowania ze starszej wersji biblioteki jako aktualnego. Kod sprawia, że wiele z nich łatwo wychwycić, bo zmyślona metoda zawodzi, gdy tylko uruchomi się linia, która ją wywołuje. Niebezpieczne są zmyślone nazwy pakietów: zanim zainstalujesz pakiet, sprawdź, czy istnieje i czy jest dobrze znany.