RAG (Retrieval Augmented Generation): Cara Kerja dan Implementasi untuk Developer

Developer 30 Mei 2026 · OTPZap Team

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)

  1. Ambil semua dokumen yang lo punya
  2. Split jadi chunks (biasanya 500-1000 tokens per chunk dengan overlap 50-200 tokens)
  3. Tiap chunk di-embed jadi vector
  4. 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)

  1. User input pertanyaan: "berapa cuti tahunan karyawan baru?"
  2. Embed pertanyaan jadi vector pakai embedding model yang sama
  3. Search vector DB: top 5 chunks yang paling similar (cosine similarity terhadap query vector)
  4. Susun prompt ke LLM: "Berdasarkan context berikut [chunks], jawab pertanyaan: [query]"
  5. 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:

Kapan RAG Tidak Cocok

RAG bukan silver bullet. Beberapa case yang RAG ngga ideal:

Build Sendiri vs Pakai Service

Pilihan di 2026:

Build sendiri (LangChain + Pinecone/Qdrant + OpenAI):

Managed service (OpenAI Assistants, Anthropic Files API, Vertex AI Search):

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.