RAG (Retrieval Augmented Generation) to technika która pozwala LLM odpowiadać na podstawie Twoich danych, nie tylko training data. Chatbot który zna Twoją dokumentację, FAQ, produkty.
Problem: LLM nie zna Twoich danych
GPT-4 wie dużo, ale nie wie:
- Twojej dokumentacji produktu
- Aktualnych cen
- Danych użytkowników
- Internal knowledge base
Rozwiązanie: RAG — daj LLM dostęp do Twoich danych.
Jak działa RAG
1. Indexing (raz, offline):
- Podziel dokumenty na chunki (paragraf = chunk)
- Stwórz embeddings (vector representations)
- Zapisz w vector database (Pinecone, Weaviate, Qdrant)
2. Retrieval (każde query):
- User zadaje pytanie
- Stwórz embedding pytania
- Znajdź najbardziej podobne chunki (vector search)
- Weź top 3-5 chunków
3. Generation:
- Dodaj znalezione chunki do prompt
- LLM odpowiada na podstawie kontekstu
- Cytuj źródła (które chunki użyto)
💡 Przykład
User: "Ile kosztuje plan Pro?"
Retrieval: Znajdź chunk z pricing page
Prompt: "Na podstawie: [chunk o cenach], odpowiedz: Ile kosztuje plan Pro?"
LLM: "Plan Pro kosztuje 99 zł/mies"
Stack dla RAG
Embeddings:
- OpenAI text-embedding-3-small — tani, dobry
- OpenAI text-embedding-3-large — lepszy, droższy
- Open-source: sentence-transformers
Vector Database:
- Pinecone — managed, łatwy setup
- Weaviate — open-source, self-hosted
- Qdrant — szybki, Rust-based
- Firestore + pgvector — jeśli już masz Firestore
LLM:
- GPT-4 Turbo — najlepszy reasoning
- Claude 3.5 — długi context (mniej chunków potrzebnych)
- Gemini — najtańszy
Implementacja RAG (uproszczona)
Krok 1: Chunking
- Podziel dokumenty na 200-500 słów
- Overlap 50 słów (żeby nie uciąć kontekstu)
- Metadata: source, title, date
Krok 2: Embeddings
- Dla każdego chunku: call OpenAI embeddings API
- Dostaniesz vector (1536 dimensions dla text-embedding-3-small)
- Zapisz w vector DB z metadata
Krok 3: Query
- User query → embedding
- Vector search (cosine similarity)
- Top 3-5 chunków → context
- Prompt: "Based on: [context], answer: [query]"
Advanced RAG Techniques
Hybrid Search: Vector search + keyword search (BM25)
Re-ranking: Użyj drugiego modelu do re-rank wyników
Query expansion: Przepisz query na kilka wersji, search każdą
Metadata filtering: Search tylko w określonych dokumentach (np. tylko FAQ)
Koszty RAG
Przykład: 1000 dokumentów, 100 queries/day:
- Indexing (raz): 1000 docs × $0.0001 = $0.10
- Queries: 100/day × 30 days × $0.0001 = $0.30/month
- LLM calls: 3000 calls × $0.01 = $30/month
- Total: ~$30/month
Vector DB: Pinecone free tier wystarczy dla MVP (< 100k vectors)
📝 Zadanie
Zaimplementuj prosty RAG: Weź 10 dokumentów (np. FAQ). Stwórz embeddings (OpenAI API). Zapisz w Pinecone. Zrób query: znajdź top 3 chunki, wyślij do GPT-4 z kontekstem.