用框架和大模型评估RAG效果附文档代码
导读 众所周知,没有评估就没有优化。当前,RAG(检索增强生成)已成为许多AI落地场景的主流方案,但仅有方案是不够的,如何量化其效果才是真正考验人的关键。本文将深入探讨几种主流RAG评估框架,阅读后你将清晰了解以下几点: 如何利用大模型对另一大模型进行“考核” 这些框架的具体使用方法 配套的文档与代
导读

众所周知,没有评估就没有优化。当前,RAG(检索增强生成)已成为许多AI落地场景的主流方案,但仅有方案是不够的,如何量化其效果才是真正考验人的关键。本文将深入探讨几种主流RAG评估框架,阅读后你将清晰了解以下几点:
- 如何利用大模型对另一大模型进行“考核”
- 这些框架的具体使用方法
- 配套的文档与代码示例
在LLM(大语言模型)应用开发中,LlamaIndex是常被选用的工具,开发人员借助它搭建RAG应用的频率非常高。在RAG应用开发过程中,评估数据的质量直接影响后续调优方向。好在随着RAG技术自身的演进,评估工具也愈发高效和精准。本文将介绍几款能与LlamaIndex协同使用的RAG评估工具,并对它们进行横向对比。
什么是RAG评估工具?
简单而言,RAG评估工具是一套用于对检索增强生成(RAG)这类文本生成系统进行打分的方法体系。它们评估的维度包括准确性、内容质量以及相关性等。对开发人员来说,这些工具能够帮助他们摸清应用的底细,并找到优化方向。相较于人工评估,机器评估更客观、更准确、更高效——自动化后即可批量化。一些激进的做法甚至将这些工具直接嵌入CI/CD流程,实现评估与优化的全自动化。
核心术语
讨论RAG评估时,有些术语绕不开。不同工具的叫法可能略有不同,但核心逻辑一致。以下是几个常见的实体定义:
- 问题:指用户的查询,有些工具中也称为“输入”或“查询”。
- 上下文:指检索返回的文档片段,有时也被称作“检索上下文”。
- 答案:指系统生成的回复,也可称为“实际输出”或“响应”。
- 标准答案:指人工标注的正确结果,用于衡量生成答案的准确性。
为保持行文一致,下文将统一使用这组术语。
准备工作
测试文档
本次测试素材选取漫威《复仇者联盟》系列电影。数据主要来源于维基百科中该系列的相关词条,包含四部电影的情节信息。
数据集
基于上述文档,我们构建了一个包含“问题”和“标准答案”的数据集。具体如下:
questions = [
"洛基在征服地球的尝试中使用了什么神秘的物体?",
"复仇者联盟的哪两名成员创造了奥创?",
"灭霸如何实现了他在宇宙中消灭一半生命的计划?",
"复仇者联盟用什么方法扭转了灭霸的行动?",
"复仇者联盟的哪位成员牺牲了自己来打败灭霸?",
]
ground_truth = [
"六角宝",
"托尼·斯塔克(钢铁侠)和布鲁斯·班纳(绿巨人浩克)。",
"通过使用六颗无限宝石",
"通过时间旅行收集宝石。",
"托尼·斯塔克(钢铁侠)",
]
检索引擎
接下来,我们使用LlamaIndex搭建一个标准的RAG检索引擎。评估工具将基于该引擎生成“答案”和“上下文”数据:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("./data").load_data()
vector_index = VectorStoreIndex.from_documents(documents)
query_engine = vector_index.as_query_engine(similarity_top_k=2)
- 从
data目录加载文档。 - 使用
VectorStoreIndex创建文档向量索引。 - 将索引转换为查询引擎,并将相似度阈值设置为
2。
TruLens
TruLens是一个专门用于评估和改进LLM应用的软件工具。
评估指标
TruLens主要从以下几个维度对RAG应用进行考核:
- 答案相关性:检查答案是否有效回应了问题,是否具备实用性和相关性。
- 上下文相关性:评估检索到的上下文是否与问题相关,是否为答案提供了足够依据。
- 基于事实:验证答案是否严格基于上下文中的事实生成。
- 基准真相:将答案与手动标注的正确答案进行对比,检验准确性。
使用示例
以下代码展示了如何使用TruLens进行RAG评估:
import numpy as np
from trulens_eval import Tru, Feedback, TruLlama
from trulens_eval.feedback.provider.openai import OpenAI
from trulens_eval.feedback import Groundedness, GroundTruthAgreement
openai = OpenAI()
golden_set = [{"query": q, "response": r} for q, r in zip(questions, ground_truth)]
ground_truth = Feedback(
GroundTruthAgreement(golden_set).agreement_measure, name="Ground Truth"
).on_input_output()
grounded = Groundedness(groundedness_provider=openai)
groundedness = (
Feedback(grounded.groundedness_measure_with_cot_reasons, name="Groundedness")
.on(TruLlama.select_source_nodes().node.text)
.on_output()
.aggregate(grounded.grounded_statements_aggregator)
)
qa_relevance = Feedback(
openai.relevance_with_cot_reasons, name="Answer Relevance"
).on_input_output()
qs_relevance = (
Feedback(openai.qs_relevance_with_cot_reasons, name="Context Relevance")
.on_input()
.on(TruLlama.select_source_nodes().node.text)
.aggregate(np.mean)
)
tru_query_engine_recorder = TruLlama(
query_engine,
app_id="A vengers_App",
feedbacks=[
ground_truth,
groundedness,
qa_relevance,
qs_relevance,
],
)
with tru_query_engine_recorder as recording:
for question in questions:
query_engine.query(question)
tru = Tru()
tru.run_dashboard()
这段代码定义了“基准真相”、“基于事实”、“答案相关性”和“上下文相关性”这四项反馈指标,然后通过TruLlama记录查询引擎的运行结果,最后使用Tru启动评估并展示结果。
评估结果
TruLens的评估结果可通过浏览器访问本地服务来查看。除了总得分外,还能看到每个指标的详细得分及其背后的推理。以下是TruLens评估结果的示例截图:

