LLM 的输出具有非确定性,因此很难评估响应质量。评估(evals)可以帮助我们拆解“什么样的结果才算好”,并对其进行衡量。LangSmith Evaluation 提供了一个用于在整个应用生命周期中衡量质量的框架,涵盖从部署前测试到生产环境监控的各个阶段。

评估什么

在构建评估之前,先确定哪些方面对你的应用最重要。将系统拆分为关键组件——LLM 调用、检索步骤、工具调用、输出格式等——并为每个组件确定质量标准。 从人工整理的示例开始。 为每个关键组件创建 5–10 个“什么样的结果才算好”的示例。这些示例可以作为真实标准,并帮助你确定应采用哪种评估方法。例如:
  • RAG 系统:良好检索结果(相关文档)和良好答案(准确、完整)的示例。
  • Agent:正确选择工具、正确格式化参数,或 Agent 所采取的正确执行轨迹的示例。
  • 聊天机器人:有帮助、符合品牌调性的响应示例,并且能够解决用户意图。
通过示例定义“好”的标准后,你就可以衡量系统生成类似质量输出的频率。

离线评估和在线评估

LangSmith 支持两种评估类型,分别服务于开发流程中的不同目的:

离线评估

使用离线评估进行部署前测试:
  • 基准测试:比较多个版本,找出表现最佳的版本。
  • 回归测试:确保新版本不会降低质量。
  • 单元测试:验证各个组件的正确性。
  • 回测:使用历史数据测试新版本。
离线评估针对来自数据集的示例:这些是经过整理的测试用例,其中包含用于定义“什么样的结果才算好”的参考输出。

在线评估

使用在线评估进行生产环境监控:
  • 实时监控:持续跟踪线上流量的质量。
  • 异常检测:标记异常模式或边界情况。
  • 生产反馈:发现问题,并将其添加到离线数据集中。
在线评估针对来自追踪的运行和线程:这些是真实的生产环境追踪记录,且不包含参考输出。 评估目标的这一差异决定了你可以评估的内容:离线评估可以根据预期答案检查正确性,而在线评估则侧重于质量模式、安全性和真实世界中的行为。

评估生命周期

在开发并部署应用时,你的评估策略会从部署前测试逐步发展到生产环境监控。在开发和测试期间,离线评估使用经过整理的数据集验证功能。部署后,在线评估会在线上流量中监控生产环境行为。随着应用日趋成熟,两种评估类型会在迭代反馈循环中协同工作,持续改进质量。

1. 使用离线评估进行开发

在部署到生产环境之前,使用离线评估验证功能、对不同方法进行基准测试,并建立信心。 请按照快速入门运行你的第一个离线评估。

2. 使用在线评估进行初始部署

部署后,使用在线评估监控生产环境质量、检测意外问题,并收集真实世界数据。 了解如何为生产环境监控配置在线评估。

3. 持续改进

在迭代反馈循环中结合使用两种评估类型。在线评估发现的问题会转化为离线测试用例,离线评估验证修复结果,而在线评估则确认生产环境中的改进效果。

核心评估目标

评估运行在不同目标上,具体取决于它是离线评估还是在线评估。

离线评估的目标

离线评估运行在数据集和示例上。由于存在参考输出,因此可以比较预期结果与实际结果。

数据集

数据集是用于评估应用的_示例集合_。示例是一对测试输入和参考输出。 LangSmith UI 中 Examples 标签页上的数据集列表。

示例

每个示例由以下部分组成:
  • 输入:要传递给应用的输入变量字典。
  • 参考输出(可选):参考输出字典。这些内容不会传递给应用,仅用于评估器。
  • 元数据(可选):可用于创建数据集筛选视图的附加信息字典。
LangSmith UI 中的示例。 详细了解管理数据集。

实验

_实验_表示在某个数据集上评估特定应用版本所得到的结果。每个实验都会记录该数据集中每个示例的输出、评估器分数和执行追踪记录。 实验视图 通常会在同一个数据集上运行多个实验,以测试不同的应用配置(例如不同的提示词或 LLM)。LangSmith 会显示与数据集关联的所有实验,并支持并排比较多个实验。 了解如何分析实验结果。

在线评估的目标

在线评估运行在生产流量中的运行和线程上。由于没有参考输出,评估器会专注于实时检测问题、异常和质量下降。

运行

_运行_是来自已部署应用的一条执行追踪记录。每次运行包含:
  • 输入:应用实际接收到的用户输入。
  • 输出:应用实际返回的内容。
  • 中间步骤:所有子运行(工具调用、LLM 调用等)。
  • 元数据:标签、用户反馈、延迟指标等。
与数据集中的示例不同,运行不包含参考输出。在线评估器必须在不知道“正确”答案的情况下评估质量,而是依靠质量启发式方法、安全检查和无参考评估技术。 详细了解Observability 概念中的运行和追踪记录。

线程

_线程_是表示多轮对话的相关运行集合。在线评估器可以在线程级别运行,以评估完整对话,而不是单独的轮次。这样就可以评估跨轮次连贯性、主题保持情况以及整个交互过程中的用户满意度等对话级属性。

评估器

_评估器_是用于评估应用性能的工作区级资源。它们为离线评估和在线评估提供度量层,并根据可用数据调整输入。由于评估器的作用域为工作区,因此你可以将同一个评估器关联到多个追踪项目和数据集,而不必每次重新创建。 可以通过以下任一方式运行评估器:

将评估器关联到追踪项目或数据集

单个评估器可以关联到多个追踪项目和数据集。采样率、筛选器和支出限制等配置,是针对每个已关联的项目或数据集设置的,而不是针对评估器设置的。在评估器的 项目和数据集 标签页中,可以查看与其关联的项目和数据集。

评估器输入

评估器的输入取决于评估类型: 离线评估器接收:
  • 示例:来自数据集的示例,其中包含输入、参考输出和元数据。
  • 运行:应用基于示例输入运行后产生的实际输出和中间步骤。
在线评估器接收:
  • 运行:包含输入、输出和中间步骤的生产环境追踪记录(不包含参考输出)。

评估器输出

评估器返回反馈,即评估得到的分数。反馈是一个字典或字典列表。每个字典包含:
  • key:指标名称。
  • score | value:指标值(数值指标使用 score,类别指标使用 value)。
  • comment(可选):对该分数的补充理由或解释。

评估技术

LangSmith 支持多种评估方法:

人工评估

_人工评估_涉及人工检查应用输出和执行追踪记录。这种方法通常是开始评估的有效方式。LangSmith 提供了用于检查应用输出和追踪记录(所有中间步骤)的工具。 标注队列 标注队列可以简化对运行进行结构化人工反馈收集的过程。它们通过提供具有预设评分标准、团队协作功能和进度跟踪的有组织工作流,补充内联标注。 LangSmith 支持两种队列类型:
  • 单运行队列:根据自定义评分项,一次检查一条运行。适合问题分类,或从生产环境追踪记录构建数据集。单运行队列还支持断言,即离线评估器可以据此评估未来运行的自由格式验收标准。
  • 成对队列:并排比较两条运行,以判断哪一条更好。适用于在实验之间进行快速 A/B 比较。
主要功能包括:为每次运行配置多个评审者、启用预留以防止冲突,以及将带有标注的运行直接导出到数据集,用于未来的评估。

代码评估

_代码评估器_是确定性的、基于规则的函数。它们适用于以下检查:验证聊天机器人的响应结构不为空、生成的代码可以编译,或分类结果完全匹配。

LLM 作为评判者

_作为评判者的 LLM 评估器_使用 LLM 对应用输出进行评分。评分规则和标准通常编码在 LLM 提示词中。这些评估器可以是:
  • 无参考:检查输出是否包含攻击性内容,或是否符合特定标准。
  • 基于参考:将输出与参考内容进行比较(例如,检查相对于参考内容的事实准确性)。
作为评判者的 LLM 评估器需要仔细检查分数并调整提示词。少样本评估器会在评估提示词中加入输入、输出和预期评分示例,通常能够改善评估效果。 了解如何定义 LLM 作为评判者的评估器。

成对评估

_成对评估器_使用启发式方法(例如比较哪条响应更长)、LLM(使用成对比较提示词)或人工评审者,对两个应用版本的输出进行比较。 当直接为单个输出评分较为困难,但比较两个输出相对容易时,成对评估非常有效。例如,在摘要任务中,选择两个摘要中信息更丰富的一个,通常比为单个摘要分配绝对分数更容易。 了解如何运行成对评估。

