数据截至 (上游 commit 298b68274234)
Ragas — 架构与原理
30 秒导读: Ragas 是给「RAG / LLM 应用」做评测的工具箱。你给它一批(问题、检索到的资料、模型答案、标准答案),它用一个 LLM 当裁判,把「答得忠不忠于资料」「答得切不切题」这类原本靠人主观打的东西,量化成 0~1 的分数。没有测试集?它还能把你的文档自动造成带标准答案的测试集。
1. 这是什么(零基础也能懂)
一句话定义: Ragas 是一个 Python 库,用「LLM 当裁判 + 传统文本指标」给 RAG 和 LLM 应用的输出打分。
它解决谁的什么问题。 假设你做了一个问答机器人:用户问问题 → 系统检索几段资料 → LLM 根据资料生成答案。现在你改了 prompt、换了检索器、调了模型,怎么知道是变好了还是变差了? 人工一条条读太慢、太主观、不可复现。Ragas 把「好不好」拆成几个可计算的维度,每条样本自动出分,于是你能像跑单元测试一样跑评测。
RAG 是什么(术语点破)。 RAG(Retrieval-Augmented Generation,检索增强生成)= 先从知识库检索相关片段,再让 LLM 基于这些片段作答。它的两大失败模式正好对应 Ragas 的核心指标:
| 失败模式 | 白话 | 对应指标 |
|---|---|---|
| 答案不忠于资料(幻觉) | 模型编了资料里没有的内容 | faithfulness(忠实度) |
| 答案跑题 | 答非所问、含糊其辞 | answer_relevancy(答案相关性) |
| 检索没捞到该捞的 | 关键资料没被检索到 | context_precision / context_recall |
它能做什么(功能):
- 打分(evaluate): 内置 20+ 指标,覆盖 RAG、Agent(工具调用、目标达成)、文本相似度(BLEU/ROUGE)、自定义规则。
- 造测试集(testset generation): 喂一堆文档,自动生成「问题 + 标准答案 + 该用哪段资料」的评测数据。
- 优化指标 prompt(train/align): 用你的人工标注反向调裁判 prompt,让 LLM 裁判更贴近人的判断。
- 跑实验(@experiment): 把「对一个数据集跑一遍你的应用 + 评测」打包成可复现、可版本化的实验。
用起来什么样。 最小的一次评测(示意,非源码):
# 示意,非源码:演示 Ragas 的基本调用形状
from ragas import evaluate, EvaluationDataset
from ragas.metrics import faithfulness, answer_relevancy
# 一条样本 = 问题 + 检索到的资料 + 模型答案
dataset = EvaluationDataset.from_list([{
"user_input": "谁发明了相对论?",
"retrieved_contexts": ["爱因斯坦提出了相对论。"],
"response": "相对论由爱因斯坦提出。",
}])
result = evaluate(dataset, metrics=[faithfulness, answer_relevancy])
print(result) # {'faithfulness': 1.0, 'answer_relevancy': 0.92}
一句话直觉/类比。 把 Ragas 当成给 AI 答卷的自动阅卷老师:它不只看「答案对不对」,还看「有没有照着给的参考资料答(没瞎编)」「有没有答到点子上」。阅卷标准本身(prompt)也能拿往年人工评分去校准。