Hybrid RAG Reference — Retrieval Hibrida Terbenchmark
Benchmark 9 konfigurasi pada 120 query berlabel; diukur ulang dengan embedding Gemini asli

- Proyek open source
- Infrastruktur AI
- Indonesia
- 16 Agustus 2026
⚠ Ini proyek open source, bukan pekerjaan klien. Dataset benchmark-nya sintetis (288 dokumen, 120 query berlabel), angka mock-nya mengkarakterisasi plumbing pipeline, dan README menempatkan perintah reproduksi di samping setiap angka — termasuk bagian yang membuktikan kesimpulan awalnya sendiri salah.
Masalahnya
Nasihat soal retrieval untuk RAG kebanyakan folklore: “pakai hybrid”, “tambahkan reranker”, “chunk 512 token”. Jarang ada yang mengukur apakah tahap-tahap itu benar-benar membantu pada korpus Anda. Repo ini adalah implementasi retrieval hibrida yang bisa dibenchmark, bukan demo chatbot lain — setiap tahap opsional dan bisa dibenchmark secara independen, jadi “BM25 saja” dan “hybrid + rerank” adalah objek yang sama dengan tahap yang berbeda dinyalakan, dan perbandingannya apples-to-apples.
Yang dibangun
Okapi BM25 di atas inverted index (diimplementasikan di sini, bukan diimpor), dense vector search di atas numpy atau pgvector di balik satu interface, fusi RRF plus normalisasi min-max dan z-score, reranking cross-encoder opsional, dan transformasi query (multi-query, HyDE). Harness evaluasinya mengukur recall@k, nDCG@k, MRR, hit-rate@k, dan persentil latensi per tahap.
Dataset yang dibundel dibangkitkan dari seed tetap dan me-regenerate byte-identik: 288 dokumen handbook DevOps, 120 query dalam tiga gaya berlabel — lexical (memakai wording dokumen), paraphrase (kosakata yang tidak pernah dipakai dokumen), dan multi-hop (beberapa dokumen sama-sama relevan). Labelnya exact by construction, dan karena tiap gaya query diberi label, harness bisa memisahkan ketiganya — di situlah temuan sebenarnya berada.
Temuan, termasuk yang tidak berhasil
Pada run mock (embedder hash deterministik, sepenuhnya offline): reranker adalah kekecewaan terbesar — hybrid + rerank menurunkan nDCG@10 dari 0,518 ke 0,442. Penyebabnya terukur: mock reranker hanya menghasilkan rata-rata 6,8 skor berbeda untuk 50 kandidat, jadi mayoritas dokumen seri dan tie-break membuang ordering halus dari RRF. Reranker yang tidak bisa memisahkan kandidatnya lebih buruk dari tidak ada reranker. Namun reranker yang sama adalah teknik terbaik pada slice paraphrase (recall@10 0,417 → 0,500) — tabel agregat menyembunyikan ketiga efek itu. Chunking juga lebih menentukan daripada fusi: turun dari chunk 200 kata ke 80 kata memangkas recall@10 (0,658 → 0,512) lebih besar dari yang bisa ditambahkan pilihan fusi mana pun.
Embedding asli mengubah jawaban
Benchmark yang sama dijalankan terhadap gemini-embedding-001 (768 dimensi,
diukur 2026-08-16, ~25 menit wall-clock): dense saja melonjak dari kalah dari
BM25 (nDCG@10 0,496 vs 0,537) menjadi menang telak (0,855), dan hybrid RRF —
konfigurasi terbaik di tabel mock — menjadi lebih buruk dari dense saja (0,701).
Mekanismenya sama: RRF berbasis rank dan menimbang inputnya setara, jadi memfusi
retriever kuat dengan yang jauh lebih lemah menyeret yang kuat ke bawah. Tiga
kesimpulan berbasis mock milik repo ini sendiri tidak selamat — dan README
menyatakannya sebagai alasan utama bagian itu ada.
Satu eksperimen live lagi: HyDE dengan pseudo-document yang dibangkitkan
deepseek-v4-flash (120 query, 123 panggilan live) menaikkan recall@10 dari 0,658
ke 0,703 — terbaik dari semua konfigurasi — sambil menjatuhkan nDCG@10 ke 0,472,
terburuk. Melaporkan hanya “HyDE menaikkan recall 4,5 poin” akan benar sekaligus
menyesatkan.
Menjalankannya sendiri
make install
make bench # benchmark penuh pada dataset bawaan, offline
make test # tes unit: tanpa jaringan, key, atau database
Backend pgvector (dengan indeks HNSW) satu docker compose up jauhnya, dan
loadernya membaca korpus/queries JSONL atau dataset format BEIR milik Anda sendiri.
Repo publik: github.com/ridwanspace/hybrid-rag-reference.
Ada proses serupa di tim Anda?
Ceritakan alur kerja dan kendalanya. Kita mulai dengan lingkup yang bisa dijelaskan dan diperiksa.


