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

# 设置在线代码评估器

<Tip>
  **推荐阅读**

  在深入本内容之前，阅读以下内容可能有所帮助：

  * 运行[在线评估](/langsmith/evaluation-concepts#online-evaluations)
</Tip>

在线评估为您的生产跟踪提供实时反馈。这对于持续监控应用程序性能非常有用——可以识别问题、衡量改进，并确保随时间推移保持一致的质量。

代码评估器允许您直接在 LangSmith 中用 Python 或 JavaScript 编写评估器。通常用于验证数据的结构或统计属性。

<Note>当在线评估器在跟踪中的任何运行上运行时，该跟踪将自动升级为[扩展数据保留](/langsmith/administration-overview#data-retention-auto-upgrades)。此升级会影响跟踪定价，但确保符合您评估标准（通常是对分析最有价值的）的跟踪被保留以供调查。</Note>

## 查看在线评估器

导航到**跟踪**页面并选择一个跟踪项目。要查看该项目的现有在线评估器，请点击**评估器**选项卡。

<img src="https://mintcdn.com/other-405835d4/HWk8WH3Ivd1grcHm/langsmith/images/view-evaluators.png?fit=max&auto=format&n=HWk8WH3Ivd1grcHm&q=85&s=6a5ffff5059918c6ce4b54a365a4e64b" alt="查看在线评估器" width="1350" height="639" data-path="langsmith/images/view-evaluators.png" />

## 配置在线评估器

### 1. 导航到在线评估器

导航到**跟踪**页面并选择一个跟踪项目。点击**评估器**选项卡，然后点击 **+ 评估器**以打开**添加评估器**面板。在**从头开始创建**下选择**代码评估器**以构建新的评估器，或在**附加现有评估器**下从您的工作区中选择现有的代码评估器。

### 2. 为评估器命名

为您的评估器提供一个名称。此名称将在代码中引用评估器时使用，也将是此评估器生成的反馈的名称。

### 3. 创建过滤器

例如，您可能希望基于以下条件应用特定的评估器：

* 运行中[用户留下了反馈](/langsmith/attach-user-feedback)，表示响应不令人满意。
* 调用特定工具调用的运行。有关更多信息，请参阅[过滤工具调用](/langsmith/filter-traces-in-application#example-filtering-for-tool-calls)。
* 匹配特定元数据的运行（例如，如果您记录带有 `plan_type` 的跟踪，并且只想对来自企业客户的跟踪运行评估）。有关更多信息，请参阅[向跟踪添加元数据](/langsmith/add-metadata-tags)。

评估器上的过滤器与您在项目中过滤跟踪的方式相同。有关过滤器的更多信息，您可以参考[过滤跟踪](/langsmith/filter-traces-in-application)。

<Tip>
  在为评估器创建过滤器时，检查运行通常很有帮助。打开评估器配置面板后，您可以检查运行并对其应用过滤器。您应用于运行表的任何过滤器将自动反映在评估器的过滤器中。
</Tip>

### 4. （可选）配置采样率

配置采样率以控制触发自动化操作的已过滤运行的百分比。例如，为了控制成本，您可能希望设置一个过滤器，仅将评估器应用于 10% 的跟踪。为此，您需要将采样率设置为 0.1。

### 5. （可选）将规则应用于过去的运行

通过切换**应用于过去的运行**并输入“回填起始日期”将规则应用于过去的运行。这仅在创建规则时可能。注意：回填作为后台作业处理，因此您不会立即看到结果。

为了跟踪回填进度，您可以通过导航到跟踪项目中的**评估器**选项卡并点击您创建的评估器的日志按钮来查看评估器的日志。在线评估器日志类似于[自动化规则日志](/langsmith/rules#view-logs-for-your-automations)。

* 添加评估器名称
* 可选地过滤您希望应用评估器的运行或配置采样率。
* 选择**应用评估器**

## 编写您的评估函数

<Note>
  **代码评估器限制。**

  **允许的库**：您可以导入所有标准库函数，以及以下公共包：

  ```
  numpy (v2.2.2): "numpy"
  pandas (v1.5.2): "pandas"
  jsonschema (v4.21.1): "jsonschema"
  scipy (v1.14.1): "scipy"
  sklearn (v1.26.4): "scikit-learn"
  ```

  **网络访问**：您无法从代码评估器访问互联网。
</Note>

代码评估器必须内联编写。我们建议在 LangSmith 中设置代码评估器之前先在本地进行测试。

在 UI 中，您将看到一个面板，允许您内联编写代码，并提供一些初始代码：

<img src="https://mintcdn.com/other-405835d4/4uxGFmQj9AQhEaXK/langsmith/images/online-eval-custom-code.png?fit=max&auto=format&n=4uxGFmQj9AQhEaXK&q=85&s=a48dac7e4dd8eec3b8fa19ca74558f01" alt="LangSmith 中的代码评估器面板，显示内联代码编辑器" width="2910" height="902" data-path="langsmith/images/online-eval-custom-code.png" />

代码评估器接受一个参数：

* 一个 `Run`（[参考](/langsmith/run-data-format)）。这代表要评估的采样运行。

它们返回一个值：

* 反馈字典：一个字典，其键是您要返回的反馈类型，值是您将为该反馈键给出的分数。例如，`{"correctness": 1, "silliness": 0}` 将在运行上创建两种类型的反馈，一种表示它是正确的，另一种表示它不愚蠢。

在下面的截图中，您可以看到一个简单函数的示例，该函数验证实验中的每个运行都有一个已知的 json 字段：

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import json

  def perform_eval(run):
    output_to_validate = run['outputs']
    is_valid_json = 0

    # 断言您可以序列化/反序列化为 json
    try:
      json.loads(json.dumps(output_to_validate))
    except Exception as e:
      return { "formatted": False }

    # 断言输出事实存在
    if "facts" not in output_to_validate:
      return { "formatted": False }

    # 断言必需字段存在
    if "years_mentioned" not in output_to_validate["facts"]:
      return { "formatted": False }

    return {"formatted": True}
  ```

  ```javascript JavaScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  function perform_eval(run) {
      const outputToValidate = run.outputs;

      // 断言您可以序列化/反序列化为 json
      try {
          JSON.stringify(outputToValidate);
          JSON.parse(JSON.stringify(outputToValidate));
      } catch (e) {
          return { "formatted": false };
      }

      // 断言输出事实存在
      if (!("facts" in outputToValidate)) {
          return { "formatted": false };
      }

      // 断言必需字段存在
      if (!outputToValidate["facts"].hasOwnProperty("years_mentioned")) {
          return { "formatted": false };
      }

      return { "formatted": true };
  }
  ```
</CodeGroup>

## 测试并保存您的评估函数

在保存之前，您可以通过点击**测试代码**在最近的运行上测试您的评估器函数，以确保您的代码正确执行。

一旦您**保存**，您的在线评估器将在新采样的运行（或者如果您选择了回填选项，也包括回填的运行）上运行。

如果您更喜欢视频教程，请查看 LangSmith 课程介绍中的[在线评估视频](https://academy.langchain.com/pages/intro-to-langsmith-preview)。

***

<div className="source-links">
  <Callout icon="terminal-2">
    [将这些文档](/use-these-docs)通过 MCP 连接到 Claude、VSCode 等，以获取实时答案。
  </Callout>

  <Callout icon="edit">
    [在 GitHub 上编辑此页面](https://github.com/langchain-ai/docs/edit/main/src/langsmith/online-evaluations-code.mdx)或[提交问题](https://github.com/langchain-ai/docs/issues/new/choose)。
  </Callout>
</div>
