跳到主要内容
推荐阅读:阅读追踪概念指南可能有助于熟悉本页提及的概念。
追踪项目可能包含大量数据。过滤器用于有效地导航和分析这些数据,让您可以
  • 进行重点调查:快速缩小到特定运行进行即席分析
  • 调试和分析:识别和检查错误、失败的运行和性能瓶颈
本页面包含一系列关于如何在追踪项目中过滤运行的指南。如果您通过APISDK以编程方式导出运行进行分析,请参阅导出追踪指南以获取更多信息。

创建和应用过滤器

按运行属性过滤

在追踪项目中过滤运行有两种方式
  1. 过滤器:位于追踪项目页面的左上方。您可以在此处构建和管理详细的过滤条件。
Filtering
  1. 过滤器快捷方式:位于追踪项目页面的右侧边栏。过滤器快捷方式栏提供了根据项目中运行中最常出现的属性快速访问过滤器的方法。
Filter Shortcuts
默认过滤器默认情况下,应用了IsTracetrue的过滤器。这只显示顶级追踪。移除此过滤器将显示项目中所有运行,包括中间跨度。

按时间范围过滤

除了按运行属性过滤外,您还可以按特定时间范围过滤运行。此选项位于追踪项目页面的左上方。 Filtering on time

过滤器运算符

可用的过滤器运算符取决于您正在过滤的属性的数据类型。以下是常用运算符的概述
  • :与过滤器值完全匹配
  • 不是:与过滤器值不匹配
  • 包含:与过滤器值部分匹配
  • 不包含:与过滤器值不部分匹配
  • 是其中之一:与列表中任何值匹配
  • > / <:适用于数值字段

特定过滤技术

过滤中间运行(跨度)

为了过滤中间运行(跨度),您首先需要移除默认的IsTracetrue的过滤器。例如,如果您想按子运行的运行名称或按运行类型过滤,您会这样做。 运行元数据和标签也是强大的过滤条件。这些依赖于管道所有部分的良好标记。要了解更多信息,您可以查看此指南

根据输入和输出进行过滤

您可以根据运行的输入和输出内容过滤运行。 要过滤输入或输出,您可以使用全文搜索过滤器,它将匹配任一字段中的关键词。对于更有针对性的搜索,您可以使用输入输出过滤器,它们将仅根据各自字段匹配内容。
为了性能,我们为全文搜索索引最多250个字符的数据。如果您的搜索查询超过此限制,我们建议使用输入/输出键值搜索
您还可以指定多个匹配项,可以通过包含多个以空格分隔的术语,或者添加多个过滤器——这将尝试匹配所有提供的术语。 请注意,关键词搜索是通过分割文本并查找搜索关键词的任何部分匹配来完成的,因此不按特定顺序进行。我们从搜索中排除常见停用词(来自nltk停用词列表以及其他一些常见JSON关键词)。 Filtering 根据上述过滤器,系统将在输入或输出中搜索pythontensorflow,并在输入中搜索embedding,在输出中搜索finetune

根据输入/输出键值对进行过滤

除了全文搜索,您还可以根据输入和输出中的特定键值对过滤运行。这允许更精确的过滤,尤其是在处理结构化数据时。
我们最多索引100个唯一键,以保持您的数据井然有序且可搜索。每个键的值的字符限制为250个。如果您的数据超过任一限制,文本将不会被索引。这有助于我们确保快速、可靠的性能。
要根据键值对进行过滤,请从过滤器下拉菜单中选择输入键输出键过滤器。 例如,要匹配以下输入:
{
  "input": "What is the capital of France?"
}
选择过滤器添加过滤器以调出过滤选项。然后选择输入键,输入input作为键,输入What is the capital of France?作为值。 Filtering 您还可以使用点表示法选择嵌套键名来匹配嵌套键。例如,要匹配输出中的嵌套键:
{
  "documents": [
    {
      "page_content": "The capital of France is Paris",
      "metadata": {},
      "type": "Document"
    }
  ]
}
选择输出键,输入documents.page_content作为键,输入The capital of France is Paris作为值。这将匹配具有指定值的嵌套键documents.page_content Filtering 您可以添加多个键值过滤器来创建更复杂的查询。您还可以使用右侧的过滤器快捷方式来快速过滤常见的键值对,如下所示: Filtering

示例:过滤工具调用

