案例目标本案例展示了如何从文档数据中生成问题列表这对于设置使用FaithfulnessEvaluator和RelevancyEvaluator评估工具的评估管道非常有用。主要目标包括演示如何使用LlamaIndex的DatasetGenerator从文档中生成评估问题展示如何使用生成的问题对查询引擎进行相关性评估说明如何使用RelevancyEvaluator评估查询响应的相关性提供问题生成和评估的完整工作流程展示如何使用pandas DataFrame可视化评估结果技术栈与核心依赖# 核心依赖 !pip install llama-index-llms-openai !pip install llama-index主要组件LlamaIndex: 构建查询引擎和问题生成的核心框架DatasetGenerator: LlamaIndex提供的问题生成器用于从文档中生成评估问题RelevancyEvaluator: LlamaIndex提供的相关性评估器用于评估查询响应的相关性OpenAI: 提供LLM模型(gpt-4)用于问题生成和评估VectorStoreIndex: LlamaIndex的向量存储索引用于构建查询引擎Pandas: 用于数据处理和评估结果可视化环境配置# 导入必要库 import logging import sys import pandas as pd from llama_index.core.evaluation import DatasetGenerator, RelevancyEvaluator from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, Response from llama_index.llms.openai import OpenAI # 配置日志 logging.basicConfig(streamsys.stdout, levellogging.INFO) logging.getLogger().addHandler(logging.StreamHandler(streamsys.stdout)) # 初始化模型 gpt4 OpenAI(temperature0, modelgpt-4) evaluator_gpt4 RelevancyEvaluator(llmgpt4)注意在本案例中我们使用OpenAI的gpt-4模型进行问题生成和评估。温度参数设置为0以确保生成的问题和评估结果更加一致和可预测。案例实现1数据准备首先我们下载并加载Paul Graham的文章作为数据源# 创建数据目录并下载文件 !mkdir -p data/paul_graham/ !wget https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt -O data/paul_graham/paul_graham_essay.txt # 加载数据 reader SimpleDirectoryReader(./data/paul_graham/) documents reader.load_data()2问题生成使用DatasetGenerator从文档中生成评估问题# 创建数据生成器 data_generator DatasetGenerator.from_documents(documents) # 生成问题 eval_questions data_generator.generate_questions_from_nodes()生成的问题示例1. What were the two main things the author worked on before college?2. How did the author describe their early attempts at writing short stories?3. What type of computer did the author first work on for programming?系统共生成了60个问题涵盖了文档中的各个主题和细节。3查询引擎创建使用VectorStoreIndex创建查询引擎# 创建向量索引 vector_index VectorStoreIndex.from_documents(documents) # 创建查询引擎 query_engine vector_index.as_query_engine()4评估函数定义定义一个用于显示评估结果的函数def display_eval_df(query: str, response: Response, eval_result: str) - None: eval_df pd.DataFrame( { Query: query, Response: str(response), Source: ( response.source_nodes[0].node.get_content()[:1000] ... ), Evaluation Result: eval_result, }, index[0], ) eval_df eval_df.style.set_properties( **{ inline-size: 600px, overflow-wrap: break-word, }, subset[Response, Source], ) display(eval_df)5查询与评估使用生成的问题进行查询并评估响应的相关性# 执行查询 response_vector query_engine.query(eval_questions[1]) # 评估响应相关性 eval_result evaluator_gpt4.evaluate_response( queryeval_questions[1], responseresponse_vector )6结果显示使用定义的函数显示评估结果display_eval_df(eval_questions[1], response_vector, eval_result)评估结果示例QueryResponseSourceEvaluation ResultHow did the author describe their early attempts at writing short stories?The author described their early attempts at writing short stories as awful. They mentioned that their stories had hardly any plot and were mostly about characters with strong feelings, which they thought made the stories deep.What I Worked OnFebruary 2021Before college the two main things I worked on, outside of school, were writing and programming. I didnt write essays. I wrote what beginning writers were supposed to write then, and probably still are: short stories. My stories were awful. They had hardly any plot, just characters with strong feelings, which I imagined made them deep...YES案例效果通过本案例我们实现了以下效果问题生成成功从Paul Graham的文章中生成了60个涵盖不同主题的评估问题这些问题涵盖了作者的教育背景、职业经历、技术工作、创业经历等多个方面。相关性评估使用RelevancyEvaluator对查询响应进行评估结果显示响应与查询高度相关评估结果为YES。结果可视化使用pandas DataFrame清晰地展示了查询、响应、源文档和评估结果便于分析和理解评估过程。问题生成质量分析生成的问题具有以下特点多样性问题涵盖了文档中的多个主题和细节相关性问题与文档内容高度相关可回答性大多数问题都可以从文档中找到答案语言自然问题表达自然符合人类提问习惯评估结果分析评估结果表明查询引擎能够准确回答生成的问题响应内容与源文档高度相关评估器能够有效识别响应的相关性可视化结果清晰展示了评估过程和结果关键发现自动生成的问题可以有效地用于评估查询引擎的性能而RelevancyEvaluator能够准确地评估响应的相关性。这种方法为构建自动化评估管道提供了基础。案例实现思路本案例的实现思路可以概括为以下几个步骤1. 数据准备首先准备评估所需的数据源本案例使用Paul Graham的文章作为示例。数据准备包括下载文档、使用SimpleDirectoryReader加载文档等步骤。2. 问题生成使用DatasetGenerator从文档中生成评估问题。这个过程包括创建DatasetGenerator实例然后调用generate_questions_from_nodes()方法生成问题列表。3. 查询引擎创建使用VectorStoreIndex从文档创建向量索引然后基于索引创建查询引擎。这个查询引擎将用于回答生成的问题。4. 评估器配置配置RelevancyEvaluator指定使用的LLM模型本例中使用gpt-4。评估器将用于评估查询响应的相关性。5. 查询与评估使用生成的问题对查询引擎进行查询然后使用评估器评估响应的相关性。这个过程包括执行查询、获取响应、评估响应等步骤。6. 结果可视化使用pandas DataFrame将查询、响应、源文档和评估结果组织成表格形式便于分析和理解评估结果。技术实现细节问题生成策略DatasetGenerator使用LLM分析文档内容然后基于文档内容生成相关问题相关性评估方法RelevancyEvaluator使用LLM比较查询和响应判断响应是否与查询相关结果展示方式使用pandas的Styler功能美化表格显示提高可读性扩展建议基于本案例可以考虑以下扩展方向1. 评估指标扩展添加更多评估指标如FaithfulnessEvaluator忠实度评估实现自定义评估指标针对特定应用场景开发评估指标组合策略综合评估查询引擎性能2. 问题生成优化调整问题生成的参数如问题数量、问题类型等实现问题分类生成不同类型的问题事实型、推理型、比较型等开发问题质量控制机制过滤低质量问题3. 批量评估实现实现批量评估功能一次性评估多个问题开发评估结果聚合方法计算整体性能指标实现评估结果的可视化如图表展示性能分布4. 评估管道自动化构建完整的评估管道自动化整个评估流程实现评估报告生成功能输出详细的评估报告开发评估结果对比功能比较不同配置的查询引擎性能5. 高级应用场景扩展到多模态数据评估如图像、音频等实现跨语言评估评估多语言查询引擎性能开发领域特定评估策略针对医疗、法律等专业领域6. 评估结果分析实现评估结果的深度分析识别查询引擎的优势和不足开发错误分析功能分析查询失败的原因实现改进建议生成基于评估结果提供优化建议总结本案例展示了如何使用LlamaIndex的DatasetGenerator从文档中生成评估问题并使用RelevancyEvaluator评估查询响应的相关性。这种方法为构建自动化评估管道提供了基础可以有效地评估查询引擎的性能。关键收获包括问题生成价值自动生成的问题可以有效地用于评估查询引擎减少手动创建问题的工作量。评估器重要性RelevancyEvaluator等评估工具可以客观地评估查询响应的质量提供量化指标。结果可视化使用pandas DataFrame可以清晰地展示评估结果便于分析和理解。评估管道构建本案例为构建完整的评估管道提供了基础可以进一步扩展和优化。自动化评估通过问题生成和自动评估可以实现查询引擎性能的自动化评估提高评估效率。问题生成和评估是构建高质量查询引擎的重要环节。通过本案例的方法开发者可以有效地评估和优化查询引擎的性能确保系统能够准确、相关地回答用户查询。