Belajar Generative AI - Evaluasi LLM & LLMOps
Episode 15 of 25

Belajar Generative AI - Evaluasi LLM & LLMOps

Mengukur kualitas aplikasi LLM secara sistematis: groundedness, faithfulness, dan deteksi hallucination; LLM-as-judge dengan RAGAS, DeepEval, dan LangSmith; serta praktik LLMOps — prompt versioning, dataset evaluation, dan regression testing.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Sejak episode 4 kalian diperkenalkan dengan golden set dan LLM-as-judge. Sekarang saatnya menjadikannya disiplin engineering penuh. Episode ini menjawab pertanyaan yang selalu datang di produksi: bagaimana tahu aplikasi AI kita membaik atau memburuk? Tanpa jawaban terukur, setiap perubahan prompt, model, atau arsitektur RAG adalah judi.

Mengapa penting? Karena aplikasi LLM adalah satu-satunya jenis perangkat lunak yang outputnya non-deterministik dan tidak bisa di-assert begitu saja. Kamu tidak bisa menulis assert answer == "...". Evaluasi sistematis — metrik, dataset, dan regression — adalah fondasi yang membedakan "demo yang mengesankan" dari "produk yang bisa dipelihara".

Metrik Kualitas: Groundedness, Faithfulness, Hallucination

Tiga istilah yang sering tertukar, padahal maknanya berbeda:

MetrikMenjawabDiukur Dengan
FaithfulnessApakah jawaban setia pada konteks yang diberikan?Klaim di jawaban vs konteks
GroundednessApakah jawaban berakar pada fakta/sumber?Jawaban vs sumber retrieval
HallucinationApakah ada konten yang tidak didukung apa pun?Jawaban vs konteks + pengetahuan

Praktisnya: faithfulness rendah = model menambahkan klaim tanpa sumber — ini pengukur hallucination utama di aplikasi RAG. Sementara answer relevance mengukur apakah jawaban menjawab pertanyaan.

Deteksi hallucination sederhana
def hallucination_score(answer, context):
    judge = client.chat.completions.create(
        model="gpt-4o-mini",
        response_format={"type": "json_object"},
        messages=[{"role": "system",
                   "content": "Identifikasi klaim dalam jawaban yang TIDAK "
                              "didukung konteks. Output JSON: "
                              "{unsupported: [klaim], score: 0-100}"},
                  {"role": "user",
                   "content": f"Konteks:\n{context}\n\nJawaban:\n{answer}"}],
    )
    return json.loads(judge.choices[0].message.content)

Skor hallucination di atas dihitung per-jawaban; untuk mengukur seluruh sistem, jalankan di atas evaluation dataset.

Evaluation Dataset: Golden Set yang Lebih Serius

Di episode 4 kita punya golden set kecil. Untuk produksi, dataset evaluasi punya struktur lebih kaya — untuk RAG, butuh pasangan (question, context, expected) agar bisa mengukur retrieval dan jawaban.

Dataset evaluasi RAG
[
  {
    "question": "Berapa SLA uptime layanan premium?",
    "context": "Layanan premium menjamin uptime 99.9%.",
    "expected_answer": "99.9%",
    "expected_sources": ["harga-premium.md"]
  },
  {
    "question": "Bagaimana cara mengganti paket?",
    "context": "Ganti paket melalui dashboard, aktif di akhir siklus.",
    "expected_answer": "Lewat dashboard, aktif di akhir siklus",
    "expected_sources": ["faq-akun.md"]
  }
]

Aturan penting: dataset ini di-review manusia, ukurannya 50-200 contoh untuk mulai, dan harus mencerminkan pertanyaan nyata pengguna — bukan pertanyaan yang mudah.

Framework Evaluasi: RAGAS, DeepEval, LangSmith

Tiga tool yang wajib dipetakan:

  • RAGAS (open-source): metrik RAG siap pakai — faithfulness, answer relevancy, context precision/recall. Tanpa label manusia (menggunakan LLM judge).
  • DeepEval (open-source): framework testing LLM dengan metrik & dataset; bisa masuk ke pytest.
  • LangSmith (managed, terkait LangChain): tracing + evaluasi + dataset + prompt registry dalam satu platform.

Praktik dengan RAGAS:

Evaluasi RAG dengan RAGAS
from ragas import EvaluationDataset, SingleTurnSample
from ragas.metrics import Faithfulness, AnswerRelevancy, ContextPrecision
from ragas.llms import LangchainLLMWrapper
 
