INGESTION DokumenPDF, Wiki, dll Chunk Embed Index Vector DBarsip vektor QUERY Querypertanyaan Retrievedari Vector DB Augmenttempel ke prompt Generatejawaban + sitasi Dokumen → chunk → embed → index → query → jawaban grounded

Membangun RAG Sendiri: Panduan Praktis dari Nol hingga Production

Tiga checkpoint untuk pemula, developer, dan engineer produksi — dua jalur setup, evaluasi terukur dengan RAGAS, dan peta jelas kapan melibatkan tim teknis.

Transparansi AI. Artikel ini disusun melalui kolaborasi strategis antara kecerdasan buatan (AI) dan tim Sequel Cloud. Seluruh arsitektur pemikiran, data teknis, dan analisis risiko dalam materi ini telah melalui proses audit, verifikasi fakta, serta penyempurnaan langsung oleh praktisi IT berpengalaman guna memastikan akurasi data, kepatuhan standar industri, dan relevansi pada realita lapangan.

Intisari Artikel

  • RAG adalah prosedur kerja: AI mengambil potongan dokumen relevan, menempelkannya ke prompt, lalu menjawab berdasarkan tempelan itu — jawaban bersitasi, bukan hafalan model.
  • Tiga checkpoint dengan pemisah peran tegas: 🟢 Hijau (non-teknis, mandiri) → 🟡 Kuning (developer) → 🔴 Merah (tim produksi wajib). Berhenti di checkpoint mana pun adalah keputusan yang sah.
  • Kualitas RAG diukur, bukan ditebak: RAGAS dengan empat metrik + custom test set; dan self-hosting berarti kedaulatan data sekaligus tanggung jawab pengamanan.

Di artikel 3.3, tiga jalur utama sudah dipetakan — dan RAG disebut sebagai jalur yang dipakai sebagian besar kasus bisnis. Di artikel 3.4, grounding dengan sitasi muncul sebagai pertahanan pertama terhadap halusinasi. Kini saatnya membangun jalur itu dari nol: RAG sendiri, dengan dokumen sendiri, di infrastruktur sendiri.

Setiap checkpoint memberi tahu siapa yang seharusnya mengerjakannya: kapan non-teknis cukup, kapan developer masuk, dan kapan tim produksi wajib dilibatkan. Berhenti di checkpoint mana pun adalah keputusan yang sah.

Konsep RAG (Rekap Satu Menit)

Awam / Bisnis

RAG adalah prosedur kerja tiga langkah: sebelum menjawab, AI mengambil (retrieve) potongan dokumen yang relevan dari arsip, menempelkannya (augment) ke dalam prompt, lalu menjawab (generate) berdasarkan tempelan itu. Model tidak menghafal dokumen; ia mencarinya setiap kali dibutuhkan.

Dua hal dari artikel 3.2 yang relevan di sini: chunking (cara memecah dokumen menjadi potongan kecil) dan context window (batas kapasitas model). RAG ada justru karena seluruh arsip tidak mungkin ditempel ke context window — maka yang ditempel hanya potongan yang paling relevan. Dan seperti dibahas di artikel 3.4, jawaban yang menempel pada sumber adalah pertahanan pertama terhadap halusinasi: jawaban tanpa sitasi = halusinasi yang terlihat meyakinkan.

🟢 Level 0 & Checkpoint 1: RAG yang Bisa Ditanya

Awam / Bisnis · 30 menit (no-code) atau 1 jam (kode)

Level 0 — nol instalasi

Sebelum menyentuh apa pun, konsep RAG bisa dicoba langsung di fitur "Projects/Knowledge" milik kotak chat (ChatGPT Projects, Claude Projects, NotebookLM): upload PDF, ajukan pertanyaan, selesai. Ini pintu masuk paling ramah — dan bagi kebutuhan personal, berhenti di sini adalah keputusan yang sah.

Setup lingkungan (untuk jalur berikutnya)

  • Install Ollama (ollama.com/download) — tool untuk menjalankan model AI lokal.
  • Unduh model: ollama pull qwen2.5:7b (atau llama3.2:3b untuk eksperimen cepat).
  • Unduh embedding model: ollama pull nomic-embed-text (mengubah teks menjadi vektor numerik).

Jalur A — No-Code: n8n + Ollama (30 menit)

Prasyarat: bisa klik mouse, punya qVM atau laptop dengan Docker.

