下面,我们将讨论几种流行的LLM应用类型的评估方法。
智能体
由LLM驱动的自主智能体 结合三个组件:(1) 工具调用,(2) 记忆,和 (3) 规划。智能体 使用工具调用 结合规划(例如,通常通过提示)和记忆(例如,通常是短期消息历史)来生成响应。 工具调用 允许模型通过生成两样东西来响应给定提示:(1) 要调用的工具和 (2) 所需的输入参数。
!工具使用
下面是 LangGraph中的一个工具调用智能体。 assistant node 是一个LLM,用于根据输入决定是否调用工具。 tool condition 检查是否有工具被 assistant node 选中,如果选中则路由到 tool node。 tool node 执行工具并将输出作为工具消息返回给 assistant node。只要 assistant node 选择了一个工具,此循环就会继续。如果没有选择工具,则智能体直接返回LLM响应。
!智能体
这设定了三种用户通常感兴趣的一般智能体评估类型:
- *
Final Response:评估智能体的最终响应。 - *
Single step:独立评估智能体的任何步骤(例如,它是否选择了合适的工具)。 - *
Trajectory:评估智能体是否采取了预期的路径(例如,工具调用路径)来得出最终答案。
下面我们将介绍这些评估类型的具体内容、每种类型所需的组件(输入、输出、评估器),以及何时应该考虑使用这些评估。请注意,您可能需要进行多种(如果不是全部!)类型的评估——它们并不互相排斥!
评估智能体的最终响应
评估智能体的一种方法是评估它在任务上的整体表现。这基本上涉及将智能体视为一个黑盒,简单地评估它是否完成了工作。
输入应该是用户输入和(可选的)工具列表。在某些情况下,工具被硬编码为智能体的一部分,不需要传入。在其他情况下,智能体更加通用,意味着它没有固定的工具集,需要在运行时传入工具。
输出应该是智能体的最终响应。
评估器因您要求智能体执行的任务而异。许多智能体执行相对复杂的步骤集并输出最终文本响应。与RAG类似,LLM-as-judge评估器在这些情况下通常非常有效,因为它们可以直接从文本响应中评估智能体是否完成了工作。
然而,这种评估类型有几个缺点。首先,它通常需要较长的运行时间。其次,您没有评估智能体内部发生的任何事情,因此当出现故障时可能很难调试。第三,有时可能很难定义适当的评估指标。
评估智能体的单个步骤
智能体通常执行多个操作。虽然对它们进行端到端评估很有用,但评估这些单独的操作也很有用。这通常涉及评估智能体的单个步骤——即LLM调用,它决定要做什么。
The inputs should be the input to a single step. Depending on what you are testing, this could just be the raw user input (e.g., a prompt and / or a set of tools) or it can also include previously completed steps.
输出就是该步骤的输出,通常是LLM的响应。LLM的响应通常包含工具调用,指示代理下一步应该采取什么行动。
对此的评估器通常是某种二元分数,用于判断是否选择了正确的工具调用,以及用于判断工具输入是否正确的一些启发式方法。参考工具可以简单地指定为一个字符串。
这种评估方式有几个优点。它能让你评估单个操作,从而精确定位应用程序可能失败的地方。这种方式也相对快速(因为只涉及一次LLM调用),评估通常使用所选工具相对于参考工具的简单启发式方法。一个缺点是它们无法捕捉完整代理的情况——只能反映某个特定步骤。另一个缺点是数据集创建可能具有挑战性,特别是如果你想在代理输入中包含历史记录。在代理轨迹早期阶段生成数据集相当容易(例如可能只包含输入提示),但在轨迹后期阶段生成数据集可能很困难(例如需要包含大量先前的代理操作和响应)。
评估代理的轨迹
评估代理的轨迹涉及评估代理所采取的所有步骤。
输入同样是整体代理的输入(用户输入,以及可选的工具列表)。
输出是工具调用列表,可以表述为“精确”轨迹(例如预期的工具调用序列),或者简单地是一组预期的工具调用(顺序不限)。
这里的评估器是对所采取步骤的某种函数。评估“精确”轨迹可以使用单一二元分数来确认序列中每个工具名称的精确匹配。这很简单,但有一些缺陷。有时可能有多条正确的路径。这种评估也无法捕捉轨迹是偏离单个步骤还是完全错误。
为了解决这些缺陷,评估指标可以关注“错误”步骤的数量,这更好地考虑了接近的轨迹与显著偏离的轨迹之间的差异。评估指标也可以关注是否按任意顺序调用了所有预期的工具。
但是,这些方法都没有评估工具的输入;它们只关注所选择的工具。为了解决这个问题,另一种评估技术是将完整代理的轨迹(连同参考轨迹)作为一组消息(例如所有LLM响应和工具调用)传递给LLM-as-judge。这可以评估代理的完整行为,但这是最难编制的参考(幸运的是,使用LangGraph这样的框架可以帮助解决这个问题!)。另一个缺点是评估指标可能相当难以制定。
检索增强生成(RAG)
检索增强生成(RAG)是一种强大的技术,涉及根据用户输入检索相关文档并将其传递给语言模型进行处理。RAG使AI应用能够通过利用外部知识生成更知情且具有上下文意识的响应。
数据集
在评估RAG应用时,一个关键考虑因素是你是否拥有(或可以轻松获取)每个输入问题的参考答案。参考答案作为评估生成响应正确性的真实依据。然而,即使没有参考答案,仍然可以使用无参考RAG评估提示进行各种评估(示例如下)。
评估器
LLM-as-judge 是RAG常用的评估器,因为它是评估文本之间事实准确性或一致性的有效方式。
在评估RAG应用时,可以有需要参考输出的评估器和不需要参考输出的评估器:
- **需要参考输出**:将RAG链生成的答案或检索结果与参考答案(或检索结果)进行比较,以评估其正确性。
- **不需要参考输出**使用不需要参考答案的提示进行自一致性检查(在上图中用橙色、绿色和红色表示)。
应用 RAG 评估
应用 RAG 评估时,请考虑以下方法:
Offline evaluation对任何依赖参考答案的提示使用离线评估。这最常用于 RAG 答案正确性评估,其中参考是真实(正确)答案。
Online evaluation对任何无参考提示使用在线评估。这允许您评估 RAG 应用程序在实时场景中的性能。
Pairwise evaluation利用成对评估来比较不同 RAG 链生成的答案。此评估侧重于用户指定的标准(例如答案格式或风格)而不是正确性,正确性可以使用自一致性或真实参考来评估。
RAG 评估摘要
| 评估器 | 详情 | 需要参考输出 | LLM-as-judge? | 成对相关 |
|---|---|---|---|---|
| 文档相关性 | 文档与问题相关吗? | 否 | 是 - 提示词 | No |
| 答案忠实性 | 答案是否基于文档? | 否 | 是 - 提示词 | No |
| 答案有用性 | 答案是否有助于解决问题? | 否 | 是 - 提示词 | No |
| 答案正确性 | 答案是否与参考答案一致? | 是 | 是 - 提示词 | No |
| 成对比较 | 多个答案版本如何比较? | 否 | 是 - 提示词 | 是 |
摘要
摘要是自由形式写作的一种特定类型。评估目标通常是相对于一组标准来检查写作(摘要)。
Developer curated examples 待摘要文本集通常用于评估(请参阅 摘要数据集示例)。但是, user logs 来自生产(摘要)应用的 Reference-free 以下评估提示词可用于在线评估。
LLM-as-judge 通常用于评估摘要(以及其他类型的写作),使用 Reference-free 遵循提供的标准对摘要进行评分的提示词。不太常见的是提供特定的 Reference 摘要,因为摘要是创造性任务,存在许多可能的正确答案。
Online or Offline 评估是可行的,因为 Reference-free 使用的提示词。 Pairwise 评估也是对不同摘要链(例如不同的摘要提示词或 LLM)进行比较的有力方式:
| 用例 | 详情 | 需要参考输出 | LLM-as-judge? | 成对相关 |
|---|---|---|---|---|
| 事实准确性 | 摘要相对于源文档是否准确? | 否 | 是 - 提示词 | 是 |
| 忠实性 | 摘要是否基于源文档(例如没有幻觉)? | 否 | 是 - 提示词 | 是 |
| 有用性 | 摘要是否有助于满足用户需求? | 否 | 是 - 提示词 | 是 |
分类和标注
Classification and tagging apply a label to a given input (e.g., for toxicity detection, sentiment analysis, etc). Classification/tagging evaluation typically employs the following components, which we will review in detail below:
A central consideration for classification/tagging evaluation is whether you have a dataset with reference labels or not. If not, users frequently want to define an evaluator that uses criteria to apply label (e.g., toxicity, etc) to an input (e.g., text, user-question, etc). However, if ground truth class labels are provided, then the evaluation objective is focused on scoring a classification/tagging chain relative to the ground truth class label (e.g., using metrics such as precision, recall, etc).
如果提供了真实参考标签,那么通常只需简单地定义一个 自定义启发式评估器 来将真实标签与链输出进行比较。然而,鉴于LLM的出现,越来越常见的是简单地使用 LLM-as-judge to perform the classification/tagging of an input based upon specified criteria (without a ground truth reference).
Online or Offline 在使用时评估是可行的 LLM-as-judge 配合 Reference-free 使用的提示词。特别是,这非常适合 Online evaluation when a user wants to tag / classify application input (e.g., for toxicity, etc).
| 用例 | 详情 | 需要参考输出 | LLM评判? | 成对相关 |
|---|---|---|---|---|
| 准确率 | 标准定义 | 是 | 否 | 否 |
| 精确率 | 标准定义 | 是 | 否 | 否 |
| 召回率 | 标准定义 | 是 | 否 | 否 |