跳到主要内容

在应用中过滤追踪

推荐阅读

在深入阅读本文档之前,阅读以下内容可能有助于熟悉此处提及的概念

本页包含一系列关于如何在应用中过滤运行的指南。有关如何以编程方式实现类似操作的指南,请参阅本指南。能够准确地过滤运行对于手动检查和设置自动化都非常重要。

创建过滤器

创建过滤器有两种方法。首先,您可以从顶层导航栏创建过滤器。默认情况下,应用了一个过滤器:IsRoottrue。这会将所有运行限制为顶层追踪。

Filtering

您还可以从侧边栏的“过滤器快捷方式”中定义过滤器。其中包含常用过滤器。

Filtering

过滤中间运行(span)

为了过滤中间运行(span),您首先需要删除默认过滤器 IsRoottrue。之后,您可以应用任何您想要的过滤器。一种常见的方法是按名称过滤子运行。这依赖于对管道的所有部分进行良好的命名或标记。要了解更多信息,您可以查看本指南

高级:基于根属性过滤中间运行(span)

一个常见的概念是过滤作为追踪一部分的中间运行,该追踪的根运行具有某些属性。一个例子是过滤特定类型的中间运行,其根运行具有与之关联的正面(或负面)反馈。

为了做到这一点,首先设置一个中间运行的过滤器(按照上面的章节)。之后,您可以添加另一个过滤器规则。然后,您可以点击过滤器底部的 Advanced Filters 链接。这将打开一个新的模态框,您可以在其中添加 Trace filters。这些过滤器将应用于您已过滤的各个运行的所有父运行的追踪。

Filtering

高级:过滤子运行具有某些属性的运行(span)

这与上面相反。您可能想要搜索具有特定类型子运行的运行。一个例子可能是搜索所有具有名为 Foo 的子运行的追踪。当 Foo 并非总是被调用,但您想分析调用它的情况时,这很有用。

为了做到这一点,您可以点击过滤器底部的 Advanced Filters 链接。这将打开一个新的模态框,您可以在其中添加 Tree filters。这将使您指定的规则应用于您已过滤的各个运行的所有子运行。

Filtering

基于输入和输出过滤

您可以根据运行的输入和输出中的内容过滤运行。

要过滤输入或输出,您可以使用 Full-Text Search 过滤器,它将匹配任一字段中的关键字。对于更有针对性的搜索,您可以使用 InputOutput 过滤器,它们将仅匹配基于各自字段的内容。

您还可以指定多个匹配项,可以通过包含以空格分隔的多个术语,或添加多个过滤器来实现 - 这将尝试匹配所有提供的术语。

请注意,关键字搜索是通过拆分文本并在搜索关键字中查找任何部分匹配项来完成的,因此它不是按特定顺序完成的。我们从搜索中排除常见的停用词(来自 nltk 停用词列表以及其他一些常见的 json 关键字)。

Filtering

基于以上过滤器,系统将在输入或输出中搜索 pythontensorflow,并在输入中搜索 embedding,以及在输出中搜索 finetune

基于输入/输出键值对过滤

除了全文搜索之外,您还可以根据输入和输出中的特定键值对过滤运行。这允许更精确的过滤,尤其是在处理结构化数据时。

要基于键值对过滤,请从“过滤器”下拉列表中选择 Input KVOutput KV 过滤器。

例如,要匹配以下输入

{
"input": "What is the capital of France?"
}

选择 Filters, Add Filter 以调出过滤选项。然后选择 Input KV,输入 input 作为键,并输入 What is the capital of France? 作为值。

Filtering

您还可以通过使用点表示法选择嵌套键名来匹配嵌套键。例如,要匹配输出中的嵌套键

{
"documents": [
{
"page_content": "The capital of France is Paris",
"metadata": {},
"type": "Document"
}
]
}

选择 Output KV,输入 documents.page_content 作为键,并输入 The capital of France is Paris 作为值。这将匹配嵌套键 documents.page_content 和指定的值。

Filtering

您可以添加多个键值过滤器以创建更复杂的查询。您还可以使用右侧的 Filter Shortcuts 根据常见的键值对快速过滤,如下所示

Filtering

使用输出键值对过滤的示例:过滤工具调用

作为键值对过滤的一个示例,假设您想要过滤工具调用的追踪。

在这种情况下,让我们假设这是您想要过滤的输出

{
"generations": [
[
{
"text": "",
"type": "ChatGeneration",
"message": {
"lc": 1,
"type": "constructor",
"id": [],
"kwargs": {
"type": "ai",
"id": "run-ca7f7531-f4de-4790-9c3e-960be7f8b109",
"tool_calls": [
{
"name": "Plan",
"args": {
"steps": [
"Research LangGraph's node configuration capabilities",
"Investigate how to add a Python code execution node",
"Find an example or create a sample implementation of a code execution node"
]
},
"id": "toolu_01XexPzAVknT3gRmUB5PK5BP",
"type": "tool_call"
}
]
}
}
}
]
],
"llm_output": null,
"run": null,
"type": "LLMResult"
}

通过上面的示例,KV 搜索会将每个嵌套的 JSON 路径映射为一个键值对,您可以使用它来搜索和过滤。

LangSmith 会将其分解为以下可搜索的键值对集合

generations.typeChatGeneration
generations.message.typeconstructor
generations.message.kwargs.typeai
generations.message.kwargs.idrun-ca7f7531-f4de-4790-9c3e-960be7f8b109
generations.message.kwargs.tool_calls.namePlan
generations.message.kwargs.tool_calls.args.stepsResearch LangGraph's node configuration capabilities
generations.message.kwargs.tool_calls.args.stepsInvestigate how to add a Python code execution node
generations.message.kwargs.tool_calls.args.stepsFind an example or create a sample implementation of a code execution node
generations.message.kwargs.tool_calls.idtoolu_01XexPzAVknT3gRmUB5PK5BP
generations.message.kwargs.tool_calls.typetool_call
typeLLMResult

要搜索特定的工具调用,您可以在删除根运行过滤器的情况下使用以下输出 KV 搜索

generations.message.kwargs.tool_calls.name = Plan

这将匹配 tool_calls 名称为 Plan 的根运行和非根运行。

Filtering

如果您想过滤树中包含工具过滤器调用的所有运行,您可以使用高级过滤器设置中的树过滤器

Filtering

对键值对进行负向过滤

不同类型的负向过滤可以应用于 Metadata, Input KV, 和 Output KV (KV 是键值的缩写) 字段,以从结果中排除特定运行。

例如,要查找元数据键 phone 不等于 1234567890 的所有运行,请将 MetadataKey 运算符设置为 is,并将 Key 字段设置为 phone,然后将 Value 运算符设置为 is not,并将 Value 字段设置为 1234567890。这将匹配所有具有元数据键 phone 且值为除 1234567890 之外的任何值的运行。

Filtering

要查找没有特定元数据键的运行,请将 Key 运算符设置为 is not。例如,将 Key 运算符设置为 is not,并将 phone 作为键将匹配所有元数据中没有 phone 字段的运行。

Filtering

您还可以过滤既没有特定键也没有特定值的运行。要查找元数据既没有键 phone 也没有任何值为 1234567890 的字段的运行,请将 Key 运算符设置为 is not,键为 phone,并将 Value 运算符设置为 is not,值为 1234567890

Filtering

最后,您还可以过滤没有特定键但具有特定值的运行。要查找没有 phone 键但对于某些其他键有值 1234567890 的运行,请将 Key 运算符设置为 is not,键为 phone,并将 Value 运算符设置为 is,值为 1234567890

Filtering

请注意,您可以使用 does not match 运算符而不是 is not 来执行子字符串匹配。

已保存的过滤器

您可以保存过滤器以供将来重用。已保存的过滤器与追踪项目关联,而不是跨所有追踪项目。它们可以帮助您组织追踪并更轻松地找到相关的追踪。

保存过滤器

在过滤器框中,在构建过滤器后单击 Save 按钮。这将弹出一个对话框,用于指定过滤器的名称和描述。

Filtering

使用已保存的过滤器

保存过滤器后,它将在过滤器栏中作为快速过滤器供您使用。如果您保存了 3 个以上的过滤器,则只会显示 2 个,其余的在同一栏的“更多”菜单中。

Filtering

更新已保存的过滤器

选择过滤器后,对过滤器参数进行任何更改。然后单击 Save ▼Save 以更新过滤器。

在同一菜单中,您还可以通过单击 Save ▼Save as 来创建新的已保存过滤器。

删除已保存的过滤器

选择过滤器后,单击垃圾桶按钮以删除已保存的过滤器。

复制过滤器

有时您可能想要复制您构建的过滤器。您可能希望这样做以与同事分享、将来重用或在 SDK 中使用。

为了复制过滤器,您可以首先在 UI 中创建它。从那里,您可以单击右上角的复制按钮。如果您构建了树或追踪过滤器,您也可以复制它们。

这将为您提供我们查询语言中的一个字符串,例如 and(eq(is_root, true), and(eq(feedback_key, "user_score"), eq(feedback_score, 1))) 请参阅此参考文档以获取有关查询语言的更多信息。

Copy Filter

在追踪视图中过滤运行

您还可以在追踪视图中过滤运行。这将使您能够轻松筛选具有大量运行的追踪。主运行表格视图中可用的相同过滤器也可以在此处应用。

默认情况下,只会显示与过滤器匹配的运行。要在追踪树的上下文中查看匹配的运行,请将视图选项从“Filtered Only”切换到“Show All”或“Most relevant”。

Filtering within trace view

在 LangSmith 查询语言中手动指定原始查询

如果您复制了之前的过滤器(见上文),您可能希望在以后的会话中手动指定该原始查询。您也可能会发现修改此过滤器比使用 UI 更容易。

为了做到这一点,您可以单击底部的 Advanced filters。从那里,您可以将原始查询粘贴到相应的框中。

请注意,这会将该查询添加到现有查询中,而不是覆盖它。

Raw Query

使用 AI 查询自动生成查询

有时弄清楚要指定的精确查询可能很困难!为了使其更容易,我们添加了 AI Query 功能。使用此功能,您可以以自然语言键入您想要构建的过滤器,它会将其转换为有效的查询。

例如:“所有运行时间超过 10 秒的运行”

实验性功能

请注意,这是一个实验性功能,可能不适用于所有查询。

AI Query


此页对您有帮助吗?


您可以留下详细的反馈 在 GitHub 上.