docker run -it --rm --name n8n -p 5678:5678 \ -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
  1. Buka http://localhost:5678, buat akun.
  2. Pastikan Ollama di host yang sama bisa diakses dari container n8n (network bridge).
  3. Buat workflow RAG: Trigger → Read Binary File → Extract PDF Text → HTTP Request ke Ollama /api/embeddings → simpan ke ChromaDB; saat ada pertanyaan: embedding → cari top-3 → tempel ke prompt → kirim ke Ollama /api/generate.
  4. Test: upload PDF kebijakan perusahaan, tanya "berapa batas refund?", lihat jawaban dengan sitasi.

Jalur B — Kode: Python + LangChain + ChromaDB (1 jam)

Prasyarat: bisa membaca kode Python dasar, Python 3.10+.

pip install langchain langchain-ollama langchain-chroma chromadb pypdf

Inisialisasi vector store:

from langchain_chroma import Chroma from langchain_ollama import OllamaEmbeddings embeddings = OllamaEmbeddings(model="nomic-embed-text") vectorstore = Chroma( collection_name="dokumen_perusahaan", embedding_function=embeddings, persist_directory="./chroma_db" )

Load & chunk dokumen:

from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter loader = PyPDFLoader("kebijakan_perusahaan.pdf") pages = loader.load() splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, separators=["\n\n", "\n", " ", ""] ) chunks = splitter.split_documents(pages) vectorstore.add_documents(chunks)

Query & jawaban bersitasi:

from langchain_ollama import ChatOllama from langchain.chains import RetrievalQA llm = ChatOllama(model="qwen2.5:7b") qa_chain = RetrievalQA.from_chain_type( llm=llm, retriever=vectorstore.as_retriever(search_kwargs={"k": 3}), return_source_documents=True ) result = qa_chain.invoke({"query": "berapa batas refund?"}) print(result["result"]) print("Sumber:", [d.metadata.get("source") for d in result["source_documents"]])
🟢 Checkpoint 1 selesai. Sudah ada RAG yang bisa ditanya: upload PDF, ajukan pertanyaan, lihat jawaban bersitasi. Bila ini cukup untuk kebutuhan pribadi, berhenti di sini — tidak ada yang kurang. Berhenti di sini bila: hanya untuk diri sendiri, data tidak sensitif, dan tidak perlu integrasi.

🟡 Checkpoint 2: RAG untuk Tim

Deep-Dive Teknis · Developer / Technical Lead · 3–5 jam + 1 minggu tuning

Bagian ini untuk yang ingin naik dari eksperimen ke penggunaan rutin 5–10 orang. Bila hanya butuh RAG untuk diri sendiri, Checkpoint 1 sudah cukup.

Deep dive chunking: tiga teknik kunci

Chunking berjalan di sisi ingestion — sebagai perintah di kode atau field pengaturan di dashboard platform RAG. Embedding bekerja paling baik pada teks pendek dan fokus; satu dokumen 50 halaman menghasilkan embedding "rata-rata" yang kabur.

FIXED-SIZE setiap 500 token + overlap 50 STRUKTUR-AWARE per heading / paragraf SEMANTIC pecah di perubahan topik Satu chunk = satu ide yang jelas. 200–500 token, overlap 10–20%.

Tiga teknik chunking: fixed-size, struktur-aware, semantic.

Teknik 1: Struktur-Aware Chunking — untuk dokumen dengan heading/markdown.

from langchain.text_splitter import MarkdownHeaderTextSplitter headers_to_split_on = [ ("#", "Header 1"), ("##", "Header 2"), ("###", "Header 3"), ] splitter = MarkdownHeaderTextSplitter( headers_to_split_on=headers_to_split_on ) chunks = splitter.split_text(markdown_text)

Teknik 2: Semantic Chunking — untuk dokumen panjang dengan topik beragam; memecah di titik perubahan topik.

from langchain_experimental.text_splitter import SemanticChunker semantic_splitter = SemanticChunker( embeddings, breakpoint_threshold_type="percentile", breakpoint_threshold_amount=95 ) chunks = semantic_splitter.split_documents(pages)

Teknik 3: Contextual Retrieval (Anthropic, 2024) — setiap chunk ditempel 1–2 kalimat konteks dokumen sebelum embedding. Anthropic melaporkan penurunan kegagalan retrieval sekitar 35%.

