ai RAG - ghdrako/doc_snipets GitHub Wiki
RAG = Retrieval-Augmented Generation
To architektura łącząca dwa podejścia:
- Retrieval – wyszukiwanie informacji z zewnętrznego źródła wiedzy (np. bazy danych, dokumentów, wyszukiwarek).
- Generation – generowanie odpowiedzi przez model językowy (LLM), z wykorzystaniem wyszukanych informacji.
Cel: Umożliwić modelowi odpowiadanie na pytania w oparciu o aktualne i dokładne dane, które nie znajdują się bezpośrednio w jego wytrenowanej wiedzy.
Ogólny przepływ
- Input użytkownika (np. pytanie).
- Moduł Retrieval przeszukuje bazę wiedzy (np. dokumenty PDF, artykuły, wewnętrzne dane firmy).
- Zwrócone fragmenty są przekazywane jako kontekst do modelu językowego.
- Model generuje odpowiedź na podstawie pytania i dostarczonych fragmentów.
RAG bez rerankingu
- Retriever (np. wektorowy, oparty o embeddingi) znajduje np. 10 fragmentów dokumentów najbardziej podobnych do zapytania. *Wszystkie (lub część) tych fragmentów trafiają do modelu generatywnego, który z nich buduje odpowiedź. Problem: embeddingi nie zawsze dają idealną kolejność trafności — np. fragment 5. może być ważniejszy niż fragment 1.
Reranking
Reranking to drugi etap selekcji:
- Retriever zwraca np. 50 kandydatów.
- Reranker (np. model typu cross-encoder) ocenia dokładniej, jak bardzo każdy kandydat pasuje do zapytania.
- Wybierasz np. 5 najlepszych i dopiero one trafiają do modelu generatywnego.
modele do rerankingu:
- Bi-encoder (embedding retriever) – szybki, ale mniej precyzyjny.
- Cross-encoder (reranker) – wolniejszy, ale dokładniejszy (porównuje pytanie i fragment razem, nie osobno).
Przykłady popularnych rerankerów:
- cross-encoder/ms-marco-MiniLM-L-6-v2 (Hugging Face)
- bge-reranker-large (BAAI)
- Cohere Rerank (API)
Schemat RAG z rerankingiem
Zapytanie użytkownika
↓
[Retriever] – szybkie wyszukiwanie (np. 50 fragmentów)
↓
[Reranker] – dokładne ocenienie trafności
↓
[Top N fragmentów] – najbardziej trafne
↓
[Generator] – model LLM tworzy odpowiedź