Mempelajari Retrieval-Augmented Generation (RAG): mengubah dokumen menjadi embeddings, mengindex-nya di vector database seperti ChromaDB atau Pinecone, dan me-retrieve konteks yang relevan agar jawaban LLM grounded pada sumber; plus praktik pipeline dokumen menuju QA.

Setelah di episode 12 kalian memahami kapan fine-tuning diperlukan (dan kapan tidak), episode ini membangun pola arsitektur yang paling banyak dipakai untuk aplikasi LLM produksi: Retrieval-Augmented Generation (RAG). RAG menjawab kelemahan terbesar LLM — hallucination dan pengetahuan yang kedaluwarsa — dengan cara yang elegan: memberi model sumber sebelum ia menjawab.
Mengapa episode ini penting? Karena hampir setiap chatbot yang "tahu dokumen internal kalian" — manual produk, kebijakan HR, katalog — dibangun di atas RAG. Memahami RAG berarti memahami cara memberi LLM pengetahuan yang tidak ada di training-nya, tanpa perlu fine-tuning.
LLM dilatih pada satu titik waktu: ia tidak tahu dokumen yang dibuat kemarin, dan ia bisa mengarang fakta yang tidak pernah ada (hallucination). Solusi naifnya: masukkan semua dokumen ke prompt. Masalahnya: context window terbatas (episode 7) dan biaya token membengkak.
RAG memecah masalahnya: jangan masukkan semua dokumen — masukkan hanya bagian yang relevan dengan pertanyaan. Alurnya:
Dokumen panjang tidak bisa di-embedding sekaligus (batas panjang dan presisi). Chunking memecahnya menjadi potongan yang bermakna:
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
)
chunks = splitter.split_text(document)
print(f"Terpecah menjadi {len(chunks)} chunk")Setiap chunk diubah menjadi embedding — vektor angka yang menangkap makna semantik (konsep yang kita kenal di episode 6). Model embedding umum di 2026: text-embedding-3-small (OpenAI), Cohere Embed, dan model open-weight seperti sentence-transformers/bge.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
vectors = model.encode(chunks)
print(vectors.shape) # (jumlah_chunk, 384)Vector DB menyimpan embeddings dan menjawab "mana vektor yang paling mirip dengan vektor ini?" — biasanya dengan cosine similarity atau inner product. Yang populer:
| Vector DB | Tipe | Karakteristik |
|---|---|---|
| ChromaDB | Open-source, embedded | Paling mudah memulai, jalan lokal |
| Qdrant | Open-source, Rust | Performa tinggi, filter metadata |
| Weaviate | Open-source | Fitur lengkap, ekosistem enterprise |
| Pinecone | SaaS hosted | Tanpa operasional, skala besar |
import chromadb
from sentence_transformers import SentenceTransformer
client = chromadb.PersistentClient(path="./chroma_db")
collection = client.get_or_create_collection("docs")
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
collection.add(
ids=[f"chunk-{i}" for i in range(len(chunks))],
embeddings=model.encode(chunks).tolist(),
documents=chunks,
)def ask(question: str) -> str:
# 1. Embedding pertanyaan
q_vec = model.encode([question]).tolist()
# 2. Cari chunk paling relevan
results = collection.query(
query_embeddings=q_vec,
n_results=3,
)
context = "\n\n".join(results["documents"][0])
# 3. LLM menjawab dengan konteks
prompt = (
"Jawab berdasarkan konteks berikut. Jika konteks tidak memuat "
"jawaban, katakan tidak tahu.\n\n"
f"KONTEKS:\n{context}\n\nPERTANYAAN: {question}"
)
return llm_generate(prompt)llm_generate adalah panggilan ke API LLM — kita bangun versi lengkapnya dengan streaming dan structured output di episode 14.
Tiga tombol yang paling memengaruhi kualitas RAG:
Kualitas retrieval diukur dengan metrik episode 8: context recall (apakah konteks yang diambil memuat informasi yang dibutuhkan) dan context precision (apakah konteks yang diambil relevan). Evaluasi ini adalah fondasi MLOps LLM di episode 18.
Warning
RAG bukan pengganti keamanan. Dokumen sensitif yang masuk ke index bisa ikut ter-retrieve — perlu permission-aware retrieval (filter metadata per user) sebelum produksi. Detail keamanan dan privacy dibahas di episode 16 dan 17.
Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita masuk ke integrasi: AI Applications & Integration (API) — memakai OpenAI-compatible API, structured output JSON, function/tool calling, dan membangun chatbot/copilot sederhana dengan streaming untuk aplikasi web, mobile, dan backend. Sampai jumpa di episode 14!