BAB 07

07 - RAG Systems: Vector DBs, Chunking, Hybrid Search, dan Evaluation

Estimasi Waktu: 50 menit
Level: Intermediate → Advanced


Mengapa RAG Sangat Penting?

LLM memiliki batasan berupa knowledge cutoff (tanggal terakhir data latihnya) dan hallucination (cenderung mengarang fakta jika tidak tahu jawabannya). Selain itu, LLM tidak memiliki akses ke data internal perusahaan Anda (seperti dokumen PDF operasional atau database privat).

Retrieval-Augmented Generation (RAG) menyelesaikan masalah ini dengan memberikan dokumen referensi yang relevan kepada LLM sebelum LLM menghasilkan jawaban.

                  ┌──────────────────────┐
                  │   DOKUMEN INTERNAL   │
                  └──────────┬───────────┘
                             │ (Chunking & Embedding)

                  ┌──────────────────────┐
                  │    VECTOR DATABASE   │
                  └──────────┬───────────┘

      PERTANYAAN ────────────┼───► (Cari Dokumen Terdekat)


                  ┌──────────────────────┐
                  │  PROMPT + DOKUMEN    │
                  └──────────┬───────────┘


                         ┌───────┐
                         │  LLM  │ ──► JAWABAN AKURAT
                         └───────┘

1. Tahap Ingestion: Chunking & Embedding

Untuk menyimpan dokumen panjang (seperti PDF 200 halaman) ke dalam database pencarian, kita harus memecahnya terlebih dahulu menjadi potongan kecil (chunks) dan mengubahnya menjadi representasi vektor (embeddings).

Strategi Chunking:

  1. Character/Token Chunking: Memotong dokumen setiap $N$ karakter atau token dengan overlap tertentu agar informasi di batas pemotongan tidak hilang (misal: chunk size 500 token, overlap 50 token).
  2. Semantic Chunking: Memotong dokumen berdasarkan perubahan makna atau paragraf menggunakan model embedding untuk mengukur kesamaan kalimat berturut-turut.
# Contoh embedding menggunakan library PyTorch/SentenceTransformers
from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')

# Mengubah kalimat menjadi vector berdimensi 384
sentences = ["Bagaimana cara mengajukan cuti di perusahaan?", "Cuti diajukan via portal HR."]
embeddings = model.encode(sentences)

print(embeddings.shape)  # Output: (2, 384)

2. Penyimpanan: Vector Databases

Vektor embedding disimpan di Vector Database khusus yang mampu melakukan pencarian kemiripan kosinus (cosine similarity) atau approximate nearest neighbor (ANN) dengan sangat cepat pada jutaan data.

Beberap Vector DB populer:


3. Retrieval Tingkat Lanjut: Hybrid Search & Reranking

Pencarian berbasis vektor (Dense Retrieval) sangat baik untuk menangkap konsep semantik, namun buruk untuk mendeteksi kata kunci spesifik (seperti ID produk, nomor seri, atau istilah teknis langka). Oleh karena itu, sistem produksi menggunakan Hybrid Search.

Hybrid Search Formula:

Skor Akhir = (Dense Search Vector Score * Alpha) + (Sparse Search BM25 Score * (1 - Alpha))

Reranking (Penyaringan Ulang):

Setelah mengambil top 20 dokumen menggunakan Hybrid Search, kita menggunakan model Cross-Encoder (Reranker) yang lebih lambat tapi jauh lebih akurat (seperti Cohere Rerank atau BGE-Reranker) untuk menilai ulang kesesuaian dokumen dengan pertanyaan dan mengambil top 3-5 dokumen terbaik untuk dimasukkan ke prompt LLM.

Pertanyaan ──► Hybrid Search (20 dokumen) ──► Reranker ──► Top 3 Dokumen Terbaik ──► LLM Prompt

4. Evaluasi RAG dengan Framework Ragas

Mengevaluasi kualitas RAG secara manual sangat melelahkan. Industri menggunakan framework evaluasi otomatis menggunakan LLM-as-a-judge, salah satunya Ragas.

Ragas mengukur RAG berdasarkan 4 pilar utama:

  1. Faithfulness: Apakah jawaban LLM benar-benar bersumber dari dokumen pendukung (bukan halusinasi)?
  2. Answer Relevance: Apakah jawaban LLM menjawab inti pertanyaan pengguna?
  3. Context Recall: Apakah sistem retrieval berhasil mengambil seluruh informasi yang dibutuhkan dari database untuk menjawab pertanyaan?
  4. Context Precision: Apakah dokumen yang diambil bersih dari informasi sampah/tidak relevan?

Latihan

  1. Buat script python menggunakan ChromaDB lokal dan model embedding open-source (misal dari HuggingFace) untuk menyimpan beberapa paragraf teks.
  2. Lakukan query pencarian dan tampilkan tingkat kemiripan skor (distance score).
  3. Implementasikan logika penggabungan pencarian kata kunci sederhana (regex/BM25) dengan pencarian vektor untuk membuat Hybrid Search mini.

Target: Memahami bagaimana pipeline RAG dibangun dari pengolahan dokumen mentah hingga siap dikonsumsi LLM secara akurat.