ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LlamaIndex 评估模块完全指南:构建可量化的 RAG 与 Agent 质量度量体系

LlamaIndex 评估模块完全指南:构建可量化的 RAG 与 Agent 质量度量体系 LlamaIndex 评估模块完全指南构建可量化的 RAG 与 Agent 质量度量体系【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index评估Evaluation与基准测试Benchmarking是 LLM 应用开发中不可或缺的环节要持续改进 RAG、Agent 等应用的表现首先必须建立一套可靠的度量手段。本指南以 LlamaIndex 的 Evaluating 模块为线索系统讲解响应评估Response Evaluation与检索评估Retrieval Evaluation两大主线涵盖BaseEvaluator统一接口、六大 LLM 驱动的评估形态、问题自动生成、批量评估与检索排序指标MRR、Hit Rate 等并结合仓库源码给出可直接运行的实战示例。读完本文你将能够为自己的 RAG 应用搭建从数据集生成、单条评估到批量回归的完整质量度量流水线。为什么需要评估LLM 应用度量的特殊挑战在传统机器学习中模型的预测结果通常是单一数值定量指标如准确率、F1可以直接定义。而 LLM 生成任务不同预测结果是一段自然语言文本难以用简单的数值直接度量好坏。正如 evaluating/index.md 开篇所述To improve the performance of an LLM app (RAG, agents), you must have a way to measure it——评估与基准测试是 LLM 开发中的核心概念。LlamaIndex 为此提供了两条互补的度量主线响应评估Response Evaluation生成的答案是否与检索到的上下文一致是否与查询匹配是否与参考答案或业务准则相符检索评估Retrieval Evaluation检索到的来源片段是否与查询相关前者衡量答案生成环节的质量后者独立衡量检索环节的质量。两者结合才能定位 RAG 应用中的瓶颈究竟出在召回retrieval还是生成synthesis。响应评估LLM 驱动的质量判定评估生成结果之所以困难根源在于预测结果不是单一数值见 evaluating/index.md。LlamaIndex 的解决方案是LLM-based 评估使用一个金牌LLM例如 GPT-4充当裁判以多种方式判断预测答案是否正确。一个关键设计是多数评估模块不要求人工标注的 ground-truth 标签只需将查询query、上下文contexts、响应response以不同组合喂给 LLM即可完成评估。LlamaIndex 提供以下六种评估形态见 evaluating/index.md评估形态判定问题是否需要标签Correctness正确性在给定查询下生成答案是否与参考答案一致需要requires labelsSemantic Similarity语义相似度预测答案与参考答案是否语义相似需要requires labelsFaithfulness忠实度答案是否忠实于检索到的上下文是否存在幻觉不需要Context Relevancy上下文相关性检索到的上下文是否与查询相关不需要Answer Relevancy答案相关性生成的答案是否与查询相关不需要Guideline Adherence准则遵循预测答案是否遵循特定的业务准则不需要从源码结构看六种形态分别对应 llama-index-core/llama_index/core/evaluation/ 目录下的独立实现文件correctness.py、semantic_similarity.py、faithfulness.py、context_relevancy.py、answer_relevancy.py、guideline.py它们均继承自统一的BaseEvaluator基类。统一接口BaseEvaluator与EvaluationResult所有评估模块都实现同一个基类BaseEvaluator定义于 base.py对外暴露两个核心方法1.evaluate方法——接收query、contexts、response以及额外关键字参数def evaluate( self, query: Optional[str] None, contexts: Optional[Sequence[str]] None, response: Optional[str] None, **kwargs: Any, ) - EvaluationResult:2.evaluate_response方法——提供另一种接口直接接收 LlamaIndex 的Response对象其中同时包含响应字符串和 source nodes无需手动拆分contexts与responsedef evaluate_response( self, query: Optional[str] None, response: Optional[Response] None, **kwargs: Any, ) - EvaluationResult:从 base.py 的实现可以看出evaluate_response在功能上与evaluate完全等价它内部将response.response提取为响应字符串并将response.source_nodes中每个节点的get_content()提取为上下文列表再转交给evaluate。因此在与 LlamaIndex 对象直接打交道时例如把 query engine 的输出喂给评估器evaluate_response更简洁。基类还提供对应的异步版本aevaluate与aevaluate_response供高并发场景使用。每个评估器执行后都会输出一个EvaluationResult其关键字段定义在 base.pyeval_result evaluator.evaluate(query..., contexts..., response...) eval_result.passing # 二值通过/失败bool eval_result.score # 数值评分float eval_result.feedback # 字符串反馈LLM 的判定理由此外EvaluationResult还携带query、contexts、response原始输入以及pairwise_source仅成对比较使用、invalid_result与invalid_reason标记无效评估等字段。不同评估器只会填充其中一部分字段例如 FaithfulnessEvaluator 会填充passing、score与feedback而语义相似度评估器则主要产出数值型score。实战一评估响应的忠实度幻觉检测FaithfulnessEvaluator用于判断答案是否忠实于检索到的上下文——换句话说检测答案是否存在幻觉hallucination。完整用法见 usage_pattern.mdfrom llama_index.core import VectorStoreIndex from llama_index.llms.openai import OpenAI from llama_index.core.evaluation import FaithfulnessEvaluator # create llm llm OpenAI(modelgpt-4, temperature0.0) # build index ... # define evaluator evaluator FaithfulnessEvaluator(llmllm) # query index query_engine vector_index.as_query_engine() response query_engine.query( What battles took place in New York City in the American Revolution? ) eval_result evaluator.evaluate_response(responseresponse) print(str(eval_result.passing))你还可以选择逐条评估每个检索来源遍历response.source_nodes对每个 source node 单独构造contexts并调用evaluate最终得到与 source nodes 一一对应的结果列表from llama_index.core import VectorStoreIndex from llama_index.llms.openai import OpenAI from llama_index.core.evaluation import FaithfulnessEvaluator # create llm llm OpenAI(modelgpt-4, temperature0.0) # build index ... # define evaluator evaluator FaithfulnessEvaluator(llmllm) # query index query_engine vector_index.as_query_engine() response query_engine.query( What battles took place in New York City in the American Revolution? ) response_str response.response for source_node in response.source_nodes: eval_result evaluator.evaluate( responseresponse_str, contexts[source_node.get_content()] ) print(str(eval_result.passing))源码级原理SummaryIndex 上的 YES/NO 问答从 faithfulness.py 的aevaluate实现可以看出底层机制将每个 context 包装为Document构造SummaryIndex用_eval_template作为text_qa_template、_refine_template作为 refine 模板构建 query engine 对响应文本进行 YES/NO 问答若原始输出文本小写后包含yes则passingTrue否则为False返回EvaluationResult其中score在通过时为1.0、失败时为0.0feedback保存 LLM 的原始判定文本。默认评估模板DEFAULT_EVAL_TEMPLATE要求 LLM只要任意部分上下文支持该信息就回答 YES即使大部分上下文无关同时提供了针对 Llama 3 8B 优化的LLAMA3_8B_EVAL_TEMPLATE并通过TEMPLATES_CATALOG按模型名自动选择见 faithfulness.py。构造器还支持传入raise_error判定失败时抛异常以及自定义eval_template/refine_template。实战二评估查询与响应的相关性RelevancyEvaluator评估检索到的上下文和答案对于给定查询是否相关且一致。与 Faithfulness 不同该评估器必须传入query因为相关性是一个相对概念见 usage_pattern.mdfrom llama_index.core import VectorStoreIndex from llama_index.llms.openai import OpenAI from llama_index.core.evaluation import RelevancyEvaluator # create llm llm OpenAI(modelgpt-4, temperature0.0) # build index ... # define evaluator evaluator RelevancyEvaluator(llmllm) # query index query_engine vector_index.as_query_engine() query What battles took place in New York City in the American Revolution? response query_engine.query(query) eval_result evaluator.evaluate_response(queryquery, responseresponse) print(str(eval_result))同样地你也可以针对特定 source node 逐条评估from llama_index.core import VectorStoreIndex from llama_index.llms.openai import OpenAI from llama_index.core.evaluation import RelevancyEvaluator # create llm llm OpenAI(modelgpt-4, temperature0.0) # build index ... # define evaluator evaluator RelevancyEvaluator(llmllm) # query engine query_engine vector_index.as_query_engine() query What battles took place in New York City in the American Revolution? response query_engine.query(query) response_str response.response for source_node in response.source_nodes: eval_result evaluator.evaluate( queryquery, responseresponse_str, contexts[source_node.get_content()], ) print(str(eval_result.passing))源码级原理问题响应拼接的上下文核对从 relevancy.py 的aevaluate实现可以看到其判定逻辑评估器将Question: {query}\nResponse: {response}拼接为查询文本同样构建SummaryIndex并利用 eval/refine 模板对上下文做 YES/NO 判定。与 Faithfulness 的区别在于query被强制要求非空否则直接抛出ValueError。默认评估模板要求 LLM 判断查询对应的响应是否与提供的上下文信息一致。注意 relevancy.py 末尾还保留了QueryResponseEvaluator RelevancyEvaluator的向后兼容别名。问题生成用你的数据自动构造评估集除了评估已有查询LlamaIndex 还能基于你的数据自动生成待评估的问题——先自动生成问题再运行评估流程检验 LLM 是否真的能借助你的数据准确作答从而构建全自动的评估流水线见 usage_pattern.mdfrom llama_index.core import SimpleDirectoryReader from llama_index.llms.openai import OpenAI from llama_index.core.llama_dataset.generator import RagDatasetGenerator # create llm llm OpenAI(modelgpt-4, temperature0.0) # build documents documents SimpleDirectoryReader(./data).load_data() # define generator, generate questions dataset_generator RagDatasetGenerator.from_documents( documentsdocuments, llmllm, num_questions_per_chunk10, # set the number of questions per node ) rag_dataset dataset_generator.generate_questions_from_nodes() questions [e.query for e in rag_dataset.examples]生成的questions列表可以直接喂给下面的批量评估器。此外评估器评估结果本身也可以被打包为LabelledEvaluatorDataset再评估——这属于评估评估器evaluating evaluators的高级话题可参考 evaluating_evaluators_with_llamadatasets.md若希望把自己的LabelledRagDataset提交到 LlamaDatasets 社区流程见 contributing_llamadatasets.md。批量评估BatchEvalRunner大规模回归单个评估器只能处理单条查询LlamaIndex 提供BatchEvalRunner在大量问题上并行运行多个评估器见 usage_pattern.mdfrom llama_index.core.evaluation import BatchEvalRunner runner BatchEvalRunner( {faithfulness: faithfulness_evaluator, relevancy: relevancy_evaluator}, workers8, ) eval_results await runner.aevaluate_queries( vector_index.as_query_engine(), queriesquestions )从 batch_runner.py 的源码可以看到几个关键设计评估器以字典形式传入键为评估器名称如faithfulness、relevancy值对应评估器实例workers控制并发度内部通过asyncio.Semaphore信号量限制并发aevaluate_queries内部用 query engine 的aquery批量获取响应再并行执行各评估器的aevaluate_response所有 worker 函数都带有retry装饰器stop_after_attempt(3) 指数退避等待 4–10 秒对偶发的 LLM 调用失败具备容错能力。批量评估是 RAG 应用迭代回归的基石每当调整提示词、检索参数或模型后都可以用同一批问题重新跑一遍量化观察指标变化。检索评估独立度量检索质量检索评估的理念并不新鲜给定一组问题 ground-truth 排序数据集即可用排序指标如 MRR、命中率、精确率等评估检索器。LlamaIndex 的检索评估流程围绕两个核心步骤展开见 evaluating/index.md数据集生成基于非结构化文本语料合成question, context对检索评估给定检索器与一组问题用排序指标评估检索结果。使用RetrieverEvaluatorRetrieverEvaluator在给定检索器的情况下对单个查询 ground-truth 文档集合运行评估。标准做法是用from_metric_names指定一组指标见 usage_pattern_retrieval.mdfrom llama_index.core.evaluation import RetrieverEvaluator # define retriever somewhere (e.g. from index) # retriever index.as_retriever(similarity_top_k2) retriever ... retriever_evaluator RetrieverEvaluator.from_metric_names( [mrr, hit_rate], retrieverretriever ) retriever_evaluator.evaluate( queryquery, expected_ids[node_id1, node_id2] )其中expected_ids是人工标注的、应当被检索到的节点 ID 列表。检索评估指标MRR、Hit Rate、Precision、Recall……LlamaIndex 在 metrics.py 中实现了完整的排序指标家族并通过METRIC_REGISTRY注册resolve_metrics会校验指标名合法性指标名类说明hit_rateHitRate默认计算检索结果中是否至少命中一个期望文档use_granular_hit_rateTrue时改为命中数 / 期望文档数mrrMRR第一个相关文档的倒数排名的均值use_granular_mrrTrue时对所有相关文档的倒数排名取平均precisionPrecision检索结果中相关文档占比PrecisionK的 K 通常对应检索器的top_krecallRecall期望文档中被检索到的占比apAveragePrecision平均精确率ndcgNDCG归一化折损累计增益支持linear/exponential两种增益模式当前仅支持二值相关性cohere_rerank_relevancyCohereRerankRelevancyMetric基于 Cohere rerank 模型对检索文本打分后聚合mean/median/max这些指标的实现均为纯 ID 集合运算见 metrics.py不依赖 LLM 调用因此速度快、可复现适合作为检索回归的常规指标。构建检索评估数据集并批量运行你可以手动整理问题 节点 ID的检索评估数据集也可以基于现有文本语料用generate_question_context_pairs合成数据集见 usage_pattern_retrieval.mdfrom llama_index.core.evaluation import generate_question_context_pairs qa_dataset generate_question_context_pairs( nodes, llmllm, num_questions_per_chunk2 )返回的qa_dataset是一个EmbeddingQAFinetuneDataset对象包含queries、relevant_docs和corpus三个字段。该函数实现在 dataset_generation.py 中底层使用DEFAULT_QUESTION_GENERATION_PROMPT要求 LLM仅基于给定的上下文信息、不依赖先验知识生成问题并可通过num_questions_per_chunk控制每个文本块生成的问题数量。随后用便捷方法以批处理模式运行RetrieverEvaluator比逐条调用.evaluate快得多eval_results await retriever_evaluator.aevaluate_dataset(qa_dataset)从 evaluator.py 的源码可以看到RetrieverEvaluator的_aget_retrieved_ids_and_texts调用检索器的aretrieve并可选地串接一系列node_postprocessors如 reranker后再提取节点 ID 与文本这意味着一套评估流程可以同时覆盖检索 后处理重排的完整链路。仓库还提供了MultiModalRetrieverEvaluator将检索结果拆分为文本节点与图像节点分别处理见 evaluator.py。社区集成对接第三方评估工具LlamaIndex 还集成了多种社区评估工具见 evaluating/index.md可按需接入UpTrain提供面向 RAG 的评估框架Tonic Validate提供结果可视化 Web UIDeepEval提供 6 个评估器含 3 个 RAG 评估器覆盖检索器与生成器两端Ragas面向 RAG 评估的指标库RAGChecker面向 RAG 系统的诊断式检查工具Cleanlab与 Cleanlab 数据质量工具链集成。其中 DeepEval 的接入方式最为直接见 usage_pattern.md。首先安装pip install -U deepeval然后从deepeval.integrations.llama_index导入评估器直接套用evaluate_response接口即可from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from deepeval.integrations.llama_index import DeepEvalAnswerRelevancyEvaluator documents SimpleDirectoryReader(YOUR_DATA_DIRECTORY).load_data() index VectorStoreIndex.from_documents(documents) rag_application index.as_query_engine() # An example input to your RAG application user_input What is LlamaIndex? # LlamaIndex returns a response object that contains # both the output string and retrieved nodes response_object rag_application.query(user_input) evaluator DeepEvalAnswerRelevancyEvaluator() evaluation_result evaluator.evaluate_response( queryuser_input, responseresponse_object ) print(evaluation_result)DeepEval 的全部 6 个评估器可一次性导入from deepeval.integrations.llama_index import ( DeepEvalAnswerRelevancyEvaluator, DeepEvalFaithfulnessEvaluator, DeepEvalContextualRelevancyEvaluator, DeepEvalSummarizationEvaluator, DeepEvalBiasEvaluator, DeepEvalToxicityEvaluator, )延伸阅读模块 Notebook 与完整使用模式使用模式响应评估的完整用法见 usage_pattern.md检索评估见 usage_pattern_retrieval.md模块 Notebookmodules.md 列出了各评估组件的 Notebook 索引主题覆盖 Faithfulness、Relevancy、Answer/Context Relevancy、Guideline Eval、Correctness Eval、Semantic Similarity、Question Generation、Batch Eval、Multi-Modal RAG eval、DeepEval/UpTrain/RAGChecker/Cleanlab 集成以及检索评估等对应 Notebook 位于仓库的 docs/examples/evaluation/ 目录源码位置所有评估器的实现集中在 llama-index-core/llama_index/core/evaluation/其中base.py定义接口与结果对象各评估器为独立文件retrieval/子目录存放检索评估与指标实现multi_modal/子目录提供多模态 Faithfulness/Relevancy 评估benchmarks/子目录则包含 BEIR 与 HotpotQA 等基准数据集的接入实现。小结LlamaIndex 的评估体系可以概括为一句话用 LLM 判质量、用排序指标判检索、用生成器造数据、用 BatchEvalRunner 做回归。实践中最推荐的落地路径是先用RagDatasetGenerator或generate_question_context_pairs基于自有语料生成评估问题集再以FaithfulnessEvaluatorRelevancyEvaluator必要时叠加 Correctness / Semantic Similarity / Guideline Adherence通过BatchEvalRunner并行回归响应质量同时用RetrieverEvaluator配合 MRR、Hit Rate 等指标独立监控检索环节最终形成一套覆盖召回—生成全链路的、可重复执行的 RAG 质量度量体系。【免费下载链接】llama_indexLlamaIndex is the document processing platform for AI项目地址: https://gitcode.com/GitHub_Trending/ll/llama_index创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表