def add_context(chunk, full_document): prompt = f""" Dokumen lengkap: {full_document[:2000]} Chunk: {chunk} Tugas: Tulis 1-2 kalimat konteks yang menjelaskan di mana chunk ini berada dalam dokumen. """ context = llm.invoke(prompt) return f"{context}\n{chunk}" chunks_with_context = [ add_context(c, full_text) for c in chunks ]

Reranking: agar dokumen relevan muncul di top-3

Retrieval awal sering mengambil 10–20 dokumen, tapi yang benar-benar relevan mungkin di posisi 7. Reranking mengurutkan ulang dengan model yang lebih akurat.

from langchain.retrievers import ContextualCompressionRetriever from langchain_cohere import CohereRerank reranker = CohereRerank( model="rerank-multilingual-v3.0", top_n=3 ) compression_retriever = ContextualCompressionRetriever( base_compressor=reranker, base_retriever=vectorstore.as_retriever( search_kwargs={"k": 20} ) )

(Catatan: reranker Cohere berbayar via API; alternatif open-source: bge-reranker-v2-m3 via Ollama.)

Grounding dengan sitasi

prompt_template = """ Jawab pertanyaan berdasarkan konteks berikut. Jika jawaban tidak ada di konteks, katakan "tidak ditemukan di dokumen". Konteks: {context} Pertanyaan: {question} Format jawaban: [Jawaban Anda] Sumber: - [Halaman/bagian] dari [nama dokumen] """

Hardening dasar

Autentikasi (API key/OAuth), rate-limit (mis. 10 query/menit per user), dan logging (catat setiap query, dokumen yang diambil, dan jawaban — untuk audit dan debugging).

🟡 Checkpoint 2 selesai. RAG dengan chunking tepat, reranking presisi, grounding untuk verifikasi, dan hardening dasar — kualitas yang cukup untuk satu tim kecil. Berhenti di sini bila: pengguna <10, data tidak teregulasi, belum butuh SLA.

🔴 Checkpoint 3: RAG Production-Ready

Deep-Dive Teknis · Engineer produksi / Arsitek · 1–2 minggu · Tim teknis wajib.

Evaluasi terukur dengan RAGAS

Bagaimana tahu RAG bagus? Jangan tebak — ukur. RAGAS adalah framework standar industri dengan empat metrik utama:

MetrikApa yang diukurTarget
Context RecallApakah dokumen relevan masuk top-k?≥ 0.8
Context PrecisionApakah dokumen di top-k benar-benar relevan?≥ 0.7
FaithfulnessApakah jawaban konsisten dengan konteks?≥ 0.85
Answer RelevancyApakah jawaban menjawab pertanyaan?≥ 0.8
from ragas import evaluate from ragas.metrics import ( context_recall, context_precision, faithfulness, answer_relevancy ) results = evaluate( dataset=eval_dataset, metrics=[context_recall, context_precision, faithfulness, answer_relevancy] )

Iterasi berdasarkan angka, bukan intuisi. Context recall rendah → perbaiki chunking. Faithfulness rendah → perbaiki prompt atau tambah reranking.

Custom test set: 50–100 pertanyaan nyata

Jangan pakai pertanyaan buatan — kumpulkan log query paling sering, mintakan jawaban benar + dokumen sumbernya ke domain expert:

{ "question": "Berapa batas refund untuk paket annual?", "ground_truth": "Rp 500.000 per transaksi, berlaku untuk paket annual dan monthly.", "source_documents": [ "kebijakan_refund.pdf#page=3", "faq_billing.pdf#page=7" ] }

Observability: Langfuse atau Phoenix

Di produksi, perlu terlihat apa yang terjadi — trace setiap query, score dari feedback user, dashboard metrik agregat (latency, cost, accuracy).

Eskalasi infrastruktur: ChromaDB → Qdrant

ChromaDB bagus untuk eksperimen dan skala kecil. Untuk jutaan dokumen, Qdrant lebih cocok: performance optimized untuk large-scale vector search, filtering, payload indexing, dan distributed mode.

Query Guardrails Retriever Qdrant Reranker LLM Jawaban Langfuse · observability · mencatat semua jalur

Arsitektur produksi: guardrails di depan, observability di belakang.

Disaster recovery, backup, & security