Ragas
Ragas是另一个用于评估RAG应用的框架。相比TruLens,Ragas的指标粒度更细。
评估指标
Ragas考核的维度包括:
- 忠实度:评估“问题”与“上下文”之间的一致性。
- 答案相关性:评估“答案”与“问题”之间的相关性。
- 上下文精度:检查“标准答案”在“上下文”中的排名是否靠前。
- 上下文召回:评估“标准答案”与“上下文”的一致性。
- 上下文实体召回:判断“标准答案”中的实体在“上下文”中是否被覆盖。
- 上下文相关性:评估“问题”与“上下文”之间的匹配程度。
- 答案语义相似性:衡量“答案”与“标准答案”在语义上的接近程度。
- 答案正确性:直接评估“答案”相对于“标准答案”的正确性。
- 方面评论:包含对其他方面的额外评估,如有害性、正确性等。
使用示例
Ragas官方文档中虽有与LlamaIndex集成的示例,但代码已过时。以下是更新后的版本:
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_relevancy,
answer_correctness,
)
from ragas import evaluate
from datasets import Dataset
metrics = [
faithfulness,
answer_relevancy,
context_relevancy,
answer_correctness,
]
answers = []
contexts = []
for q in questions:
response = query_engine.query(q)
answers.append(response.response)
contexts.append([sn.get_content() for sn in response.source_nodes])
data = {
"question": questions,
"contexts": contexts,
"answer": answers,
"ground_truth": ground_truth,
}
dataset = Dataset.from_dict(data)
result = evaluate(dataset, metrics)
result.to_pandas().to_csv("output/ragas-evaluate.csv", sep=",")
在该示例中:
- 输入数据为
questions和ground_truth。 - 所使用的指标与TruLens类似。
- 手动构建数据集,将问题、答案和上下文填充进去。
- 评估结果保存到本地文件中。
评估结果
Ragas的结果可在本地文件中查看,每个评估指标均有对应分数。示例如下:

Ragas与TruLens的评估结果差异较大,尤其在“上下文相关性”这一指标上,Ragas的分数明显偏低。实际上,在评估上下文时,Ragas更推荐将“上下文精度”和“上下文召回”作为主要指标。为便于比较,此处才采用了“上下文相关性”。另一个值得关注的点是:Ragas仅返回分数,不提供任何得分理由。
DeepEval
DeepEval是一个开源的LLM评估框架,其最大特点是将评估任务当作单元测试来运行。
评估指标
DeepEval的指标覆盖面广泛,部分专为RAG应用设计,部分适用于其他LLM场景:
- 忠实度:检查问题与上下文的一致性。
- 答案相关性:检查答案与问题的一致性。
- 上下文精确性:检查标准答案在上下文中的排名。
- 上下文召回:评估标准答案与上下文的一致性。
- 上下文相关性:评估问题与上下文的一致性。
- 幻觉:衡量生成内容的虚构程度。
- 偏见:评估是否存在偏见。
- 毒性:检测是否包含人身攻击、讽刺或威胁等内容。
- Ragas:允许借用Ragas的指标进行评估并生成解释。
- 知识保留:评估信息被记住的持久性。
- 摘要:评估摘要的有效性。
- G-Eval:一个通过大模型和思维链(CoT)执行评估任务的框架,可根据任何自定义标准评估LLM输出。
使用示例
DeepEval的一大特色是将评估当作单元测试运行。下面是一个简单的例子:
import pytest
from deepeval.metrics import (
AnswerRelevancyMetric,
FaithfulnessMetric,
ContextualRelevancyMetric,
)
from deepeval.test_case import LLMTestCase
from deepeval import assert_test
from deepeval.dataset import EvaluationDataset
def generate_dataset():
test_cases = []
for i in range(len(questions)):
response = query_engine.query(questions[i])
test_case = LLMTestCase(
input=questions[i],
actual_output=response.response,
retrieval_context=[node.get_content() for node in response.source_nodes],
expected_output=ground_truth[i],
)
test_cases.append(test_case)
return EvaluationDataset(test_cases=test_cases)
dataset = generate_dataset()
@pytest.mark.parametrize(
"test_case",
dataset,
)
def test_rag(test_case: LLMTestCase):
answer_relevancy_metric = AnswerRelevancyMetric(model="gpt-3.5-turbo")
faithfulness_metric = FaithfulnessMetric(model="gpt-3.5-turbo")
context_relevancy_metric = ContextualRelevancyMetric(model="gpt-3.5-turbo")
assert_test(
test_case,
[answer_relevancy_metric, faithfulness_metric, context_relevancy_metric],
)
这段代码构建了一个包含问题、生成答案、上下文和标准答案的测试集,然后使用“忠实度”、“答案相关性”和“上下文相关性”这些指标进行考核。DeepEval默认使用gpt-4,但为了节省成本,也可以指定其他模型,例如gpt-3.5-turbo。每个指标的阈值默认为0.5,意味着分数低于0.5则视为测试失败。
执行测试只需运行deepeval test run test_deepeval.py,DeepEval会在终端输出结果:通过显示PASSED,不通过则显示FAILED。
评估结果
终端显示结果不够直观,但DeepEval提供了另一种方式:设置环境变量export DEEPEVAL_RESULTS_FOLDER="./output",结果将保存到本地的JSON文件中。
如需更直观地查看,还可以使用Confident平台。先通过deepeval login --confident-api-key your_api_key登录,然后运行测试。结果会自动上传到Confident,展示更为友好。以下是Confident平台上的评估结果截图:

Confident还支持将结果导出为CSV文件,便于本地查看。
UpTrain
UpTrain也是一个开源的LLM评估与改进平台,在我们讨论的这些工具中,其评估指标范围最广。
评估指标
UpTrain的指标不仅针对RAG应用,也覆盖其他LLM场景。部分指标如下:
- 响应匹配:衡量答案与标准答案的一致性。
- 响应完整性:评估答案是否覆盖问题的所有方面。
- 响应简洁性:检查答案是否存在冗余信息。
- 响应相关性:评估答案与问题之间的关联度。
- 响应有效性:判断答案是否有用,是否出现类似“我不知道”的无用回复。
- 响应一致性:评估答案、问题与上下文三者之间的一致性。
- 上下文相关性:衡量上下文与问题之间的相关性。
- 上下文利用:检查答案是否充分利用上下文来覆盖所有要点。
- 事实准确性:确认答案是否基于上下文、事实准确。
- 上下文简洁性:衡量上下文是否精炼,不含无关信息。
- 上下文重新排序:评估排序后上下文的有效性。
- 越狱检测:判断问题是否包含越狱提示。
- 提示注入:检查问题是否试图泄露系统提示。
- 语言特征:评估答案是否简洁、连贯、无语法错误。
- 语调:检查答案是否符合特定的语气要求。
- 子查询完整性:判断子问题是否覆盖了问题的全部方面。
- 多查询准确性:验证问题的不同变体是否与原始问题保持一致。
- 代码幻觉:评估答案中的代码是否与上下文相关。
- 用户满意度:评估对话中用户的满意程度。
使用示例
UpTrain与LlamaIndex的集成非常便捷,通过EvalLlamaIndex即可创建评估对象。以下是一个示例:
import os
import json
from uptrain import EvalLlamaIndex, Evals, ResponseMatching, Settings
settings = Settings(
openai_api_key=os.getenv("OPENAI_API_KEY"),
)
data = []
for i in range(len(questions)):
data.append(
{
"question": questions[i],
"ground_truth": ground_truth[i],
}
)
llamaindex_object = EvalLlamaIndex(settings=settings, query_engine=query_engine)
results = llamaindex_object.evaluate(
data=data,
checks=[
ResponseMatching(),
Evals.CONTEXT_RELEVANCE,
Evals.FACTUAL_ACCURACY,
Evals.RESPONSE_RELEVANCE,
],
)
with open("output/uptrain-evaluate.json", "w") as json_file:
json.dump(results, json_file, indent=2)
这里需要注意几点:
- UpTrain需要OpenAI的API密钥。
- 初始数据集仅需“问题”和“标准答案”,答案和上下文由
EvalLlamaIndex自动生成。 - 使用了几个常见的评估指标。
- 结果保存到JSON文件中。
评估结果
评估结果存储在JSON文件中。为便于比较,可将其转换为CSV格式。以下是UpTrain的结果示例:

有一个现象值得注意:运行“响应匹配”后,可能会得到score_response_match、score_response_match_recall和score_response_match_precision三个分数。即使答案与标准答案看起来相似,这些分数也可能为0。目前原因尚不明确,如果您了解,欢迎探讨。
对比分析
| 维度 | TruLens | Ragas | DeepEval | UpTrain |
|---|---|---|---|---|
| 评估指标数量 | 较少 | 适中 | 广泛 | 最广泛 |
| 自定义评估 | 不支持 | 不支持 | 支持 | 支持 |
| 自定义LLMs | 支持 | 通过LangChain | 支持 | 支持 |
| 框架集成 | LlamaIndex, LangChain | LlamaIndex, LangChain | LlamaIndex | LlamaIndex |
| WebUI | 支持 | 不支持 | 支持(Confident) | 支持 |
| 分数解释 | 提供 | 不提供 | 提供(可辅助Ragas) | 提供 |
| 单元测试 | 不支持 | 不支持 | 支持 | 不支持 |
从表格可以看出,TruLens和Ragas属于先行者,而DeepEval和UpTrain属于后来者。后两者很可能借鉴了前人的经验,因此指标更丰富、功能更强。不过,先发者也有各自的看家本领:TruLens的结果呈现直观易懂,Ragas的指标则专为RAG场景量身定做。
结论
本文介绍了几款能与LlamaIndex集成的RAG评估工具,并进行了横向对比。它们能帮助开发人员清晰了解自身RAG应用的状况,从而找到优化方向。当然,文中未提及的工具还有不少,例如LlamaIndex自带的评估功能和Tonic Validate。如果你仍在纠结如何选择,建议先挑选一个项目直接上手尝试。如果不顺手,再换一个即可。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:用框架和大模型评估RAG效果附文档代码要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点最新调研显示,美国消费者对品牌营销中使用人工智能普遍持谨慎态度。60%的受访者反感品牌营销出现AI,86%的人不信任AI生成内容并会核查原始信源。与此同时,品牌却面临双重挑战:既要提升在AI搜索环境中的可见度,又要应对消费者的信任危机。数据显示,60%的企业过去一年来自AI渠道的流量在增长,但42%
国家医保局通报了云南省彝良县人民医院未及时发放职工生育津贴的典型案例。经核查,该院一名职工的生育津贴25158 87元在医保局拨付后近一年未发放,同时发现另有12人存在同类问题。在医保部门督促下,医院最终将13人共计200672 7元津贴全额发放。为保障参保人权益,国家医保局自2025年起推动生育津
国际足联于6月17日宣布,中国裁判员马宁将担任美加墨世界杯E组第二轮厄瓜多尔对阵库拉索比赛的主裁判,助理裁判为周飞。比赛将于6月20日在堪萨斯城举行。此次任命是中国裁判再次亮相世界杯执法舞台的重要标志,体现了国际足联对其专业能力的认可,对于提升中国足球裁判的国际形象和水平具有积极意义。
SpaceX公司的货运“龙”飞船于近日成功完成国际空间站补给任务并返回地球,在加州附近海域溅落。此次任务带回了大量极具科研价值的物资,包括在太空中生物打印的人体组织样本、关乎深空探索的低温燃料储存技术数据,以及用于癌症治疗研究的DNA仿生材料。同时,用于监测宇航员健康的成像仪器、空气净化系统等实用设
- 日榜
- 周榜
- 月榜
热点快看
