筛选语法
追踪、实验、实验的行和数据集的行用同一套简短的语法筛选:网页上(日志、实验、一个实验的行、数据集、在线评分规则、评审队列的每天自动加入)和 API 的 filter= 参数里都一样。
text
字段 比较符 值 [AND|OR 字段 比较符 值 …]语法
- 一个条件是
字段 比较符 值,比如score.factuality < 0.5。 - 条件之间用
AND和OR连(大小写都行)。AND比OR先结合;要分组用括号:(tag = a OR tag = b) AND score.x >= 1。 - 没有
NOT,用!=。 - 空的筛选条件匹配全部。筛选条件最多 2000 个字符。
比较符
| 比较符 | 意思 | 用在 |
|---|---|---|
= != | 等于、不等于(精确,区分大小写) | 所有字段 |
> >= < <= | 比数字大小 | score.*、delta.* |
~ | 包含,不区分大小写 | 文字字段(score.* 和 delta.* 不行) |
缺失或未判定的值只匹配 !=。字段有多个值时(一条追踪调过的模型、工具或标签),= 是有一个相等就算,!= 是一个都不相等,~ 是有一个包含这段文字。
值
- 不加引号的词一直到空格或
( ) " ' = ! < > ~为止,所以builtin:task_done、gpt-4.1、sc_01J9…@2不用加引号。 - 别的都用
"…"或'…'引起来;反斜杠转义下一个字符:input ~ "说 \"你好\""。 - 值就是
and或or时要加引号,否则会被当成关键字。 - 数字(
0.5、-0.25、.5)只在score.*和delta.*上当数字。
字段
| 字段 | 追踪(日志) | 实验(列表) | 实验的行 | 数据集的行 |
|---|---|---|---|---|
score.<评分器> | 这条追踪的在线评分或人工评分 | 这个评分器的平均分 | 这一行的分数(判定了的那几次的平均) | — |
delta.<评分器> | — | — | 这一行的分数减去基线那一行的 | — |
status | ok、error、cancelled | running、done、cancelled、failed、invalid | decided、undecided | — |
source | otlp、sdk、gateway、sandbox | round、run、sdk、playground | run(来自沙盒或 runner 的报告)、native | manual、import、log、experiment、review、ai、scenario、test_set |
environment | dev、staging、prod、ci | 同左 | — | — |
model | 这条追踪调过的每个模型 | 目标的模型 | 评审模型 | — |
tool | 每个工具跨度的名字 | — | — | — |
tag | 追踪的 metadata.tags | 实验的 metadata.tags | 这一行的标签 | 这一行的标签 |
condition | — | — | normal、fault、attack,或者更细:fault:<工具>:<故障>、attack:<攻击>[:<插件>] | 同左 |
input、output | 追踪的输入和输出(前 500 个字符) | — | 这一行的输入和输出 | 这一行的输入和期望 |
<评分器> 是评分器编号:builtin:<slug>,或项目的评分器 sc_…。在实验的行上,sc_… 匹配这个评分器的任何版本;在追踪上,项目的评分器要带版本写,sc_…@2。
字段名不区分大小写;<评分器> 那部分保留大小写。不适用的字段(表里的 —)没有值,所以只有 != 能匹配。
例子
| 筛选条件 | 找出 |
|---|---|
score.factuality < 0.5 | factuality 低于 0.5 的行(或实验) |
delta.builtin:task_done <= -0.25 | 比基线明显变差的行 |
output ~ "找不到" | 输出里说到「找不到」的 |
model != 'gpt-4.1' | 没调过 gpt-4.1 的追踪 |
tool = refund_create AND status = error | 调了退款工具、而且出错的追踪 |
(tag = 账单 OR tag = 退款) AND score.correctness >= 0.8 | 标着账单或退款、而且得分高的行 |
condition = attack AND score.builtin:attack_success > 0 | 得逞了的攻击 |
environment = prod AND score.builtin:correctness < 0.5 | 在线评分打了低分的生产环境追踪 |
出错时
网页上写错的地方会划线。API 回答 400 bad_filter,带从 0 开始的字符位置 position。比如 score.factuality ~ high:
json
{ "error": { "code": "bad_filter", "message": "筛选条件写得不对:score is a number: \"~\" compares words (at 17)", "position": 17 } }超过 2000 个字符的筛选条件是 400 invalid_body。数据集列表和评分器列表收 filter=,但现在还不按它筛。