samples = [
    SingleTurnSample(
        user_input="Berapa SLA uptime layanan premium?",
        retrieved_contexts=["Layanan premium menjamin uptime 99.9%."],
        response="Uptime premium dijamin 99.9%.",
        reference="99.9%",
    ),
]
 
dataset = EvaluationDataset(samples=samples)
metrics = [Faithfulness(), AnswerRelevancy(), ContextPrecision()]
 
result = evaluate(dataset=dataset, metrics=metrics)
print(result.to_pandas())   # satu baris per sample + skor per metrik

Output faithfulness: 1.0, answer_relevancy: 0.9x, context_precision: 1.0 memberi angka yang bisa dilacak dari versi ke versi.

Tip

LLM judge punya bias — model besar cenderung menilai outputnya sendiri terlalu tinggi. Selalu validasi judge terhadap sejumlah sampel yang dinilai manusia (misal 20-30). Kalau skor judge dan manusia tidak korelasinya baik, perbaiki prompt judge dulu sebelum percaya angkanya.

LLMOps: Workflow Evaluasi yang Berkelanjutan

Evaluasi sekali jalan tidak cukup — aplikasi AI butuh pipeline LLMOps. Tiga komponennya:

1. Prompt Versioning

Setiap prompt adalah kode; versi-kan dan simpan perubahannya. Simpan konfigurasi prompt di file terpusat:

Registry prompt versioned
summarizer_v3:
  model: gpt-4o-mini
  system: |
    Ringkas menjadi 3 poin. Gunakan bahasa Indonesia.
    Output markdown bullet.
  temperature: 0.3
summarizer_v4:
  model: gpt-4o-mini
  system: |
    Ringkas menjadi 3 poin + 1 saran aksi. Bahasa Indonesia.
    Output markdown bullet.
  temperature: 0.2

2. Dataset Evaluation di CI

Jalankan evaluasi otomatis setiap ada perubahan prompt/model — seperti unit test. Dengan DeepEval, ini bisa menjadi test suite:

Evaluasi sebagai test (DeepEval)
from deepeval import assert_test
from deepeval.metrics import FaithfulnessMetric
from deepeval.test_case import LLMTestCase
 
def test_rag_faithfulness():
    test_case = LLMTestCase(
        input="Berapa SLA premium?",
        actual_output=run_rag("Berapa SLA premium?"),
        retrieval_context=["Layanan premium menjamin uptime 99.9%."],
    )
    assert_test(test_case, [FaithfulnessMetric(threshold=0.8)])

Perubahan prompt yang menurunkan faithfulness di bawah 0.8 akan menggagalkan CI — perlindungan yang sama seperti regression test konvensional.

3. Regression Testing & Monitoring Drift

Gabungkan dengan produksi:

  • Online evaluation: sampel traffic produksi dievaluasi terus-menerus (misal 1-5% request) untuk mendeteksi drift kualitas.
  • Golden regression: saat mengganti model/prompt, jalankan dataset lama → bandingkan skor → rollback jika turun.
  • Feedback loop: sinyal pengguna (upvote/downvote, "jawaban salah") menjadi sumber label untuk dataset berikutnya.
100%

Common Pitfalls

  • Metrik dihitung tanpa dataset representatif — angka bagus di pertanyaan mudah tidak berarti apa-apa.
  • Judge tanpa validasi manusia — skor melenceng sistematis.
  • Evaluasi hanya jawaban, tanpa retrieval — RAG bisa gagal total di retrieval tapi terlihat baik di jawaban.
  • Tidak ada baseline versi — tidak tahu apakah perubahan membantu; selalu simpan skor per versi.

Penutup

Inti yang harus dibawa pulang:

  • Metrik kunci: faithfulness, groundedness, answer relevance — pengukur hallucination utama.
  • Dataset evaluasi di-review manusia, kecil namun representatif.
  • Framework: RAGAS (metrik), DeepEval (testing), LangSmith (tracing+registry).
  • LLMOps = prompt versioning + CI evaluation + regression/drift monitoring.

Di episode 16 selanjutnya kita akan membahas AI Security (OWASP GenAI) — OWASP GenAI LLM Top 10 2026 & OWASP Agentic Top 10 2026 (prompt injection, excessive agency, data exfiltration), plus guardrails, red teaming, dan sandbox tools/agent. Sampai jumpa di episode 16!

Belajar Generative AI - Evaluasi LLM & LLMOps | Belajar Generative AI