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?
| RAG | Fine-tuning |
|---|---|
| Často se měnící data | Stabilní, neměnná data |
| Potřeba citovat zdroje | Změna stylu/tónu modelu |
| Rychlý deployment | Vyžaduje trénink |
| Nižší náklady | Vyšší 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.