Belajar AI Engineer - RAG Lanjutan & Agents
Episode 24 of 28

Belajar AI Engineer - RAG Lanjutan & Agents

Menaikkan RAG ke level produksi: hybrid search yang menggabungkan semantik dan keyword, graph RAG untuk relasi antar entitas, hingga agentic RAG di mana retrieval dipandu agen. Kalian merancang knowledge system yang andal di skala nyatatype: text

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

RAG dasar dari episode 7 sudah berfungsi, tapi produksi menuntut lebih: pertanyaan bernuansa, dokumen dengan relasi kompleks, dan pertanyaan yang butuh beberapa langkah pencarian. Episode ini membawa kalian dari RAG yang bekerja menjadi RAG yang andal — melalui tiga peningkatan: hybrid search, graph RAG, dan agentic RAG.

Mengapa penting? Karena batas kualitas produk knowledge ditentukan di sini. Ketika retrieval dasar gagal menjawab pertanyaan "berapa penjualan produk X di region Y tahun lalu", kalian butuh lebih dari sekadar kesamaan vektor. Episode ini adalah toolkit untuk kasus-kasus sulit itu.

Hybrid Search: Semantik + Keyword

Embedding unggul menangkap makna, tapi lemah pada hal-hal yang butuh kecocokan eksak: kode produk, nama merek, nomor seri, istilah langka. Hybrid search menggabungkan dua jalur:

  1. Vector search: kesamaan semantik.
  2. Keyword search (BM25): kecocokan kata eksplisit.

Hasil keduanya digabung dengan reciprocal rank fusion (RRF):

PythonHybrid search + RRF
from rank_bm25 import BM25Okapi
 
def hybrid_search(query: str, k: int = 5) -> list[str]:
    # 1. jalur semantik (vector)
    v_hasil = col.query(query_texts=[query], n_results=k * 2)
    v_docs = v_hasil["documents"][0]
 
    # 2. jalur keyword (BM25)
    tokenized = [d.split() for d in all_docs]
    bm25 = BM25Okapi(tokenized)
    k_hasil = bm25.get_top_n(query.split(), all_docs, n=k * 2)
 
    # 3. gabung dengan RRF (score = 1/(60 + rank))
    skor: dict[str, float] = {}
    for i, d in enumerate(v_docs):
        skor[d] = skor.get(d, 0) + 1 / (60 + i + 1)
    for i, d in enumerate(k_hasil):
        skor[d] = skor.get(d, 0) + 1 / (60 + i + 1)
 
    return sorted(skor, key=skor.get, reverse=True)[:k]

RRF sederhana dan kuat: peringkat tinggi di salah satu jalur memberi kontribusi besar tanpa perlu kalibrasi skor antar-jalur. Banyak vector DB modern (Qdrant, Weaviate, Elasticsearch) punya hybrid search bawaan — pakai itu daripada menulis sendiri di produksi.

Graph RAG: Menjawab Soal Relasi

RAG dasar menjawab "apa isi dokumen". Graph RAG menjawab soal relasi: "siapa supplier utama yang juga mitra divisi X?". Ia membangun graph entitas dari dokumen:

100%

Pembuatan graph (offline, saat ingest): ekstrak entitas dan relasi dengan LLM, simpan di graph database (Neo4j) atau vektor relasi. Saat query:

  1. Community detection: kelompokkan entitas terhubung.
  2. Summary per community: ringkas tiap kelompok saat ingest.
  3. Query: ambil ringkasan community paling relevan + detail entitas.

Hasilnya: jawaban yang mempertimbangkan struktur relasional data — bukan hanya potongan teks. Graph RAG unggul untuk dokumen yang kaya relasi (laporan keuangan, riset, org structure), dan lebih mahal untuk dibangun — evaluasi dulu apakah produk kalian benar-benar membutuhkannya.

Agentic RAG: Retrieval yang Berpikir

Agentic RAG mengganti retrieval sekali-jalan dengan agent retrieval: model menilai apakah konteks cukup, mencari lagi dengan query baru, atau mengganti strategi — mirip manusia yang mencari berulang:

100%

Pola paling sederhana (dan sering cukup): generate-retrieve-generate — jawab dulu dengan model (tanpa konteks), lalu cari dokumen berdasarkan pertanyaan dan jawaban itu, baru generate final:

PythonAgentic RAG - cari berulang
from openai import OpenAI
 
client = OpenAI()
 
def answer_with_self_search(q: str, max_rounds: int = 3) -> str:
    context = []
    for i in range(max_rounds):
        prompt = (f"Konteks saat ini:\n{' '.join(context) or '(kosong)'}"
                  f"\n\nPertanyaan: {q}\n"
                  f"Jika konteks cukup, jawab. Jika kurang, balas "
                  f"QUERY:<kata kunci baru untuk dicari>")
        jawaban = llm_call(client, prompt)
        if jawaban.startswith("QUERY:"):
            context.extend(retrieve(jawaban.removeprefix("QUERY:").strip()))
            continue
        return jawaban
    return "tidak ditemukan"

Agentic RAG menaikkan biaya (beberapa panggilan LLM + retrieval), tapi menghasilkan recall yang jauh lebih tinggi untuk pertanyaan berlapis.

Warning

Agentic RAG adalah peningkatan recall dengan biaya ekstra. Ukur dulu dengan eval (episode 9): berapa banyak pertanyaan yang gagal di RAG dasar? Jika recall sudah 95%, agentic RAG tidak layak. Jangan menambah kompleksitas tanpa data.

RAG Skala Produksi

Merangkai semuanya, arsitektur RAG produksi yang sehat:

LapisanKomponenDibahas di
IndexChunking terstruktur + metadata lengkapEpisode 15
RetrievalHybrid search + rerankEpisode 7, episode ini
FilterAuthorization per dokumenEpisode 18, 20
CacheSemantic cache jawaban + embedding cacheEpisode 8, 22
QualityEval suite + monitoring faithfulnessEpisode 9, 17
UpdatePipeline ingest otomatis + versioningEpisode 15

Kuncinya: setiap lapisan punya metrik dan bisa diuji sendiri. Retrieval diuji dengan hit-rate, generation diuji dengan faithfulness, cache diukur hit-ratenya. Kalian hanya bisa memperbaiki apa yang bisa diukur.

Common Pitfalls

  • Hybrid tanpa filter: menggabungkan vector + keyword bisa menarik chunk dari dokumen yang tidak berhak dilihat user — selalu filter metadata dulu (episode 18).
  • Graph RAG untuk semua data: membangun graph itu mahal. Graph RAG hanya layak untuk data relasional yang kaya.
  • Agentic RAG tanpa batas: tanpa max_rounds, agent mencari selamanya.
  • Lupa memonitor kualitas: RAG lanjutan menambah gerakan — monitoring faithfulness (episode 17) wajib lebih ketat.

Penutup

Inti yang harus dibawa pulang:

  • Hybrid search (vector + BM25 + RRF) menutup kelemahan kecocokan eksak.
  • Graph RAG menjawab soal relasi entitas — mahal, hanya jika dibutuhkan.
  • Agentic RAG menaikkan recall lewat pencarian berulang — ukur dulu dengan eval.
  • RAG produksi = lapisan yang terukur per komponen: index, retrieval, filter, cache, quality, update.

Di episode 25 selanjutnya kita menjamin keandalan: production reliability AI — fallbacks, retries, evaluation gates, dan A/B model untuk sistem AI yang bisa diandalkan 24/7. Sampai jumpa di episode 25!

Belajar AI Engineer - RAG Lanjutan & Agents | Belajar AI Engineer