[ Technical ]Poziom: Projektowanie

RAG — czym jest i kiedy ma sens?

Model językowy nie zna Twoich dokumentów. RAG to sposób, żeby odpowiadał na ich podstawie — bez trenowania własnego modelu. Wyjaśniamy, jak działa i kiedy się opłaca.

Krzysztof Leszczyński14 sierpnia 20263 min czytania

Z otwartych segregatorów i dokumentów po lewej unoszą się drobiny światła, które formują uporządkowaną warstwę danych i spływają do czystego, spokojnego ekranu po prawej.

[ W skrócie ]

  • RAG podpina wiedzę firmy do modelu językowego bez trenowania własnego modelu — dokumenty są wyszukiwane w locie i doklejane do zapytania.
  • Rdzeń systemu to trzy elementy: podział dokumentów na fragmenty, embeddingi w bazie wektorowej i sam model, który dostaje znalezione fragmenty w kontekście.
  • RAG ma sens, gdy odpowiedzi mają wynikać z Twoich danych: regulaminów, ofert, dokumentacji, zgłoszeń. Nie ma sensu jako „inteligentniejszy Google” do wiedzy ogólnej.
  • Największe koszty błędów są w przygotowaniu danych, nie w modelu — złe cięcie dokumentów psuje wyniki mocniej niż wybór tańszego LLM.

Co to daje firmie?

Każdy model językowy — GPT, Claude, Gemini — zna tylko to, na czym był trenowany. Nie zna Twojego cennika, procedur reklamacji ani notatek z wdrożeń. Gdy zapytasz go o coś z tej wiedzy, zrobi jedną z dwóch rzeczy: odmówi albo zmyśli.

RAG (Retrieval-Augmented Generation) rozwiązuje ten problem w prosty koncepcyjnie sposób: zanim model odpowie, system wyszukuje w Twoich dokumentach fragmenty pasujące do pytania i dokleja je do zapytania. Model nie musi niczego „wiedzieć” — dostaje materiał źródłowy przy każdym pytaniu, tak jak pracownik, któremu podsuwasz właściwy segregator.

W praktyce oznacza to asystenta, który odpowiada na pytania o Twoje umowy, Twoją dokumentację techniczną i Twoje zgłoszenia — i potrafi wskazać, z którego dokumentu wzięła się odpowiedź.

Jak to działa?

Cały system składa się z dwóch przepływów: przygotowania wiedzy (raz, potem aktualizacje) i odpowiadania na pytania (za każdym razem).

Dokumenty
Podział na fragmenty
Embeddingi
Baza wektorowa
Przygotowanie wiedzy — uruchamiane przy każdej zmianie dokumentów.
Pytanie
Wyszukanie fragmentów
Kontekst + prompt
Model
Odpowiedź ze źródłami
Odpowiadanie — dzieje się przy każdym zapytaniu użytkownika.

Kluczowe pojęcia po kolei:

Fragmenty (chunki). Dokumentów nie wrzuca się do bazy w całości. Tnie się je na kawałki po kilkaset tokenów — na tyle małe, żeby wyszukiwanie było precyzyjne, i na tyle duże, żeby fragment niósł sens bez otoczenia.

Embeddingi. Każdy fragment jest zamieniany na wektor liczb, który reprezentuje jego znaczenie. Teksty o podobnym sensie mają podobne wektory — dzięki temu pytanie „ile trwa zwrot towaru” znajdzie fragment „reklamacje rozpatrujemy w 14 dni”, mimo że nie dzielą ani jednego słowa.

Baza wektorowa. Przechowuje embeddingi i umie błyskawicznie znaleźć wektory najbliższe wektorowi pytania. W małych projektach wystarczy rozszerzenie pgvector w PostgreSQL, którego i tak używasz.

Nad ciemnym biurkiem unosi się kartka dokumentu, która rozpada się w prawo na drobne jasne fragmenty; z lewej strony kadru świeci limonkowa lampka.
Przebieg RAG, od dokumentow do odpowiedzi ze zrodlami

Jak to wygląda w kodzie?

Minimalny szkielet zapytania RAG wygląda tak:

ts
// 1. Embedding pytania — ten sam model co przy indeksowaniu dokumentów
const queryEmbedding = await embed(userQuestion);

// 2. Wyszukanie najbliższych fragmentów w bazie wektorowej
const fragments = await db.query(
  `SELECT tresc, zrodlo FROM dokumenty
   ORDER BY embedding <=> $1
   LIMIT 5`,
  [queryEmbedding],
);

// 3. Model dostaje fragmenty jako kontekst — i twarde reguly
const answer = await llm.complete({
  system:
    "Odpowiadasz WYLACZNIE na podstawie przekazanych fragmentow. " +
    "Jesli fragmenty nie zawieraja odpowiedzi, powiedz to wprost. " +
    "Zawsze wskazuj zrodlo.",
  messages: [
    {
      role: "user",
      content: `Fragmenty:\n${fragments.map((f) => f.tresc).join("\n---\n")}\n\nPytanie: ${userQuestion}`,
    },
  ],
});

Dwie rzeczy w tym kodzie są ważniejsze, niż wyglądają:

Gdzie projekty RAG się wykładają?

Z naszego doświadczenia problemy prawie nigdy nie leżą w modelu językowym:

ProblemObjawRozwiązanie
Złe cięcie dokumentówodpowiedzi „obok tematu”fragmenty wg struktury dokumentu, nie po liczbie znaków
Śmieciowe dane wejściowemodel cytuje nieaktualny cennikpipeline aktualizacji i wersjonowanie źródeł
Brak metadanychnie da się filtrować po dziale czy daciemetadane per fragment już na etapie indeksowania
Zbyt duży kontekstwolno i drogomniej fragmentów, lepszy ranking, reranking

To jest powód, dla którego wdrożenie RAG to w 70 procentach praca na danych, a w 30 na kodzie. Sama pętla zapytań jest prosta — jakość robi przygotowanie wiedzy.

Kiedy RAG ma sens, a kiedy nie?

RAG jest właściwym narzędziem, gdy:

  • odpowiedzi mają wynikać z wewnętrznej, zmieniającej się wiedzy (procedury, oferty, dokumentacja, baza zgłoszeń),
  • potrzebujesz wskazywania źródeł — w firmie odpowiedź bez źródła jest bezwartościowa,
  • wiedza zmienia się zbyt często, żeby myśleć o trenowaniu modelu.

RAG nie jest właściwym narzędziem, gdy:

  • pytania dotyczą wiedzy ogólnej — model radzi sobie bez dodatkowej bazy,
  • „dokumentów” jest kilkanaście stron — wtedy prościej wkleić całość do kontekstu,
  • problemem jest format odpowiedzi, nie wiedza — to rozwiązuje prompt, nie baza wektorowa.

Najczęstszy zdrowy początek to jeden wąski przypadek: regulaminy i procedury dla zespołu obsługi albo baza ofert dla handlowców. Działa, mierzy się efekt, dopiero potem rozszerza zakres.

  • RAG
  • embeddings
  • vector database
  • LLM
  • architektura
Udostępnij

Automatic AI

hello@automaticai.pl · automaticai.pl