RAG w praktyce – jak sprawić, by ChatGPT odpowiadał tylko na podstawie dokumentów Twojej firmy?

Table of Contents
Dlaczego standardowy ChatGPT to za mało?
Wyobraź sobie, że pytasz ChatGPT o termin wykonania zamówienia nr 883/06/2026. Model nie ma dostępu do Twojego systemu ERP. Nie zna Twoich umów. Nie widzi korespondencji z klientem. Ale i tak odpowie – zmyśli numer zamówienia, datę i klienta. Brzmi wiarygodnie, jest poprawne gramatycznie… i kompletnie nieprawdziwe.
To właśnie problem halucynacji LLM – modele językowe generują odpowiedzi na podstawie statystycznych wzorców z danych treningowych, a nie na podstawie faktów z Twojej firmy.
Rozwiązaniem jest RAG – Retrieval-Augmented Generation.
RAG to architektura, w której model językowy przed wygenerowaniem odpowiedzi przeszukuje wskazaną bazę dokumentów i opiera się wyłącznie na znalezionych w niej informacjach.
🧠 Jak RAG eliminuje halucynacje?
| Bez RAG | Z RAG |
|---|---|
| Model zgaduje | Model szuka w dokumentach |
| Odpowiada z pamięci | Odpowiada z cytatem źródłowym |
| Brak kontroli nad źródłami | Każda odpowiedź ma ścieżkę audytu |
| Aktualizacja = ponowny trening | Aktualizacja = dodanie pliku |
Architektura RAG – jak to działa pod maską?
System RAG składa się z trzech głównych komponentów:
1️⃣ Indeksowanie dokumentów (offline)
Dokumenty firmowe (PDF, DOCX, e-maile, umowy, faktury) są przetwarzane przed pierwszym zapytaniem:
┌─────────────┐ ┌────────────────┐ ┌──────────────┐
│ Dokumenty │ ───▶ │ Embedding │ ───▶ │ Wektorowa │
│ firmowe │ │ model │ │ baza danych │
│ (PDF, DOCX) │ │ (text → wektor)│ │ (chromadb, │
└─────────────┘ └────────────────┘ │ pgvector) │
└──────────────┘
Każdy dokument jest dzielony na fragmenty (chunks), a każdy fragment zamieniany na wektor liczbowy (embedding). Wektory są przechowywane w bazie wektorowej, gotowe do przeszukiwania semantycznego.
2️⃣ Wyszukiwanie (retrieval)
Gdy użytkownik zadaje pytanie:
- Pytanie jest zamieniane na embedding
- Baza wektorowa zwraca k najbardziej podobnych fragmentów dokumentów
- Te fragmenty stają się kontekstem dla modelu
3️⃣ Generowanie odpowiedzi (augmented generation)
Model otrzymuje prompt złożony z kontekstu i pytania:
ODPOWIADAJ WYŁĄCZNIE NA PODSTAWIE PONIŻSZYCH DOKUMENTÓW.
JEŚLI NIE ZNAJDZIESZ ODPOWIEDZI, NAPISZ "NIE WIEM".
DOKUMENTY:
[Fragment 1] Umowa z dnia 12.03.2026: termin dostawy 45 dni...
[Fragment 2] Aneks nr 3: wydłużenie terminu do 60 dni...
[Fragment 3] ...
PYTANIE: Jaki jest termin dostawy dla zamówienia 883?
Wdrożenie RAG krok po kroku
Poniżej kompletny, działający przykład w Pythonie – od dokumentu do odpowiedzi.
Krok 1: Instalacja zależności
| |
Krok 2: Ładowanie i dzielenie dokumentów
| |
Krok 3: Tworzenie embeddingów i bazy wektorowej
| |
Krok 4: Zapytanie RAG
| |
Typowe pułapki RAG i jak ich uniknąć
❌ Problem 1: Za duże chunki
Fragment 2000 znaków zawiera 5 różnych wątków – retrieval traci precyzję.
Rozwiązanie: Trzymaj chunki 300–800 znaków. Dla dokumentów prawnych stosuj podział po paragrafach, nie po znakach.
❌ Problem 2: Retrieval zwraca nieistotne fragmenty
Wyszukiwanie semantyczne oparte na podobieństwie wektorów nie zawsze trafia.
Rozwiązanie: Zastosuj hybrid search – połącz wyszukiwanie wektorowe z pełnotekstowym (BM25). W LangChain: EnsembleRetriever.
❌ Problem 3: Prompt nie blokuje halucynacji
Model nadal „dopowiada" spoza kontekstu.
Rozwiązanie: Twardy system prompt:
Jesteś asystentem firmowym. Odpowiadasz WYŁĄCZNIE na podstawie
dostarczonych dokumentów. Jeśli odpowiedzi nie ma w dokumentach,
odpowiadasz: "Nie znalazłem tej informacji w dokumentach firmy."
NIGDY nie dodawaj informacji spoza kontekstu.
❌ Problem 4: Dokumenty zawierają sprzeczne informacje
Umowa mówi 30 dni, aneks mówi 60 dni – model wybiera losowo.
Rozwiązanie: Dodaj metadane z datą każdego dokumentu i sortuj wyniki po dacie. W prompcie wymuś priorytetyzację nowszych dokumentów.
Co możesz zyskać dzięki RAG?
| Obszar | Bez RAG | Z RAG |
|---|---|---|
| Obsługa klienta | Pracownik szuka 15 min w dokumentach | AI odpowiada w 3 sekundy z cytatem |
| Dział prawny | Przeglądanie setek stron umów ręcznie | Zapytanie: „znajdź klauzule o karach" → wynik w sekundę |
| Helpdesk IT | Wiki nieczytana, odpowiedzi z głowy | AI przeszukuje Wiki + zgłoszenia historyczne |
| Compliance | „Chyba tak robiliśmy…" | Każda odpowiedź ma ślad źródłowy |
RAG w Agidot – jak to robimy u klientów
W Agidot wdrażamy RAG jako element większych systemów – od prostego asystenta dokumentów po złożone silniki decyzyjne weryfikujące wnioski kredytowe.
Nasz stack:
- Dokumenty: PDF, DOCX, e-maile, skany (OCR), transkrypcje rozmów
- Chunking: adaptacyjny, dostosowany do typu dokumentu
- Embeddings: polskie modele open-source (bez zależności od OpenAI)
- Vector DB: pgvector (PostgreSQL) – jedna baza mniej do zarządzania
- LLM: GPT-4o, Claude lub lokalny model przez Ollama (dla klientów wymagających offline)
- Orkiestracja: LangChain + FastAPI
💡 Case study z produkcji: Firma faktoringowa używa RAG do automatycznej analizy umów i wyciągania kluczowych parametrów (terminy, kary, warunki wypowiedzenia). System skraca czas analizy umowy z 45 minut do poniżej 60 sekund.
Chcesz wdrożyć RAG w swojej firmie?
Jeśli masz setki lub tysiące dokumentów, z których Twój zespół ręcznie wyszukuje informacje – RAG to rozwiązanie dla Ciebie.
🚀 Skontaktuj się z nami – pokażemy Ci, jak to działa na Twoich własnych dokumentach.