Pipeline RAG: ingestia, wyszukiwanie, generowanie i reranking
Architektura RAG to dwufazowa budowa systemu Retrieval-Augmented Generation (generowania wspomaganego wyszukiwaniem): w ścieżce ingestii dokumenty są wczytywane, dzielone na chunki, zamieniane na wektory (embedding) i indeksowane; w ścieżce zapytania system wyszukuje fragmenty pasujące do zapytania, ponownie je sortuje (reranking) i przekazuje jako kontekst do modelu LLM, który generuje odpowiedź.
W skrócie
- Pipeline RAG składa się z dwóch oddzielnych ścieżek: działającej offline ścieżki ingestii i indeksowania (loading, chunking, embedding, upsert do wektorowej bazy danych) oraz działającej online ścieżki zapytania (embedding zapytania, retrieval, filtrowanie, reranking, składanie kontekstu, generowanie).
- Reranking z użyciem cross-encodera nie jest opcjonalnym dodatkiem: Contextual Retrieval firmy Anthropic obniża odsetek błędów wyszukiwania o 49%, a w połączeniu z rerankingiem o 67% (stan na wrzesień 2024).
- Wyszukiwanie hybrydowe (hybrid search) łączy gęste wyszukiwanie wektorowe (indeks HNSW) z rzadkim BM25 i wychwytuje dokładne kody, identyfikatory oraz nazwy własne, które umykają samym embeddingom.
- Filtry metadanych (tenant_id, ACL) powinny znaleźć się w każdym chunku: są technicznym warunkiem multi-tenancy, rozdzielenia danych klientów, które niemiecka Konferencja Ochrony Danych (DSK) wymienia jako środek w swoich wytycznych dotyczących RAG, oraz celowego usuwania pojedynczych wpisów.
- Najczęstsze błędy architektoniczne to naiwny chunking o stałym rozmiarze, brak rerankingu, brak ewaluacji i brak cytowania źródeł.
- Komponenty zapewniające suwerenność w UE to Qdrant (Berlin), Weaviate (Amsterdam) i Haystack/deepset (Berlin), a także embeddingi open-weight, takie jak BGE-M3 we własnej infrastrukturze lub Mistral Embed przez API paryskiego dostawcy Mistral AI. Jina AI od 2025 roku należy do Elastic, a Aleph Alpha łączy się z Cohere.
Architektura RAG opisuje techniczną budowę systemu Retrieval-Augmented Generation w dwóch wyraźnie oddzielonych fazach. Pierwsza faza, ingestia (inaczej indeksowanie), działa offline i przekształca dokumenty źródłowe w przeszukiwalny indeks. Druga faza, obsługa zapytań (query time), działa online przy każdym zapytaniu: pobiera pasujące treści, ponownie je porządkuje i przekazuje modelowi językowemu do wygenerowania odpowiedzi. Jeśli chcesz używać RAG produkcyjnie, musisz rozumieć obie ścieżki osobno i osobno nimi zarządzać.
- Dwie ścieżki, nie jedna: ingestia (loading, chunking, embedding, upsert) działa wsadowo; ścieżka zapytania (embedding, retrieval, filtrowanie, reranking, generowanie) działa przy każdym zapytaniu.
- Reranking to obowiązek, nie dodatek: cross-encoder po wstępnym wyszukiwaniu mierzalnie obniża odsetek błędów wyszukiwania (nawet o 67% w połączeniu z Contextual Retrieval, stan na wrzesień 2024).
- Metadane decydują o zgodności z przepisami: tenant_id, ACL i odwołanie do źródła w każdym chunku to techniczna podstawa multi-tenancy, rozdzielenia danych klientów i możliwości usuwania danych.
Faza 1: ingestia / indeksowanie (offline)
Ścieżka ingestii to praca przygotowawcza, która z góry przesądza o jakości i opóźnieniach późniejszego działania systemu. Składa się z czterech lub pięciu kroków:
1. Loading / konektory. Źródła takie jak SharePoint, S3, Confluence czy baza danych są podłączane przez konektory. Już na tym etapie dla każdego dokumentu rejestruje się stabilne identyfikatory i metadane (źródło, znacznik czasu, klient, uprawnienia dostępu).
2. Parsowanie. Surowe dokumenty, przede wszystkim pliki PDF i umowy, są przekształcane w ustrukturyzowany tekst. Parsery uwzględniające układ dokumentu (layout-aware) zachowują strukturę tabel, list i nagłówków, co później zapobiega halucynacjom. Narzędzia do tego to m.in. Docling (IBM, open source), Unstructured.io, LlamaParse czy Azure Document Intelligence.
3. Chunking. Tekst jest dzielony na jednostki, które można wyszukiwać. Naiwny chunking o stałym rozmiarze (np. 512 tokenów, overlap 50) jest prosty, ale rozcina zdania i tabele. Lepszy jest chunking rekurencyjny/semantyczny (cięcie przy dryfie podobieństwa cosinusowego między zdaniami) lub hierarchiczny chunking parent-child (małe chunki do wyszukiwania, duże chunki nadrzędne jako kontekst). Zasada ogólna: od 200 do 800 tokenów, 10–20% overlapu.
4. Embedding. Każdy chunk jest zamieniany na wektor przez model embeddingowy. W przypadku korpusów niemieckojęzycznych dominują modele wielojęzyczne, takie jak Cohere Embed v4, modele Voyage, Gemini Embedding 2 czy BGE-M3. Suwerennie można korzystać przede wszystkim z modeli open-weight, takich jak BGE-M3 lub Jina Embeddings, on-premise albo u europejskiego dostawcy hostingu. Jina AI należy jednak od października 2025 roku do Elastic, a przed komercyjnym wdrożeniem musisz sprawdzić licencję danej wersji modelu. Mistral Embed pochodzi od paryskiego dostawcy Mistral AI. Aleph Alpha z Heidelbergu łączy się z kanadyjskim dostawcą Cohere. W momencie podpisania umowy we wrześniu 2026 roku wciąż brakowało zgody organów regulacyjnych. Ważne: niemiecki, zależnie od tokenizera, zużywa ok. 1,3–1,7 razy więcej tokenów niż angielski.
5. Indeksowanie / upsert. Wektory wraz z metadanymi są zapisywane w wektorowej bazie danych. Standardowym algorytmem indeksowania jest niemal wszędzie HNSW (Malkov & Yashunin 2016) z parametrami M, ef_construction i ef_search, które równoważą recall i szybkość. Opcjonalnie równolegle buduje się indeks BM25 do wyszukiwania hybrydowego, a na początku każdego chunka umieszcza się wygenerowany przez LLM nagłówek kontekstowy (Contextual Retrieval).
Faza 2: obsługa zapytań (online)
Ścieżka zapytania uruchamia się przy każdym pojedynczym zapytaniu użytkownika. Embedding zapytania, retrieval, filtrowanie i reranking zajmują łącznie orientacyjnie ok. 100–800 milisekund, zależnie od wielkości indeksu i rerankera. Opcjonalne przetwarzanie wstępne oparte na LLM, takie jak HyDE czy query rewriter, wymaga dodatkowego wywołania modelu. Końcowe generowanie przez LLM trwa zwykle od jednej do kilku sekund, w zależności od długości odpowiedzi. Poszczególne kroki:
1. Przetwarzanie wstępne zapytania (opcjonalnie). Query rewriter, HyDE lub decomposer przeformułowują złożone pytania albo rozbijają je na części. W systemach multi-tenant na tym etapie odbywa się dodatkowo AuthN/Z i rozpoznanie tenanta.
2. Embedding zapytania. Pytanie jest zamieniane na wektor tym samym modelem embeddingowym co chunki. Równolegle powstaje zapytanie BM25.
3. Retrieval / wyszukiwanie wektorowe. Wektorowa baza danych zwraca najbardziej podobne chunki (zwykle top_k = 50–100). W wyszukiwaniu hybrydowym wyszukiwanie gęste i rzadkie działają równolegle, a ich wyniki są scalane przez rank fusion (Reciprocal Rank Fusion).
4. Filtrowanie. Filtry metadanych (tenant_id, ACL, data) zawężają listę kandydatów. Dotyczy to także zgodności z przepisami: wytyczne DSK dotyczące systemów generatywnej AI wykorzystujących metodę RAG (październik 2025) wymieniają rozdzielenie danych klientów oraz koncepcję uprawnień i ról jako środki zapewniające poufność i ograniczenie celu.
5. Reranking. Cross-encoder (Cohere Rerank, BGE-Reranker, Jina Reranker) ocenia zapytanie i dokument łącznie i zawęża 50–100 kandydatów do najtrafniejszych top_k = 5–10. Cross-encodery są dokładniejsze, ale wolniejsze niż bi-encodery używane we wstępnym wyszukiwaniu, dlatego uruchamia się je dopiero po tanim etapie recall.
6. Składanie kontekstu & prompting. Ostateczne chunki są wstawiane wraz z odwołaniami do źródeł do szablonu promptu. Ważne fragmenty powinny znaleźć się na początku, aby uniknąć problemu lost in the middle.
7. Generowanie przez LLM. Model językowy tworzy odpowiedź, najlepiej z wymuszaniem cytowania źródeł (citation forcing) i następującym po nim guardrailem wierności (faithfulness), który sprawdza, czy odpowiedź znajduje potwierdzenie w źródłach.
Tabela: pipeline RAG według fazy, zadania i narzędzi
Faza | Zadanie | Typowe narzędzia (stan na 2026) |
|---|---|---|
Ingestia | Loading / konektory | Konektory SharePoint, S3, Confluence |
Ingestia | Parsowanie | Docling, Unstructured.io, LlamaParse, Azure Document Intelligence |
Ingestia | Chunking | LangChain Splitter, chunking semantyczny/hierarchiczny, chunking kontekstowy |
Ingestia | Embedding | Cohere Embed v4, Voyage, Gemini Embedding 2, Jina Embeddings, BGE-M3, Aleph Alpha |
Ingestia | Indeksowanie / upsert | Qdrant, Weaviate, Pinecone, Milvus, pgvector (HNSW + opcjonalnie BM25) |
Zapytanie | Embedding zapytania | ten sam model embeddingowy co przy ingestii |
Zapytanie | Retrieval / wyszukiwanie wektorowe | Wyszukiwanie ANN w HNSW, hybrydowe (dense + BM25), fuzja RRF |
Zapytanie | Filtrowanie | Filtry metadanych (tenant_id, ACL) w Qdrant/Weaviate/pgvector |
Zapytanie | Reranking | Cohere Rerank, BGE-Reranker, Jina Reranker, LLM-as-Judge |
Zapytanie | Generowanie | LLM (Claude, GPT, Gemini, Mistral, Aleph Alpha Pharia) + guardrail wierności |
Przekrojowo | Ewaluacja / obserwowalność | RAGAS, TruLens, DeepEval, Arize Phoenix, LangSmith |
Przepływ danych opisany słowami
Dokument przechodzi offline przez loader, parser i chunker, zostaje zwektoryzowany przez model embeddingowy i trafia wraz z metadanymi jako rekord do wektorowej bazy danych. Gdy online pojawia się pytanie, jest ono zamieniane na embedding tym samym modelem, porównywane przez indeks HNSW ze wszystkimi wektorami chunków i daje wstępną selekcję. Filtry metadanych usuwają to, czego użytkownik nie powinien widzieć. Reranker zawęża wstępną selekcję do najlepszych wyników. Te są wstawiane do promptu wraz z odwołaniami do źródeł, LLM generuje na ich podstawie odpowiedź, a guardrail sprawdza wierność wobec źródła. Kluczowe: embedding przy ingestii i przy zapytaniu musi korzystać z tego samego modelu, inaczej wektory nie są porównywalne.
Konkretny przykład z liczbami
Bot wsparcia dla produktu SaaS indeksuje 50 000 dokumentów. Przy chunkingu semantycznym z ok. 500 tokenami na chunk powstaje ok. 300 000 wektorów. Według firmy Anthropic indeksowanie z Contextual Retrieval kosztuje ok. 1,02 dolara amerykańskiego za 1 milion tokenów dokumentów przy użyciu prompt cachingu (stan na wrzesień 2024). W działaniu każde zapytanie pobiera top_k = 50 kandydatów; reranker Cohere zawęża je do top_k = 5.
Ewaluacja Anthropic pokazuje wpływ poszczególnych komponentów na odsetek błędów wyszukiwania w top 20: bez optymalizacji wynosił on 5,7%. Same Contextual Embeddings obniżyły go do 3,7% (spadek o 35%), pełny Contextual Retrieval (embeddingi plus Contextual BM25) do 2,9% (spadek o 49%), a dodatkowy reranking do 1,9% (spadek o 67%). Zapytanie z hybrydowym wyszukiwaniem i rerankingiem mieści się pod względem opóźnienia w przedziale ok. 100–800 milisekund.
Pseudokod ścieżki zapytania:
```
q_vec = embed(query) # ten sam model co przy ingestii
dense = vdb.search(q_vec, top_k=50, filter={tenant_id})
sparse = bm25.search(query, top_k=50, filter={tenant_id})
cands = rrf_fuse(dense, sparse) # wyszukiwanie hybrydowe
top5 = rerank(query, cands)[:5] # Cross-Encoder
prompt = template(query, top5, cite=True)
answer = llm.generate(prompt)
assert faithfulness(answer, top5) > 0.8 # Guardrail
```
Częste błędy architektoniczne
- Naiwny chunking o stałym rozmiarze ignoruje granice zdań i tabel, co prowadzi do brakujących treści i halucynacji.
- Model embeddingowy niedopasowany do języka (embeddingi angielskie dla korpusu niemieckiego) niszczy recall przy zapytaniach po niemiecku.
- Brak rerankingu: wyniki są semantycznie podobne, ale nietrafne.
- Lost-in-the-chunks: bez nagłówka kontekstowego chunk w rodzaju „Wzrósł o 12%” nie wie, o czym mowa.
- Sama semantyka bez BM25: dokładne kody i identyfikatory nie zostają znalezione.
- Brak filtrów metadanych: brak ochrony multi-tenant i ACL; chunk klienta A może zostać pobrany dla klienta B.
- Zbyt duże top_k przekazywane do LLM: lost in the middle i wyższe koszty.
- Brak ewaluacji i cytowania źródeł: cicha regresja jakości i ryzyko braku zgodności z przepisami.
- Dryf embeddingów przy zmianie modelu: bez identyfikatora wersji i pełnej reindeksacji stare i nowe wektory są niekompatybilne.
Dla agencji i B2B
Dobrze zaprojektowana architektura RAG to pipeline z ingestią, wyszukiwaniem hybrydowym, rerankingiem, ewaluacją i koncepcją usuwania danych. Dla agencji wartość leży w strategii danych, chunkingu i rozdzieleniu danych klientów. Dla decydentów B2B w Europie liczy się dodatkowo suwerenność: Qdrant, Weaviate, Haystack i hosting w UE to dobra podstawa działania zgodnego z RODO. Blck Alpaca projektuje i prowadzi takie pipeline'y end-to-end, łącznie z ewaluacją RAGAS i pipeline'em usuwania danych zgodnym z wytycznymi DSK. Odezwij się do nas, jeśli chcesz, aby pilotażowy projekt AI stał się produkcyjnym, weryfikowalnym systemem wiedzy.
Otwiera czat z przygotowanym promptem.
Najczęściej zadawane pytania
Czym różni się faza ingestii od fazy zapytania w architekturze RAG?
Czy reranking w pipelinie RAG jest naprawdę potrzebny?
Jaki rozmiar chunka jest właściwy dla systemu RAG?
Czym jest wyszukiwanie hybrydowe i dlaczego samo wyszukiwanie wektorowe nie wystarcza?
Jakich narzędzi potrzebuję do suwerennej architektury RAG w UE?
Chcesz zgłębić temat?
Otrzymuj nowe analizy prosto na swoją skrzynkę albo zobacz, jak wykorzystujemy tę wiedzę w firmach.