通常需要搜索包含特定工具调用的追踪。工具调用通常在LLM运行的输出中指示。要过滤工具调用,您将使用输出键过滤器。 虽然此示例将向您展示如何过滤工具调用,但相同的逻辑可以应用于过滤输出中的任何键值对。 在这种情况下,假设这是您要过滤的输出:
{
  "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.steps研究LangGraph的节点配置能力
generations.message.kwargs.tool_calls.args.steps调查如何添加Python代码执行节点
generations.message.kwargs.tool_calls.args.steps查找代码执行节点的示例或创建示例实现
generations.message.kwargs.tool_calls.idtoolu_01XexPzAVknT3gRmUB5PK5BP
generations.message.kwargs.tool_calls.typetool_call
typeLLMResult
要搜索特定的工具调用,您可以使用以下输出键搜索,同时移除根运行过滤器: generations.message.kwargs.tool_calls.name = Plan 这将匹配tool_calls名称为Plan的根运行和非根运行。 Filtering

键值对的负面过滤

不同类型的负向过滤可以应用于元数据输入键输出键字段,以从结果中排除特定运行。 例如,要查找所有元数据键phone不等于1234567890的运行,请将元数据操作符设置为is,将字段设置为phone,然后将操作符设置为is not,将字段设置为1234567890。这将匹配所有元数据键phone的值除1234567890之外的运行。 Filtering 要查找不具有特定元数据键的运行,请将操作符设置为is not。例如,将操作符设置为is not,并将键设置为phone,将匹配所有元数据中不具有phone字段的运行。 Filtering 您还可以过滤不具有特定键但具有特定值的运行。要查找没有phone键但其他键的值为1234567890的运行,请将操作符设置为is not,键设置为phone,并将操作符设置为is,值设置为1234567890 Filtering 最后,您还可以过滤不具有特定键但具有特定值的运行。要查找没有phone键但其他键的值为1234567890的运行,请将操作符设置为is not,键设置为phone,并将操作符设置为is,值设置为1234567890 Filtering 请注意,您可以使用does not contain操作符代替is not来执行子字符串匹配。

保存过滤器

保存过滤器允许您存储和重用常用的过滤器配置。保存的过滤器特定于一个追踪项目。

保存过滤器

在过滤器框中,构建好过滤器后,点击保存过滤器按钮。这将弹出一个对话框,让您指定过滤器的名称和描述。 Filtering

使用已保存的过滤器

保存过滤器后,它将作为快速过滤器在过滤器栏中供您使用。如果您有三个以上已保存的过滤器,则只直接显示两个,其余的可通过“更多”菜单访问。您可以使用已保存过滤器栏中的设置图标选择性地隐藏默认已保存过滤器。 Filtering

更新已保存的过滤器

选中过滤器后,对过滤器参数进行任何更改。然后点击更新过滤器 > 更新以更新过滤器。 在同一菜单中,您还可以通过点击更新过滤器 > 创建新来创建新的已保存过滤器。

删除已保存的过滤器

点击已保存过滤器栏中的设置图标,然后使用垃圾桶图标删除过滤器。

复制过滤器

您可以复制已构建的过滤器,以便与同事共享、以后重复使用或在APISDK中以编程方式查询运行。 要复制过滤器,您可以先在UI中创建它。然后,您可以点击右上角的复制按钮。如果您已构建树或追踪过滤器,您也可以复制它们。 这将为您提供一个代表LangSmith查询语言中过滤器的字符串。例如:and(eq(is_root, true), and(eq(feedback_key, "user_score"), eq(feedback_score, 1)))。有关查询语言语法的更多信息,请参阅此参考 Copy Filter

在追踪视图中过滤运行

您还可以在追踪视图中直接应用过滤器,这对于筛选大量运行的追踪非常有用。主运行表视图中可用的相同过滤器也可以在此处应用。 默认情况下,只显示匹配过滤器的运行。要在更广泛的追踪树上下文中查看匹配的运行,请将视图选项从“仅过滤”切换到“显示全部”或“最相关”。 Filtering within trace view

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

如果您复制了先前构建的过滤器,您可能希望在将来的会话中手动应用此原始查询。 为此,您可以点击过滤器弹出窗口底部的高级过滤器。从那里您可以将原始查询粘贴到文本框中。 请注意,这会将该查询添加到现有查询中,而不是覆盖它。 Raw Query

使用AI查询自动生成查询(实验性)

有时,找出要指定的精确查询可能很困难!为了使其更容易,我们添加了AI查询功能。有了它,您可以用自然语言输入要构建的过滤器,它会将其转换为有效的查询。 例如:“所有超过10秒的运行” AI Query

高级过滤器

根据根属性过滤中间运行(跨度)

一个常见的概念是过滤属于其根运行具有某些属性的追踪的中间运行。例如,过滤特定类型且其根运行具有正(或负)反馈的中间运行。 为此,首先设置中间运行的过滤器(如上一节所示)。之后,您可以添加另一个过滤规则。然后,您可以点击过滤器底部的高级过滤器链接。这将打开一个新模式,您可以在其中添加追踪过滤器。这些过滤器将应用于您已过滤的单个运行的所有父运行的追踪。 Filtering

过滤子运行具有某些属性的运行(跨度)

这与上述情况相反。您可能希望搜索具有特定子运行的运行。例如,这可能是搜索所有具有名称为Foo的子运行的追踪。当Foo不总是被调用,但您想分析调用它的情况时,这非常有用。 为此,您可以点击过滤器底部最下方的高级过滤器链接。这将打开一个新模式,您可以在其中添加树过滤器。这将使您指定的规则应用于您已过滤的单个运行的所有子运行。 Filtering

示例:过滤所有包含工具调用过滤器的运行

扩展上述工具调用过滤示例,如果您想过滤所有其树包含工具过滤器调用的运行,您可以使用高级过滤器设置中的树过滤器: Filtering
以编程方式连接这些文档到 Claude、VSCode 等,通过 MCP 获取实时答案。
© . This site is unofficial and not affiliated with LangChain, Inc.