RAG (Retrieval-Augmented Generation) — AI Web

RAG: Retrieval-Augmented Generation LLM punya knowledge cutoff dan tidak tahu data internal kamu. RAG menggabungkan retrieval (cari data relevan) + generation (

RAG: Retrieval-Augmented Generation

LLM punya knowledge cutoff dan tidak tahu data internal kamu. RAG menggabungkan retrieval (cari data relevan) + generation (LLM menjawab berdasarkan data yang ditemukan).

Tanpa RAG vs Dengan RAG

// Tanpa RAG
User: "Apa kebijakan cuti di perusahaan kita?"
LLM: "Saya tidak tahu kebijakan spesifik perusahaan Anda." // ❌

// Dengan RAG
1. Embed query → cari di knowledge base
2. Temukan: "Karyawan mendapat 12 hari cuti per tahun..."
3. Kirim ke LLM: "Berdasarkan dokumen berikut: [data], jawab: ..."
LLM: "Berdasarkan kebijakan perusahaan, Anda mendapat 12 hari cuti..." // ✅

RAG Pipeline

// 1. Indexing (sekali, atau saat data berubah)
const chunks = splitDocument(document, { chunkSize: 500 });
for (const chunk of chunks) {
  const embedding = await embed(chunk.text);
  await vectorDB.upsert({
    id: chunk.id,
    values: embedding,
    metadata: { text: chunk.text, source: chunk.source },
  });
}

// 2. Querying (setiap user question)
async function askWithRAG(question) {
  // Retrieve relevant chunks
  const queryEmbedding = await embed(question);
  const results = await vectorDB.query({
    vector: queryEmbedding,
    topK: 5,
  });

  // Augment prompt with context
  const context = results.map(r => r.metadata.text).join("\n\n");

  // Generate answer
  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [
      { role: "system", content: `Jawab berdasarkan context berikut:\n\n${context}` },
      { role: "user", content: question },
    ],
  });

  return response.choices[0].message.content;
}

Chunking Strategies

Yang akan kamu pelajari