R di RAG itu bermakna Retrieval. Dan sebagaimana semua jenis implementasi serta kerja engineering, selalu mulailah dengan teknik yang paling sederhana, evaluasi kualitasnya, sambil naik perlahan ke teknik yang lebih kompleks. Buat yang belajar ngoding RAG dari nol, fokuslah ke workflow LLM yang dibangun, dan bukan ke bagian R-nya!
RAG sangat mudah menjadi perluasan dari Chain of Thought.
Yang belum lihat teknik Chain of Thought yang melibatkan dua tahapan penting, Reason + Respond, simak cerita tempo hari, Chain of Thought: Lebih Santun dengan LLM.
Ringkasnya, LLM akan kita panggil dua kali. Yang pertama untuk bernalar soal pertanyaan yang diajukan, dan yang kedua untuk meramu jawaban dari hasil penalaran. Dalam proses bernalar, kita minta LLM seolah-olah bisa mengetikkan kata kunci pencarian (padahal sebenarnya hanya pura-pura saja).
Ketika CoT ini dijadikan RAG, maka yang perlu kita sisipkan adalah langkah tambahan yang bernama Retrieve (sangat tidak mengejutkan, ingat arti R di RAG). Kata-kata kunci, yang seakan dilemparkan ke mesin pencari, kali ini benar-benar digunakan untuk melakukan pencarian. Makanya namanya adalah "retrieval".
Buat rujukan menarik, baca juga paper yang pertama membahas RAG di arxiv.org/abs/2005.11401.
Bagi para pakar yang menekuni bidang ini, yang tersohor dengan sebuat Information Retrieval (buat yang suka menjelejahi literatur), kita dianjurkan untuk menggunakan teknik yang paling sederhana. Bisa dengan regex, TF/IDF, BM25, dan lain sebagainya.
Bagaimana dengan paper RAG yang barusan disebut? Teknik yang dipakai adalah Dense Passage Retriever, yang bisa dinikmati di arxiv.org/abs/2004.04906.
DPR ini menggunakan teknik kemiripan semantik (semantic similarity) dengan memetakan tiap potongan informasi ke dalam vektor multidimensi, biasanya dikenal juga dengan vector embedding. Tapi jangan lupa, dalam papernya sendiri ada perbandingan antara DPR dan algoritma klasik BM25. Ini penting sekali, karena akurasi dari penggunaan BM25 digunakan untuk mengukur terdongkraknya kualitas pencarian, begitu DPR dimainkan.
Untuk contoh RAG sederhana, bisa lihat contoh program saya di github.com/ariya/gamal.
Proses retrieval-nya sendiri didelegasikan sepenuhnya ke SearXNG. Fokus RAG hanya menyelaraskan tiga tahap penting yang sudah disebutkan: Reason, Retrieve, Respond. Kalau masih belum kenal dengan SearXNG, cek tulisan saya yang lalu, Tabir Privasi dalam Pusaran Informasi.
Makanya kalau belajar RAG, jangan terpesona dengan teknik retrieval yang kompleks (vector, chunking, dll). Mulailah dengan rantai LLM yang pakemnya baku dulu, pastikan sudah lancar sebelum diperbaiki. Bagaimana teknik evaluasinya? Nah, barangkali ini akan jadi bahasan di kemudian hari.
Ajakan saya ini mulanya hadir di satu utas di Threads.