无参考评估器与基于参考的评估器

了解评估器是否需要参考输出,对于确定其适用时机至关重要。 无参考评估器无需与预期输出进行比较即可评估质量,适用于离线评估和在线评估:
  • 安全检查:毒性检测、个人身份信息(PII)检测、内容政策违规检测
  • 格式验证:JSON 结构、必填字段、模式合规性
  • 质量启发式指标:响应长度、延迟、特定关键词
  • 无参考的 LLM 作为评判者:清晰度、连贯性、有用性、语气
基于参考的评估器需要参考输出,仅适用于离线评估:
  • 正确性:与参考答案的语义相似度
  • 事实准确性:根据真实标准进行事实核查
  • 完全匹配:具有已知标签的分类任务
  • 基于参考的 LLM 作为评判者:将输出质量与参考内容进行比较
在设计评估策略时,无参考评估器可以在离线测试和在线监控之间保持一致,而基于参考的评估器则能够在开发期间进行更精确的正确性检查。

评估类型

LangSmith 支持适用于开发和部署不同阶段的多种评估方法。了解每种类型的适用时机,有助于构建全面的评估策略。 离线评估和在线评估服务于不同目的:
  • 离线评估类型:使用包含参考输出的整理数据集进行部署前测试
  • 在线评估类型:在没有参考输出的情况下,监控线上流量中的生产环境行为
详细了解评估类型及其适用时机。

最佳实践

构建数据集

构建数据集有多种策略: 人工整理的示例 这是推荐的起点。创建 10–20 个高质量示例,覆盖常见场景和边界情况。这些示例定义了应用中“什么样的结果才算好”。 历史追踪记录 进入生产环境后,将真实追踪记录转换为示例。对于高流量应用:
  • 用户反馈:添加收到负面反馈的运行,以便进行测试。
  • 启发式方法:识别有价值的运行(例如延迟较高或出现错误的运行)。
  • LLM 反馈:使用 LLM 检测值得关注的对话。
合成数据 根据现有示例生成更多示例。当你已经有一些高质量、手工制作的示例可以作为模板时,这种方法效果最好。

数据集组织

拆分 拆分是数据集的命名子集,用于将示例划分到不同组中。常见模式包括:
  • 机器学习风格的拆分:将示例划分为训练集、验证集和测试集,以避免过拟合,即模型在训练数据上表现良好,但在未见过的数据上表现较差。
  • 基于类别的拆分:当数据集涵盖多个任务类别时,分别评估不同类型的输入。
  • 分阶段发布:将探索性示例单独存放,直到准备好将其纳入主要评估集。
拆分与元数据不同:使用拆分进行评估层面的高级组织分组,使用元数据记录每个示例的信息,例如标签和来源。 在机器学习中,最佳实践是让每个示例恰好属于一个拆分。LangSmith 允许示例属于多个拆分,这在一个示例符合多个评估类别时非常有用。 了解如何创建和管理数据集拆分。 版本 当示例发生变化时,LangSmith 会自动创建数据集版本。为重要里程碑标记版本。在 CI 流程中指定特定版本,以确保数据集更新不会破坏工作流。

收集人工反馈

人工反馈通常能提供最有价值的评估,尤其是在评估主观质量维度时。 标注队列 标注队列支持结构化收集人工反馈。标记需要检查的特定运行,通过简化的界面收集标注,并将带有标注的运行转移到数据集中,用于未来的评估。 标注队列通过提供运行分组、指定标准和配置评审者权限等额外功能,补充内联标注。

评估与测试

测试和评估是相似但不同的概念。 评估根据指标衡量性能。 指标可能是模糊的或主观的,以相对值表示时通常更有用。它们通常用于比较不同系统。 测试验证正确性。 只有通过所有测试,系统才能部署。 评估指标可以转换为测试。例如,回归测试可以断言:新版本必须在相关指标上优于基准版本。当系统运行成本较高时,可以同时运行测试和评估,以提高效率。 可以使用pytest或Vitest/Jest等标准测试工具编写评估。

快速参考:离线评估与在线评估

下表总结了离线评估和在线评估之间的主要差异: