0Pricing
AI Engineering Academy · Pelajaran

Mengapa Evaluasi Penting dalam RAG

Pahami dua mode kegagalan yang terpisah dalam sistem RAG: kegagalan pengambilan dan kegagalan pembuatan, serta pelajari alasan Anda memerlukan metrik terpisah untuk mendiagnosis masing-masing kegagalan.

Mengapa Evaluasi Penting dalam RAG adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Engineering Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Anda Tidak Dapat Meningkatkan Hal yang Tidak Anda Ukur

Sistem RAG dapat terasa berfungsi karena menghasilkan jawaban yang lancar dan terdengar masuk akal. Namun, tanpa pengukuran, Anda tidak tahu apakah sistem tersebut benar-benar mengambil potongan yang tepat atau menghasilkan jawaban yang setia pada sumber. Tim yang melewatkan evaluasi sering menghabiskan waktu berbulan-bulan mengubah strategi pemotongan dan format prompt berdasarkan intuisi, hanya untuk menyadari bahwa hasilnya justru memburuk. Evaluasi yang ketat mengubah pengembangan RAG dari tebak-tebakan menjadi rekayasa.

Dua Mode Kegagalan yang Independen

RAG memiliki dua tahap berbeda yang dapat gagal secara independen: pengambilan dan pembuatan. Pengambilan gagal ketika potongan yang relevan tidak berada dalam hasil K teratas — LLM tidak dapat menghasilkan jawaban yang baik jika informasi yang tepat tidak pernah diambil. Pembuatan gagal ketika potongan yang benar telah diambil, tetapi LLM mengabaikannya, salah membacanya, atau menambahkan informasi yang dihalusinasikan. Anda memerlukan metrik terpisah untuk setiap tahap agar dapat menentukan komponen mana yang menyebabkan masalah.

Bahaya Hanya Mengevaluasi dari Awal hingga Akhir

Mengukur hanya kualitas jawaban akhir menyembunyikan sumber kegagalan. Misalnya, sistem Anda memberikan jawaban yang salah 30% dari waktu. Apakah penyebabnya pengambilan tidak menemukan potongan yang tepat, atau LLM mengabaikan potongan yang baik? Jika Anda hanya mengetahui tingkat kesalahan akhir, Anda tidak dapat mengetahui komponen mana yang harus diperbaiki. Lengkapi kedua tahap dengan instrumentasi secara terpisah: ukur kualitas pengambilan menggunakan set data acuan dan kualitas pembuatan menggunakan skor kesetiaan.

# Diagnosis example: which stage is failing?

# Test 1: Is retrieval finding the right chunks?
retrieval_hit_rate = evaluate_retrieval(questions, ground_truth_chunks)
print(f'Retrieval hit rate@5: {retrieval_hit_rate:.1%}')
# If this is low (< 80%), fix chunking and embedding first

# Test 2: Given perfect context, does LLM generate correct answers?
generation_faithfulness = evaluate_generation(questions, perfect_context)
print(f'Generation faithfulness: {generation_faithfulness:.1%}')
# If retrieval is fine but this is low, fix your prompts

Membangun Set Data Acuan

Evaluasi memerlukan set data acuan: sekumpulan pasangan pertanyaan-jawaban yang jawaban benarnya Anda ketahui dan, idealnya, dokumen serta potongan asal jawaban tersebut. Untuk set evaluasi minimum yang layak digunakan, kumpulkan 50–100 pertanyaan yang mewakili kueri pengguna nyata. Jawab pertanyaan tersebut secara manual atau dengan membaca dokumen sumber. Sertakan beragam tipe pertanyaan: pencarian fakta, perbandingan, penalaran multi-langkah, serta pertanyaan di luar ranah yang seharusnya ditolak oleh sistem.

# Golden dataset format
golden_dataset = [
    {
        'question': 'How many vacation days do employees receive in their first year?',
        'answer': '15 days',
        'relevant_chunks': ['employee_handbook_p24', 'benefits_summary_p3'],
        'source_doc': 'employee_handbook_2025.pdf'
    },
    {
        'question': 'What is the parental leave duration for primary caregivers?',
        'answer': '16 weeks fully paid',
        'relevant_chunks': ['parental_leave_policy_p1'],
        'source_doc': 'parental_leave_policy.pdf'
    }
]

Membuat Dataset Emas dengan LLM

