LLM seperti GPT-4 atau Llama 3 sangat pintar, ia bisa menulis kode, merangkum dokumen, hingga menjawab pertanyaan rumit. Tapi ada satu batasan mendasar: model hanya tahu apa yang ada dalam training datanya. Ia tidak tahu isi laporan internal kantor Anda, dokumen kebijakan terbaru, atau database produk perusahaan.

Bayangkan Anda punya 10.000 halaman SOP dan regulasi. Pegawai baru butuh waktu berbulan-bulan untuk menghafalnya. Bagaimana kalau ada asisten AI yang bisa menjawab pertanyaan seperti “Apa prosedur pengadaan barang di atas 200 juta?” langsung dari dokumen tersebut?

Di sinilah RAG (Retrieval-Augmented Generation) hadir sebagai solusinya.


1. Apa itu RAG?

RAG adalah teknik yang menggabungkan kemampuan pencarian (retrieval) dengan kemampuan generasi teks (generation) dari LLM.

Analoginya: bayangkan ujian open-book. Murid yang pintar tidak perlu menghafal semua rumus, saat ada soal, ia membuka buku yang tepat, menemukan halaman yang relevan, lalu menjawab berdasarkan referensi tersebut. RAG bekerja persis seperti itu:

  1. Terima pertanyaan user
  2. Cari dokumen atau teks yang paling relevan
  3. Berikan teks tersebut ke LLM sebagai konteks
  4. LLM menjawab berdasarkan konteks yang diberikan

Pipeline dasar RAG:

Query → Retrieve → Augment → Generate

RAG vs Fine-tuning

Banyak yang bertanya: kenapa tidak fine-tune saja modelnya dengan data internal kita?









Aspek RAG Fine-tuning
Cara kerja Beri konteks saat inferensi Ubah bobot model
Update data Tambah dokumen saja Latih ulang model
Biaya Lebih murah Lebih mahal
Cocok untuk Data yang sering berubah Gaya bahasa / domain khusus
Hallucination Lebih terkontrol (ada sumber) Lebih berisiko

RAG tidak mengubah model, ia hanya memberi “catatan contekan” yang relevan ke LLM saat menjawab. Hasilnya: lebih mudah diupdate, lebih hemat biaya, dan sumber jawaban bisa dilacak.


2. Anatomi Pipeline RAG

Pipeline RAG terdiri dari dua fase besar: indexing (dikerjakan sekali / offline) dan retrieval + generation (dikerjakan setiap kali ada query).

Tahap Indexing

Dokumen → Chunking → Embedding → Vector Database

  1. Dokumen masuk: PDF, Word, teks, HTML, markdown, dll.
  2. Chunking: Dokumen dipotong-potong menjadi potongan kecil (chunk). Misalnya, satu dokumen 50 halaman dipotong menjadi 200 chunk berisi 3-5 paragraf masing-masing.
  3. Embedding: Setiap chunk diubah menjadi vektor (array angka) menggunakan embedding model. Chunk yang bermakna mirip akan menghasilkan vektor yang secara matematika berdekatan.
  4. Simpan ke Vector Database: Vektor beserta teks aslinya disimpan di database khusus yang bisa dicari dengan efisien.

Tahap Retrieval

Query → Embed Query → Cari Nearest Neighbor → Ambil Top-K Chunk

  1. Query masuk: “Apa prosedur pengadaan barang di atas 200 juta?”
  2. Embed query: Query juga diubah menjadi vektor menggunakan embedding model yang sama.
  3. Nearest neighbor search: Vector database mencari chunk-chunk yang vektornya paling dekat dengan vektor query.
  4. Ambil top-k: Misalnya 5 chunk paling relevan dikembalikan.

Tahap Generation

Chunk Relevan + Query → LLM → Jawaban

Chunk-chunk relevan dan query asli disusun menjadi prompt, lalu dikirim ke LLM:

Konteks:
[Chunk 1]: Pengadaan barang di atas Rp200 juta wajib melalui lelang terbuka...
[Chunk 2]: Proses lelang minimal membutuhkan 3 peserta yang qualified...

Pertanyaan: Apa prosedur pengadaan barang di atas 200 juta?

Jawab berdasarkan konteks di atas saja.

LLM kemudian menghasilkan jawaban berdasarkan konteks yang diberikan — bukan dari training data-nya.

Contoh hasil jawaban LLM:

Berdasarkan dokumen yang tersedia, pengadaan barang dengan nilai di atas
Rp200 juta wajib dilakukan melalui mekanisme lelang terbuka. Proses lelang
ini mensyaratkan minimal 3 peserta yang telah memenuhi kualifikasi yang
ditetapkan. Penunjukan langsung hanya diperbolehkan dalam kondisi tertentu
seperti keadaan darurat atau pengadaan yang bersifat rahasia negara.

Sumber: [Chunk 1] SOP Pengadaan Barang dan Jasa, hal. 12-14

Sumber bisa dilacak! Perhatikan bahwa LLM menyertakan referensi ke chunk sumber. Ini adalah salah satu keunggulan RAG, jawaban bisa dilacak balik ke dokumen aslinya, sehingga mudah diverifikasi.


3. Apa itu Embedding dan Vector Database?

Embedding: Mengubah Teks Menjadi Angka

Embedding adalah proses mengubah teks (atau gambar, audio, dll.) menjadi array angka yang disebut vektor. Vektor ini bukan sekadar angka acak; ia merepresentasikan makna dari teks tersebut.

Contoh sederhana (dimensi dikecilkan untuk ilustrasi):

"kucing" → [0.12, 0.85, 0.33, ...]
"anjing" → [0.11, 0.82, 0.35, ...]   ← dekat dengan "kucing"
"mobil"  → [0.91, 0.04, 0.77, ...]   ← jauh dari "kucing"

Makna yang mirip → vektor yang berdekatan. Itulah kenapa pencarian berdasarkan vektor bisa menemukan dokumen yang relevan secara semantik, bukan hanya kata kunci yang sama persis (exact match).

Contoh semantik: Query “cara install python” bisa menemukan dokumen yang berisi “langkah-langkah setup Python di Windows” meskipun kata-katanya berbeda.

Vector Database: Database untuk Mencari Vektor

Database konvensional (PostgreSQL, MySQL) dioptimalkan untuk pencarian exact match atau range query: WHERE id = 123 atau WHERE price BETWEEN 100 AND 200.

Vector database dioptimalkan untuk hal yang berbeda: Approximate Nearest Neighbor (ANN) search, mencari K vektor yang paling dekat dengan vektor query dari jutaan atau miliaran vektor.








Aspek Database Relasional Vector Database
Jenis query Exact match, range Nearest neighbor
Index B-tree, Hash HNSW, IVF
Cocok untuk Transaksi, structured data Pencarian semantik
Output Row yang cocok Top-K vektor terdekat

Algoritma seperti HNSW (Hierarchical Navigable Small World) memungkinkan pencarian jutaan vektor dalam milidetik sehingga tidak perlu membandingkan query dengan setiap vektor satu per satu.


4. Macam-macam Vector Database










Database Jenis Kelebihan Kekurangan
Qdrant Open source / Cloud Filtering kuat, payload rich, REST+gRPC, Rust-based Ekosistem lebih kecil dibanding Milvus
Weaviate Open source / Cloud GraphQL native, hybrid search bawaan Setup lebih kompleks
Chroma Open source Ringan, mudah, cocok development & prototyping Kurang fit untuk production skala besar
Milvus Open source / Cloud Skalabilitas tinggi, enterprise-ready Setup infrastruktur kompleks
Pinecone Cloud managed Mudah dipakai, fully managed, zero ops Vendor lock-in, berbayar
pgvector Extension PostgreSQL Familiar SQL, tidak perlu infrastruktur baru Performa tidak seoptimal dedicated vector DB

Kapan Pakai Apa?

Development / prototyping

Chroma — ringan, zero config, bisa jalan in-memory.

Production dengan kontrol penuh

Qdrant atau Milvus — open source, bisa self-host.

Sudah pakai PostgreSQL

pgvector — tambah extension saja, tidak perlu layanan baru.

Tim kecil, tidak mau urus infra

Pinecone — fully managed, API-first.

Enterprise, data processing pipeline

Milvus — skalabilitas tinggi, ekosistem lengkap.

Pada AI Series kali ini kita akan lebih banyak membahas Qdrant karena saya sendiri menggunakan database ini di project yang sedang saya kerjakan.

Contoh: Menjalankan Qdrant dengan Docker

# Pull dan jalankan Qdrant
docker pull qdrant/qdrant
docker run -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage qdrant/qdrant

Setelah jalan, Qdrant tersedia di http://localhost:6333. Bisa juga akses dashboard-nya di http://localhost:6333/dashboard.

# Buat collection baru via REST API
curl -X PUT ' \
-H 'Content-Type: application/json' \
-d '{
"vectors": {
"size": 768,
"distance": "Cosine"
}
}'

# Cek status collection
curl '


5. Embedding Model

Embedding model adalah model AI yang bertugas mengubah teks menjadi vektor. Ini berbeda dengan LLM, embedding model tidak menghasilkan teks, ia hanya mengkodekan teks menjadi representasi numerik.

Sparse vs Dense vs Hybrid







Jenis Cara Kerja Contoh Kelebihan
Sparse (BM25) Hitung frekuensi kata Elasticsearch Cepat, exact keyword match
Dense (Neural) Neural network → vektor padat BGE-M3, text-embedding-3 Pencarian semantik
Hybrid Gabungkan keduanya BGE-M3, Weaviate hybrid Terbaik dari keduanya

Model Populer

BGE-M3 (BAAI)

Saat ini salah satu yang terbaik untuk Bahasa Indonesia:

  • Mendukung 100+ bahasa termasuk Bahasa Indonesia
  • Bisa menghasilkan sparse, dense, dan multi-vector sekaligus
  • Dimensi: 1024
  • Gratis, bisa dijalankan lokal
# Install dan coba BGE-M3 via Ollama
 ollama pull bge-m3

Ollama Embedding API

Cara universal untuk embed teks via model lokal:

  • REST API tersedia di http://localhost:11434
  • Mendukung semua embedding model yang sudah di-pull via Ollama
  • Kompatibel dengan format request OpenAI
# Embed satu teks dengan nomic-embed-text
 curl \
 -H "Content-Type: application/json" \
 -d '{
 "model": "nomic-embed-text",
 "input": "Apa prosedur pengadaan barang?"
 }'
# Embed batch — banyak teks sekaligus
 curl \
 -H "Content-Type: application/json" \
 -d '{
 "model": "nomic-embed-text",
 "input": [
 "Pengadaan barang di atas Rp200 juta wajib melalui lelang...",
 "Penunjukan langsung untuk nilai di bawah Rp50 juta..."
 ]
 }'

nomic-embed-text

Open source, cepat:

# Jalankan lokal via Ollama
 ollama pull nomic-embed-text
 ollama run nomic-embed-text

Jina Embeddings — multilingual, mendukung Bahasa Indonesia dengan baik.

Cara Memilih Embedding Model

  1. Bahasa: Apakah model mendukung Bahasa Indonesia? Cek benchmark MTEB (Massive Text Embedding Benchmark).
  2. Dimensi: Dimensi lebih besar = lebih akurat tapi lebih lambat dan butuh lebih banyak storage.
  3. Lokal vs Cloud: Model lokal (via Ollama) gratis tapi butuh resource; cloud ada biaya per token.
  4. Konsistensi: Embedding model yang dipakai saat indexing harus sama dengan saat query. Jangan ganti model setelah data diindex.

Perhatian! Embedding model yang dipakai saat indexing harus sama dengan saat retrieval. Jika Anda ganti model, seluruh data harus di-index ulang dari awal.


6. Reranker

Retrieval berbasis nearest neighbor (ANN) cepat dan scalable, tapi tidak selalu presisi. Ia mengurutkan chunk berdasarkan jarak vektor — yang secara kasar mewakili relevansi, tapi tidak sempurna.

Reranker hadir sebagai tahap kedua: setelah retrieval mengambil top-50 chunk kandidat, reranker menghitung ulang skor relevansi setiap chunk terhadap query dengan model yang lebih akurat (tapi lebih lambat).

Pipeline dengan Reranker

Query → Retrieve (top-50) → Rerank → Ambil top-5 → Generate

Tanpa reranker, Anda mungkin memberi LLM chunk yang “agak relevan”. Dengan reranker, chunk yang masuk ke LLM benar-benar yang paling relevan.

Model Reranker Populer








Model Provider Catatan
BGE Reranker BAAI Open source, bisa lokal, multilingual
Cohere Rerank Cohere Cloud API, performa sangat baik
Jina Reranker Jina AI Multilingual, ada versi gratis
ms-marco-MiniLM Hugging Face Ringan, cocok production

Untuk reranking lokal, kita bisa menggunakan Infinity — server embedding dan reranking open source yang menyediakan REST API. Jalankan via Docker:

# Jalankan Infinity server dengan model BGE Reranker
docker run -p 7997:7997 michaelf34/infinity:latest \
v2 --model-name-or-path BAAI/bge-reranker-v2-m3 --port 7997

Setelah server berjalan, kirim request rerank via curl:

# Rerank dokumen via Infinity API lokal
curl  \
-H "Content-Type: application/json" \
-d '{
"query": "prosedur pengadaan barang",
"documents": [
"Pengadaan barang di atas Rp200 juta wajib melalui lelang...",
"Tata cara pengajuan anggaran tahunan...",
"Pengadaan langsung dapat dilakukan untuk nilai di bawah..."
],
"return_documents": true
}'

Reranker biasanya berjalan dalam hitungan milidetik hingga detik untuk 50 dokumen, tradeoff kecepatan yang sangat worthwhile untuk presisi yang jauh lebih baik.


7. Tools dan Framework untuk RAG

Membangun pipeline RAG dari nol bisa sangat kompleks. Untungnya, ekosistem framework sudah sangat matang.

LlamaIndex

Framework yang paling fokus ke RAG dan document processing. Cocok jika kebutuhan utama Anda adalah membangun aplikasi berbasis dokumen.

Fitur utama:

  • Data connectors (PDF, Word, Notion, Confluence, dll.)
  • Node parsers & chunk strategies
  • Query engines dengan berbagai jenis retrieval
  • Evaluasi bawaan

LangChain

Framework orchestration yang lebih general. Cocok untuk membangun aplikasi LLM yang kompleks, termasuk RAG.

Ekosistem sangat besar: 300+ integrations dengan vector DB, LLM, tools, dan APIs.

Haystack

Framework production-ready dari deepset. Sangat cocok untuk enterprise NLP karena pipeline declaratif, mudah diuji dan dideploy.

Ragas

Bukan framework untuk membangun RAG, tapi untuk mengevaluasi kualitas RAG. Mengukur:

  • Context Precision: Seberapa relevan chunk yang diambil?
  • Context Recall: Apakah semua informasi yang dibutuhkan ada di chunk?
  • Answer Faithfulness: Apakah jawaban LLM sesuai konteks (tidak hallucinate)?
  • Answer Relevance: Seberapa relevan jawaban dengan pertanyaan?
# Install Ragas
 pip install ragas

DSPy

Framework dari Stanford yang mengubah cara Anda membangun pipeline LLM. Alih-alih menulis prompt secara manual, Anda mendefinisikan behavior dan DSPy mengoptimasi prompt secara otomatis.


8. Strategi Chunking

Cara Anda memotong dokumen (chunking) sangat mempengaruhi kualitas retrieval. Chunk yang terlalu kecil kehilangan konteks; terlalu besar memasukkan informasi tidak relevan ke LLM.

Fixed-size Chunking

Potong dokumen setiap N karakter atau N token, dengan overlap tertentu.

[...karakter 1-500...][...karakter 400-900...][...karakter 800-1300...]
 Chunk 1 Chunk 2 Chunk 3
 (overlap 100) (overlap 100)

Kelebihan: sederhana, deterministik. Kekurangan: bisa memotong di tengah kalimat.

Sentence / Paragraph Chunking

Potong berdasarkan batas kalimat atau paragraf menggunakan library NLP.

# Contoh dengan NLTK
 pip install nltk

Kelebihan: setiap chunk adalah unit yang bermakna. Kekurangan: ukuran chunk bervariasi.

Semantic Chunking

Potong berdasarkan perubahan topik/makna, chunk baru dimulai saat embedding antara kalimat berubah signifikan. Lebih kompleks tapi hasilnya lebih baik untuk dokumen panjang dengan banyak topik.

Panduan Praktis Memilih Strategi









Jenis Dokumen Strategi Rekomendasi
Dokumen regulasi / SOP Paragraph chunking
Buku teks / artikel panjang Semantic chunking
FAQ / Q&A Pisahkan per pasang Q&A
Laporan keuangan terstruktur Fixed-size dengan overlap besar
Kode program Chunking per fungsi / class

Kualitas chunking adalah salah satu faktor terbesar yang menentukan kualitas RAG. Kita akan membahas evaluasi dan optimasi kualitas retrieval lebih mendalam di artikel berikutnya.


Untuk mulai bereksperimen, Anda bisa:

  1. Jalankan Qdrant atau Chroma sebagai vector database lokal
  2. Gunakan nomic-embed-text via Ollama sebagai embedding model gratis
  3. Coba LlamaIndex atau LangChain untuk orchestration pipeline
  4. Evaluasi hasilnya dengan Ragas

Demikian tulisan ini, semoga bermanfaat dan Happy Coding!

PakarPBN

A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.

In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.

The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.

Jasa Backlink

Download Anime Batch

Leave a Reply

Your email address will not be published. Required fields are marked *

TOP