L
Artificial Intelligence & LLM • Literally Web ID

Membangun Sistem Multi-Agent RAG Berbasis LLM dan Vector Database

⏱️ 18 menit baca • 📅 15 Oct 2026 • 👁️ 1 views
Membangun Sistem Multi-Agent RAG Berbasis LLM dan Vector Database

Membangun Sistem Multi-Agent RAG Berbasis LLM dan Vector Database

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap teknologi enterprise modern, penerapan Large Language Models (LLM) tunggal sering kali menemui jalan buntu ketika dihadapkan pada domain pengetahuan yang luas, dinamis, dan sangat spesifik. Arsitektur Retrieval-Augmented Generation (RAG) konvensional yang bersifat monolitik sering kali gagal menangani kueri kompleks yang membutuhkan penalaran multi-langkah, ekstraksi data dari berbagai sumber heterogen (seperti basis data SQL, objek S3, dan dokumen PDF), serta verifikasi fakta yang ketat. Keterbatasan ini memicu fenomena halusinasi, latensi tinggi akibat pemrosesan konteks yang membengkak, serta ketidakmampuan sistem untuk mendelegasikan tugas secara otonom.

Bottleneck utama di dunia nyata meliputi:

  • Context Window Saturation: Mengirimkan seluruh dokumen ke LLM mengakibatkan biaya token yang tinggi dan penurunan akurasi penarikan informasi (lost-in-the-middle phenomenon).
  • Single Point of Failure (SPOF): Satu agen monolitik yang menangani ekstraksi, pencarian, dan generasi rentan mengalami kegagalan total saat menghadapi instruksi yang ambigu.
  • Inkonsistensi Sumber Data: Ketidakselarasan antara data terstruktur (MySQL/MariaDB) dan data tidak terstruktur (Vector Store) menyebabkan jawaban yang diberikan parsial.

Sebelum vs Sesudah Penerapan Sistem Multi-Agent RAG:

  • Sebelum: LLM tunggal menerima kueri mentah -> Melakukan pencarian vektor tunggal -> Mengembalikan jawaban generik tanpa verifikasi fakta -> Sering terjadi halusinasi pada data spesifik perusahaan.
  • Sesudah: Router Agent menganalisis kueri -> Mendelegasikan sub-tugas ke Retriever Agent (pencarian Vector DB), SQL Agent (kueri database transaksional), dan Validator Agent (cross-check fakta) -> Mensintesis jawaban yang akurat, terverifikasi, dan efisien.

2. Konsep Inti & Deep Dive Arsitektur

Sistem Multi-Agent RAG mendistribusikan beban kerja kecerdasan buatan ke dalam beberapa entitas otonom yang berkomunikasi secara terstruktur. Setiap agen memiliki system prompt, batas kapur (toolsets), dan memori kerja yang spesifik.

Alur Eksekusi Data (Data Flow Architecture)

[User/Client] 
     │
     ▼
[Nginx Reverse Proxy] 
     │
     ▼
[FastAPI Web Service / Orkesrator Agent]
     ├──► [Router Agent] ──(Klasifikasi Intent)
     │         ├──► [Vector Retriever Agent] ──► [Milvus/Qdrant Vector DB] ──► [S3/MinIO Storage]
     │         ├──► [SQL Expert Agent]      ──► [MariaDB / MySQL Cluster]
     │         └──► [API Integration Agent]   ──► [External Microservices]
     │
     └──► [Validator & Synthesis Agent] ──► [Response to Client]

Di balik layar, komunikasi antar agen dikoordinasikan melalui protokol asinkron menggunakan message broker (Redis/RabbitMQ) atau framework orkestrasi seperti LangGraph/CrewAI yang berjalan di atas infrastruktur kontainerisasi Docker dengan manajemen resource yang ketat melalui cgroups.


3. Perbandingan Komparatif / Analisis Pendekatan

Parameter / Metrik Monolithic RAG Multi-Agent RAG (Pendekatan Ini) Hybrid RAG + Fine-Tuning
Kompleksitas Setup Rendah Tinggi Sangat Tinggi
Latensi Rata-rata 1.2s - 2.5s 2.5s - 4.5s (Paralel) 0.8s - 1.5s
Akurasi Domain Spesifik Sedang Sangat Tinggi Tinggi
Konsumsi RAM / CPU Moderat Tinggi (Membutuhkan Redis & Worker) Sangat Tinggi (GPU VRAM berat)
Kemampuan Debugging Sulit (Black Box) Mudah (Trace per Agent) Sangat Sulit
Biaya Token LLM Boros (Konteks Besar) Efisien (Pencarian Bertarget) Efisien

[!IMPORTANT] Pendekatan Multi-Agent menawarkan fleksibilitas tertinggi untuk enterprise karena memungkinkan pemisahan tanggung jawab (Separation of Concerns), memudahkan auditing keamanan per agen, dan mengoptimalkan penggunaan token LLM.


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum melakukan deploy, pastikan infrastruktur server (Ubuntu 22.04 LTS / Debian 12) memenuhi spesifikasi minimal:

  • CPU: 8 Cores / vCPUs
  • RAM: 16 GB (Direkomendasikan 32 GB untuk Vector Store lokal)
  • Storage: 100 GB NVMe SSD
  • Software Stack: Docker Engine v24+, Docker Compose v2.20+, Python 3.11+, Redis Server, MariaDB 10.11+

Persiapan Sistem Operasi dan Direktori

# Update sistem dan instalasi dependensi dasar
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git build-essential libssl-dev libffi-dev python3-dev python3-pip nginx certbot python3-certbot-nginx

# Membuat struktur direktori proyek enterprise
sudo mkdir -p /var/www/multi-agent-rag/{app,config,logs,vector_data}
sudo chown -R $USER:$USER /var/www/multi-agent-rag
cd /var/www/multi-agent-rag

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Konfigurasi Docker Compose untuk Infrastruktur Pendukung

Buat file /var/www/multi-agent-rag/docker-compose.yml:

version: '3.8'

services:
  redis_cache:
    image: redis:7.2-alpine
    container_name: rag_redis
    restart: always
    ports:
      - "127.0.0.1:6379:6379"
    command: redis-server --save 60 1 --loglevel warning
    volumes:
      - redis_data:/data

  qdrant_vector:
    image: qdrant/qdrant:v1.7.4
    container_name: rag_qdrant
    restart: always
    ports:
      - "127.0.0.1:6333:6333"
      - "127.0.0.1:6334:6334"
    volumes:
      - /var/www/multi-agent-rag/vector_data:/qdrant/storage

volumes:
  redis_data:

Jalankan layanan infrastruktur:

docker-compose up -d

Langkah 2: Setup Lingkungan Python dan Instalasi Paket

python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install fastapi uvicorn pydantic langchain langgraph openai qdrant-client redis sqlalchemy pymysql

Langkah 3: Implementasi Kode Utama Multi-Agent RAG

Buat file /var/www/multi-agent-rag/app/main.py:

import os
from typing import List, Dict, Any
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from qdrant_client import QdrantClient
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import Qdrant

app = FastAPI(title="Enterprise Multi-Agent RAG API", version="1.0.0")

# Inisialisasi koneksi Vector Store & LLM
QDRANT_HOST = os.getenv("QDRANT_HOST", "127.0.0.1")
QDRANT_PORT = int(os.getenv("QDRANT_PORT", 6333))
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "sk-placeholder-key")

client_qdrant = QdrantClient(host=QDRANT_HOST, port=QDRANT_PORT)
embeddings = OpenAIEmbeddings(openai_api_key=OPENAI_API_KEY)
llm = ChatOpenAI(model="gpt-4-turbo", temperature=0.2, openai_api_key=OPENAI_API_KEY)

class QueryRequest(BaseModel):
    query: str
    agent_type: str = "general"

class QueryResponse(BaseModel):
    status: str
    answer: str
    sources: List[str]

@app.post("/api/v1/query", response_model=QueryResponse)
async def handle_multi_agent_query(payload: QueryRequest):
    try:
        # Simulasi Routing Agent
        if payload.agent_type == "technical":
            # Jalankan pencarian berbasis spesifikasi teknis
            vector_store = Qdrant(client=client_qdrant, collection_name="tech_docs", embedding=embeddings)
        else:
            vector_store = Qdrant(client=client_qdrant, collection_name="general_docs", embedding=embeddings)

        retriever = vector_store.as_retriever(search_kwargs={"k": 4})
        docs = retriever.get_relevant_documents(payload.query)
        
        context_text = "\n".join([doc.page_content for doc in docs])
        sources = [doc.metadata.get("source", "unknown") for doc in docs]

        prompt_template = f"Jawablah pertanyaan berdasarkan konteks berikut:\n{context_text}\n\nPertanyaan: {payload.query}"
        response = llm.invoke(prompt_template)

        return {
            "status": "success",
            "answer": response.content,
            "sources": list(set(sources))
        }
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    import uvicorn
    uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=False)

Langkah 4: Konfigurasi Nginx sebagai Reverse Proxy

Buat file konfigurasi /etc/nginx/sites-available/rag-api:

server {
    listen 80;
    server_name rag.enterprise.local;

    client_max_body_size 50M;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Konfigurasi timeout untuk respons LLM yang panjang
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

Aktifkan konfigurasi Nginx:

sudo ln -s /etc/nginx/sites-available/rag-api /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

6. Bedah Kode & Penjelasan Detail Baris Kunci

  • ChatOpenAI(model="gpt-4-turbo", temperature=0.2): Menggunakan parameter temperature rendah (0.2) untuk mengurangi kreativitas berlebih yang menjadi akar utama halusinasi pada sistem enterprise.
  • vector_store.as_retriever(search_kwargs={"k": 4}): Parameter k=4 membatasi jumlah dokumen referensi yang diambil dari Qdrant, menjaga ukuran context window tetap optimal dan mencegah information overload pada LLM.
  • proxy_read_timeout 300s pada Nginx: Sangat krusial karena inferensi model bahasa besar (terutama GPT-4 dengan penalaran multi-agent) membutuhkan waktu lebih lama daripada HTTP request konvensional. Tanpa pengaturan ini, Nginx akan memutus koneksi dengan error 504 Gateway Time-out.

7. Skenario Produksi & Studi Kasus Dunia Nyata

Pada lingkungan produksi dengan beban tinggi (misal: 500 concurrent requests), arsitektur di atas harus diskalakan menggunakan Supervisor untuk menjaga proses FastAPI tetap berjalan secara daemon, serta memanfaatkan Redis Cluster untuk caching hasil kueri berulang (semantic caching).

Konfigurasi Supervisor /etc/supervisor/conf.d/rag_worker.conf:

[program:rag_api]
command=/var/www/multi-agent-rag/venv/bin/uvicorn main:app --host 127.0.0.1 --port 8000 --workers 4
directory=/var/www/multi-agent-rag/app
user=www-data
autostart=true
autorestart=true
stderr_logfile=/var/www/multi-agent-rag/logs/rag_err.log
stdout_logfile=/var/www/multi-agent-rag/logs/rag_out.log

Muat ulang Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start rag_api

8. Common Pitfalls, Anti-Patterns & Solusi

[!WARNING] Anti-Pattern Terburuk: Menyimpan API Key LLM langsung di dalam kode sumber (hardcoded) atau mengizinkan akses terbuka tanpa Rate Limiting pada endpoint API RAG.

  • Kesalahan 1: Chunking dokumen yang buruk (terlalu besar atau terpotong di tengah kalimat).
    • Solusi: Terapkan chunking berbasis struktur semantik dengan ukuran 500-1000 token dan overlap sebesar 100 token.
  • Kesalahan 2: Mengabaikan pembersihan memori pada Qdrant saat melakukan upsert data masif, menyebabkan lonjakan RAM.
    • Solusi: Gunakan batch processing dengan ukuran batch maksimal 100 dokumen per transaksi.

9. Benchmark, Metrik Kinerja & Tuning Performa

Pengujian beban dilakukan menggunakan tool k6 untuk menguji ketahanan API terhadap lonjakan traffic.

Skrip pengujian load_test.js:

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 50 },
    { duration: '1m', target: 200 },
    { duration: '30s', target: 0 },
  ],
};

export default function () {
  const url = 'http://rag.enterprise.local/api/v1/query';
  const payload = JSON.stringify({
    query: 'Bagaimana prosedur keamanan infrastruktur cloud?',
    agent_type: 'technical'
  });

  const params = {
    headers: { 'Content-Type': 'application/json' },
  };

  const res = http.post(url, payload, params);
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 3s': (r) => r.timings.duration < 3000,
  });
  sleep(1);
}

10. Checklist Penerapan Produksi & Kesimpulan

Sebelum merilis sistem ke lingkungan Production:-

  • Pastikan seluruh file konfigurasi menggunakan environment variables (.env).
  • Aktifkan SSL/TLS menggunakan Let's Encrypt pada Nginx.
  • Konfigurasi Firewall (UFW) hanya membuka port 80, 443, dan 22.
  • Terapkan rotasi log otomatis untuk mencegah disk penuh.
  • Lakukan pengujian penetration testing dasar terhadap injeksi prompt LLM.

Dengan menerapkan arsitektur Multi-Agent RAG ini, sistem enterprise Anda tidak hanya mampu memproses data dengan akurasi tinggi dan minim halusinasi, tetapi juga memiliki skalabilitas dan ketahanan infrastruktur yang teruji di level production.

🏷️ Tags: #Rag #Llm #Vector Database #Artificial Intelligence #Python