Skip to main content
本文介绍如何控制 LangSmith 发送追踪记录的目标位置——从静态配置到动态路由和多目标扇出:

静态设置目标项目

追踪概念部分所述,LangSmith 使用 Project 概念来分组追踪记录。如果未指定,项目将设置为 default。你可以设置 LANGSMITH_PROJECT 环境变量来为整个应用程序运行配置自定义项目名称。这应在执行应用程序之前完成。
LANGSMITH_PROJECT 标志仅在 JS SDK 版本 >= 0.2.16 中受支持,如果你使用的是旧版本,请改用 LANGCHAIN_PROJECT
如果指定的项目不存在,它将在首次接收追踪记录时自动创建。

动态设置目标项目

你也可以根据为追踪注释代码的方式,在程序运行时以多种方式设置项目名称。这在你想在同一应用程序中将追踪记录记录到不同项目时非常有用。
使用以下方法之一动态设置项目名称会覆盖由 LANGSMITH_PROJECT 环境变量设置的项目名称。

动态设置目标工作空间

如果你需要根据运行时配置(例如,将不同用户或租户路由到单独的工作空间)动态将追踪记录路由到不同的 LangSmith 工作空间,Python 用户可以使用带有 tracing_context 的特定工作空间的 LangSmith 客户端,而 TypeScript 用户可以将自定义客户端传递给 traceable 或使用带有回调的 LangChainTracer 这种方法适用于多租户应用程序,你希望在工作空间级别按客户、环境或团队隔离追踪记录。

先决条件

通用的跨工作空间追踪

将此方法用于通用应用程序,你希望根据运行时逻辑(例如,客户 ID、租户或环境)动态将追踪记录路由到不同的工作空间。 关键组件:
  1. 为每个工作空间初始化单独的 Client 实例,并指定其各自的 workspace_id
  2. 使用 tracing_context(Python)或将工作空间特定的 client 传递给 traceable(TypeScript)来路由追踪记录。
  3. 通过应用程序的运行时配置传递工作空间配置。

覆盖 LangSmith 部署的默认工作空间

当将代理部署到 LangSmith 时,你可以使用图生命周期上下文管理器来覆盖追踪记录发送到的默认工作空间。这在你希望根据通过 config 参数传递的运行时配置,将来自已部署代理的追踪记录路由到不同工作空间时非常有用。

关键点

  • 通用的跨工作空间追踪:使用 tracing_context(Python)或将工作空间特定的 client 传递给 traceable(TypeScript)来动态将追踪路由到不同的工作空间。
  • LangGraph 跨工作空间追踪:对于 LangGraph 应用程序,使用带有工作空间特定客户端的 LangChainTracer,并通过 callbacks 参数附加它。
  • LangSmith 部署覆盖:使用图生命周期上下文管理器(Python)根据运行时配置覆盖默认部署工作空间。
  • 每个 Client 实例通过 workspaceId 参数维护到特定工作空间的独立连接。
  • 你可以为每个路由自定义工作空间和项目名称。
  • 此模式适用于任何 LangSmith 兼容的追踪(LangChain、OpenAI、自定义函数等)。
部署跨工作空间追踪时,请确保你的服务密钥或 PAT 对所有目标工作空间具有必要的权限。我们建议在生产部署中使用多工作空间服务密钥。对于 LangSmith 部署,你必须将具有跨工作空间访问权限的服务密钥添加到环境变量中(例如,LS_CROSS_WORKSPACE_KEY),以覆盖部署生成的默认服务密钥。

通过副本将追踪记录写入多个目标

副本允许你同时将每个追踪记录发送到多个项目或工作空间。与每个追踪记录只去往一个目标的动态路由模式不同,副本会将追踪记录并行复制到所有配置的目标。 副本可用于:
  • 将生产追踪记录镜像到暂存或个人项目以进行调试。
  • 写入多个工作空间以实现多租户隔离,而无需更改任何应用程序代码。
  • 将追踪记录发送到同一服务器下的不同项目,并具有每个副本的元数据覆盖。

通过环境变量配置副本

LANGSMITH_RUNS_ENDPOINTS 环境变量设置为 JSON 值。支持两种格式:
  • 对象格式:将每个端点 URL 映射到其 API 密钥:
  • 数组格式:副本对象列表,当需要多个副本指向同一 URL 或希望为每个副本设置 project_name 时很有用:
你不能同时使用 LANGSMITH_RUNS_ENDPOINTSLANGSMITH_ENDPOINT。如果同时设置两者,LangSmith 会报错。仅使用其中一个来配置你的端点。

在运行时配置副本

你也可以直接在代码中传递副本,这在目标因请求或租户而异时很有用。
你也可以使用 updates 字段将其他字段(例如元数据或标签)合并到特定副本的运行中——主追踪记录保持不变。副本错误是非致命的:如果副本端点不可用,LangSmith 会记录错误而不影响主追踪记录。
身份验证不会在分布式追踪中传播。当追踪记录跨越多个服务时,LangSmith 会自动将副本的 project_nameupdates 转发给下游服务,但不会转发 API 密钥或凭据。每个服务必须为副本目标配置自己的凭据。

在同一服务器内复制(仅项目副本)

如果你的所有副本都使用相同的 LangSmith 服务器,你可以省略 api_urlauth,只指定 project_name。SDK 将重用默认客户端凭据: