Skip to content
LangSmith 文档版本 跟随上游 源快照 00658bad 更新于 2026-10-18

设置在线代码评估器

在线评估为你的生产追踪提供实时反馈。这对于持续监控应用性能很有用:发现问题、衡量改进并确保长期质量一致。

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

NOTE

当在线评估器对追踪中的任意运行执行评估时,该追踪会自动升级为扩展数据保留期。此升级会影响追踪计费,但可确保符合评估条件的追踪(通常是最有分析价值的追踪)被保留下来以供调查。

查看在线评估器

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

配置在线评估器

1. 导航到在线评估器

导航到 Tracing 页面并选择一个追踪项目。点击 Evaluators 选项卡,然后点击 + Evaluator 打开 Add Evaluator 面板。在 Create from scratch 下选择 Code Evaluator 以构建新评估器,或在 Attach an existing evaluator 下从工作区选择现有代码评估器。

2. 为评估器命名

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

3. 创建过滤器

例如,你可能希望根据以下条件应用特定评估器:

  • 用户留下反馈表明响应不令人满意的运行。
  • 调用特定工具调用的运行。有关更多信息,请参阅过滤工具调用。
  • 匹配特定元数据的运行(例如,如果你使用 plan_type 记录追踪,并且只想对企业客户的追踪运行评估)。有关更多信息,请参阅向追踪添加元数据。

评估器使用过滤器构建器,其字段和运算符与过滤追踪 (ClickHouse) 中所述相同。

要处理来自先前评估器的反馈,请按反馈键过滤此评估器,然后包含扩展统计信息。例如,使用 has(feedback_key, "answer_usefulness") 在 answer_usefulness 反馈存在时运行。过滤器基于反馈键,而不是产生它的评估器,因此来自任何来源且具有该键的反馈都会触发代码评估器。

TIP

在为评估器创建过滤器时,检查运行通常很有帮助。打开评估器配置面板后,你可以检查运行并对其应用过滤器。你对运行表应用的任何过滤器都会自动反映在评估器的过滤器中。

4.(可选)配置采样率

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

5.(可选)将规则应用于过去的运行

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

要跟踪回填进度,你可以前往追踪项目中的 Evaluators 选项卡,并点击你创建的评估器的 Logs 按钮来查看日志。在线评估器日志类似于自动化规则日志。

  • 添加评估器名称
  • (可选)过滤你希望应用评估器的运行,或配置采样率。
  • 选择 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"

网络访问:你无法从代码评估器访问互联网。

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

在 UI 中,你会找到一个面板,允许你内联编写代码,并附带一些起始代码。

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

  • 一个 Run(参考)。表示要评估的采样运行。

它们返回单个值:

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

以下示例展示了一个函数,用于验证实验中的每个运行都具有已知的 JSON 字段:

python
import json

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

  # assert you can serialize/deserialize as json
  try:
    json.loads(json.dumps(output_to_validate))
  except Exception as e:
    return { "formatted": False }

  # assert output facts exist
  if "facts" not in output_to_validate:
    return { "formatted": False }

  # assert required fields exist
  if "years_mentioned" not in output_to_validate["facts"]:
    return { "formatted": False }

  return {"formatted": True}
javascript
function perform_eval(run) {
    const outputToValidate = run.outputs;

    // Assert you can serialize/deserialize as json
    try {
        JSON.stringify(outputToValidate);
        JSON.parse(JSON.stringify(outputToValidate));
    } catch (e) {
        return { "formatted": false };
    }

    // Assert output facts exist
    if (!("facts" in outputToValidate)) {
        return { "formatted": false };
    }

    // Assert required fields exist
    if (!outputToValidate["facts"].hasOwnProperty("years_mentioned")) {
        return { "formatted": false };
    }

    return { "formatted": true };
}

测试并保存评估函数

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

一旦保存,你的在线评估器将在新采样的运行上运行(如果你选择了回填选项,也会在回填的运行上运行)。

如果你更喜欢视频教程,请查看 Introduction to LangSmith Course 中的在线评估视频。


BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。