AizuDemy

Tutorial Evaluasi RAG Lokal: Deteksi Halusinasi AI Pakai Ragas & Ollama

Tutorial Evaluasi RAG Lokal: Deteksi Halusinasi AI Pakai Ragas & Ollama
IKLAN
IDCloudHost
🎧
Dengarkan Artikel Ini
Suara AI Otomatis β€’ 6 mnt baca baca
⚑ TL;DR

Poin Kunci Artikel Ini:

  • Simpan 30-50 sampel pertanyaan standar beserta dokumen kunci di repositori kode proyek Anda.
  • Petaka Halusinasi RAG di Server ProductionBayangkan skenario ini: hari Senin pagi, grup Slack internal kantor mendadak ramai.
  • Bot HR yang baru saja minggu lalu rilis ke production dengan bangga memberi tahu seorang karyawan bahwa dia berhak mengambil jatah cuti tahunan selama 50 hari.
πŸ“‹ Daftar Isi Materi Tutup β–΄

Petaka Halusinasi RAG di Server Production

Bayangkan skenario ini: hari Senin pagi, grup Slack internal kantor mendadak ramai. Bot HR yang baru saja minggu lalu rilis ke production dengan bangga memberi tahu seorang karyawan bahwa dia berhak mengambil jatah cuti tahunan selama 50 hari. Karyawan senang bukan main, tetapi tim engineer dan HR langsung mandi keringat dingin. Padahal, dokumen SOP perusahaan yang tersimpan di basis data jelas-jelas mencantumkan angka 12 hari kerja.

Kejadian seperti ini adalah mimpi buruk pengembang sistem Retrieval-Augmented Generation (RAG). RAG memang digadang-gadang sebagai penawar ampuh buat penyakit halusinasi Large Language Model (LLM) karena memaksa model menjawab berdasarkan dokumen internal. Namun kenyataannya, kalau tidak diuji dengan angka terukur, halusinasi LLM tetap bisa lolos halus ke layar pengguna.

Masalah paling krusial saat membawa RAG ke tahap produksi biasanya terletak pada proses pengujian yang masih ngasal. Kita sering menguji RAG cuma pakai metode "pakai perasaan" atau vibes-based evaluation: mengetik lima sampai sepuluh pertanyaan acak di interface chat, melihat jawabannya kelihatan masuk akal, lalu buru-buru mengklaim sistem sudah siap rilis. Pendekatan seperti ini sangat berbahaya. Ketika basis data membengkak jadi ribuan dokumen atau saat kita mengotak-atik parameter retriever, kita tidak pernah benar-benar tahu apakah kualitas jawaban AI makin pintar atau justru makin ngaco.

Dilemma Cloud API vs Evaluasi Offline

Untuk menguji RAG secara otomatis, metode yang standar digunakan industri saat ini adalah LLM-as-a-Judgeβ€”menggunakan model AI yang lebih pintar untuk menilai kualitas jawaban model RAG kita. Pilihan paling gampang biasanya langsung memanggil API cloud premium seperti OpenAI GPT-4.

Namun, buat tim yang menangani data sensitif perusahaan, langkah ini langsung menabrak tembok besar. Membuka dokumen internal confidential ke cloud API vendor luar bisa memicu masalah privasi data yang serius. Belum lagi urusan biaya API yang bisa membengkak drastis kalau kita running pengujian ribuan sampel pertanyaan secara berkala.

Kita butuh solusi pengujian otomatis yang berjalan 100% offline di infrastruktur lokal. Kombinasi framework Ragas Python dan runtime Ollama menjadi jawaban paling pas. Kita bisa mendeteksi halusinasi secara mandiri, akurat, gratis, dan tanpa ada satu byte pun data sensitif perusahaan yang bocor keluar dari jaringan lokal.

Setup Environment: Ragas + Ollama 100% Offline

Sebelum menulis skrip Python, pastikan runtime Ollama sudah terpasang dan berjalan di komputer atau server Anda. Di tutorial ini, kita akan memakai dua model lokal: satu model LLM sebagai juri penilai, dan satu model embedding untuk memproses vektor teks.

Buka terminal dan jalankan dua perintah berikut untuk mengunduh model yang dibutuhkan:

ollama pull llama3.1:8b
ollama pull nomic-embed-text

Model llama3.1:8b punya kemampuan penalaran dan evaluasi yang sangat baik untuk ukuran model 8 billion parameter, sedangkan nomic-embed-text sangat efisien untuk urusan pemrosesan vektor dokumen. Setelah kedua model siap, pasang pustaka Python yang diperlukan lewat terminal:

pip install ragas langchain-community datasets pandas

Setelah proses instalasi selesai, buat skrip Python baru dengan nama eval_rag.py. Langkah pertamanya adalah menghubungkan Ragas ke runtime Ollama lokal memanfaatkan wrapper dari LangChain:

from langchain_community.chat_models import ChatOllama
from langchain_community.embeddings import OllamaEmbeddings
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper

# Inisialisasi LLM Hakim dari Ollama
eval_llm = ChatOllama(model="llama3.1:8b", temperature=0)

# Inisialisasi Model Embedding Lokal
eval_embeddings = OllamaEmbeddings(model="nomic-embed-text")

# Bungkus agar kompatibel penuh dengan Ragas
ragas_llm = LangchainLLMWrapper(eval_llm)
ragas_embeddings = LangchainEmbeddingsWrapper(eval_embeddings)

Pengesetan nilai temperature=0 pada model hakim wajib dilakukan. Ini memastikan LLM juri memberikan hasil penilaian yang deterministik dan konsisten saat pengujian diulang-ulang di kemudian hari.

Membedah Tiga Metrik Evaluasi Utama Ragas

