> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 特定应用场景的评估方法

下面，我们将讨论几种流行的LLM应用类型的评估。

## 智能体

[基于LLM的自主智能体](https://lilianweng.github.io/posts/2023-06-23-agent/)结合了三个组件：(1) 工具调用，(2) 记忆，和 (3) 规划。智能体通过规划（例如，通常通过提示）和记忆（例如，通常是短期消息历史）来[使用工具调用](https://docs.langchain.com/oss/python/langchain/tools)生成响应。[工具调用](https://docs.langchain.com/oss/python/langchain/tools)允许模型通过生成两样东西来响应给定的提示：(1) 要调用的工具和 (2) 所需的输入参数。

<img src="https://mintcdn.com/hhh-8c10bf0c/BCyPqRNhtAjzdCmk/langsmith/images/tool-use.png?fit=max&auto=format&n=BCyPqRNhtAjzdCmk&q=85&s=c51c25e3f26a80ae50f4f488c62ce501" alt="工具使用" width="1021" height="424" data-path="langsmith/images/tool-use.png" />

以下是[LangGraph](https://langchain-ai.github.io/langgraph/tutorials/introduction/)中的一个工具调用智能体。`助手节点`是一个LLM，它根据输入决定是否调用工具。`工具条件`检查`助手节点`是否选择了工具，如果是，则路由到`工具节点`。`工具节点`执行工具并将输出作为工具消息返回给`助手节点`。只要`助手节点`选择工具，这个循环就会继续。如果没有选择工具，则智能体直接返回LLM的响应。

<img src="https://mintcdn.com/hhh-8c10bf0c/lQoj_T05pUgIcyPg/langsmith/images/langgraph-agent.png?fit=max&auto=format&n=lQoj_T05pUgIcyPg&q=85&s=5ffa1d3ac0b08f7b04ab6d354dae5d70" alt="智能体" width="1259" height="492" data-path="langsmith/images/langgraph-agent.png" />

这为用户通常感兴趣的三种通用智能体评估类型奠定了基础：

* `最终响应`：评估智能体的最终响应。
* `单步评估`：独立评估智能体的任何步骤（例如，它是否选择了适当的工具）。
* `轨迹评估`：评估智能体是否采取了预期的路径（例如，工具调用序列）来得出最终答案。

<img src="https://mintcdn.com/hhh-8c10bf0c/dGi5Qyx6ZNfUuqyP/langsmith/images/agent-eval.png?fit=max&auto=format&n=dGi5Qyx6ZNfUuqyP&q=85&s=61ff0344c21bd60beef87ad8c2887ba1" alt="智能体评估" width="1825" height="915" data-path="langsmith/images/agent-eval.png" />

下面我们将介绍这些评估类型是什么，每种类型所需的组件（输入、输出、评估器），以及何时应考虑使用它们。请注意，您可能希望进行多种（如果不是全部！）这些类型的评估——它们并不相互排斥！

### 评估智能体的最终响应

评估智能体的一种方法是评估其在任务上的整体表现。这基本上是将智能体视为黑盒，简单地评估它是否完成了工作。

输入应该是用户输入和（可选的）工具列表。在某些情况下，工具作为智能体的一部分是硬编码的，不需要传入。在其他情况下，智能体更通用，意味着它没有固定的工具集，需要在运行时传入工具。

输出应该是智能体的最终响应。

评估器根据您要求智能体执行的任务而变化。许多智能体执行一系列相对复杂的步骤，并输出最终的文本响应。与RAG类似，在这些情况下，LLM作为评判者的评估器通常是有效的，因为它们可以直接从文本响应中评估智能体是否完成了工作。

然而，这种评估方式有几个缺点。首先，它通常需要较长时间运行。其次，您没有评估智能体内部发生的任何事情，因此在发生故障时很难调试。第三，有时很难定义合适的评估指标。

### 评估智能体的单一步骤

智能体通常执行多个动作。虽然对它们进行端到端评估很有用，但评估这些单独的动作也很有用。这通常涉及评估智能体的单个步骤——即决定下一步做什么的LLM调用。

输入应该是单个步骤的输入。根据您测试的内容，这可能只是原始用户输入（例如，提示和/或一组工具），也可以包括先前完成的步骤。

输出只是该步骤的输出，通常是LLM响应。LLM响应通常包含工具调用，指示智能体下一步应采取什么动作。

此步骤的评估器通常是一些二元分数，用于判断是否选择了正确的工具调用，以及一些启发式方法来判断工具的输入是否正确。参考工具可以简单地指定为一个字符串。

这种评估方式有几个好处。它允许您评估单个动作，从而可以精确定位应用程序可能失败的地方。它们的运行速度也相对较快（因为它们只涉及一次LLM调用），并且评估通常使用简单的启发式评估，将所选工具与参考工具进行比较。一个缺点是它们不能捕捉完整的智能体——只能捕捉特定的步骤。另一个缺点是数据集创建可能具有挑战性，特别是如果您想在智能体输入中包含过去的历史记录。为智能体轨迹早期的步骤生成数据集相当容易（例如，这可能只包括输入提示），但为轨迹后期的步骤生成数据集可能很困难（例如，包括许多先前的智能体动作和响应）。

### 评估智能体的轨迹

评估智能体的轨迹涉及评估智能体采取的所有步骤。

输入再次是智能体的整体输入（用户输入，以及可选的工具列表）。

输出是工具调用列表，可以表述为“精确”轨迹（例如，预期的工具调用序列）或仅仅是预期的一组工具调用（以任何顺序）。

这里的评估器是对所采取步骤的某种函数。评估“精确”轨迹可以使用一个二元分数来确认序列中每个工具名称的完全匹配。这很简单，但有一些缺陷。有时可能存在多个正确的路径。这种评估也不能捕捉轨迹仅差一步与完全错误之间的区别。

为了解决这些缺陷，评估指标可以侧重于“错误”步骤的数量，这能更好地解释接近正确的轨迹与显著偏离的轨迹之间的差异。评估指标也可以侧重于是否以任何顺序调用了所有预期的工具。

然而，这些方法都没有评估工具的输入；它们只关注选择的工具。为了解决这个问题，另一种评估技术是将智能体的完整轨迹（连同参考轨迹）作为一组消息（例如，所有LLM响应和工具调用）传递给LLM作为评判者。这可以评估智能体的完整行为，但这是最具挑战性的参考数据来编译（幸运的是，使用像LangGraph这样的框架可以帮助解决这个问题！）。另一个缺点是评估指标可能有些难以确定。

## 检索增强生成 (RAG)

检索增强生成 (RAG) 是一种强大的技术，它涉及根据用户的输入检索相关文档，并将其传递给语言模型进行处理。RAG使AI应用能够通过利用外部知识生成更具信息量和上下文感知的响应。

<Info>
  有关RAG概念的全面回顾，请参阅我们的[`从零开始学习RAG`系列](https://github.com/langchain-ai/rag-from-scratch)。
</Info>

### 数据集

在评估RAG应用时，一个关键的考虑因素是您是否拥有（或可以轻松获取）每个输入问题的参考答案。参考答案作为评估生成响应正确性的基本事实。然而，即使没有参考答案，仍然可以使用无参考的RAG评估提示（如下所示）进行各种评估。

### 评估器

`LLM作为评判者`是RAG常用的评估器，因为它是评估文本之间事实准确性或一致性的有效方法。

<img src="https://mintcdn.com/hhh-8c10bf0c/PHzfKFWRV-Ltob7s/langsmith/images/rag-types.png?fit=max&auto=format&n=PHzfKFWRV-Ltob7s&q=85&s=98c86a590ef94082ff06b61607d23053" alt="rag-types.png" width="1696" height="731" data-path="langsmith/images/rag-types.png" />

评估RAG应用时，可以有需要参考输出的评估器和不需要的评估器：

1. **需要参考输出**：将RAG链生成的答案或检索结果与参考答案（或检索结果）进行比较，以评估其正确性。
2. **不需要参考输出**：使用不需要参考答案的提示进行自一致性检查（上图中以橙色、绿色和红色表示）。

### 应用RAG评估

应用RAG评估时，请考虑以下方法：

1. `离线评估`：对任何依赖参考答案的提示使用离线评估。这最常用于RAG答案正确性评估，其中参考是基本事实（正确）答案。

2. `在线评估`：对任何无参考提示使用在线评估。这允许您在实时场景中评估RAG应用的性能。

3. `成对比较评估`：利用成对比较评估来比较不同RAG链产生的答案。这种评估侧重于用户指定的标准（例如，答案格式或风格），而不是正确性，后者可以使用自一致性或基本事实参考来评估。

### RAG评估总结

| 评估器   | 详情           | 需要参考输出 | 使用LLM作为评判者？                                                                     | 与成对比较相关 |
| ----- | ------------ | ------ | ------------------------------------------------------------------------------- | ------- |
| 文档相关性 | 文档是否与问题相关？   | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/rag-document-relevance)   | 否       |
| 答案忠实度 | 答案是否基于文档？    | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/rag-answer-hallucination) | 否       |
| 答案有用性 | 答案是否有助于解决问题？ | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/rag-answer-helpfulness)   | 否       |
| 答案正确性 | 答案是否与参考答案一致？ | 是      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/rag-answer-vs-reference)  | 否       |
| 成对比较  | 多个答案版本如何比较？  | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/pairwise-evaluation-rag)  | 是       |

