Strona główna / Artykuły

Zapobieganie halucynacjom u chatbotów: RAG, wyszukiwanie wektorowe, dzielenie danych na fragmenty oraz zasady ograniczające.

Rozwiązanie projektowe systemu dla chatbota obsługi klienta, który tworzy zasady: RAG, embeddingi i wyszukiwanie w sieciach neuronowych, rozmiar fragmentów danych, prompty uzupełniające informacje, ograniczenia kontekstu oraz monitorowanie.

Wydawca: REACTAPP.TOP7 min czytania1527 słów

Źródła: AI Chatbot Gives Wrong Answers: System Design Deep Dive on Hallucinations, RAG Architecture, and Vector Databases

Bot czatowy obsługi klienta zostaje zapytany o politykę zwrotów firmy i wymyśla taką. Polityka ta w rzeczywistości nie istnieje, ale klient ją stosuje, a firma ostatecznie musi ją wypełnić. To jest problem halucynacji w jego najdroższej formie i stanowi ulubiony temat na rozmowy kwalifikacyjne z zakresu projektowania systemów, ponieważ łączy infrastrukturę AI z klasyczną architekturą.

Dlaczego modele coś wymyślają

Wielki model językowy to generator tekstu oparty na prawdopodobieństwie. Nie zna faktów, lecz przewiduje następny najbardziej prawdopodobny token. Gdy odpowiedź nie znajduje się w jego danych treningowych ani w kontekście, generuje coś, co brzmi sensownie, ale tak naprawdę nie jest prawdziwe. Jeśli tekst treningowy zawiera wiele polityk zwrotów innych firm, model wygeneruje taką, która pasuje do wzorca, nawet jeśli jest błędna dla danej firmy.

To nie tyle błąd, co skutek sposobu działania tej technologii. Samo dopasowanie modelu również tego nie naprawia, ponieważ nie można uwzględnić wszystkich możliwych faktów w jego wagach. Głównym rozwiązaniem jest generowanie wzbogacone pobieraniem danych, czyli RAG: zamiast prosić model o odpowiedź na podstawie swoich parametrów, najpierw pobiera się odpowiednie dokumenty i umieszcza je w instrukcji dla modelu.

Przykład zastosowania to chatbot obsługi klienta, który odpowiada na pytania dotyczące produktów, zasad oraz rozwiązywania problemów. Odpowiada pewnie, ale czasami twierdzi, że dany produkt posiada funkcję, której w rzeczywistości nie ma, lub wymyśla jakąś zasadę. Jak zapewnić, by jego odpowiedzi były oparte na rzeczywistej dokumentacji?

