Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan
Gunakan RAGAS untuk mengukur sama ada jawapan yang dijana setia kepada konteks yang diperoleh dan benar-benar menjawab soalan pengguna tanpa menghasilkan halusinasi.
Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan ialah pelajaran AI Engineering Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran AI Engineering Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Mengukur Peringkat Penjanaan
Walaupun sistem capaian semula anda menemukan bahagian yang sempurna, peringkat penjanaan masih boleh gagal. LLM mungkin mengabaikan konteks yang dicapai semula dan menjawab berdasarkan ingatan parameternya, tersalah tafsir kandungan konteks, atau menjawab soalan yang sedikit berbeza daripada soalan yang ditanyakan. Metrik penjanaan mengukur kegagalan ini secara berasingan daripada capaian semula supaya anda dapat mengenal pasti dan membaiki setiap masalah. Dua metrik penjanaan utama ialah kesetiaan dan perkaitan jawapan.
Kesetiaan: Definisi
Kesetiaan mengukur sama ada setiap dakwaan dalam jawapan yang dijana boleh dijejaki secara langsung kepada konteks yang dicapai semula. Jawapan yang setia tidak memperkenalkan maklumat yang tiada dalam konteks. Kesetiaan diukur pada peringkat dakwaan: jawapan dipecahkan kepada pernyataan atom individu, kemudian setiap pernyataan disemak berbanding konteks untuk memastikan sokongannya. Skor kesetiaan ialah pecahan dakwaan yang disokong.
# 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.67Melaksanakan Kesetiaan dengan LLM sebagai Penilai
Cara paling praktikal untuk mengukur kesetiaan pada skala besar adalah dengan menggunakan LLM berkeupayaan tinggi sebagai penilai. Berikan arahan kepada LLM penilai untuk memecahkan jawapan kepada dakwaan individu, kemudian semak setiap dakwaan berbanding konteks. Penilai mengembalikan senarai dakwaan yang dilabelkan SUPPORTED atau UNSUPPORTED, dan anda mengira pecahan dakwaan yang disokong. Pendekatan ini boleh diskalakan kepada ribuan penilaian sejam dengan kos beberapa sen bagi setiap penilaian.
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)Perkaitan Jawapan: Definisi
Kerelevanan jawapan mengukur sama ada jawapan yang dijana benar-benar menjawab soalan pengguna. Jawapan yang sangat setia pada konteks masih mungkin tersasar — contohnya, jika pengguna bertanya 'Bagaimanakah saya menetapkan semula kata laluan saya?' tetapi jawapan menerangkan dasar keselamatan umum syarikat secara terperinci tanpa menyebut prosedur penetapan semula kata laluan. Kerelevanan jawapan tidak bergantung pada kesetiaan: anda boleh memberikan jawapan yang setia (hanya menyatakan perkara dalam konteks) tetapi tidak relevan (tidak menjawab perkara yang ditanyakan).
Mengukur Kerelevanan Jawapan
RAGAS mengukur kerelevanan jawapan menggunakan teknik penjanaan songsang yang bijak: LLM penilai menjana beberapa soalan hipotesis yang boleh dijawab oleh respons yang dijana, kemudian mengukur sejauh mana soalan-soalan yang dijana ini serupa dengan soalan asal menggunakan persamaan kosinus pembenaman. Persamaan yang tinggi antara soalan hipotesis yang dijana dengan soalan asal menunjukkan kerelevanan jawapan 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)Penarikan Semula Konteks: Adakah Kita Mendapatkan Semula Maklumat yang Mencukupi?
Penarikan semula konteks mengukur sama ada konteks yang didapatkan semula mengandungi maklumat yang mencukupi untuk menjawab soalan dengan betul. Ia menyemak jawapan rujukan ayat demi ayat: bolehkah setiap ayat dikaitkan dengan salah satu cebisan yang didapatkan semula? Penarikan semula konteks yang tinggi bermaksud alat mendapatkan semula telah menemui semua perkara yang diperlukan. Penarikan semula konteks yang rendah bermaksud maklumat penting tiada dalam cebisan yang didapatkan semula, jadi LLM sememangnya tidak dapat menjawab dengan betul walaupun penjanaan 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)Ketepatan Konteks: Adakah Cebisan yang Didapatkan Semula Relevan?
Ketepatan konteks mengukur sama ada cebisan yang didapatkan semula benar-benar berguna untuk menjawab soalan. Ketepatan konteks yang tinggi bermaksud cebisan yang didapatkan semula sangat relevan. Ketepatan konteks yang rendah bermaksud banyak cebisan yang didapatkan semula merupakan hingar yang tersasar daripada topik, yang perlu dibaca dan dibuang oleh LLM, sekali gus meningkatkan risiko kekeliruan. Ketepatan konteks diukur dengan menyemak cebisan yang didapatkan semula yang benar-benar digunakan atau dirujuk dalam jawapan yang dijana.
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 Serentak
Pustaka RAGAS melaksanakan keempat-empat metrik teras RAG — ketepatan konteks, penarikan semula konteks, kesetiaan dan kerelevanan jawapan — dalam satu rangka kerja. Ia mengendalikan panggilan LLM penilai secara dalaman. Hantarkan set data yang mengandungi soalan, jawapan yang dijana, konteks yang didapatkan semula dan jawapan rujukan, lalu terima laporan skor yang menyeluruh. RAGAS juga menyokong penilaian tak segerak supaya anda boleh menilai ratusan contoh secara selari.
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 Gabungan Metrik
Gabungan metrik mendedahkan masalah sistem tertentu. Kesetiaan rendah + ketepatan konteks tinggi → LLM mengabaikan konteks dan menghasilkan halusinasi (baiki gesaan). Penarikan semula konteks rendah + kesetiaan tinggi → alat mendapatkan semula terlepas cebisan penting tetapi LLM melaporkan dengan setia perkara yang ditemuinya (baiki pembahagian cebisan atau pembenaman). Kerelevanan jawapan rendah + kesetiaan tinggi → cebisan yang didapatkan semula berkaitan secara tidak langsung dan LLM menerangkannya dengan setia tetapi tidak menjawab soalan (tingkatkan penapisan hasil mendapatkan semula atau penulisan semula pertanyaan).
# 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'
}
]Penilaian Manusia untuk Penentukuran
Metrik LLM sebagai penilai mempunyai korelasi dengan pertimbangan manusia tetapi tidak selaras sepenuhnya. Tentukurkan metrik automatik anda dengan meminta 3 penilai manusia memberikan skor kepada sampel rawak 50 output berdasarkan kesetiaan dan kerelevanan jawapan menggunakan skala 1–5. Kira persetujuan antara penilai LLM dengan purata penilaian manusia. Jika LLM secara sistematik memberikan skor yang terlalu tinggi atau terlalu rendah berbanding manusia, gunakan faktor pembetulan. Metrik automatik yang ditentukur memberikan keyakinan bahawa peningkatan skor mencerminkan peningkatan kualiti sebenar.
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 Sasaran Metrik untuk Pengeluaran
Sebelum menggunakan sistem RAG dalam pengeluaran, tetapkan ambang minimum metrik yang mesti dicapai oleh sistem. Sasaran pengeluaran yang lazim ialah: kesetiaan > 0.90 (kurang daripada 10% dakwaan jawapan merupakan halusinasi), kerelevanan jawapan > 0.80 (sekurang-kurangnya 80% jawapan benar-benar menjawab soalan), ketepatan konteks > 0.60 (kebanyakan cebisan yang didapatkan semula adalah relevan), dan penarikan semula konteks > 0.75 (kebanyakan fakta penting tersedia dalam konteks yang didapatkan semula). Sistem yang tidak mencapai ambang ini tidak patut digunakan tanpa penambahbaikan 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 readySemakan Pantas
Uji pemahaman anda tentang konsep Kejuruteraan AI daripada pelajaran ini.
Imbas Kembali Pelajaran
Dalam pelajaran ini anda telah mempelajari: kesetiaan sebagai metrik pada peringkat dakwaan yang menyemak sama ada setiap pernyataan jawapan disokong oleh konteks yang didapatkan semula, kerelevanan jawapan sebagai metrik yang mengukur sama ada jawapan menjawab soalan sebenar, penarikan semula dan ketepatan konteks untuk mengukur kualiti mendapatkan semula dari perspektif penjanaan, serta pustaka RAGAS untuk penilaian berbilang metrik secara automatik. Seterusnya, kita akan menggabungkan semua metrik ini ke dalam rangka kerja penilaian automatik yang boleh anda jalankan pada setiap perubahan.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan” percuma?
Ya — teks penuh “Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus AI Engineering Academy, tingkat taraf kepada CoddyKit PRO. Kursus AI Engineering Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan”?
Gunakan RAGAS untuk mengukur sama ada jawapan yang dijana setia kepada konteks yang diperoleh dan benar-benar menjawab soalan pengguna tanpa menghasilkan halusinasi. Anda berlatih AI Engineering Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan AI Engineering Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran AI Engineering Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran AI Engineering Academy ini?
Ya. Setiap pelajaran AI Engineering Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Sebab Penilaian Penting dalam RAG
- Metrik Pengambilan: Kadar Hit, MRR dan NDCG
- Metrik Penjanaan: Kesetiaan dan Perkaitan Jawapan
- Membina Abah-abah Penilaian Automatik