Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban
Gunakan RAGAS untuk mengukur apakah jawaban yang dihasilkan setia pada konteks yang diambil dan benar-benar menjawab pertanyaan pengguna tanpa berhalusinasi.
Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban adalah pelajaran AI Engineering Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Mengukur Tahap Pembuatan
Bahkan ketika pengambil Anda menemukan bagian yang sempurna, tahap pembuatan masih dapat gagal. LLM mungkin mengabaikan konteks yang diambil dan menjawab berdasarkan memori parametrisnya, salah menafsirkan isi konteks, atau menjawab pertanyaan yang sedikit berbeda dari yang diajukan. Metrik pembuatan mengukur kegagalan ini secara terpisah dari pengambilan sehingga Anda dapat menemukan dan memperbaiki setiap masalah. Dua metrik pembuatan utama adalah kesetiaan dan relevansi jawaban.
Kesetiaan: Definisi
Kesetiaan mengukur apakah setiap klaim dalam jawaban yang dibuat dapat ditelusuri langsung ke konteks yang diambil. Jawaban yang setia tidak memperkenalkan informasi yang tidak ada dalam konteks. Kesetiaan diukur pada tingkat klaim: jawaban diuraikan menjadi pernyataan atomik individual, lalu setiap pernyataan diperiksa terhadap konteks untuk memastikan dukungannya. Skor kesetiaan adalah proporsi klaim yang didukung.
# Faithfulness = supported_claims / total_claims
example_answer = (
'Employees receive 15 vacation days per year. '
'Remote work is allowed on Wednesdays and Fridays. '
'The CEO is John Smith.'
)
example_context = (
'15 vacation days are granted annually. '
'Remote work is permitted on Wednesdays and Fridays.'
)
# Claim 1: 15 vacation days — SUPPORTED
# Claim 2: Remote work Wed+Fri — SUPPORTED
# Claim 3: CEO is John Smith — NOT IN CONTEXT (hallucinated)
# Faithfulness = 2/3 = 0.67Menerapkan Kesetiaan dengan LLM sebagai Penilai
Cara paling praktis untuk mengukur kesetiaan dalam skala besar adalah menggunakan LLM yang andal sebagai penilai. Berikan perintah kepada LLM penilai untuk menguraikan jawaban menjadi klaim individual, lalu periksa setiap klaim terhadap konteks. Penilai mengembalikan daftar klaim yang diberi label SUPPORTED atau UNSUPPORTED, lalu Anda menghitung proporsi klaim yang didukung. Pendekatan ini dapat menangani ribuan evaluasi per jam dengan biaya beberapa sen per evaluasi.
import json
def evaluate_faithfulness(answer, context, llm_client):
prompt = (
'Task: Evaluate the faithfulness of an answer against a context.\n\n'
f'Context:\n{context}\n\n'
f'Answer:\n{answer}\n\n'
'Steps:\n'
'1. Break the answer into individual atomic claims.\n'
'2. For each claim, check if it is supported by the context.\n'
'3. Return JSON: {"claims": [{"text": "...", "supported": true/false}], "score": 0.0-1.0}'
)
response = llm_client.chat.completions.create(
model='gpt-4o',
response_format={'type': 'json_object'},
messages=[{'role': 'user', 'content': prompt}]
)
return json.loads(response.choices[0].message.content)Relevansi Jawaban: Definisi
Relevansi jawaban mengukur apakah jawaban yang dihasilkan benar-benar menjawab pertanyaan pengguna. Jawaban yang sangat setia pada konteks tetap mungkin meleset dari inti pertanyaan — misalnya, jika pengguna bertanya, 'Bagaimana cara mengatur ulang kata sandi saya?' tetapi jawaban menjelaskan kebijakan keamanan umum perusahaan secara terperinci tanpa menyebutkan prosedur pengaturan ulang kata sandi. Relevansi jawaban tidak bergantung pada kesetiaan: Anda dapat memberikan jawaban yang setia (hanya menyampaikan hal-hal yang ada dalam konteks), tetapi tidak relevan (tidak menjawab hal yang ditanyakan).
Mengukur Relevansi Jawaban
RAGAS mengukur relevansi jawaban menggunakan teknik pembuatan balik yang cerdas: LLM penilai menghasilkan beberapa pertanyaan hipotetis yang jawabannya adalah respons yang dihasilkan, lalu mengukur kemiripan pertanyaan-pertanyaan yang dihasilkan tersebut dengan pertanyaan asli menggunakan kemiripan kosinus pada embedding. Kemiripan yang tinggi antara pertanyaan hipotetis yang dihasilkan dan pertanyaan asli menunjukkan relevansi jawaban yang tinggi.
def evaluate_answer_relevance(question, answer, llm_client, embed_fn):
# Generate hypothetical questions for this answer
prompt = (
f'Given this answer: "{answer}"\n\n'
'Generate 3 questions that this answer would be a good response to.\n'
'Return as JSON: {"questions": ["...", "...", "..."]}'
)
response = llm_client.chat.completions.create(
model='gpt-4o-mini',
response_format={'type': 'json_object'},
messages=[{'role': 'user', 'content': prompt}]
)
hyp_questions = json.loads(response.choices[0].message.content)['questions']
# Measure similarity to original question
orig_embedding = embed_fn(question)
hyp_embeddings = [embed_fn(q) for q in hyp_questions]
similarities = [cosine_similarity(orig_embedding, e) for e in hyp_embeddings]
return sum(similarities) / len(similarities)Perolehan Konteks: Apakah Kita Mengambil Cukup Banyak?
Perolehan konteks mengukur apakah konteks yang diambil berisi informasi yang cukup untuk menjawab pertanyaan dengan benar. Pengukuran ini memeriksa jawaban acuan kalimat demi kalimat: apakah setiap kalimat dapat dikaitkan dengan salah satu potongan yang diambil? Perolehan konteks yang tinggi berarti pengambil menemukan semua hal yang diperlukan. Perolehan konteks yang rendah berarti informasi penting tidak ada dalam potongan yang diambil, sehingga LLM tidak mungkin menjawab dengan benar, bahkan dengan pembuatan yang sempurna.
def evaluate_context_recall(ground_truth_answer, retrieved_contexts, llm_client):
prompt = (
f'Ground truth answer:\n{ground_truth_answer}\n\n'
f'Retrieved context:\n{",".join(retrieved_contexts)}\n\n'
'For each sentence in the ground truth answer, determine if it '
'can be attributed to the retrieved context.\n'
'Return JSON: {"sentences": [{"text": "...", "in_context": true/false}], "recall": 0.0-1.0}'
)
response = llm_client.chat.completions.create(
model='gpt-4o',
response_format={'type': 'json_object'},
messages=[{'role': 'user', 'content': prompt}]
)
return json.loads(response.choices[0].message.content)Presisi Konteks: Apakah Potongan yang Diambil Relevan?
Presisi konteks mengukur apakah potongan yang diambil benar-benar berguna untuk menjawab pertanyaan. Presisi konteks yang tinggi berarti potongan yang diambil sangat relevan. Presisi konteks yang rendah berarti banyak potongan yang diambil merupakan gangguan di luar topik yang harus dibaca dan disisihkan oleh LLM, sehingga meningkatkan risiko kebingungan. Presisi konteks diukur dengan memeriksa potongan yang diambil mana yang benar-benar digunakan atau dirujuk dalam jawaban yang dihasilkan.
def evaluate_context_precision(question, answer, retrieved_contexts, llm_client):
precision_scores = []
for i, context in enumerate(retrieved_contexts, 1):
prompt = (
f'Question: {question}\n\n'
f'Context chunk {i}: {context}\n\n'
f'Answer: {answer}\n\n'
'Was this context chunk useful in generating the answer? '
'Return JSON: {"useful": true/false, "reason": "..."}'
)
response = llm_client.chat.completions.create(
model='gpt-4o-mini',
response_format={'type': 'json_object'},
messages=[{'role': 'user', 'content': prompt}]
)
result = json.loads(response.choices[0].message.content)
precision_scores.append(1.0 if result['useful'] else 0.0)
return sum(precision_scores) / len(precision_scores)Menggunakan RAGAS untuk Semua Metrik Sekaligus
Perpustakaan RAGAS menerapkan keempat metrik inti RAG — presisi konteks, perolehan konteks, kesetiaan, dan relevansi jawaban — dalam satu kerangka kerja. Perpustakaan ini menangani pemanggilan LLM penilai secara internal. Berikan set data yang berisi pertanyaan, jawaban yang dihasilkan, konteks yang diambil, dan jawaban acuan, lalu dapatkan laporan skor yang komprehensif. RAGAS juga mendukung evaluasi asinkron sehingga Anda dapat mengevaluasi ratusan contoh secara paralel.
from ragas import evaluate
from ragas.metrics import (
faithfulness, answer_relevancy,
context_precision, context_recall
)
from datasets import Dataset
# Build evaluation dataset
eval_samples = [
{
'question': item['question'],
'answer': item['generated_answer'],
'contexts': item['retrieved_texts'],
'ground_truth': item['expected_answer']
}
for item in test_results
]
eval_dataset = Dataset.from_list(eval_samples)
results = evaluate(eval_dataset,
metrics=[faithfulness, answer_relevancy, context_precision, context_recall]
)
results.to_pandas().to_csv('eval_results.csv', index=False)Mendiagnosis dengan Kombinasi Metrik
Kombinasi metrik mengungkap masalah sistem tertentu. Kesetiaan rendah + presisi konteks tinggi → LLM mengabaikan konteks dan berhalusinasi (perbaiki perintah). Perolehan konteks rendah + kesetiaan tinggi → pengambil tidak menemukan potongan penting, tetapi LLM dengan setia melaporkan hal yang ditemukannya (perbaiki pemotongan atau embedding). Relevansi jawaban rendah + kesetiaan tinggi → potongan yang diambil hanya berkaitan secara tidak langsung dan LLM dengan setia membahasnya, tetapi tidak menjawab pertanyaan (tingkatkan penyaringan hasil pengambilan atau penulisan ulang kueri).
# Diagnostic matrix
diagnostics = [
{
'condition': 'Low faithfulness + High context precision',
'cause': 'LLM ignoring context, answering from parametric memory',
'fix': 'Strengthen system prompt: "Answer ONLY from the provided context"'
},
{
'condition': 'Low context recall + High faithfulness',
'cause': 'Retriever missing relevant chunks',
'fix': 'Improve chunking strategy, embedding model, or increase top-k'
},
{
'condition': 'Low answer relevance + High context recall',
'cause': 'Retrieved context is off-topic; LLM is answering wrong question',
'fix': 'Add query rewriting or improve metadata filters'
}
]Evaluasi Manusia untuk Kalibrasi
Metrik LLM-sebagai-penilai berkorelasi dengan penilaian manusia, tetapi tidak sepenuhnya selaras. Kalibrasikan metrik otomatis Anda dengan meminta 3 penilai manusia memberi skor pada sampel acak yang terdiri dari 50 keluaran untuk kesetiaan dan relevansi jawaban menggunakan skala 1–5. Hitung kesepakatan antara penilai LLM dan rata-rata penilaian manusia. Jika LLM secara sistematis memberikan skor terlalu tinggi atau terlalu rendah dibandingkan manusia, terapkan faktor koreksi. Metrik otomatis yang terkalibrasi memberi Anda keyakinan bahwa peningkatan skor mencerminkan peningkatan kualitas yang nyata.
from scipy.stats import spearmanr
def calibrate_judge_vs_humans(samples):
'''samples: [{"llm_score": 0.9, "human_score": 4.2}, ...]'''
llm_scores = [s['llm_score'] for s in samples]
human_scores = [s['human_score'] / 5.0 for s in samples] # normalize to 0-1
correlation, pvalue = spearmanr(llm_scores, human_scores)
print(f'LLM-Human Spearman correlation: {correlation:.3f} (p={pvalue:.4f})')
mean_llm = sum(llm_scores) / len(llm_scores)
mean_human = sum(human_scores) / len(human_scores)
bias = mean_llm - mean_human
print(f'LLM bias vs humans: {bias:+.3f}')
return correlation, biasMenetapkan Target Metrik untuk Produksi
Sebelum menerapkan sistem RAG ke produksi, tentukan ambang minimum metrik yang harus dipenuhi sistem. Target produksi yang umum adalah: kesetiaan > 0.90 (kurang dari 10% klaim jawaban merupakan halusinasi), relevansi jawaban > 0.80 (lebih dari 80% jawaban benar-benar menjawab pertanyaan), presisi konteks > 0.60 (sebagian besar potongan yang diambil relevan), dan perolehan konteks > 0.75 (sebagian besar fakta penting tersedia dalam konteks yang diambil). Sistem yang tidak memenuhi ambang ini tidak boleh diterapkan tanpa perbaikan lebih lanjut.
PRODUCTION_THRESHOLDS = {
'faithfulness': 0.90,
'answer_relevancy': 0.80,
'context_precision': 0.60,
'context_recall': 0.75
}
def check_production_readiness(metrics):
ready = True
print('Production readiness check:')
for metric, threshold in PRODUCTION_THRESHOLDS.items():
score = metrics.get(metric, 0)
status = 'PASS' if score >= threshold else 'FAIL'
print(f' {metric}: {score:.2f} (>= {threshold}) -> {status}')
if status == 'FAIL':
ready = False
print(f'Overall: {"READY" if ready else "NOT READY"}')
return readyPemeriksaan Singkat
Uji pemahaman Anda tentang konsep Rekayasa AI dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari: kesetiaan sebagai metrik pada tingkat klaim yang memeriksa apakah setiap pernyataan dalam jawaban didukung oleh konteks yang diambil, relevansi jawaban sebagai metrik yang mengukur apakah jawaban menjawab pertanyaan sebenarnya, perolehan dan presisi konteks untuk mengukur kualitas pengambilan dari sudut pandang pembuatan, serta perpustakaan RAGAS untuk evaluasi otomatis dengan banyak metrik. Selanjutnya, kita akan menggabungkan semua metrik ini ke dalam kerangka evaluasi otomatis yang dapat Anda jalankan setiap kali terjadi perubahan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban” gratis?
Ya — teks lengkap “Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban” 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 “Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban”?
Gunakan RAGAS untuk mengukur apakah jawaban yang dihasilkan setia pada konteks yang diambil dan benar-benar menjawab pertanyaan pengguna tanpa berhalusinasi. 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 3 dari 4.
Berapa lama pelajaran “Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban” 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
- Mengapa Evaluasi Penting dalam RAG
- Metrik Pengambilan: Hit Rate, MRR, dan NDCG
- Metrik Pembuatan: Kesetiaan dan Relevansi Jawaban
- Membangun Sistem Evaluasi Otomatis