使用 LangSmith 评估 RAG 应用
一句话
LangSmith 提供了一套完整的工具和评估器,用于评估 RAG 应用的性能,包括答案正确性、相关性、基础性和检索质量。
什么时候翻这页
当你需要评估和优化你的 RAG 应用性能,或者想了解如何使用 LangSmith 进行系统化的 RAG 评估时。
核心概念
- RAG 评估工作流程:包含三个主要步骤:创建包含问题和预期答案的数据集、在数据集上运行 RAG 应用、使用评估器测量应用性能
- 评估器类型:
- 正确性(Correctness):评估生成答案与参考答案的相似度和准确性
- 相关性(Relevance):评估生成答案是否解决了用户问题
- 基础性(Groundedness):评估生成答案是否基于检索到的文档,避免幻觉
- 检索相关性(Retrieval Relevance):评估检索到的文档是否与问题相关
- LLM-as-judge:使用大型语言模型作为评估器,通过结构化输出确保评估的一致性
怎么做
-
环境设置:
- 设置环境变量:
LANGSMITH_TRACING、LANGSMITH_API_KEY、OPENAI_API_KEY - 安装必要的依赖包
- 设置环境变量:
-
构建 RAG 应用:
- 索引:将文档分块并添加到 vector store
- 检索:根据用户问题检索相关文档块
- 生成:将问题和检索到的文档传递给 LLM 生成答案
-
创建评估数据集:
- 定义包含问题和参考答案的示例
- 使用 LangSmith 创建数据集和示例
-
定义评估器:
- 为每种评估类型创建评估器函数
- 使用结构化输出确保评估的一致性
-
运行评估:
- 使用
client.evaluate方法运行评估 - 指定目标函数、数据集、评估器和实验前缀
- 使用
命令 / API 速查
- 环境变量设置:
os.environ["LANGSMITH_TRACING"] = "true" os.environ["LANGSMITH_API_KEY"] = "YOUR LANGSMITH API KEY" os.environ["OPENAI_API_KEY"] = "YOUR OPENAI API KEY" - 依赖安装:
pip install -U langsmith langchain[openai] langchain-text-splitters bs4 requests - 创建数据集:
dataset = client.create_dataset(dataset_name="Lilian Weng Blogs Q&A") client.create_examples(dataset_id=dataset.id, examples=examples) - 运行评估:
experiment_results = client.evaluate( target, data=dataset_name, evaluators=[correctness, groundedness, relevance, retrieval_relevance], experiment_prefix="rag-doc-relevance", metadata={"version": "LCEL context, gpt-4-0125-preview"}, )
与 Hello-Agents / LangGraph / 本博客 handbook 索引的联系
本教程中的 RAG 应用构建方法与 Hello-Agents 中学习的检索概念一致,使用了相同的 chunking、embedding 和 vector store 技术。与 LangGraph 结合使用时,可以将 RAG 组件作为节点集成到更复杂的工作流中。本博客 handbook 中已使用 Chroma 作为 vector store,而本教程展示了如何使用 InMemoryVectorStore,两者都是 vector store 的实现,可以互换使用。
初学者易错点
- 评估器温度设置:评估器应使用
temperature=0以确保结果的一致性和确定性 - 结构化输出:使用
with_structured_output确保评估器返回结构化数据 - 文档分块:适当的 chunk 大小和重叠对检索质量至关重要
- 评估数据集质量:参考答案的质量直接影响正确性评估的准确性
- 幻觉检测:基础性评估器是检测 RAG 应用中幻觉的重要工具