Membuat 100 pertanyaan secara manual itu melelahkan. Percepat proses ini dengan LLM pembuat data: berikan setiap bagian dokumen kepada GPT-4o dan minta model tersebut membuat 3–5 pertanyaan beragam yang jawabannya dapat ditemukan dalam bagian itu, beserta teks jawaban yang diharapkan. Tinjau sampel secara manual untuk menemukan masalah kualitas. Pendekatan ini dapat dengan cepat menangani ribuan pertanyaan, meskipun mungkin melewatkan kasus khusus yang hanya akan ditanyakan oleh pengguna nyata.

def generate_qa_pairs_for_chunk(chunk_text, llm_client):
    prompt = (
        'Given the following document excerpt, generate 3 diverse questions '
        'that can be answered using ONLY this text. '
        'For each question, provide the exact answer from the text.\n\n'
        f'Text:\n{chunk_text}\n\n'
        'Format each as JSON: {"question": ..., "answer": ...}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Evaluasi Pengambilan: Rasio Keberhasilan

hit rate@K adalah proporsi pertanyaan yang memiliki setidaknya satu bagian yang relevan di antara hasil pengambilan teratas sebanyak K. Ini adalah metrik pengambilan yang paling sederhana dan intuitif. Nilai hit rate@5 sebesar 85% berarti bahwa untuk 85 dari 100 pertanyaan, bagian yang relevan berada di antara 5 hasil teratas. Lacak hit rate secara terpisah untuk berbagai jenis dokumen, panjang kueri, dan kategori topik guna menemukan bagian yang paling menyulitkan bagi pengambil Anda.

def compute_hit_rate(golden_dataset, retriever, top_k=5):
    hits = 0
    for item in golden_dataset:
        results = retriever.retrieve(item['question'], top_k=top_k)
        retrieved_ids = {r['id'] for r in results}
        relevant_ids = set(item['relevant_chunks'])
        if retrieved_ids & relevant_ids:  # intersection not empty
            hits += 1
    hit_rate = hits / len(golden_dataset)
    print(f'Hit rate@{top_k}: {hit_rate:.1%} ({hits}/{len(golden_dataset)})')
    return hit_rate

Evaluasi Pembuatan: Kesetiaan

Kesetiaan mengukur apakah jawaban yang dibuat hanya berisi informasi yang dapat diverifikasi dalam konteks yang diambil. Jawaban yang tidak setia menambahkan fakta yang tidak didukung oleh konteks—itulah halusinasi. Nilai kesetiaan diperoleh dengan meminta LLM penilai (atau evaluator manusia) memeriksa setiap kalimat dalam jawaban terhadap konteks dan menandai klaim apa pun yang tidak didukung oleh bagian yang diambil. Sasaran untuk sistem produksi adalah skor kesetiaan minimal 95%.

def evaluate_faithfulness(answer, context, llm_client):
    prompt = (
        'Given this context and answer, evaluate faithfulness.\n\n'
        f'Context: {context}\n\n'
        f'Answer: {answer}\n\n'
        'For each sentence in the answer, determine if it is '
        'supported by the context (FAITHFUL) or not (HALLUCINATED). '
        'Return a JSON: {"score": 0.0-1.0, "issues": ["sentence..."]}.'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Evaluasi Pembuatan: Relevansi Jawaban

Relevansi jawaban mengukur apakah jawaban yang dibuat benar-benar menjawab pertanyaan pengguna. Jawaban yang sangat setia tetap dapat melenceng karena menjawab pertanyaan yang berkaitan tetapi berbeda. Ukur relevansi secara terpisah dari kesetiaan. Gunakan LLM penilai untuk menilai apakah jawaban secara langsung menjawab hal yang ditanyakan, dengan skala 1–5. Relevansi jawaban yang rendah sering menunjukkan masalah pada struktur perintah atau konteks yang diambil tidak benar-benar memuat jawabannya.

def evaluate_answer_relevance(question, answer, llm_client):
    prompt = (
        f'Question: {question}\n\n'
        f'Answer: {answer}\n\n'
        'Rate how well this answer addresses the question on a 1-5 scale:\n'
        '5 = fully answers the question\n'
        '3 = partially answers but misses key aspects\n'
        '1 = does not address the question at all\n\n'
        'Return JSON: {"score": 1-5, "reason": "brief explanation"}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Melacak Metrik dari Waktu ke Waktu

Evaluasi paling bermanfaat jika Anda melacak metrik seiring waktu ketika melakukan perubahan. Simpan hasil evaluasi dalam basis data atau lembar kerja, lengkap dengan stempel waktu dan label versi (misalnya, chunk_size=500, embed=3-small, k=5). Saat mencoba strategi pembagian bagian atau model penyematan baru, jalankan evaluasi yang sama lalu bandingkan hasilnya. Hal ini mencegah regresi—Anda mungkin meningkatkan kesetiaan, tetapi tanpa sengaja menurunkan hit rate. Selalu jalankan evaluasi lengkap sebelum menggabungkan perubahan ke produksi.

import json
from datetime import datetime

def save_evaluation_results(metrics, config, output_file='eval_history.jsonl'):
    record = {
        'timestamp': datetime.utcnow().isoformat(),
        'config': config,
        'metrics': metrics
    }
    with open(output_file, 'a') as f:
        f.write(json.dumps(record) + '\n')
    print(f'Saved eval result: hit_rate={metrics["hit_rate"]:.1%}, '
          f'faithfulness={metrics["faithfulness"]:.1%}')

Pola Pikir Evaluasi

Selain metrik tertentu, evaluasi memerlukan perubahan pola pikir: perlakukan RAG sebagai sistem pembelajaran mesin dengan kinerja yang dapat diukur, bukan chatbot yang dinilai secara subjektif dengan mengobrol dengannya. Tetapkan kriteria keberhasilan sejak awal (misalnya, hit rate@5 > 85%, faithfulness > 95%). Buat set pengujian yang tetap dibekukan dan tidak pernah digunakan untuk mengambil keputusan pengembangan. Sediakan set pengembangan terpisah untuk iterasi. Disiplin ini membedakan tim yang merilis RAG andal dari tim yang merilis demo mengesankan tetapi gagal dalam produksi.

Set Pengujian vs Set Pengembangan

Disiplin penting dalam pembelajaran mesin yang juga berlaku untuk evaluasi RAG adalah pemisahan train-dev-test. Set pengujian Anda harus benar-benar dibekukan—jangan pernah digunakan untuk mengambil keputusan pengembangan. Gunakan set pengembangan terpisah untuk bereksperimen dengan strategi pembagian bagian, perubahan perintah, dan model penyematan. Jalankan set pengujian hanya ketika Anda yakin bahwa suatu perubahan siap untuk produksi. Pemisahan ini mencegah penyesuaian berlebihan pada pipeline RAG terhadap set pengujian dan memastikan metrik akhir yang dilaporkan mencerminkan generalisasi yang sesungguhnya.

import json
from sklearn.model_selection import train_test_split

def split_golden_dataset(all_questions, test_ratio=0.3, seed=42):
    dev_set, test_set = train_test_split(
        all_questions,
        test_size=test_ratio,
        random_state=seed
    )
    print(f'Dev set: {len(dev_set)} questions')
    print(f'Test set: {len(test_set)} questions (FROZEN)')
    with open('eval/dev_set.json', 'w') as f:
        json.dump(dev_set, f, indent=2)
    with open('eval/test_set.json', 'w') as f:
        json.dump(test_set, f, indent=2)
    return dev_set, test_set

Pemeriksaan Singkat

Uji pemahaman Anda tentang konsep Rekayasa AI dari pelajaran ini.

Rangkuman Pelajaran

Dalam pelajaran ini, Anda mempelajari: dua mode kegagalan yang berdiri sendiri pada pengambilan dan pembuatan yang memerlukan metrik terpisah, cara membuat dataset emas yang terdiri dari pasangan pertanyaan-jawaban-bagian untuk evaluasi objektif, hit rate sebagai metrik utama pengambilan serta kesetiaan dan relevansi jawaban sebagai metrik utama pembuatan, dan pentingnya melacak metrik dari waktu ke waktu untuk mencegah regresi. Selanjutnya, kita akan menerapkan metrik pengambilan tertentu, termasuk MRR dan NDCG.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengapa Evaluasi Penting dalam RAG” gratis?

Ya — teks lengkap “Mengapa Evaluasi Penting dalam RAG” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Engineering Academy, upgrade ke CoddyKit PRO. Kursus AI Engineering Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengapa Evaluasi Penting dalam RAG”?

Pahami dua mode kegagalan yang terpisah dalam sistem RAG: kegagalan pengambilan dan kegagalan pembuatan, serta pelajari alasan Anda memerlukan metrik terpisah untuk mendiagnosis masing-masing kegagal… Kamu berlatih AI Engineering Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Engineering Academy?

Tidak diperlukan pengalaman sebelumnya. AI Engineering Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Mengapa Evaluasi Penting dalam RAG” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Engineering Academy ini?

Ya. Setiap pelajaran AI Engineering Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa Evaluasi Penting dalam RAG
  2. Metrik Pengambilan: Hit Rate, MRR, dan NDCG
  3. Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban
  4. Membangun Sistem Evaluasi Otomatis
← Kembali ke AI Engineering Academy