Vector DB adalah database produksi — perlakukan sama: backup snapshot harian, replication primary-replica, test restore berkala. Untuk data sensitif: enkripsi at-rest, audit trail semua query & user, dan role-based access (admin, user, read-only).

🔴 Checkpoint 3 selesai. Blueprint RAG production-ready: evaluasi terukur, observability penuh, infrastruktur scalable, disaster recovery, dan security berlapis.

Siapa Mengerjakan Apa: Matriks Peran

Semua Audiens
TugasNon-teknisDeveloperTim produksi
Upload dokumen & bertanya (Level 0/1)✅ mandiri
Workflow n8n via template✅ dengan panduan
Tuning chunking + reranking
Hardening (auth, rate-limit, logging)✅ dasar
Evaluasi RAGAS + test set✅ awal✅ rutin
Observability + DR + security

Sinyal wajib melibatkan tim teknis — bila salah satu benar, berhenti di jalur mandiri:

  • Pengguna melebihi 10 orang atau lintas tim.
  • Data mencakup data pribadi/sensitif (konteks UU PDP).
  • Butuh integrasi ke sistem internal (CRM/ERP/SSO).
  • Ada kebutuhan audit/kepatuhan (ISO 27001/SOC2).
  • Volume menuju ribuan query per hari.
  • Butuh DR, SLA, atau ketersediaan 24/7.

Long-Context & Agentic RAG: Apakah RAG Masih Relevan?

Deep-Dive Teknis

Long-context tidak menggantikan RAG. Model dengan context window jutaan token mengubah ekonomi RAG, bukan menggugurkannya. Grounding tetap dibutuhkan: dokumen bisa berubah (RAG memperbarui indeks, context window tidak), biaya menempel seluruh arsip di setiap query tidak masuk akal, dan sitasi tetap hanya lahir dari retrieval. "RAG is dead" adalah judul yang bagus; arsitektur nyata tetap memakai retrieval.

Agentic RAG adalah perluasan, bukan pengganti. Pada agen, retrieval menjadi satu tool di antara banyak tool. Prinsip dari artikel 3.4 berlaku penuh: konten eksternal yang masuk ke agen adalah permukaan serangan — guardrails di depan dan approval manusia untuk aksi berakibat tetap wajib.

Dan fenomena RAG-as-a-feature (Projects, NotebookLM, platform no-code) justru menegaskan: retrieval menjadi fitur standar karena ia menyelesaikan masalah yang tidak diselesaikan prompt engineering — menjadikan dokumen sendiri sebagai sumber kebenaran.

Infrastruktur di Balik RAG

Awam / Bisnis

RAG butuh infrastruktur — dan pilihannya tergantung checkpoint mana yang dicapai:

  • Checkpoint 1 (eksperimen): qVM cukup — VPS NVMe dengan provisioning instan; jalankan Ollama + ChromaDB + n8n di satu server.
  • Checkpoint 2 (tim kecil): tetap di qVM dengan spek lebih besar; atau pertimbangkan qMetal bila vector DB tumbuh ke jutaan dokumen.
  • Checkpoint 3 (produksi): qMetal adalah eskalasi alami — bare metal dengan NVMe dedicated IOPS hingga 200.000, latensi konsisten. Pemilik GPU sendiri mendapat rumah di qRack. Dan bila tidak ada tim yang menjaga, qManaged menjadikan tim engineer Sequel sebagai perpanjangan tim IT — monitoring 24/7, patching, backup terverifikasi.

Self-hosting RAG bukan hanya soal kendali — tapi juga soal kedaulatan data: dokumen perusahaan tidak perlu mampir ke server pihak ketiga.

Perlindungan Data & Kepatuhan

Awam / Bisnis

Data yang di-index masuk ke vector DB — perlakukan sama seperti database produksi: backup rutin, akses terbatas, enkripsi at-rest. Dalam spektrum lima level dari artikel 3.3, RAG self-hosted berada di Level 4–5 — jalur yang tepat untuk data sensitif.

Catatan Perlindungan Data. Di Indonesia, diskusi ini makin relevan sejak UU PDP (UU 27/2022): pengendali data pribadi wajib memastikan pengamanan yang memadai — termasuk saat memprosesnya dengan AI. Self-hosting memindahkan kemudi ke tangan sendiri, termasuk kewajiban mengamankannya. (Bukan nasihat hukum — sekadar konteks yang layak diketahui.) Rincian batas pemakaian layanan Sequel Cloud tercantum di halaman TNC.

Glosarium

Semua Audiens
IstilahBahasa awamKonteks utama
RAGMengambil dokumen, lalu menjawab berdasarkannyaProsedur retrieve → augment → generate
ChunkingMerapikan arsip jadi kartu indeksMemecah dokumen sebelum embedding
Embedding"Sidik jari makna" teksRepresentasi numerik untuk pencarian makna
Vector DBLemari kartu indeks digitalChromaDB (eksperimen), Qdrant (produksi)
RerankingMengurutkan ulang hasil retrievalAgar dokumen relevan muncul di top-3
GroundingMenautkan jawaban ke sumberJawaban bersitasi, bisa diverifikasi
RAGASFramework evaluasi RAGRecall, precision, faithfulness, relevancy
FaithfulnessKonsistensi jawaban dengan konteksMetrik anti-halusinasi
Contextual RetrievalMenempel konteks dokumen ke chunkMenurunkan kegagalan retrieval ±35%
ObservabilityMelihat apa yang terjadi di sistemTrace, metrics, logs (Langfuse/Phoenix)
nomic-embed-textModel embedding lokalMengubah teks menjadi vektor via Ollama
Recall vs Precision"Ketemu semua" vs "yang diambil tepat"Dua sisi kualitas retrieval

FAQ

Semua Audiens

Berapa lama waktu membangun RAG sendiri?

Checkpoint 1: 30 menit (no-code) atau 1 jam (kode). Checkpoint 2: 3–5 jam implementasi plus 1 minggu tuning. Checkpoint 3: 1–2 minggu untuk implementasi penuh.

Apakah RAG bisa dibangun tanpa coding?

Bisa. Level 0 (Projects/NotebookLM) cukup upload dokumen; jalur n8n + Ollama + ChromaDB bisa dirakit siapa pun yang bisa klik mouse dalam 30 menit.

Bagaimana mengukur kualitas RAG?

Gunakan RAGAS dengan empat metrik (recall ≥0.8, precision ≥0.7, faithfulness ≥0.85, relevancy ≥0.8), dilengkapi custom test set berisi 50–100 pertanyaan nyata dari pengguna.

Kapan harus melibatkan tim teknis?

Saat pengguna melebihi 10 orang, data sensitif, butuh integrasi internal, kebutuhan audit, volume ribuan query/hari, atau kebutuhan DR/SLA — lihat matriks peran di atas.

Apakah model long-context membuat RAG tidak perlu?

Tidak. Grounding, kesegaran dokumen, biaya, dan sitasi tetap membutuhkan retrieval. Long-context mengubah ekonomi RAG, bukan menggugurkannya.

Langkah Evaluasi Awal

Semua Audiens
  • Mulai dari Level 0 — upload satu dokumen penting ke Projects/NotebookLM dan rasakan perbedaan jawaban bersitasi.
  • Buat test set dini — kumpulkan 20 pertanyaan nyata sejak hari pertama; ia menjadi kompas evaluasi di semua checkpoint.
  • Tetapkan batas peran — putuskan di awal checkpoint mana yang akan dituju dan siapa yang terlibat, sebelum kebutuhan mendikte terburu-buru.

Pertanyaan Reflektif untuk Evaluasi Internal

Semua Audiens

Untuk Tim Bisnis/Manajemen:

Dokumen mana yang paling sering ditanyakan berulang — dan apakah jawaban AI atasnya kelak dilengkapi sitasi yang bisa diverifikasi manusia?

Untuk Tim IT/Engineering:

Bila vector DB diperlakukan seperti database produksi — backup, akses terbatas, enkripsi — apakah seluruh perlakuan itu sudah berjalan, atau masih "nanti saja"?
Selanjutnya dalam Serial AI & Prompt Engineering Hands-On Fine-Tuning dengan LoRA: Melatih Model Kecil di Server Sendiri

Daftar Pustaka

  • Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS 2020. · arxiv.org
  • Anthropic. (2024). Introducing Contextual Retrieval. · anthropic.com
  • Es, S., et al. (2024). RAGAS: Automated Evaluation of Retrieval Augmented Generation. · arxiv.org
  • LangChain Documentation. Retrieval-Augmented Generation. · python.langchain.com
  • Ollama Documentation. Running Models Locally. · ollama.com
  • Langfuse Documentation. LLM Observability. · langfuse.com