主题
设置在线代码评估器
在线评估为你的生产追踪提供实时反馈。这对于持续监控应用性能很有用:发现问题、衡量改进并确保长期质量一致。
代码评估器允许你直接在 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 中的在线评估视频。