使用 DeepEval 对 LlamaIndex LLM/RAG 应用进行单元测试:安装、指标与评估器集成全指南
【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
DeepEval 是一套面向 AI Agent 与 LLM 应用的单元测试框架,以"零配置、开箱即用"的方式为 LlamaIndex 用户提供 LLM 输出的自动化测试能力,帮助开发者在生产环境中及时发现破坏性变更(breaking changes)。本篇指南基于 deepeval.md 展开,完整覆盖 DeepEval 的安装配置、test_rag.py测试用例编写、deepeval test run命令行执行方式、十一类核心评估指标,以及 DeepEval 评估器如何无缝接入 LlamaIndex 的BaseEvaluator评估体系(含全部 6 个官方评估器),读完即可为你的 RAG 应用搭建一套可重复运行的回归测试流水线。
为什么用 DeepEval 做 LLM 单元测试
LLM 输出具有天然的随机性与不确定性,传统断言式单元测试难以直接套用。DeepEval 提供了一套有观点(opinionated)的评估框架:把一次评估拆解为一个个test case(测试用例),针对每个用例自由组合多种评估指标(metrics),对响应进行打分与阈值判定,从而将"LLM 输出是否符合预期"这一模糊问题转化为可量化的测试断言。
DeepEval 完全开源(open-source),对 LlamaIndex 用户而言,其最直接的价值在于:通过pip install deepeval即可获得测试编写、指标计算、CLI 执行、结果仪表盘(dashboard)分析的一整套闭环能力,无需额外搭建评估服务或标注数据,即可在生产发布前捕获 RAG 应用的回归问题。
安装与初始化设置
DeepEval 的接入非常简单,官方宣称"0 setup"即可使用。只需两步:
pip install -U deepeval # 可选:登录以在后续获得可视化的测试结果仪表盘 deepeval loginpip install -U deepeval:安装(或升级到最新版)DeepEval 及其依赖。deepeval login:可选步骤。登录后,deepeval test run的执行结果会上传至 DeepEval 的云端仪表盘,便于跨时间维度对比分析测试历史。
安装完成后即可创建test_rag.py开始编写测试。
编写第一个测试用例:test_rag.py
以下示例演示了用pytest编写一个基于Answer Relevancy(回答相关性)指标的测试用例:
import pytest from deepeval import assert_test from deepeval.metrics import AnswerRelevancyMetric from deepeval.test_case import LLMTestCase def test_case(): answer_relevancy_metric = AnswerRelevancyMetric(threshold=0.5) test_case = LLMTestCase( input="What if these shoes don't fit?", # Replace this with the actual output from your LLM application actual_output="We offer a 30-day full refund at no extra costs.", retrieval_context=[ "All customers are eligible for a 30 day full refund at no extra costs." ], ) assert_test(test_case, [answer_relevancy_metric])代码要点拆解:
AnswerRelevancyMetric(threshold=0.5):设置该指标的通过阈值为 0.5,即指标得分低于 0.5 时测试判定失败。threshold是 DeepEval 各指标类的通用参数,决定"通过/失败"的分界线。LLMTestCase:定义单个测试用例,核心字段包括:input:用户输入(即 query);actual_output:LLM 应用实际生成的回答文本——在真实场景中应替换为你的应用(如 LlamaIndex query engine)的真实输出;retrieval_context:检索返回的上下文片段列表,供 Faithfulness、Contextual Recall 等依赖上下文的指标使用。
assert_test(test_case, [answer_relevancy_metric]):将测试用例与一个或多个指标绑定并执行断言;任一指标不达标即测试失败。
随后在终端中运行测试:
deepeval test run test_rag.py若已执行过deepeval login,运行结果会上传至 DeepEval 仪表盘,可在网页端分析每个测试用例的指标得分、失败原因与历史趋势,从而追踪 RAG 应用在迭代过程中的质量变化。
DeepEval 支持的评估指标类型
DeepEval 将评估组织为 test case + 指标的结构,并针对 RAG 应用提供了丰富的指标族,每个指标可独立应用在任意测试用例上。文档列出的指标包括:
- G-Eval:基于 GPT-4 等 LLM 按自定义评估步骤打分的通用指标(融合了链式思考推理与格式约束);
- Summarization:评估摘要对原文信息的覆盖度与准确性;
- Answer Relevancy:回答与问题的相关性;
- Faithfulness:回答是否忠实于检索上下文(是否"忠于事实"而非编造);
- Contextual Recall:检索到的上下文是否包含回答所需的关键信息;
- Contextual Precision:检索结果中相关信息的排序是否靠前、无关信息是否更少;
- Contextual Relevancy:检索上下文整体与查询的相关程度;
- RAGAS:源自 RAGAS 论文的 RAG 端到端评估指标族(涵盖忠实度、答案相关性、上下文相关性等维度);
- Hallucination:检测回答中是否存在上下文无法支撑的幻觉内容;
- Bias:检测回答是否包含刻板印象或偏见性表述;
- Toxicity:检测回答是否包含有害、攻击性或不当内容。
从官方说明看,DeepEval 持续将最新研究成果纳入其评估指标的计算方法中。指标的具体计算方式与完整清单可查阅 DeepEval 的指标文档。
将 DeepEval 接入 LlamaIndex 的评估体系
DeepEval 与 LlamaIndex 的核心集成点在于BaseEvaluator抽象类。LlamaIndex 自带的评估模块(位于 llama-index-core/llama_index/core/evaluation)统一以BaseEvaluator为基类,定义了统一的评估接口:
evaluate(query, response, contexts)/aevaluate(...):接收查询、响应字符串与上下文列表,返回EvaluationResult(包含passing、score、feedback、invalid_result等字段);evaluate_response(query, response)/aevaluate_response(...):直接接收 LlamaIndex 的Response对象——实现中会自动从response.response提取输出文本,并从response.source_nodes提取每个节点的get_content()作为上下文(见 base.py)。
DeepEval 的评估器正是以BaseEvaluator子类的形态嵌入这套体系,因此可以与其他 LlamaIndex 原生评估器(如AnswerRelevancyEvaluator、FaithfulnessEvaluator等)一起通过BatchEvalRunner统一批量执行。下面的示例演示了如何把 DeepEval 指标包装成 LlamaIndex 评估器,直接评估 RAG 应用的查询响应:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from deepeval.integrations.llama_index import DeepEvalAnswerRelevancyEvaluator # 更多细节可参考 LlamaIndex 的快速入门文档 documents = SimpleDirectoryReader("YOUR_DATA_DIRECTORY").load_data() index = VectorStoreIndex.from_documents(documents) rag_application = index.as_query_engine() # 一个输入给 RAG 应用的示例问题 user_input = "What is LlamaIndex?" # LlamaIndex 返回的 response 对象同时包含输出字符串与检索到的节点 response_object = rag_application.query(user_input) evaluator = DeepEvalAnswerRelevancyEvaluator()然后执行评估:
evaluation_result = evaluator.evaluate_response( query=user_input, response=response_object ) print(evaluation_result)这里的关键在于evaluate_response直接消费 LlamaIndex 的Response对象——借助BaseEvaluator基类中实现的上下文自动提取逻辑,检索到的source_nodes会被自动转换为 DeepEval 评估所需的retrieval_context,无需手工拼接。
DeepEval 提供的全部 6 个 LlamaIndex 评估器
DeepEval 官方为 LlamaIndex 提供了 6 个开箱即用的评估器,一次 import 即可全部引入:
from deepeval.integrations.llama_index import ( DeepEvalAnswerRelevancyEvaluator, DeepEvalFaithfulnessEvaluator, DeepEvalContextualRelevancyEvaluator, DeepEvalSummarizationEvaluator, DeepEvalBiasEvaluator, DeepEvalToxicityEvaluator, )6 个评估器与前述指标一一对应:DeepEvalAnswerRelevancyEvaluator(回答相关性)、DeepEvalFaithfulnessEvaluator(忠实度)、DeepEvalContextualRelevancyEvaluator(上下文相关性)、DeepEvalSummarizationEvaluator(摘要)、DeepEvalBiasEvaluator(偏见)、DeepEvalToxicityEvaluator(毒性)。它们均可像上文示例那样,用evaluate_response(query=..., response=...)接入 RAG 应用的查询流程。
与 LlamaIndex 原生评估体系的配合使用
从源码结构看,DeepEval 评估器继承自 LlamaIndex 的BaseEvaluator(基类定义见 base.py),因此天然兼容 LlamaIndex 的评估基础设施,典型应用方式包括:
- 批量评估:将多个 DeepEval 评估器(甚至混入 LlamaIndex 原生评估器)以
{"evaluator_name": evaluator}字典形式传给BatchEvalRunner(见 batch_runner.py),对一组查询-响应对并行执行、统一收集EvaluationResult; - 统一结果结构:所有评估结果都归一化为
EvaluationResult(score、passing、feedback等字段),便于后续落库、报表或 CI 断言; - 回归测试:将 DeepEval 测试作为 CI 流水线的一环,在每次代码变更后自动运行,通过
threshold阈值捕获 RAG 应用的破坏性变更。
总结
DeepEval 为 LlamaIndex 生态补上了"LLM 应用单元测试"这一关键环节:通过pip install deepeval+deepeval test run即可完成测试的编写与执行,借助LLMTestCase与assert_test快速断言,依托 Answer Relevancy、Faithfulness、Hallucination、Toxicity 等十一类指标量化响应质量;更进一步,通过deepeval.integrations.llama_index提供的 6 个评估器(均实现 LlamaIndex 的BaseEvaluator接口),可直接对真实 RAG 应用的Response对象做端到端评估,并与BatchEvalRunner等原生工具无缝协作。无论是开发期的快速验证,还是生产环境的持续回归监控,这套组合都能让 LLM 应用的质量评估变得可重复、可量化、可追踪。
【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考