来源:互联网 更新时间:2026-08-07 13:54

众所周知,没有评估就没有优化。眼下RAG(检索增强生成)是很多AI落地场景的主流方案,但光有方案还不够,怎么量化它的效果,才是真正考验人的地方。这篇文章会聊几种主流的RAG评估框架,读完你会对以下几点有个清晰的认知:
LlamaIndex是LLM(大语言模型)应用开发中的常客,开发人员用它来搭建RAG应用的频率非常高。而在开发RAG应用的过程中,评估数据的好坏直接关系到后续的调优方向。好在随着RAG技术本身的演进,评估工具也变得更加高效和精准了。这篇文章会介绍几个能与LlamaIndex配合使用的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 是一个专门用来评估和改进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 是另一个用来评估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。Ragas 的结果可以在本地文件里查看,每个评估指标都有对应的分数。下面是示例:

Ragas 和 TruLens 的评估结果差异挺大,特别是在“上下文相关性”这个指标上,Ragas 的分数明显偏低。事实上,评估上下文时,Ragas 更推荐把“上下文精度”和“上下文召回”作为主要指标。为了方便比较,我们这里才用了“上下文相关性”。另一个值得注意的点是:Ragas 的结果只给分数,不给任何得分理由。
DeepEval 是一个开源的LLM评估框架,最大的特点是能把评估任务当成单元测试来跑。
DeepEval 的指标覆盖面很广,有些是为RAG应用量身定做的,有些则适用于其他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 也是一个开源的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)
这里注意几个点:
EvalLlamaIndex 自动生成。评估结果存储在 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) | 提供 |
| 单元测试 | 不支持 | 不支持 | 支持 | 不支持 |
从表格能看出,
这篇文章聊了几个能与 LlamaIndex 集成的RAG评估工具,并做了横向对比。它们能帮开发人员看清自己 RAG 应用的底牌,从而找到优化的方向。当然,文中没提到的工具还有不少,比如 LlamaIndex 自带的评估和 Tonic Validate。如果你还在纠结选哪个,建议先挑一个项目直接上手试。不顺手?换一个就是了。
Ondo将于今日上线股票永续合约
黄金价格不断创新高!黄金稳定币XAU、PAXG市值达11亿美元
新浪机器学习热点小时报丨2026年07月25日18时_今日实时机器学习热点速递
新破天一剑太极刀任务攻略 破天一剑怎么取太极刀
晶核艾尔莎角色盘点 晶核艾尔莎强度分析与实战表现
CC币价格预测(2026-2035):Canton币今日价格走势+长期价格预测
区块链OTC交易所有哪几家比较正规?
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
蚂蚁庄园今日答案7月21日(今日已更新) 蚂蚁庄园今天正确答案是什么呢
新浪互联网热点小时报丨2026年07月26日16时_今日实时互联网热点速递
今日比特币暴涨分析:Metaplanet的比特币BTC投资推动股价上涨17%
合集38个项目筹集5.406亿美元 Figure融资2亿
AMD英特尔集体失眠!英伟达Rosa CPU搭载Rigel核:单核性能碾压x86
遗忘之海密室通关教程 遗忘之海密室全关卡解谜思路与难点解析
五菱星光L六座新能源SUV上市:三版可选,中配12.28
抖音怎么取消申请退货退款?抖音上取消退货怎么操作
macOS 28将移除Rosetta 2兼容层,Intel应用面临运行危机
腾讯ima怎么创建共享知识库?
全球首款AI智能体手机即将首秀!网友猜测或为豆包手机2代
小鸡答题今天的答案是什么2026年7月9日
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc