评估LLM应用程序面临独特的挑战。对于LLM应用程序来说,准确度等传统指标通常不足,而人工审查其输出无法扩展。需要结构化、可重复的方式来评估相关性、事实依据、毒性和对特定指令的遵循情况。专门的LLM评估框架应对了这些挑战。这些工具提供基础设施和预定义的方法,以使LLM系统的评估变得更简单。它们通常提供以下功能:实验追踪: 记录每次运行的提示、LLM配置、生成响应和相关元数据。评估指标: 为常见任务(例如,摘要质量、问答正确性、RAG上下文相关性)提供内置评估器,并允许自定义指标定义。数据集管理: 存储和管理评估数据集(输入提示和预期/理想输出或标准)。可视化: 提供仪表板和工具,用于比较不同运行、提示或模型版本的结果。反馈集成: 能够将人工反馈与自动化指标结合起来。让我们看看Python生态系统中几个突出的例子。LangSmithLangSmith由LangChain公司开发,旨在调试、测试、评估和监控使用或包含LangChain组件构建的应用程序。它对链和代理的执行提供高度可见性。评估的重要功能包括:追踪: 自动捕获LangChain运行的详细追踪,包括输入、输出、中间步骤和时间。数据集与测试: 允许您创建示例数据集(输入和可选的参考输出)。然后,您可以在这些数据集上运行您的LLM应用程序并应用评估器。评估器: 提供标准评估器(例如,字符串距离、JSON有效性、嵌入距离、使用LLM的基于标准的评估)。您也可以在Python中定义自定义评估器。监控: 追踪性能、成本和延迟随时间的变化,有助于发现生产中的回归或问题。集成LangSmith通常涉及设置环境变量,并可能向您的LangChain应用程序添加几行代码以启用日志记录。# 示例:为LangSmith设置环境变量 # (确保您已安装langchain-langsmith) import os from langsmith import Client # 通常在您的环境文件(.env文件等)中设置这些 # os.environ["LANGCHAIN_TRACING_V2"] = "true" # os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com" # os.environ["LANGCHAIN_API_KEY"] = "YOUR_LANGSMITH_API_KEY" # os.environ["LANGCHAIN_PROJECT"] = "My LLM App Evaluation" # 可选:组织运行 # 您可以通过编程方式检查设置 # client = Client() # 默认使用环境变量 # 现在,LangChain运行将自动记录到LangSmith # ... (您的LangChain代码,例如 chain.invoke({...})) ...LangSmith提供了一个网页界面,您可以在此查看追踪、管理数据集、配置测试和分析结果。TruLensTruLens专注于LLM应用程序的评估和追踪,特别强调可解释性,尤其是对于检索增强生成(RAG)系统。它通过追踪中间结果并对其进行评估,帮助您理解应用程序产生特定输出的原因。重要功能包括:仪表化: 封装您的LLM应用程序(兼容LangChain、LlamaIndex甚至自定义Python代码),以记录输入、输出和内部调用。反馈函数: 提供预定义的Python函数,用于评估特定质量,如答案相关性、上下文相关性(针对RAG)、事实依据(检查响应是否由提供的上下文支持)以及安全/毒性指标。也支持自定义反馈函数。RAG三元组: 明确追踪并协助评估RAG应用程序中查询、检索到的上下文和最终响应之间的关系。仪表板: 提供一个网页用户界面,用于查看已记录的数据、可视化评估结果以及比较应用程序的不同版本。# 示例:基本的TruLens仪表化 # (确保您已安装trulens-eval) from trulens_eval import TruChain, Feedback, Huggingface from trulens_eval.tru_custom_app import TruCustomApp import numpy as np # 假设 'my_llm_chain' 是您的LangChain链或类似的可调用应用程序 # 对于非LangChain应用程序,您可以使用TruCustomApp # 定义反馈函数(使用Huggingface提供者的示例) hugs = Huggingface() f_groundedness = Feedback(hugs.groundedness_measure_with_cot_reasons).on_input_output() f_answer_relevance = Feedback(hugs.relevance).on_input_output() # 仪表化链/应用程序 tru_recorder = TruChain(my_llm_chain, # 您的应用程序 app_id='My RAG App v1', feedbacks=[f_groundedness, f_answer_relevance]) # 使用已仪表化的应用程序 - 记录和评估会自动进行 with tru_recorder as recording: response = my_llm_chain.invoke({"question": "What is the capital of Malaysia?"}) # 通过仪表板或编程方式查看结果 # tru.get_records_and_feedback(app_ids=[]) # tru.run_dashboard() # 启动网页用户界面TruLens擅长指出RAG等复杂工作流中的故障,帮助您判断问题是否源于检索不佳、推理错误或其他因素。其他框架和考量除了LangSmith和TruLens之外,还有其他工具可以满足特定的评估需求:Ragas: 专门用于评估RAG管道,提供如忠实度、答案相关性、上下文准确性和上下文召回率等指标。DeepEval: 评估LLM的方式类似于单元测试,允许您定义带有特定输入和评估指标(包括自定义指标)的测试用例,并在您的CI/CD管道中运行。选择框架通常取决于您现有的技术栈(LangChain用户可能倾向于LangSmith)和您的主要评估侧重(RAG开发者可能会觉得TruLens或Ragas特别有用)。整合人工反馈: 自动化指标对于大规模应用很重要,但它们不能捕捉所有信息。细节、主观质量以及与用户期望的一致性通常需要人工判断。许多框架认识到这一点并提供方法来:记录人工评分: 允许用户通过框架的用户界面或API对已记录的交互进行评分或标注。比较人工与自动化: 分析自动化指标和人工评分之间的相关性(或缺乏相关性),以改进自动化评估器。主动学习: 使用人工反馈来整理更好的评估数据集或微调模型。有效地测试和评估LLM应用程序需要的不仅仅是简单的检查。像LangSmith和TruLens这样的框架提供了必要的结构,以便系统地评估质量、追踪长期性能,并将自动化指标和人工见解整合到您的开发流程中。它们有助于将评估从临时任务转变为持续的、数据驱动的实践。