Zbudowałem bota Code Q&A z wykorzystaniem RAG: Co zadziałało, a co zawiodło

Nasi programiści spędzali całe dnie na przeszukiwaniu Slacka i starej dokumentacji, aby zrozumieć nasze mikroserwisy. Postanowiłem zbudować chatbota, który odpowiadałby na te pytania przy użyciu RAG.

Po drodze popełniłem wiele błędów. Oto czego się nauczyłem.

Porażki

  • Próbowałem umieścić całą dokumentację w jednym prompcie. Przekraczało to limity tokenów, powodowało halucynacje i generowało zbyt wysokie koszty.
  • Użyłem podstawowego indeksu TF-IDF. Nie radził sobie on, gdy użytkownicy używali synonimów lub innych terminów.
  • Próbowałem prostego dzielenia na fragmenty (chunks) po 500 znaków. Wyniki były losowe, ponieważ fragmenty często kończyły się w połowie zdania.

Rozwiązanie

Przestałem traktować LLM jak wyszukiwarkę. Przekształciłem go w silnik czytający dane z dedykowanego indeksu wyszukiwania.

Oto pipeline, który zadziałał:

  • Dzielenie dokumentacji na fragmenty po 300 tokenów z 50-tokenowym nakładaniem się (overlap).
  • Osadzanie (embedding) każdego fragmentu w wektorze.
  • Przechowywanie wektorów w indeksie wyszukiwania podobieństwa.
  • W momencie zapytania znajdowanie 5 najbardziej podobnych fragmentów.
  • Przekazywanie tylko tych fragmentów do LLM w celu wygenerowania odpowiedzi.

Ta zmiana zmniejszyła liczbę halucynacji o 80% i obniżyła koszty do poziomu poniżej 0,01 USD za zapytanie.

Kluczowe wnioski

  • Rozmiar fragmentu (chunk size) jest kluczowy. 150 tokenów to zbyt mało kontekstu. 1000 tokenów to zbyt dużo szumu. 300 tokenów to złoty środek.
  • Nakładanie się (overlap) jest obowiązkowe. Zapobiega to utracie kontekstu między fragmentami.
  • Używaj małych modeli dla szybkości. Mały model embeddingowy dobrze sprawdził się w naszych wewnętrznych potrzebach.
  • Testuj proces odzyskiwania danych (retrieval). Nie polegaj na ręcznych sprawdzeniach. Stwórz zestaw testowy, aby mierzyć dokładność.

RAG to nie magia. To zagadka inżynieryjna. Jeśli Twoje fragmenty są złe, proces odzyskiwania danych jest zły. Jeśli proces odzyskiwania danych jest zły, odpowiedzi będą złe.

Obecnie poprawnie odpowiadamy na 80% pytań dotyczących onboardingu. Jest to znacznie szybsze niż czekanie na odpowiedź człowieka na Slacku.

Jak Ty budujesz asystentów AI dla swojej dokumentacji?

Źródło: https://dev.to/__c1b9e06dc90a7e0a676b/i-built-a-code-qa-bot-with-rag-what-worked-and-what-failed-2717

Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi