> ## 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.

# 设置在线代码评估器

<Tip>
  **推荐阅读**

  在深入了解本内容之前，建议先阅读以下内容：

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

在线评估为您的生产轨迹提供实时反馈。这对于持续监控应用程序性能非常有用——可以识别问题、衡量改进效果，并确保长期保持一致的品质。

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

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

## 查看在线评估器

前往 **Tracing Projects** 标签页并选择一个追踪项目。要查看该项目的现有在线评估器，请点击 **Evaluators** 标签页。

<img src="https://mintcdn.com/hhh-8c10bf0c/jRI9Uh24bT9O5tSI/langsmith/images/view-evaluators.png?fit=max&auto=format&n=jRI9Uh24bT9O5tSI&q=85&s=0b61e1203ba0b00ef2c38bb3173c1819" alt="查看在线评估器" width="1350" height="639" data-path="langsmith/images/view-evaluators.png" />

## 配置在线评估器

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

前往 **Tracing Projects** 标签页并选择一个追踪项目。点击追踪项目页面右上角的 **+ New**，然后点击 **New Evaluator**。选择 **code** 评估器。

#### 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. （可选）将规则应用于过去的运行

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

为了跟踪回填进度，您可以查看评估器的日志，方法是前往追踪项目内的 **Evaluators** 标签页，并点击您创建的评估器的 Logs 按钮。在线评估器日志类似于[自动化规则日志](/langsmith/rules#view-logs-for-your-automations)。

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

## 编写您的评估函数

<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/hhh-8c10bf0c/PHzfKFWRV-Ltob7s/langsmith/images/online-eval-custom-code.png?fit=max&auto=format&n=PHzfKFWRV-Ltob7s&q=85&s=a493e59edd62b2c14afa8c2a469151bd" 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>

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

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

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

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

***

<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\online-evaluations-code.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>