Framework Ragas menyediakan cara objektif untuk menguji dua komponen utama pipeline RAG: komponen retriever (pencari dokumen) dan komponen generator (pembuat jawaban). Kita fokus pada tiga metrik paling vital berikut:

  • Faithfulness: Mengukur apakah jawaban LLM murni dibuat berdasarkan konteks dokumen yang ditarik retriever. Ini adalah metrik paling ampuh untuk mendeteksi halusinasi. Kalau LLM menambah-nambahi fakta sendiri di luar dokumen, skor metrik ini pasti anjlok.
  • Context Precision: Mengukur kualitas pencarian retriever. Apakah potongan dokumen (chunks) yang paling relevan berhasil ditempatkan di posisi paling atas pada daftar pencarian? Analoginya seperti mesin pencari: kalau informasi yang kita cari ada di halaman pertama, presisinya tinggi.
  • Answer Relevance: Mengukur seberapa fokus dan tepat jawaban LLM dalam merespons pertanyaan pengguna, tanpa memperhitungkan faktor kebenaran fakta dasar (kebetulan fakta diuji terpisah di Faithfulness).

Mari kita buat sampel dataset pengujian sederhana yang berisi pertanyaan (question), dokumen yang berhasil ditarik oleh retriever (contexts), dan jawaban akhir yang dikeluarkan oleh bot RAG Anda (answer):

from datasets import Dataset
from ragas import evaluate
from ragas.metrics import faithfulness, context_precision, answer_relevance

# Dataset sampel eksekusi RAG
data_sample = {
    "question": [
        "Berapa batas maksimal klaim kacamata karyawan?",
        "Bagaimana prosedur pengajuan cuti melahirkan?"
    ],
    "contexts": [
        ["Karyawan berhak mendapatkan penggantian biaya kacamata maksimal Rp 2.000.000 per tahun sesuai ketentuan HR."],
        ["Cuti melahirkan diajukan minimal 2 minggu sebelum tanggal perkiraan lahir melalui portal HRIS."]
    ],
    "answer": [
        "Batas maksimal klaim kacamata adalah Rp 2.000.000 setiap tahunnya.",
        "Pengajuan cuti melahirkan dilakukan lewat portal HRIS dan Anda juga mendapat tunjangan ekstra Rp 5.000.000."
    ]
}

dataset = Dataset.from_dict(data_sample)

Coba perhatikan baris kedua pada sampel dataset di atas. Dokumen asli di kolom contexts sama sekali tidak pernah menyebutkan angka tunjangan ekstra Rp 5.000.000. Namun, bot RAG asal menjiplak imajinasi dan memasukkan klaim tersebut pada kolom answer. Ini contoh konkret halusinasi berbahaya.

Praktik Kuantifikasi & Deteksi Halusinasi

Langkah berikutnya, kita pasangkan model Ollama lokal ke tiap metrik Ragas, lalu jalankan proses evaluasi otomatis:

# Tetapkan LLM dan Embeddings lokal ke setiap metrik
metrics = [faithfulness, context_precision, answer_relevance]

for metric in metrics:
    metric.llm = ragas_llm
    if hasattr(metric, 'embeddings'):
        metric.embeddings = ragas_embeddings

# Jalankan evaluasi offline
results = evaluate(
    dataset=dataset,
    metrics=metrics
)

# Tampilkan hasil evaluasi dalam tabel Pandas
df_results = results.to_pandas()
print(df_results[['question', 'faithfulness', 'context_precision', 'answer_relevance']])

Saat skrip ini dieksekusi, Ragas bekerja di balik layar dengan cara memecah kalimat jawaban menjadi klaim-klaim fakta terpisah (atomic statements). Selanjutnya, Ragas menyuruh model llama3.1:8b mencocokkan setiap klaim fakta tadi dengan dokumen asli di kolom contexts.

Pada sampel pertanyaan kedua, nilai skor Faithfulness akan jatuh drastis mendekati nilai 0. Hal ini terjadi karena klaim "tunjangan ekstra Rp 5.000.000" tidak bisa dibuktikan keberadaannya di dalam dokumen referensi.

Membangun Workflow Continuous RAG Evaluation (CI/CD)

Pengujian RAG tidak boleh cuma jadi ajang seremonial sekali jalan sewaktu awal proyek. Evaluasi ini harus dimasukkan ke dalam alur pengujian rutin software (CI/CD) mirip seperti unit testing pada kode program biasa.

Langkah praktis untuk menerapkannya di tim Anda:

  1. Simpan 30-50 sampel pertanyaan standar beserta dokumen kunci di repositori kode proyek Anda.
  2. Tiap kali ada perubahan pada konfigurasi ukuran chunking, pergantian model embedding, atau modifikasi prompt template, jalankan skrip evaluasi Ragas secara otomatis.
  3. Pasang ambang batas (threshold) kualitas. Contohnya, jika nilai rata-rata Faithfulness turun di bawah angka 0.85, otomatis gagalkan proses deployment aplikasi ke server production.

Dengan mengotomatiskan evaluasi RAG 100% offline memakai Ragas dan Ollama, Anda punya kendali penuh atas kualitas respons AI tanpa perlu was-was data kantor bocor atau kantong jebol akibat tagihan API cloud.

Langkah selanjutnya: Install Ollama di laptop Anda sekarang, ambil 20 riwayat percakapan asli bot RAG Anda, lalu jalankan skrip di atas. Ketahui skor pasti halusinasi AI Anda sebelum pengguna atau atasan Anda menemukan kesalahan tersebut di production.

A
Aizu Dev

Tim penulis AizuDemy yang menyajikan tutorial teknologi, cloud, dan pengembangan perangkat lunak dalam Bahasa Indonesia.

πŸ’¬ Komentar (0)

Tulis Komentar

πŸ“– Artikel Terkait