这 LangSmith SDK 和 REST API 允许您使用一组筛选参数和结构化筛选查询语言以编程方式过滤、查询和导出 运行 。本页面记录了筛选参数和查询语言,并提供了常见查询的示例。
有关将这些筛选器与 SDK 结合使用的可运行端到端示例,请参阅 使用 SDK 查询追踪.
筛选参数
| 键名 | 描述 |
|---|---|
project_id / project_name | 要从中获取运行的单个项目或项目列表。 |
trace_id | 获取属于特定追踪的运行。 |
run_type | 要获取的 运行类型 ,例如 llm, chain, tool, retriever. |
dataset_name / dataset_id | 获取与指定数据集中某一行示例关联的运行。这对于比较给定数据集中的提示词或模型很有用。 |
reference_example_id | 获取与特定示例行关联的运行。这对于比较给定输入上的提示词或模型很有用。 |
parent_run_id | 获取作为给定运行的子级的运行。这对于获取使用上下文管理器分组的运行或获取智能体轨迹很有用。 |
error | 获取出错或未出错的运行。 |
run_ids | 按给定的运行 ID 列表获取运行。注意: **这将忽略所有其他筛选参数。** |
filter | 获取匹配给定结构化筛选语句的运行。更多详细信息,请参阅 筛选查询语言 部分。 |
trace_filter | 应用于追踪的根运行的筛选器。与 filter 一起使用以按根运行的属性缩小范围。 |
tree_filter | 应用于追踪树中任何运行的筛选器(根运行、兄弟运行或子运行)。与 filter 一起使用以按追踪内任何运行的属性缩小范围。 |
is_root | 仅返回根运行。 |
select | 选择要在响应中返回的字段。默认返回所有字段。参见 运行数据格式 了解可用字段。 |
query (_实验性_) | 自然语言查询,可将您的查询转换为过滤语句。 |
过滤查询语言
LangSmith 支持使用过滤查询语言进行过滤功能,以便在获取运行记录时执行复杂的过滤操作。这在使用 SDK 或 API 以编程方式查询追踪时特别有用。例如,在 评估 管道、监控脚本或代理工作流中检查之前的 追踪.
比较器
过滤语法基于应用于运行对象字段的比较函数:
| 比较器 | 描述 | 示例 |
|---|---|---|
eq | 等于 | eq(run_type, "llm") |
neq | 不等于 | neq(status, "error") |
gt | 大于 | gt(latency, "5s") |
gte | 大于或等于 | gte(latency, 1.5) |
lt | 小于 | lt(start_time, "2024-01-01T00:00:00Z") |
lte | 小于或等于 | lte(feedback_score, 0.5) |
has | 检查运行是否包含标签或元数据键值对 | has(tags, "production") |
search | 在所有字符串字段中搜索子字符串 | search("invoice") |
in | 检查字段值是否在列表中 | in(metadata_key, ["session_id", "thread_id"]) |
逻辑运算符
使用 and 和 or 组合多个比较器:
and(eq(run_type, "llm"), gt(latency, "2s"))
or(eq(status, "error"), and(eq(feedback_key, "score"), lt(feedback_score, 0.5)))
可过滤字段
| 字段 | 类型 | 备注 |
|---|---|---|
id | 字符串 (UUID) | 运行 ID |
name | 字符串 | 运行名称 |
run_type | 字符串 | 之一 llm, chain, tool, retriever, embedding, prompt, parser |
status | 字符串 | "success", "error", or "pending"。使用此字段可过滤出错与成功的运行。 |
start_time | ISO 8601 字符串 | 例如 "2024-01-15T00:00:00Z" |
end_time | ISO 8601 字符串 | |
latency | 持续时间字符串或数字 | 秒数,例如 "5s", "1.5s", or 1.5。仅支持 s 后缀。 |
tags | 字符串列表 | 使用 has(tags, "value") |
metadata_key | 字符串 | 运行元数据字典中的键 |
metadata_value | 字符串 | 运行元数据字典中的值 |
feedback_key | 字符串 | 反馈分数名称 |
feedback_score | 数字 | 反馈分数的数值 |
值格式化
- 字符串:用双引号或单引号包裹,
eq(name, "MyChain")oreq(name, 'MyChain'). - 时间戳:ISO 8601 格式,
"2024-06-01T00:00:00Z". - 持续时间:秒数,可以是数字或带
s后缀的字符串,"5s","1.5s","90s", or1.5。其他单位后缀(m,h)不支持。 - 列表:JSON 数组语法,
["session_id", "thread_id"].
快速参考示例
以下示例仅显示过滤器字符串。将字符串作为 filter, trace_filter, or tree_filter 参数传入 client.list_runs() 或 /runs/query API 端点。
按运行名称筛选
eq(name, "my_chain")
按错误状态筛选
# Runs that errored
eq(status, "error")
# Runs that did not error
eq(status, "success")
按延迟筛选
# Runs slower than 5 seconds
gt(latency, "5s")
# Runs faster than 1 second
lt(latency, "1s")
按时间范围筛选
and(gt(start_time, "2024-01-01T00:00:00Z"), lt(start_time, "2024-02-01T00:00:00Z"))
按标签筛选
has(tags, "production")
# Multiple tags (any match)
or(has(tags, "production"), has(tags, "staging"))
按元数据键或值筛选
# Runs with a "user_id" metadata key
eq(metadata_key, "user_id")
# Runs with a specific user ID value
and(eq(metadata_key, "user_id"), eq(metadata_value, "usr_abc123"))
# Runs from the production environment
and(eq(metadata_key, "environment"), eq(metadata_value, "production"))
按线程 ID 筛选
and(in(metadata_key, ["session_id", "thread_id"]), eq(metadata_value, "<your_thread_id>"))
按反馈分数筛选
# Runs with a "thumbs_up" score of 1
and(eq(feedback_key, "thumbs_up"), eq(feedback_score, 1))
# Runs with a "correctness" score below 0.5
and(eq(feedback_key, "correctness"), lt(feedback_score, 0.5))
跨所有字符串字段的全文搜索
search("my search term")
组合条件
# Errors that started after a specific time
and(gt(start_time, "2024-06-01T00:00:00Z"), eq(status, "error"))
# Slow LLM runs with low correctness feedback
and(gt(latency, "10s"), eq(feedback_key, "correctness"), lt(feedback_score, 0.5))
# Complex: errors OR low score, both starting after a timestamp
and(gt(start_time, "2023-07-15T12:34:56Z"), or(eq(status, "error"), and(eq(feedback_key, "Correctness"), eq(feedback_score, 0.0))))
使用追踪_过滤器和树_过滤器
filter 应用于返回的运行。 trace_filter 应用于追踪的根运行。 tree_filter 应用于追踪树中任意位置的运行。
# filter: the run you want
eq(name, "RetrieveDocs")
# trace_filter: condition on the root run (e.g. human feedback on the overall trace)
and(eq(feedback_key, "user_score"), eq(feedback_score, 1))
# tree_filter: condition on any run in the trace tree
eq(name, "ExpandQuery")