以编程方式使用文档

本页面涵盖 LangSmith 中评估的两个方面:

  1. **评估类型**: _何时以及为何_ 进行评估。离线评估类型(基准测试、单元测试、回归测试)用于部署前测试,在线评估类型(监控、异常检测)用于生产环境。
  2. **评估器实现**: _如何_ 进行评估。可用的评估器方法(LLM 评判、代码、复合、摘要、成对)以及在哪里配置它们(UI 或 SDK、离线或在线)。

理解这两个方面有助于您构建全面的评估策略,在部署前验证功能,并在生产环境中监控质量。

离线评估类型

离线评估在部署前基于精选数据集测试应用程序。通过使用带有参考输出的示例运行评估,团队可以比较版本、验证功能,并在将更改暴露给用户之前建立信心。

使用 LangSmith SDK(PythonTypeScript)在客户端运行离线评估,或通过 Playground or by 将评估器绑定到数据集.

!离线

基准测试

_基准测试_ 在精选数据集上比较多个应用程序版本以识别最佳性能者。此过程涉及创建具有代表性输入的数据集、定义性能指标以及测试每个版本。

基准测试需要使用金标准参考输出进行数据集策划以及精心设计的比较指标。例如: - **RAG 问答机器人**:问题和参考答案的数据集,使用 LLM 评判评估器检查实际答案与参考答案之间的语义等价性。 - **ReAct 智能体**:用户请求和参考工具调用的数据集,使用启发式评估器验证是否执行了所有预期的工具调用。

单元测试

_单元测试_ 验证单个系统组件的正确性。在 LLM 场景中, 单元测试通常是针对输入或输出的基于规则的断言 (例如,验证 LLM 生成的代码能够编译、JSON 成功加载),用于验证基本功能。

单元测试通常期望一致的通过结果,使其适合在 CI 流水线中使用。运行在 CI 中时,配置缓存以最大程度减少 LLM API 调用和相关成本。

更多详细信息,请参阅 PytestVitest/Jest pages.

回归测试

_回归测试_ 衡量应用程序版本随时间的性能一致性。它们确保新版本不会降低当前版本正确处理的案例的性能,理想情况下还能展示相对于基准的改进。这些测试通常在做出可能影响用户体验的更新时运行(例如,模型或架构变更)。

LangSmith 的比较视图突出显示相对于基准的回归(红色)和改进(绿色),从而能够快速识别变化。

!比较视图

回溯测试

_回溯测试_ 根据历史生产数据评估新应用版本。生产日志被转换为数据集,然后新版本处理这些示例以评估其在过去的真实用户输入上的性能。

这种方法常用于评估新模型发布。例如,当新模型可用时,在最新的生产运行上测试它,并将结果与实际生产结果进行比较。

成对评估

_成对评估_ 通过确定相对质量来比较两个版本的输出,而不是分配绝对分数。对于某些任务, 确定"版本 A 优于 B" 比独立为每个版本打分更容易。

这种方法对于主观任务的 LLM 即评判者评估特别有用。例如,在摘要中,确定"哪个摘要更清晰、更简洁?"通常比分配数字清晰度分数更简单。

了解 如何运行成对评估.

在线评估类型

在线评估近实时地评估生产应用输出。没有参考输出的情况下,这些评估专注于检测问题、监控质量趋势,以及识别可inform未来离线测试的边缘案例。

在线评估器通常在服务端运行。LangSmith 提供内置 LLM 即评判者评估器 用于配置,并支持在 LangSmith 内运行的自定义代码评估器。

!在线

实时监控

当用户与系统交互时,持续监控应用质量。在线评估在生产流量上自动运行,为每次交互提供即时反馈。这使得能够在质量下降、异常模式或意外行为影响大量用户之前进行检测。

异常检测

识别偏离预期模式的异常值和边缘案例。在线评估器可以标记具有异常特征的运行——异常长或短的响应、意外的错误率,或未通过安全检查的输出——供人工审核并可能添加到离线数据集中。

生产反馈循环

利用生产中的洞察改进离线评估。在线评估暴露出现实世界的问题和使用模式,这些可能在精选数据集中不会出现。失败的生产运行成为数据集示例的候选,创建一个迭代循环,生产经验持续改进测试覆盖范围。

实现评估器

上述评估类型描述了 _何时_ 进行评估。LangSmith 提供了多种方法来实现适用于这些评估类型的 _如何_ 实现评估器。

LLM-as-a-judge

使用 LLM 根据提示中定义的标准对输出进行评分。这种方法非常适用于语气、清晰度或语义正确性等主观质量,这些质量难以用确定性规则来捕获。

常见用例包括根据参考输出评估事实准确性(离线)或检查生产响应中的毒性(在线)。例如,对 RAG 系统进行基准测试可能使用 LLM 即评判者评估器来检查生成答案和参考答案之间的语义等价性。

为以下场景配置 LLM 即评判者评估器: - 程序化离线评估: 使用 SDK - 数据集上的离线评估: 在 UI 中 - 生产追踪的在线评估: 在 UI 中

代码评估器

编写确定性的、基于规则的函数来检查特定条件。这些评估器执行自定义逻辑来验证结构、检查模式或应用业务规则。

代码评估器对于单元测试特别有用——验证生成的代码能够编译、JSON 正确解析或必填字段存在。在回归测试中,它们可以跟踪结构化输出一致性。对于在线监控,它们可以实时捕获格式违规。

定义代码评估器用于: - 数据集的离线评估: 在 UI 中 - 编程式离线评估: 使用 SDK - 生产追踪的在线评估: 在 UI 中

复合评估器

使用加权平均或求和将多个评估器分数合并为单个指标。这创建了反映多个评估标准的综合质量分数。

对于基准测试,复合分数有助于从多个维度比较版本(例如,70% 准确率 + 20% 清晰度 + 10% 简洁度)。在在线监控中,它们为仪表板和警报提供单一指标。例如,将整体聊天机器人质量作为有用性、正确性和语调分数的加权组合进行跟踪。

设置复合评估器用于: - 预定义聚合的离线评估: 在 UI 中 - 自定义聚合逻辑的离线评估: 使用 SDK - 生产追踪的在线评估: 在 UI 中

汇总评估器

跨整个实验而非单个示例计算指标。这些评估器接收数据集的所有输出并计算汇总统计数据,如精确率、召回率、F1 分数或分布分析。

汇总评估器对于需要数据集级指标的基准测试至关重要——比较跨版本的整体性能而非逐个示例的分数。它们仅适用于离线评估,因为需要处理完整数据集。

实现汇总评估器用于: - 离线评估的自定义聚合函数: 使用 SDK

成对评估器

比较两个版本的输出来确定相对质量。这种方法在前面关于 成对评估中有所介绍,当绝对评分困难但确定"哪个更好"很简单时很有帮助。

运行成对评估用于: - 比较现有实验: 使用 SDK