← Semua pembelajaran / AI Engineer Nol → Production
Fase 5 · RAG — Retrieval Augmented Generation

Chunking & kualitas retrieval

RAG di materi sebelumnya berasumsi retrieval selalu menemukan chunk yang tepat. Kenyataannya, cara dokumen dipecah jadi chunk — dan cara pencariannya dilakukan — adalah bagian yang paling menentukan kualitas RAG di produksi.

Sumber asli anthropic.com Artikel Rangkuman ~9 menit baca

Intisari

  • Chunking = memecah dokumen panjang jadi potongan lebih kecil sebelum di-embed. Terlalu kecil → kehilangan konteks sekitarnya; terlalu besar → embedding-nya 'kabur' karena mencampur banyak topik.
  • Overlap antar chunk (mis. 50 kata terakhir chunk sebelumnya diulang di chunk berikutnya) mencegah informasi terpotong tepat di batas dua chunk.
  • Masalah klasik: chunk yang diambil terpisah dari dokumen aslinya bisa kehilangan konteks penting (mis. 'perusahaan ini' tanpa tahu perusahaan mana) — contextual retrieval mengatasi ini dengan menambahkan ringkasan konteks ke tiap chunk sebelum di-embed.
  • Hybrid search menggabungkan pencarian semantik (embedding) dengan pencarian kata kunci tradisional — mengatasi kasus di mana istilah spesifik (kode produk, nama teknis) butuh kecocokan persis yang kadang terlewat oleh similarity semantik murni.
  • Reranking: ambil lebih banyak kandidat di tahap retrieval awal (mis. 20), lalu pakai model terpisah yang lebih presisi untuk mengurutkan ulang dan memilih yang benar-benar terbaik (mis. top 3) — retrieval cepat/kasar dulu, lalu presisi di tahap kedua.

Ukuran chunk: trade-off yang harus dipilih sengaja

Chunk terlalu kecilChunk terlalu besar
Kehilangan konteks di sekitarnya (mis. satu kalimat tanpa paragraf penjelasnya)Embedding-nya mencampur banyak topik jadi satu vektor "kabur" — similarity search jadi kurang presisi
Butuh lebih banyak chunk untuk menjawab satu pertanyaan yang kompleksKonteks yang dikirim ke model jadi boros token, termasuk bagian yang tidak relevan

Tidak ada ukuran ajaib yang cocok semua kasus — titik awal umum adalah beberapa ratus token per chunk, disesuaikan dengan struktur dokumenmu (per paragraf, per bagian dokumentasi, dsb.), lalu diuji & disetel berdasarkan hasil evaluasi (materi berikutnya).

def pecah_jadi_chunk(teks: str, ukuran: int = 500, overlap: int = 50) -> list[str]:
    kata = teks.split()
    chunks = []
    i = 0
    while i < len(kata):
        chunk = " ".join(kata[i:i + ukuran])
        chunks.append(chunk)
        i += ukuran - overlap  # mundur sedikit supaya ada tumpang tindih antar chunk
    return chunks

Overlap mencegah informasi terpotong tepat di batas chunk. Tanpa overlap, sebuah kalimat penting yang kebetulan berada persis di perbatasan dua chunk bisa terpotong di keduanya — tidak ditemukan utuh oleh pencarian mana pun. Overlap 10-20% dari ukuran chunk adalah titik awal yang wajar.

Masalah konteks yang hilang: contextual retrieval

Chunk yang diambil sendirian, terpisah dari dokumen aslinya, sering kehilangan konteks penting. Sebuah chunk berbunyi "Pendapatan perusahaan naik 20% tahun ini" tidak berguna kalau sistem tidak tahu ini kutipan dari laporan tahunan perusahaan mana, dan tahun berapa.

Teknik contextual retrieval (dari sumber materi ini) mengatasinya dengan menambahkan ringkasan konteks singkat ke setiap chunk sebelum di-embed — biasanya dibuat dengan meminta LLM merangkum "di mana posisi chunk ini dalam dokumen aslinya":

Chunk asli:
"Pendapatan naik 20% dibanding tahun sebelumnya, didorong oleh ekspansi pasar Asia Tenggara."

Chunk + konteks tambahan (sebelum di-embed):
"[Dari: Laporan Tahunan 2025, PT Contoh Jaya, bagian Ringkasan Keuangan]
Pendapatan naik 20% dibanding tahun sebelumnya, didorong oleh ekspansi pasar Asia Tenggara."

Hybrid search: semantik + kata kunci

Pencarian embedding murni bisa melewatkan kecocokan yang sebenarnya jelas secara literal — kode produk seperti "SKU-4521" atau istilah teknis yang jarang muncul di data latihan model embedding mungkin tidak punya representasi vektor yang tajam. Hybrid search menggabungkan skor dari pencarian semantik (embedding) dan pencarian kata kunci tradisional (mis. full-text search Postgres), lalu menggabungkan rankingnya.

MetodeKuat diLemah di
Semantic (embedding)Pertanyaan bahasa bebas, sinonim, parafraseIstilah/kode spesifik yang jarang
Kata kunci (full-text search)Kecocokan istilah persis, kode, nama produkTidak menangkap makna/sinonim
Hybrid (gabungan)Kombinasi kekuatan keduanyaLebih kompleks — butuh cara menggabung skor dari dua sistem berbeda

Reranking: kasar dulu, presisi kemudian

Pola yang sering dipakai bersama hybrid search: ambil kandidat lebih banyak dari yang dibutuhkan di tahap retrieval awal (mis. 20 chunk), lalu pakai model reranker — biasanya lebih lambat tapi jauh lebih presisi — untuk menilai ulang kecocokan tiap kandidat dengan pertanyaan, dan ambil yang benar-benar terbaik (mis. top 3) untuk dikirim ke model generatif.

Retrieval awal (cepat, kasar):  20 kandidat teratas dari similarity search
                                        │
                                        ▼
Reranking (lambat, presisi):    urutkan ulang 20 kandidat itu berdasarkan relevansi sebenarnya
                                        │
                                        ▼
Kirim ke model:                  ambil 3 teratas hasil reranking

Latihan: ambil dokumen panjang (beberapa ribu kata), pecah dengan ukuran=100 dan ukuran=1000 secara terpisah, lalu jalankan pencarian yang sama untuk satu pertanyaan spesifik di kedua versi. Bandingkan: apakah chunk yang ditemukan di versi kecil kehilangan konteks penting yang masih ada di versi besar? Apakah versi besar membawa informasi tidak relevan yang membuang token?

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.