Co je RAG?

RAG (Retrieval Augmented Generation) je architektonický pattern, který kombinuje vyhledávání v dokumentech s generativním AI. Místo toho, aby AI odpovídala pouze z natrénovaných znalostí, nejprve vyhledá relevantní informace ve vaší knowledge base a pak na jejich základě generuje odpověď.

Představte si to jako chytrého asistenta, který před odpovědí nejprve prohledá firemní dokumenty, manuály nebo FAQ a pak vám odpoví s přesnou citací zdroje.

Jak RAG funguje?

RAG systém se skládá ze tří hlavních komponent:

1. Indexování dokumentů (Ingestion)

Vaše dokumenty jsou nejprve zpracovány a převedeny na embeddings - matematické reprezentace textu, které zachycují jeho význam. Tyto embeddingy jsou uloženy do vector database (např. Pinecone, Weaviate, pgvector).

// Zjednodušený příklad procesu
dokument → chunking → embedding model → vector database
"Otevírací doba je 9-17" → [0.23, -0.45, 0.12, ...] → uloženo

2. Vyhledávání (Retrieval)

Když přijde dotaz, je také převeden na embedding a v databázi se hledají nejpodobnější dokumenty pomocí semantic search. Na rozdíl od klasického fulltext vyhledávání najde i dokumenty, které neobsahují přesně ta samá slova.

// Dotaz: "Kdy máte otevřeno?"
// Najde: "Otevírací doba je 9-17"
// I když neobsahuje slovo "otevřeno"

3. Generování odpovědi (Generation)

Nalezené dokumenty jsou předány LLM (např. GPT-4) jako kontext spolu s původním dotazem. Model pak generuje odpověď na základě těchto konkrétních informací.

Kdy použít RAG vs Fine-tuning?

RAGFine-tuning
Často se měnící dataStabilní, neměnná data
Potřeba citovat zdrojeZměna stylu/tónu modelu
Rychlý deploymentVyžaduje trénink
Nižší nákladyVyšší náklady na trénink

Pro většinu firemních use-cases je RAG lepší volba - dokumenty se mění, potřebujete vědět odkud informace pochází, a nechcete čekat týdny na fine-tuning.

Praktická implementace

Základní RAG pipeline v Pythonu s LangChain:

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Pinecone
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1. Vytvoření embeddings
embeddings = OpenAIEmbeddings()

# 2. Připojení k vector store
vectorstore = Pinecone.from_existing_index(
    "my-index",
    embeddings
)

# 3. Vytvoření QA chain
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=vectorstore.as_retriever()
)

# 4. Dotaz
answer = qa.run("Jaká je otevírací doba?")

Časté problémy a řešení

1. Nízká přesnost odpovědí

  • Zkuste jiné chunking strategie (menší/větší chunks)
  • Použijte reranking pro lepší výběr dokumentů
  • Experimentujte s různými embedding modely

2. Pomalé odpovědi

  • Cachujte časté dotazy
  • Optimalizujte velikost kontextu
  • Použijte streaming pro UX

3. Halucinace

  • Přidejte instrukce "Odpověz pouze na základě poskytnutého kontextu"
  • Implementujte confidence scoring
  • Vraťte "Nevím" pokud není relevantní kontext

Závěr

RAG je mocný nástroj pro přidání AI schopností do vašich aplikací bez nutnosti vlastního tréninku modelu. Umožňuje AI odpovídat přesně a s citací zdrojů z vašich firemních dokumentů.

V SolutionBox máme zkušenosti s implementací RAG systémů pro města, banky i enterprise klienty. Kontaktujte nás pokud chcete podobné řešení pro vaši firmu.