## 摘要生成

摘要生成是自由形式写作的一种特定类型。评估目标通常是根据一组标准检查写作（摘要）。

`开发者整理的示例`文本用于摘要评估很常见（参见[摘要数据集示例](https://smith.langchain.com/public/659b07af-1cab-4e18-b21a-91a69a4c3990/d)）。然而，来自生产（摘要）应用的`用户日志`可以与下面任何`无参考`评估提示一起用于在线评估。

`LLM作为评判者`通常用于摘要（以及其他类型的写作）评估，使用`无参考`提示，这些提示遵循提供的标准来评分摘要。提供特定的`参考`摘要不太常见，因为摘要是一项创造性任务，存在许多可能的正确答案。

由于使用了`无参考`提示，`在线`或`离线`评估都是可行的。`成对比较`评估也是比较不同摘要链（例如，不同的摘要提示或LLM）的强大方式：

| 用例    | 详情                 | 需要参考输出 | 使用LLM作为评判者？                                                                            | 与成对比较相关 |
| ----- | ------------------ | ------ | -------------------------------------------------------------------------------------- | ------- |
| 事实准确性 | 摘要相对于源文档是否准确？      | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/summary-accurancy-evaluator)     | 是       |
| 忠实度   | 摘要是否基于源文档（例如，无幻觉）？ | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/summary-hallucination-evaluator) | 是       |
| 有用性   | 摘要是否满足用户需求？        | 否      | 是 - [提示](https://smith.langchain.com/hub/langchain-ai/summary-helpfulness-evaluator)   | 是       |

## 分类与标注

分类与标注为给定输入应用标签（例如，用于毒性检测、情感分析等）。分类/标注评估通常采用以下组件，我们将在下面详细回顾：

分类/标注评估的一个核心考虑因素是您是否拥有带有`参考`标签的数据集。如果没有，用户通常希望定义一个评估器，该评估器使用标准将标签（例如，毒性等）应用于输入（例如，文本、用户问题等）。但是，如果提供了基本事实类别标签，则评估目标侧重于根据基本事实类别标签对分类/标注链进行评分（例如，使用精确率、召回率等指标）。

如果提供了基本事实参考标签，那么通常只需定义一个[自定义启发式评估器](/langsmith/code-evaluator-ui)来比较基本事实标签与链输出。然而，随着LLM的出现，越来越常见的做法是直接使用`LLM作为评判者`，根据指定的标准对输入进行分类/标注（无需基本事实参考）。

当使用`LLM作为评判者`和`无参考`提示时，`在线`或`离线`评估是可行的。特别是，当用户想要标记/分类应用输入（例如，用于毒性检测等）时，这非常适合`在线`评估。

| 用例  | 详情   | 需要参考输出 | 使用LLM作为评判者？ | 与成对比较相关 |
| --- | ---- | ------ | ----------- | ------- |
| 准确率 | 标准定义 | 是      | 否           | 否       |
| 精确率 | 标准定义 | 是      | 否           | 否       |
| 召回率 | 标准定义 | 是      | 否           | 否       |

***

<div className="source-links">
  <Callout icon="edit">
    [Edit this page on GitHub](https://github.com/langchain-ai/docs/edit/main/src/i18n\zh-CN\langsmith\evaluation-approaches.mdx) or [file an issue](https://github.com/langchain-ai/docs/issues/new/choose).
  </Callout>

  <Callout icon="terminal-2">
    [Connect these docs](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
  </Callout>
</div>