Tematy, które warto omówić w dobrej odpowiedzi, to:

  • dlaczego modele tworzą iluzje i dlaczego samo dopasowanie modelu nie wystarcza
  • proces RAG polegający na pobieraniu kontekstu, a następnie generowaniu odpowiedzi
  • bazy danych wektorowych i wyszukiwanie semantyczne oparte na embeddingach
  • strategie dzielenia dokumentów na fragmenty
  • techniki promptów zmniejszające halucynacje
  • zarządzanie oknem kontekstowym w ramach ograniczeń tokenów
  • procesy oceny monitorujące jakość odpowiedzi
  • Jak RAG zmniejsza halucynacje

    Dzięki RAG system najpierw pobiera istotne materiały z bazy wiedzy i wstawia je do promptu jako kontekst. Bez tego model zgaduje na podstawie swoich parametrów. Z jego pomocą model czyta odpowiedź z dostarczonych dokumentów. Nadal generuje tokeny, ale kontekst to ogranicza. Jeśli w dokumentach jest napisane, że zwrotów nie ma, model nie wymyśli 30-dniowego okna na zwrot.

    Bazy danych wektorowych i embeddingi

    Jak system znajduje odpowiednie dokumenty? Każdy dokument jest przekształcany w wektorowe embeddingi, wysoko wymiarową numeryczną reprezentację jego znaczenia, a zapytanie jest traktowane w ten sam sposób. Baza danych wektorowych zwraca dokumenty, których embeddingi znajdują się najbliżej embeddingów zapytania.

    Pracę tę wykonują cztery komponenty:

    • Model embeddingów. Mapuje tekst na wektory tak, aby podobne teksty generowały podobne wektory. Do dostępnych opcji należą model text-embedding-3-small od OpenAI, który ma 1536 wymiarów, oraz modele otwartej kodu takie jak BGE czy E5.
    • Baza danych wektorowych. Przechowuje embeddingi i umożliwia wyszukiwanie w przybliżeniu najbliższego sąsiada (ANN). Do wyboru są zarządzane rozwiązania takie jak Pinecone, a także Weaviate, Qdrant, pgvector (rozszerzenie PostgreSQL) i Milvus.
  • Szukanie w ANN. Porównywanie zapytania z każdym przechowywanym wektorem staje się powolne. Algorytmy takie jak HNSW (Hierarchical Navigable Small World) i IVF (Inverted File Index) znacznie szybciej znajdują przybliżone sąsiednie elementy, w czasie mniej więcej liniowym. Przy 10 milionach lub większej liczbie wektorów pełne przeszukiwanie może trwać sekundy, podczas gdy ANN potrzebuje zaledwie milisekund.
  • Ponowna klasyfikacja. Pierwszy etap zwraca około 20 kandydatów. Następnie dokładniejszy kodownik krzyżowy przestawia je według stopnia istotności, a tylko trzy najlepsze trafiają do modelu LLM. Szybkie, lecz przybliżone wyodrębnianie informacji, po którym następuje wolna, ale precyzyjna ponowna klasyfikacja, zapewnia równowagę między szybkością a dokładnością.
  • Dzielenie na fragmenty

    Dokument polityczny składający się z 50 stron nie może zostać wyodrębniony w całości, więc musi zostać podzielony. Rozmiar fragmentów wpływa zarówno na dokładność wyodrębniania informacji, jak i na efektywne wykorzystanie okna kontekstowego.

    • Kawałek tekstu zbyt mały traci kontekst. Może zawierać np. „Przedmioty uszkodzone podczas transportu nie są” wraz z resztą zdania w następnym kawałku, co uniemożliwia modelowi prawidłową odpowiedź.
    • Kawałek tekstu zbyt duży rozcieńcza istotne informacje nieistotnym tekstem i wypełnia okno danymi szumowymi.
    • Nadmiar tekstu pomiędzy kawałkami chroni przed utratą informacji na granicach. Okno przesuwane z 10 do 20 procentami nakładania się zapobiega wypadnięciu informacji pomiędzy poszczególnymi kawałkami.

    Rozsądnym standardem w dokumentacji jest dzielenie tekstu na sekcje, ograniczanie długości kawałków do około 500–1000 tokenów oraz umieszczanie sąsiednich kawałków w odległości 50–100 tokenów od siebie. Każdy kawałek powinien być samodzielny, stanowić kompletną myśl.

    Projektowanie promptów jako druga linia obrony

    Nawet przy odzyskiwaniu informacji model może zignorować kontekst i mimo to tworzyć błędne informacje, dlatego prompt musi mocno powiązać go z dostarczonym materiałem. Kluczowe elementy to:

    • Rola. Stwierdzenie w stylu „Jesteś asystentem obsługi klienta” określa postać modelu.
    • Ograniczenie do kontekstu. Instrukcja, by odpowiadać wyłącznie na podstawie dostarczonego kontekstu, zapobiega korzystaniu przez model z tego, co zapamiętał.
    • Rozwiązanie na wypadek niepewności. Polecenie modelowi, by powiedział, że nie może odpowiedzieć, gdy w kontekście brakuje odpowiedzi, jest najważniejszą instrukcją. Bez niej model zgaduje.
    • Cytaty. Wymaganie podania źródeł dokumentów zmusza model do odnoszenia się do konkretnych źródeł, co utrudnia tworzenie fałszywych informacji.
    • Zakaz wiedzy z zewnątrz. Wyraźny zakaz korzystania z informacji poza kontekstem wzmacnia zasadę ograniczenia do tego, co jest dostępne.

    Zarządzanie oknem kontekstowym

    A co, jeśli istotne fragmenty nie mieszczą się w dostępnym obszarze lub pytanie składa się z kilku części wymagających wielu fragmentów? Współczesne modele mają duże okna kontekstowe – na przykład 128K tokenów w przypadku GPT-4o i nawet do 1M w przypadku Gemini – ale wypełnianie ich mniej istotnymi danymi obniża jakość odpowiedzi. Pomagają cztery taktyki:

    1. Klasyfikuj według istotności. Pobierz dziesięć fragmentów, uporządkuj je według oceny i dodawaj od najlepszych do najgorszych, aż wyczerpie się budżet tokenów, usuwając najgorsze jako pierwsze.
    2. Rozbierz zapytanie. W przypadku pytania typu „Opowiedz mi o polityce zwrotów i czasach dostawy” podziel je na podzapytania, pobierz informacje do każdego z nich i udziel odpowiedzi na oba w jednej wiadomości.
    3. Streszcz duże tematy. Gdy dany temat obejmuje wiele fragmentów, poproś model o ich streszczenie, a następnie użyj tego streszczenia jako kontekstu do ostatecznej odpowiedzi.
  • Rozszerzanie wokół konkretnej części tekstu. W przypadku pytań dotyczących jednego fragmentu należy pobrać fragmenty przed i po tym fragmencie, aby kontekst był kompletny bez konieczności uwzględniania całego dokumentu.
  • Pełna architektura

    Podsumowując, główne decyzje dotyczą następujących kwestii:

    • Semantyczne dzielenie na fragmenty. Dzielenie odbywa się przy naturalnych granicach, takich jak nagłówki i akapity, przy użyciu fragmentów składających się z około 500 tokenów oraz 50 tokenów nakładania się, przy czym każdy fragment jest samodzielny.
    • Dwuetapowe wyszukiwanie. Wyszukiwanie za pomocą ANN dostarcza 20 kandydatów, a narzędzie cross-encoder wybiera najlepsze 3 z nich.
    • Niska temperatura. Ustawienie na poziomie około 0,2 w skali od 0 do 2 sprawia, że model jest mniej kreatywny i rzadziej tworzy fałszywe informacje.
  • Zasady bezpieczeństwa. Filtr treści sprawdza dane osobowe oraz naruszenia zasad, funkcja weryfikacji źródeł potwierdza, że odpowiedź odnosi się do danego kontekstu, a wskaźnik pewności wynikający z podobieństwa do źródeł decyduje o tym, czy udzielić odpowiedzi, czy odmówić.
  • Jasne stwierdzenie „Nie wiem”. Gdy pewność odnalezienia informacji spada poniżej określonego progu, bot informuje, że nie może odpowiedzieć. To najsilniejsza forma ochrony.
  • Pętla zwrotna. Oceny w postaci kciuka w górę lub w dół od użytkowników trafiają do systemu ewaluacji, który monitoruje dokładność oraz częstotliwość powstawania halucynacji z biegiem czasu.
  • Co należy monitorować

    1. Częstotliwość halucynacji. Udział odpowiedzi zawierających informacje nieobecne w dostarczonym kontekście, mierzony za pomocą automatycznej ewaluacji lub przeglądu przez człowieka. Rozsądnym celem jest poziom poniżej 1 procenta.
  • Dokładność wyodrębniania@3. Ile z trzech najważniejszych fragmentów rzeczywiście odnosi się do zapytania. Wartość poniżej 70 procent wskazuje na konieczność poprawy modelu embeddingowego lub metody dzielenia tekstu na fragmenty.
  • Rozkład pewności. Podział odpowiedzi na te o wysokiej, średniej lub niskiej pewności. Duża liczba przypadków o niskiej pewności oznacza braki w bazie wiedzy.
  • Dokładność cytowania. Automatyczna weryfikacja, czy cytowany dokument rzeczywiście potwierdza przedstawione twierdzenie.
  • Punkt oceny opinii użytkowników. Średnia ocena uzyskana na podstawie przycisków „plus” i „minus”, stanowiąca miarę ogólnej satysfakcji.
  • Wykorzystanie kontekstu. Ile z dostępnej ilości tokenów zostało wykorzystanych. Ciągle niskie wykorzystanie oznacza, że system zwraca zbyt mało fragmentów, natomiast wykorzystanie bliskie 100 procentom wskazuje na konieczność zwiększenia tej ilości.
  • Szczegółowość danych wejściowych. Czas opóźnienia pomiędzy zmianą dokumentu a jego pojawieniem się w wynikach wyszukiwania. W dynamicznych bazach wiedzy zbyt długi czas przetwarzania skutkuje przestarzałymi odpowiedziami.
  • Cztery warstwy ochrony

    Halucynacje nie są oznaką uszkodzenia sztucznej inteligencji – to problem projektowy. Model bez ograniczeń zawsze wybiera wiarygodność zamiast dokładności, ponieważ tak został nauczony. Aby temu zaradzić, stosuje się cztery warstwy:

    • Pobieranie danych. Dostarczanie istotnych dokumentów, dzięki którym model może odpowiadać na podstawie nich, a nie z pamięci.
    • Kierowanie modelu. Ograniczanie modelu do danego kontekstu, nakazywanie mu przyznawania, że nie wie, oraz wymaganie podawania źródeł.
    • Zasady bezpieczeństwa. Filtrowanie wyników, sprawdzanie źródeł oraz obliczanie wskaźników pewności, odrzucając wszystko, co nie da się zweryfikować w kontekście.
  • Komentarze użytkowników. Śledź stopę halucynacji, oceny użytkowników oraz dokładność wyszukiwania, a także nieustannie doskonal bazę wiedzy oraz procesy przetwarzania.
  • Najważniejsza zasada: chatbot, który pewnie mówi „Nie wiem”, jest o wiele lepszy od tego, który pewnie wymyśla odpowiedź.