RAG (Retrieval Augmented Generation): Cara Kerja dan Implementasi untuk Developer
Kalau lo udah pernah nanya ChatGPT tentang berita yang baru terjadi minggu lalu dan dia kasih jawaban yang akurat, itu RAG yang bekerja. Kalau lo pakai Cursor dan dia tau struktur project lo padahal codebase ngga ada di training data Claude, itu juga RAG.
Retrieval Augmented Generation udah jadi standard architecture pattern untuk aplikasi AI di 2026. Hampir setiap AI app yang serius pakai RAG dalam bentuk apapun. Tapi banyak developer pakai library RAG tanpa benar-benar paham apa yang terjadi di balik layar.
Artikel ini bahas RAG dari konsep dasar sampai implementasi praktis, plus kapan lo sebaiknya bangun RAG sendiri vs pakai service.
Masalah yang Dipecahkan RAG
LLM kayak GPT-4 atau Claude punya 2 limitasi fundamental:
1. Knowledge Cutoff
Model di-train pada data sampai tanggal tertentu. GPT-4 cutoff sekitar April 2024. Setelah itu, model ngga tau apa-apa. Lo nanya tentang event minggu lalu, model bisa ngarang atau bilang "saya ngga tau".
2. Ngga Tau Data Internal
Model di-train pada data publik. Mereka ngga tau internal docs perusahaan lo, codebase project lo, customer database lo. Untuk aplikasi business, ini big problem.
RAG solve kedua issue ini dengan retrieve external knowledge dan inject ke prompt sebelum LLM jawab. Konsep simple, implementasi punya nuansa.
Arsitektur RAG: 4 Komponen Utama
1. Document Store
Kumpulan dokumen yang lo mau LLM bisa akses. Bisa berupa: docs internal perusahaan, web pages, codebase, database records, PDF, transcript meeting. Apapun yang berisi knowledge.
2. Embedding Model
Model yang convert text jadi vector (array of numbers, biasanya 768 atau 1536 dimensi). Vector ini representasi semantik text. Text yang artinya mirip akan punya vector yang dekat di vector space.
Popular embedding model: OpenAI text-embedding-3-small/large, Cohere embed, atau open source kayak BGE atau Nomic embed.
3. Vector Database
Database optimized untuk store dan search vector dengan efficient. Saat lo butuh "find documents similar to this query", vector DB pakai algoritma kayak HNSW atau IVF untuk return top-k results dalam millisecond, bahkan untuk billions of vectors.
Popular vector DB: Pinecone, Weaviate, Qdrant, Milvus, atau pgvector kalau lo udah pakai PostgreSQL.
4. LLM (Large Language Model)
Generate jawaban final. GPT-4o, Claude Sonnet, Gemini, atau model open source kayak Llama.
Flow RAG Step-by-Step
Mari trace 1 query lengkap:
Phase 1: Indexing (Setup, dilakukan sekali)
- Ambil semua dokumen yang lo punya
- Split jadi chunks (biasanya 500-1000 tokens per chunk dengan overlap 50-200 tokens)
- Tiap chunk di-embed jadi vector
- Store vector + chunk text + metadata di vector database
Untuk update: kalau dokumen berubah, re-embed chunk yang berubah. Vector DB modern support upsert.
Phase 2: Query (Setiap kali user nanya)
- User input pertanyaan: "berapa cuti tahunan karyawan baru?"
- Embed pertanyaan jadi vector pakai embedding model yang sama
- Search vector DB: top 5 chunks yang paling similar (cosine similarity terhadap query vector)
- Susun prompt ke LLM: "Berdasarkan context berikut [chunks], jawab pertanyaan: [query]"
- LLM generate answer berdasarkan retrieved context
Implementasi Praktis dengan Python
Saya kasih contoh implementasi minimal pakai LangChain dan Pinecone. Production code biasanya lebih kompleks, tapi ini foundation:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_pinecone import PineconeVectorStore
from pinecone import Pinecone
# Setup
pc = Pinecone(api_key="your-api-key")
index = pc.Index("knowledge-base")
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
llm = ChatOpenAI(model="gpt-4o-mini")
# Phase 1: Indexing
def index_documents(docs):
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100
)
chunks = splitter.split_documents(docs)
vector_store = PineconeVectorStore.from_documents(
chunks, embeddings, index_name="knowledge-base"
)
return vector_store
# Phase 2: Query
def answer_question(query, vector_store):
# Retrieve top 5 chunks
results = vector_store.similarity_search(query, k=5)
context = "\n\n".join([doc.page_content for doc in results])
prompt = f"""Berdasarkan context berikut, jawab pertanyaan.
Context:
{context}
Pertanyaan: {query}
Kalau context ngga cukup buat jawab, bilang "saya ngga punya info itu"."""
response = llm.invoke(prompt)
return response.content
Ini barebone implementation. Production butuh enhancement: re-ranking, query rewriting, conversational context, citation tracking, evaluation framework.
Common Pitfalls dan Cara Mengatasinya
1. Chunking yang Salah
Chunk terlalu besar: signal yang relevan tenggelam dalam noise. Chunk terlalu kecil: konteks terpotong. Sweet spot biasanya 500-1000 tokens dengan overlap 100-200 untuk preserve continuity.
Untuk dokumen structured (contoh: API docs, legal docs), chunk by section bukan by character count. Pakai metadata untuk preserve hierarchy (section, subsection).
2. Single-Vector Search Tidak Cukup
Pure semantic search miss exact keyword match. Pertanyaan "Apa itu Python 3.13?" mungkin ngga retrieve chunk yang specifically mention "Python 3.13" karena vector similarity bukan exact match.
Solusi: hybrid search (kombinasi semantic + keyword). Banyak vector DB modern support BM25 + vector dalam 1 query.
3. Re-ranking yang Penting
Top 5 dari similarity search ngga selalu top 5 paling relevan untuk LLM. Pakai re-ranker model (Cohere Rerank, Jina Reranker, BGE Reranker) untuk ulang ranking dari top 20 candidates jadi top 5 untuk LLM.
Re-ranking biasanya improve answer quality 15-30% dengan cost minimal.
4. Context Window Pollution
Inject 20 chunks ke prompt mungkin "lebih banyak data", tapi LLM bisa miss specific info di tengah due to "lost in the middle" problem. Penelitian menunjukkan LLM perform terbaik saat info penting ada di awal atau akhir context, bukan di tengah.
Solusi: re-rank, dan reorder chunks (pentingnya dari atas ke bawah, atau bracketing).
5. Update Strategy
Knowledge base lo dynamic (docs di-update, articles ditambah). Strategi update:
- Real-time: setiap dokumen berubah, re-embed dan upsert. Bagus untuk small knowledge base.
- Batch: update tiap jam atau hari. Lebih efficient untuk large scale.
- Versioning: simpan multiple versions dengan timestamp. Filter by date di query untuk reproducibility.
Kapan RAG Tidak Cocok
RAG bukan silver bullet. Beberapa case yang RAG ngga ideal:
- Pertanyaan multi-step reasoning: "Compare revenue growth tahun 2023 dan 2024, then project 2026 berdasarkan trend." Ini butuh agent dengan tool use, bukan single retrieval.
- Numerical aggregation: "Total semua transaksi customer X." RAG bagus untuk semantic search, ngga bagus untuk SQL-like aggregation. Pakai text-to-SQL approach.
- Real-time data: harga saham detik ini, status order saat ini. RAG over static knowledge base ngga update. Pakai live API integration.
- Highly specific lookup: "Apa nomor telepon customer X?" Ini DB query, bukan semantic search.
Build Sendiri vs Pakai Service
Pilihan di 2026:
Build sendiri (LangChain + Pinecone/Qdrant + OpenAI):
- Pros: full control, customization, lebih murah at scale
- Cons: complexity, butuh ML knowledge untuk optimize
- Cocok untuk: production app dengan scale serius, custom requirement
Managed service (OpenAI Assistants, Anthropic Files API, Vertex AI Search):
- Pros: setup dalam menit, no infrastructure management
- Cons: cost lebih tinggi at scale, less customization, vendor lock-in
- Cocok untuk: prototype cepat, MVP, atau kasus standard
Saran practical: mulai dengan managed service untuk MVP. Kalau scale grows, evaluate ROI build sendiri.
Penutup
RAG udah jadi pondasi banyak aplikasi AI di 2026 karena solusi simple untuk dua masalah fundamental LLM: knowledge cutoff dan domain-specific data. Konsepnya gampang, implementasinya banyak nuansa.
Kalau lo developer dan baru mulai dengan AI features, mulai pakai LangChain atau LlamaIndex sebagai abstraction layer. Mereka handle banyak boilerplate. Sambil belajar pattern-nya, lo bisa drop down ke lower level kalau perlu kontrol lebih.
Bidang RAG masih cepat evolve. Tools yang state-of-the-art tahun 2024 udah outdated di 2026. Subscribe ke beberapa AI engineering newsletter untuk stay current. Yang dasar (chunking, embedding, vector search, re-ranking) ngga banyak berubah, tapi optimization technique terus ada yang baru.