我要提问
ARTICLE DETAIL

资讯详情

前沿编程新知与开发实战干货的深度解读。

LlamaIndex 评估模块全解析:Response Evaluation 与 Retrieval Evaluation 实战指南

LlamaIndex 评估模块全解析:Response Evaluation 与 Retrieval Evaluation 实战指南 LlamaIndex 评估模块全解析Response Evaluation 与 Retrieval Evaluation 实战指南【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index本指南以 LlamaIndex 官方文档中 评估模块索引页 为骨架系统梳理响应评估Response Evaluation与检索评估Retrieval Evaluation两大模块的完整组件清单、核心评估器实现原理、度量指标算法以及仓库内配套的可运行 Notebook 资源。阅读完本文你将掌握每个评估器的适用场景、底层调用链与批量评估方法能够直接在 RAG 应用中落地质量评估体系。一、评估模块总览两大维度LlamaIndex 将评估能力划分为两个层面对应 modules.md 中的两大分类Response Evaluation响应评估面向查询 → 检索上下文 → 生成回答的完整链路判断生成的答案是否忠实于上下文、是否与查询相关、是否正确、是否违反给定准则等Retrieval Evaluation检索评估仅面向检索环节衡量检索器返回的候选文档是否命中预期文档以及命中文档的排序质量。所有评估组件均建立在 base.py 定义的抽象基类之上BaseEvaluator提供同步evaluate()与异步aevaluate()两套接口并内置evaluate_response()方法可将Response对象自动拆解为响应字符串与上下文列表contexts [node.get_content() for node in response.source_nodes]后交给底层aevaluate。评估结果统一封装为EvaluationResult模型字段包括query、contexts、response、passing布尔通过标记、feedback推理过程、score0~1 或 1~5 分数等。所有评估器类的导出入口集中在 evaluation/init.py可通过from llama_index.core.evaluation import ...直接导入。二、Response Evaluation响应评估组件详解以下 13 个评估组件对应 modules.md 中 Response Evaluation 小节的全部条目每个组件都有配套的 Jupyter Notebook 示例位于 docs/examples/evaluation 目录。2.1 Faithfulness忠实度评估示例 Notebookfaithfulness_eval.ipynb忠实度评估回答的问题是生成的回答是否被检索到的上下文所支持 即检测回答是否存在幻觉hallucination。实现位于 faithfulness.py核心类FaithfulnessEvaluator只依赖响应字符串与上下文字符串列表底层实现将每个上下文包装为Document构建SummaryIndex然后用text_qa_template评估模板与refine_template精炼模板驱动 LLM 对信息是否被上下文支持做YES/NO判定默认评估模板DEFAULT_EVAL_TEMPLATE要求 LLM只要上下文的任何一部分支持该信息就回答 YES默认精炼模板DEFAULT_REFINE_TEMPLATE支持多段上下文的分段验证与结果精炼源码内置了面向llama3:8b的优化模板LLAMA3_8B_EVAL_TEMPLATE并通过TEMPLATES_CATALOG根据 LLM 的model_name自动选择见 faithfulness.py判定逻辑响应文本中出现yes忽略大小写则passingTrue、score1.0否则为 0.0若设置raise_errorTrue且不通过则直接抛出ValueError。核心参数参数默认值说明llmSettings.llm用于评估的 LLM缺省时读取全局设置raise_errorFalse评估不通过时是否抛异常eval_template内置默认模板可传入字符串或BasePromptTemplate自定义refine_template内置默认模板分段上下文精炼判定模板2.2 Relevancy相关性评估示例 Notebookrelevancy_eval.ipynb相关性评估判断响应是否与查询及检索上下文保持一致实现位于 relevancy.py。其DEFAULT_EVAL_TEMPLATE将问题 响应拼接为Query and Response要求 LLM 判断其与Context是否一致并回答 YES/NO。与忠实度评估不同它同时考察查询与回答的联合相关性因此aevaluate()要求query、contexts、response三者都必须提供缺一即抛ValueError。RelevancyEvaluator同样基于SummaryIndextext_qa_template/refine_template实现并保留旧别名QueryResponseEvaluator以兼容历史版本。2.3 Answer and Context Relevancy答案与上下文双重相关性示例 Notebookanswer_and_context_relevancy.ipynb该 Notebook 演示将两类相关性评估组合使用Answer Relevancy由 answer_relevancy.py 中的AnswerRelevancyEvaluator提供评估生成的答案与查询问题的相关程度Context Relevancy由 context_relevancy.py 中的ContextRelevancyEvaluator提供评估检索到的上下文是否与查询相关。两者均输出EvaluationResult通过passing、score与feedback字段给出量化结论可用于分别定位检索召回不佳与生成跑题两类问题。2.4 Guideline Eval准则遵循评估示例 Notebookguideline_eval.ipynbGuidelineEvaluator实现位于 guideline.py用于评估回答是否遵守自定义的业务准则如回答必须以积极语气不得包含财务建议。它接收一个guidelines字符串参数将准则注入评估提示词由 LLM 判断响应是否符合全部准则并给出 YES/NO 结论适合为特定领域的 RAG 系统配置红线规则。2.5 Correctness Eval正确性评估示例 Notebookcorrectness_eval.ipynbCorrectnessEvaluator实现位于 correctness.py用于判断生成答案是否与**参考答案reference answer**一致。其特点采用 1~5 分制评分1 最差、5 最佳与查询无关得 1 分相关但有错误得 2~3 分相关且完全正确得 4~5 分通过DEFAULT_EVAL_TEMPLATE系统模板 用户模板的ChatPromptTemplate要求 LLM仅输出一行分数另起一行给出评分理由passing定义为分数不低于给定阈值score threshold评估时必须额外提供reference参数参考答案源码要求query、response、reference 均不可缺失。2.6 Semantic Eval语义相似度评估示例 Notebooksemantic_similarity_eval.ipynbSemanticSimilarityEvaluator实现位于 semantic_similarity.py。它不依赖 LLM 的评判式回答而是通过嵌入向量计算语义相似度将生成答案与参考答案分别编码计算余弦相似度作为score并通过threshold参数判定passing。该评估器适合快速、低成本的批量回归测试默认使用全局Settings.embed_model也可传入自定义embed_model。2.7 Question Generation评估数据集生成示例 NotebookQuestionGeneration.ipynbDatasetGenerator与QueryResponseDataset实现位于 dataset_generation.py。其核心价值在于没有标注数据也能启动评估给定一组文档节点它利用 LLM 自动生成查询—回答对产出可供各评估器消费的评估数据集。典型流程为用DatasetGenerator.from_documents()从文档生成节点指定num_questions_per_chunk等参数调用generate_dataset_from_nodes()得到QueryResponseDataset通过qr_pairs属性取出 (query, reference_response) 对喂给评估器或BatchEvalRunner。2.8 Batch Eval批量并行评估示例 Notebookbatch_eval.ipynbBatchEvalRunner实现位于 batch_runner.py是生产环境最常用的评估编排工具构造参数evaluators评估器名字到实例的字典、workers并发数默认 2、show_progress是否显示进度条三种入口方法且均有同步/异步双版本evaluate_response_strs/aevaluate_response_strs直接喂查询、响应字符串与上下文列表evaluate_responses/aevaluate_responses喂查询与Response对象evaluate_queries/aevaluate_queries传入QueryEngine与查询列表自动先执行查询再评估返回结构为Dict[str, List[EvaluationResult]]按评估器名称分组源码内部通过asyncio.Semaphore(workers)控制并发并为每个 worker 任务附加 tenacity 重试装饰器最多重试 3 次、指数退避等待提升大规模评估的稳定性见 batch_runner.py支持eval_kwargs_lists为不同评估器传入不同的额外参数如references列表。2.9 Multi-Modal RAG Evaluation多模态 RAG 评估示例 Notebookmulti_modal_rag_evaluation.ipynb多模态评估的评估器实现位于 multi_modal 目录包含faithfulness.py与relevancy.py两个文件即把忠实度与相关性评估扩展到图像 文本混合检索场景。配套 Notebook 演示了如何对多模态 RAG 流水线的检索与生成质量进行端到端评估。2.10~2.12 第三方评估集成Deepeval、UpTrain 与 RAGChecker示例 NotebookDeepeval.ipynb、UpTrain.ipynb、RAGChecker.ipynbDeepeval Integration接入 DeepEval 的评估体系在 LlamaIndex 的BaseEvaluator框架内复用 DeepEval 的断言与指标Uptrain Integration接入 UpTrain 平台利用其云端/本地评估器对 RAG 链路进行监控式评估RAGChecker Integration接入 RAGChecker 的诊断能力对检索与生成全链路给出细粒度检查报告。这三个 Notebook 均位于 docs/examples/evaluation 目录展示了评估器与第三方质量平台的对接方式适合已选用相关监控工具的生产团队参考。2.13 Cleanlab数据质量评估示例 NotebookCleanlab.ipynbCleanlab 集成聚焦于评估数据本身的质量利用置信学习confident learning方法检测评估数据集中标签错误或低质量样本帮助团队在评估前先清洗数据避免脏数据污染评估结论。2.14 补充Pairwise Comparison成对比较虽未单列于索引页但仓库中还内置了PairwiseComparisonEvaluator见 pairwise.py用于对两个候选回答做相对优劣排序相关 Notebook 为 pairwise_eval.ipynb。其EvaluationResult会额外携带pairwise_source字段记录比较顺序是否被翻转从而抵消位置偏差。三、Retrieval Evaluation检索评估详解3.1 Retriever Eval 核心实现示例 Notebookretriever_eval.ipynb检索评估不关心生成答案只评估检索器是否召回预期文档。核心组件位于 retrieval 目录RetrieverEvaluatorevaluator.py包装任意BaseRetriever可附加node_postprocessors重排器等后处理器参与评估链路评估时调用retriever.aretrieve(query)得到检索节点再提取node_id与文本MultiModalRetrieverEvaluator同一文件中针对多模态检索的变体可按text或image模式分别统计文本节点与图像节点的命中情况基类BaseRetrievalEvaluator与RetrievalEvalResult位于 retrieval/base.py。3.2 检索度量指标从 HitRate 到 NDCG所有度量指标实现于 retrieval/metrics.py均以预期文档 ID 集合 vs 检索文档 ID 有序列表为输入指标metric_name计算逻辑HitRatehit_rate默认任一检索文档命中预期集合即记 1 分use_granular_hit_rateTrue时按命中数/预期文档数给出细粒度比例MRRmrr默认第一个命中文档排名的倒数use_granular_mrrTrue时对全部命中排名倒数求和后按相关文档数取均值Precisionprecision检索结果中命中数 / 检索结果总数对应PrecisionKK 为检索器 top_kRecallrecall检索结果中命中数 / 预期文档总数AveragePrecisionap逐位累计精确率并按预期文档数归一化NDCGndcg折损累计增益支持linear与exponential两种折损模式位置 p 取检索结果规模CohereRerankRelevancyMetriccohere_rerank_relevancy调用 Cohere 重排 API 对检索文本打分支持max/median/mean聚合通过resolve_metrics([hit_rate, mrr, ...])metrics.py可按名称解析指标类列表METRIC_REGISTRY中注册了全部内置指标。Notebook 中还演示了get_retrieval_results_df见 notebook_utils.py将多次评估结果整理为 DataFrame 的用法。3.3 配套实验数据检索评估 Notebook 使用 docs/examples/evaluation/test_wiki_data 目录下的纽约市NYC文本作为测试语料你可以直接复用该数据验证自己的检索器与指标计算。四、实战组装一套完整的 RAG 评估流水线综合以上模块一个典型的评估流程可以按如下步骤组织所有类均从llama_index.core.evaluation导入from llama_index.core.evaluation import ( DatasetGenerator, # 步骤 1自动生成评估数据 FaithfulnessEvaluator, # 步骤 2忠实度 RelevancyEvaluator, # 步骤 2相关性 CorrectnessEvaluator, # 步骤 2正确性需 reference BatchEvalRunner, # 步骤 3批量并行 ) from llama_index.core.evaluation.retrieval import RetrieverEvaluator, resolve_metrics # 1. 从文档生成 (query, reference) 评估集 dataset_generator DatasetGenerator.from_documents(documents) qr_pairs dataset_generator.generate_dataset_from_nodes() # 2. 注册多个评估器 evaluators { faithfulness: FaithfulnessEvaluator(), relevancy: RelevancyEvaluator(), } # 3. 批量并发评估自动附带重试与并发控制 runner BatchEvalRunner(evaluators, workers4, show_progressTrue) results runner.evaluate_response_strs( queries[q for q, _ in qr_pairs], response_strs[r for _, r in qr_pairs], ) # 4. 检索评估用 HitRate MRR 度量检索质量 retriever_evaluator RetrieverEvaluator.from_metric_names( [hit_rate, mrr], retrievermy_retriever ) eval_result await retriever_evaluator.aevaluate( query..., expected_idsexpected_node_ids )五、进一步探索评估模块完整源码llama-index-core/llama_index/core/evaluation/核心评估器、batch_runner.py、dataset_generation.py、retrieval/子目录全部评估示例 Notebookdocs/examples/evaluation响应评估与 docs/examples/evaluation/retrieval/retriever_eval.ipynb检索评估其余进阶示例AIMon、BEIR、HotpotQA、RetryQuery、Tonic Validate、mt_bench 等同样位于该目录可结合 evaluation/init.py 中导出的类清单按图索骥评估是 RAG 系统迭代的仪表盘用FaithfulnessEvaluator守住幻觉底线用RelevancyEvaluator把关相关性用RetrieverEvaluator的 HitRate/MRR/NDCG 量化检索质量再借BatchEvalRunner把以上指标沉淀为每次改动后的回归报告——这就是 LlamaIndex 评估模块为你准备好的完整工具箱。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表