RAGFlow: Bikin RAG Engine yang Ngerti Dokumen Beneran, Lengkap dengan Sitasi
Halo temen-temen, balik lagi sama aku. Kalau kalian udah pernah main-main sama RAG (Retrieval Augmented Generation), pasti tahu rasanya frustrasi waktu bot kalian ngasih jawaban ngawur cuma gara-gara chunking-nya kacau. Dokumen PDF yang isinya penuh tabel, gambar, sama layout dua kolom sering banget dipotong sembarangan sama tool RAG biasa, dan hasilnya jawaban yang keluar jadi ngaco atau malah halusinasi. Nah, di tutorial kali ini aku mau ngenalin kalian ke RAGFlow, sebuah open-source RAG engine yang fokus banget di pemahaman dokumen secara mendalam.
RAGFlow ini beda sama tool RAG kebanyakan yang cuma nge-split teks pakai karakter atau token. Dia punya yang namanya deep document understanding, jadi dia beneran ngerti struktur dokumen kalian: mana yang judul, mana paragraf, mana tabel, mana gambar, bahkan bisa OCR buat dokumen hasil scan. Terus dia pakai template-based intelligent chunking, jadi cara motong dokumennya nyesuain sama jenis dokumennya. Dan yang paling aku suka, tiap jawaban yang dikasih itu ada grounded citations-nya, jadi kalian bisa lihat sumber jawaban itu dari halaman mana, dari potongan teks yang mana. Ini penting banget buat kepercayaan, apalagi kalau kalian mau pakai buat use case serius kayak legal, medis, atau finansial.
Di artikel ini aku bakal ajak kalian dari nol: mulai dari deploy RAGFlow pakai Docker Compose, bikin knowledge base, upload dokumen, milih metode chunking yang pas, konfigurasi chat assistant, sampai akhirnya query pakai HTTP API sama Python SDK lengkap dengan sitasinya. Siapin kopi, kita mulai pelan-pelan.
Introduction: Kenapa RAGFlow Beda
Sebelum masuk ke teknis, aku pengen kalian paham dulu kenapa RAGFlow ini worth buat dipelajari. Masalah paling umum di dunia RAG itu bukan di model LLM-nya, tapi di kualitas retrieval-nya. Prinsip "garbage in, garbage out" itu berlaku banget. Kalau potongan dokumen yang kalian kasih ke LLM itu udah kepotong di tengah tabel, atau nyampur antara footer sama isi, ya jawaban yang keluar juga bakal jelek.
Nah, RAGFlow nyerang masalah ini dari akarnya. Ada beberapa hal yang bikin dia beda:
Pertama, deep document understanding. RAGFlow punya model khusus buat ngenalin layout dokumen. Dia bisa bedain header, paragraf, list, tabel, sama gambar. Buat dokumen yang di-scan atau berupa foto, dia jalanin OCR dulu. Jadi tabel yang biasanya jadi mimpi buruk buat RAG lain, di RAGFlow bisa di-extract dengan strukturnya tetep utuh.
Kedua, template-based chunking. RAGFlow nyediain beberapa template chunking yang udah disesuain sama jenis dokumen. Ada template buat dokumen umum, buku, paper akademik, tabel, resume, presentasi, dan lain-lain. Jadi kalian nggak dipaksa pakai satu strategi chunking buat semua jenis dokumen. Ini yang bikin retrieval-nya jauh lebih relevan.
Ketiga, grounded citations. Tiap jawaban yang keluar dari RAGFlow itu selalu nunjuk ke chunk asal dan halaman dokumennya. Jadi kalau ada yang ragu sama jawaban bot, tinggal cek sumbernya. Ini ngurangin risiko halusinasi secara drastis karena LLM dipaksa jawab berdasarkan konteks yang ada, bukan ngarang.
Keempat, semuanya open-source dan self-hosted. Kalian bisa jalanin di server sendiri, data kalian nggak kemana-mana, dan kalian bisa pakai model LLM apapun, baik itu OpenAI, model lokal via Ollama, atau provider lain. Buat kalian yang concern sama privasi data, ini nilai plus yang gede.
Oke, cukup teorinya. Sekarang kita langsung praktek deploy.
Instalasi: Deploy RAGFlow Pakai Docker Compose
Cara paling gampang dan direkomendasiin buat jalanin RAGFlow itu pakai Docker Compose. RAGFlow ini sebenernya bukan satu aplikasi tunggal, tapi kumpulan beberapa service: ada web server-nya sendiri, ada Elasticsearch atau Infinity buat vector store, ada MySQL buat metadata, MinIO buat object storage, sama Redis. Docker Compose bakal ngurusin semua itu sekaligus.
Persiapan Sistem
Sebelum mulai, pastiin sistem kalian memenuhi requirement minimal. RAGFlow ini lumayan berat karena ada Elasticsearch di dalamnya, jadi jangan coba-coba di mesin kentang ya temen-temen. Berikut yang kalian butuhin:
- CPU minimal 4 core
- RAM minimal 16 GB (direkomendasiin, 8 GB bisa tapi bakal berat)
- Disk minimal 50 GB
- Docker versi 24 ke atas
- Docker Compose versi 2.26 ke atas
Ada satu hal penting yang sering bikin orang gagal deploy: Elasticsearch butuh setting vm.maxmapcount yang cukup tinggi. Kalau kelewat, container Elasticsearch bakal crash terus. Jadi kita set dulu.
# Cek nilai vm.maxmapcount saat ini
sysctl vm.maxmapcount