除了基础的 LangSmith 平台之外,还可以启用以下功能:
  • LangSmith Deployment 添加了控制平面和数据平面,让你可以直接通过 LangSmith UI 部署、扩展和管理代理与应用程序。
    如果不需要完整的基于 UI 的设置,请参阅独立服务器,了解轻量级替代方案。
  • Fleet 允许你在 LangSmith 中直接创建、部署和管理 AI 代理,无需编写代码。
  • Insights 在 LangSmith 中提供由 AI 驱动的轨迹和应用程序数据分析。
  • Chat 提供工作区内的聊天体验,帮助你分析轨迹、线程、提示词和实验结果。
这些功能需要 Enterprise 计划。获取演示以了解更多信息。

前置条件

1

Install the base LangSmith platform

按照 Kubernetes 安装指南安装基础 LangSmith 平台,然后再继续操作。
2

Install KEDA

运行以下命令,在集群中安装 KEDA:
KEDA 会根据队列大小自动扩展部署系统。
3

Configure an ingress

为 LangSmith 实例配置 ingress、网关或 Istio。所有代理都会作为 Kubernetes 服务部署在此 ingress 后面。请参阅设置 ingress。你必须在 langsmith_config.yaml 中提供 hostname。
4

Verify cluster capacity

确保集群有足够的可用容量来支持多个部署。建议使用集群自动扩展器。
5

Verify storage

确保集群中有有效的动态 PV provisioner 或可用的 PV。
至少有一个 StorageClass 应具有 PROVISIONER 值(不能是 kubernetes.io/no-provisioner)并标记为 (default);否则,必须先进行配置。
6

Verify egress

确保可以访问 https://beacon.langchain.com。请参阅 egress 文档。

启用 LangSmith Deployment

组件

启用 LangSmith Deployment 后,会在集群中配置以下资源:
  • listener:监听控制平面中部署的变化,并创建或更新下游 CRD。
  • LangGraphPlatform CRD:管理 LangSmith Deployment 实例。
  • operator:处理 LangSmith CRD 的变化。
  • host-backend:控制平面。

启用功能

要启用 LangSmith Deployment,请更新 langsmith_config.yaml:
1

Enable deployment in your config

在 langsmith_config.yaml 中启用 deployment 选项。同时必须配置有效的 ingress。
从 v0.12.0 开始,langgraphPlatform 选项已弃用。对于 v0.12.0 之后的任何版本,请使用 config.deployment。
2

(Optional) Configure image mirroring

如果需要将镜像镜像到私有仓库,请在 langsmith_config.yaml 中配置 hostBackendImage 和 operatorImage 选项。请使用最新 LangSmith Helm chart 版本中指定的镜像标签。
3

(Optional) Configure base agent templates

如果需要自定义 operator 创建代理 Kubernetes 资源的方式,请覆盖 values.yaml 中的基础代理模板。最常见的用例是添加 imagePullSecrets,以便通过身份验证访问私有容器仓库。详情请参阅配置私有仓库身份验证。
4

Apply the changes

运行以下命令应用更改。本指南中凡是要求应用更改,均使用此命令。请将 <version> 和 <namespace> 替换为你的值:
继续之前,请确认新 Pod 正在运行:
现在,你的实例已准备好创建部署。

启用 Fleet、Insights 和 Chat

Fleet 需要 LangSmith Self-Hosted v0.13 或更高版本。下面介绍的独立部署模型需要 v0.15 或更高版本。
每项功能都需要一个 Fernet 加密密钥。你可以在同一份 Helm 配置中启用这三项功能。

组件

启用这些功能后,集群中会针对每项功能(Fleet、Insights、Chat)配置以下组件:
  • api-server:处理该功能请求的主 API 服务器。
  • queue:后台任务处理队列。
  • postgres:用于存储该功能数据的专用 PostgreSQL 实例。可以替换为外部 PostgreSQL 实例。
  • redis:用于该功能缓存和发布/订阅的专用 Redis 实例。可以替换为外部 Redis 实例。
Fleet 还会额外配置:
  • toolServer:为代理提供 MCP 工具执行能力。
  • triggerServer:处理 Webhook 和计划触发器。

生成加密密钥

每项功能都使用自己的 Fernet 加密密钥来加密该功能专用的机密信息,例如凭据和令牌。使用独立密钥可以分别进行轮换,并在密钥泄露时限制影响范围。使用 Python 为每项功能生成一个密钥:
建议将每个密钥存储在预定义的 Kubernetes secret 中,而不是直接写入配置文件。相关参数请参阅使用现有 secret:agent_builder_encryption_key、insights_encryption_key 和 polly_encryption_key。

启用功能

1

Add the configuration to your langsmith_config.yaml

如果要从旧版 agentBootstrap 部署模型迁移,请禁用 backend.agentBootstrap 以及旧的 config.agentBuilder、config.insights 和 config.polly 标志。这些标志位于 config 部分,而不是上面显示的顶层 fleet、insights 和 polly 标志。你还必须通过 LangSmith Deployments UI 手动删除现有的 Fleet、Insights 和 Chat 部署。如果旧版 agentBootstrap 模型中的 Fleet 未使用外部 PostgreSQL 数据库,并且你希望保留现有 Fleet 代理,请在应用此配置前通过 Support Portal 联系技术支持。
Fleet 需要 fleetToolServer 和 fleetTriggerServer。从 Helm chart v15 开始,这两个配置项替代了已弃用的 agentBuilderToolServer 和 agentBuilderTriggerServer。
默认情况下,每项功能都会部署各自独立的 PostgreSQL 和 Redis 实例。若要改用外部数据库,请在每项功能下配置 postgres.external 和 redis.external 部分。例如:
2

Apply the changes

确认 Fleet、Insights 和 Chat 的 Pod 正在运行:

(可选)为 Fleet 启用 OAuth 工具和触发器

要在 Fleet 中启用 Gmail、Slack 或 Linear 等基于 OAuth 的工具,请配置 providerOrgId,并为每个要使用的集成添加 provider ID。你可以启用任意组合的 provider。

可用 provider

通用配置

将以下内容添加到 langsmith_config.yaml 中。只包含你需要的 provider。
Provider ID 必须唯一,且不能以 -agent-builder 或 -oauth-provider 结尾。

Provider 设置指南

要为 Fleet 启用 Google OAuth,请在 GCP 中创建 OAuth 客户端,并使用所需的 URL 和凭据进行配置。
1

Create OAuth client in GCP

在 Google Cloud Console 中创建新的 OAuth 客户端应用(Web 应用)。
2

Add URLs to GCP

将以下 URL 添加到 OAuth 客户端,并将 <hostname> 替换为 LangSmith 主机名,将 <provider-id> 替换为你要使用的 provider ID(例如 google):已获授权的 JavaScript 来源:
  • https://<hostname>
已获授权的重定向 URI:
  • https://<hostname>/api-host/v2/auth/callback/<provider-id>
  • https://<hostname>/host-oauth-callback/<provider-id>
3

Copy credentials

从 GCP OAuth 应用中复制 Client ID 和 Client Secret。
4

Configure OAuth provider in LangSmith

在 LangSmith 中前往 Settings > OAuth Providers,然后添加新的 provider:
  • Client ID:来自 GCP
  • Client Secret:来自 GCP
  • Authorization URL:https://accounts.google.com/o/oauth2/auth
  • Token URL:https://oauth2.googleapis.com/token
  • Provider ID:唯一字符串,例如:google
5

Apply the changes

将 LangSmith OAuth provider ID 添加到 langsmith_config.yaml 并进行部署:
要为 Fleet 启用 Microsoft OAuth,请创建 Azure 应用注册,添加所需的 Microsoft Graph 委托权限,并在 LangSmith 中配置 Microsoft OAuth provider。
1

Create an Azure app registration

在 Microsoft Entra 管理中心中,前往 Applications > App registrations,然后创建新的注册。
2

Choose supported account types

选择与你的部署相匹配的帐户类型。如果需要让来自多个 Microsoft Entra 租户的用户进行身份验证,请选择多租户选项。如果部署仅限于一个租户,则可以使用单租户应用注册。
3

Add the redirect URI

添加以下 Web 重定向 URI,并将 <hostname> 替换为 LangSmith 主机名,将 <provider-id> 替换为 provider ID:
4

Create a client secret

在 Certificates & secrets 中创建新的客户端密钥。复制 Application (client) ID 和生成的客户端密钥值。
5

Add Microsoft Graph delegated permissions

在 API permissions 中添加以下 Microsoft Graph 委托权限:
  • Mail.ReadWrite
  • Mail.Send
  • Calendars.ReadWrite
  • Team.ReadBasic.All
  • Channel.ReadBasic.All
  • Channel.Create
  • ChannelMessage.Send
  • ChannelMessage.Read.All
  • Chat.Create
  • Chat.ReadWrite
  • User.ReadBasic.All
  • Files.ReadWrite.All
  • Sites.ReadWrite.All
LangSmith 会自动为 Microsoft provider 请求 offline_access,以便用户接收刷新令牌。
6

Grant tenant consent

如果 Microsoft 365 策略要求为这些委托权限授予同意,请授予租户管理员同意。
7

Configure OAuth provider in LangSmith

在 LangSmith 中前往 Settings > OAuth Providers,然后添加新的 provider:
  • Name:例如 Microsoft
  • Provider ID:唯一字符串,例如:microsoft-oauth-provider
  • Client ID:来自 Azure 的 Application (client) ID
  • Client Secret:来自 Azure 的客户端密钥值
  • Authorization URL:https://login.microsoftonline.com/common/oauth2/v2.0/authorize
  • Token URL:https://login.microsoftonline.com/common/oauth2/v2.0/token
  • Provider Type:microsoft
  • Token endpoint auth method:client_secret_post
如果创建的是单租户应用注册,请将授权 URL 和令牌 URL 中的 common 替换为租户 ID。
8

Apply the changes

将以下内容添加到 langsmith_config.yaml 并进行部署:
要为 Fleet 启用 Linear OAuth,请创建 Linear OAuth 应用,并使用所需凭据进行配置。
1

Create a Linear OAuth app

前往 Linear Settings > API > Applications,然后创建新的 OAuth 应用。
2

Add callback URL

设置回调 URL,并将 <hostname> 替换为 LangSmith 主机名,将 <provider-id> 替换为 provider ID:
3

Copy credentials

创建应用后,复制 Client ID 和 Client Secret。
4

Configure OAuth provider in LangSmith

在 LangSmith 中前往 Settings > OAuth Providers,然后添加新的 provider:
  • Client ID:来自 Linear 应用
  • Client Secret:来自 Linear 应用
  • Authorization URL:https://linear.app/oauth/authorize
  • Token URL:https://api.linear.app/oauth/token
  • Provider ID:唯一字符串,例如:linear
5

Apply the changes

将以下内容添加到 langsmith_config.yaml 并进行部署:
要为 Fleet 启用 LinkedIn OAuth,请创建 LinkedIn OAuth 应用,并使用所需凭据进行配置。
1

Create a LinkedIn OAuth app

前往 linkedin.com/developers/apps,然后创建新的应用。
2

Add redirect URI

在应用设置中,前往 Auth 选项卡。添加以下重定向 URI,并将 <hostname> 替换为 LangSmith 主机名,将 <provider-id> 替换为 provider ID:
3

Copy credentials

从 Auth 选项卡复制 Client ID 和 Client Secret。
4

Configure OAuth provider in LangSmith

在 LangSmith 中前往 Settings > OAuth Providers,然后添加新的 provider:
  • Client ID:来自 LinkedIn 应用
  • Client Secret:来自 LinkedIn 应用
  • Authorization URL:https://www.linkedin.com/oauth/v2/authorization
  • Token URL:https://www.linkedin.com/oauth/v2/accessToken
  • Provider ID:唯一字符串,例如:linkedin
5

Apply the changes

将以下内容添加到 langsmith_config.yaml 并进行部署:
要为 Fleet 启用 Salesforce OAuth,请创建 Salesforce External Client App,配置其 OAuth 设置和策略,获取其凭据,然后在 LangSmith 中配置 Salesforce OAuth provider。
1

Create an External Client App

在 Salesforce Setup 中,使用 Quick Find 打开 External Client App Manager,然后点击 New External Client App。在 Basic Information 下设置:
  • External Client App Name:例如 LangSmith Fleet
  • Contact Email:管理员邮箱地址
  • Distribution State:Local
External Client App 是 Salesforce 当前用于 OAuth 集成的框架。如果 New External Client App 不可用,请在 Setup > External Client App Settings 下确认已为组织启用应用创建功能。
2

Enable OAuth and configure the OAuth settings

展开 API (Enable OAuth Settings) 并选择 Enable OAuth,然后进行以下配置:
  • Callback URL:将 <hostname> 替换为 LangSmith 主机名,将 <provider-id> 替换为 provider ID:
  • Selected OAuth Scopes:添加 Manage user data via APIs (api) 和 Perform requests at any time (refresh_token, offline_access)。
  • 保持选中 Require Secret for the Web Server Flow。
  • 不要选择 Enable Authorization Code and Credentials Flow 和 Enable Client Credentials Flow。Fleet 使用标准 Web 服务器(授权码)流程。
点击 Create。
3

Set the OAuth policies

打开应用,选择 Policies 选项卡,然后点击 Edit:
  • Refresh Token Policy:选择 Refresh token is valid until revoked。
  • Permitted Users:保留 All users may self-authorize。如果改为 Admin approved users are pre-authorized,则必须先通过权限集或配置文件为应用分配权限,否则授权会失败。
点击 Save。
External Client App 需要在两个位置进行配置:Settings(上一步的 OAuth 定义)和 Policies(本步骤)。两处都必须保存。
4

Copy the credentials

在 Settings 选项卡的 OAuth Settings 下,选择 Consumer Key and Secret。Consumer Key 就是 Client ID,Consumer Secret 就是 Client Secret。
创建应用后,首次连接前最多等待 30 分钟,以便应用完成传播。
5

Configure OAuth provider in LangSmith

在 LangSmith 中前往 Settings > OAuth Providers,点击 OAuth Provider,然后填写:
  • Provider ID:唯一字符串,例如:salesforce-oauth-provider。下一步的 salesforceOAuthProvider 使用相同的值。
  • Display Name:例如 Salesforce
  • Client ID:来自 Salesforce 的 Consumer Key
  • Client Secret:来自 Salesforce 的 Consumer Secret
  • Authorization URL:https://<MyDomain>.my.salesforce.com/services/oauth2/authorize
  • Token URL:https://<MyDomain>.my.salesforce.com/services/oauth2/token
LangSmith 会根据 Token URL 自动识别 Salesforce,因此无需设置 provider-type 或 token-auth-method 字段。请关闭 Enable PKCE,以匹配上面配置的 Web 服务器流程。
将 <MyDomain> 替换为组织的 My Domain,可在 Setup > My Domain 中找到。对于沙盒环境,请使用 https://<MyDomain>--<SandboxName>.sandbox.my.salesforce.com/services/oauth2/authorize 以及相匹配的 token URL。
6

Apply the changes

将以下内容添加到 langsmith_config.yaml 并进行部署:
如果登录失败:确认 Salesforce 中的 Callback URL 与 https://<hostname>/host-oauth-callback/<provider-id> 完全一致(使用 HTTPS 且末尾没有斜杠);如果选择了 Admin approved users are pre-authorized,请通过权限集分配应用;如果组织强制执行登录 IP 范围,请在用户配置文件中将 Fleet 服务器的出口 IP 加入允许列表,或在应用策略中将 IP Relaxation 设置为 Relax IP restrictions。
一个 Slack OAuth provider 同时为 Slack 工具和添加到各个代理中的 Slack 应用提供支持,因此 Slack 设置与其他 Slack 集成配置放在一起。完整步骤请参阅在 Self-hosted 上设置 Slack。其中介绍了创建 Slack 应用、添加 bot 权限范围、注册 provider、设置重定向 URI 以及配置 Helm 值。

(可选)为 Fleet 启用 GitHub App

Fleet 通过专用的 GitHub App(不是 OAuth 应用)与 GitHub 集成。GitHub App 为 Fleet 的 GitHub 工具提供仓库访问权限,并支持访问私有仓库所需的用户授权流程。 设置过程包括创建 GitHub App、收集其凭据、将凭据存储为 Kubernetes secret,并在 langsmith_config.yaml 中引用这些凭据。
1

Create a GitHub App

前往 GitHub Settings > Developer settings > GitHub Apps,然后点击 New GitHub App。
你可以在个人帐户或组织下创建应用。如果需要由多人管理该集成,建议创建归组织所有的应用。
2

Fill in basic details

  • GitHub App name:任意唯一名称,例如 acme-langsmith-fleet。记下 GitHub 生成的 slug(名称的小写、连字符形式),稍后将其用于 FLEET_GITHUB_APP_SLUG。
  • Homepage URL:LangSmith 主机名,例如 https://langsmith.acme.com。
  • 暂时取消选择 Webhook 下的 Active。生成 Webhook secret 后,再在后续步骤中启用。
3

Set callback URLs

在 Identifying and authorizing users 下,添加以下 Callback URL,并将 <hostname> 替换为 LangSmith 主机名:
选择 Redirect on update。在 Post installation 下,添加以下 Setup URL:
选择 Redirect on update。
4

Set webhook URL and generate a webhook secret

生成随机 Webhook secret:
在 Webhook 下:
  • 选择 Active。
  • 将 Webhook URL 设置为:
  • 将生成的值粘贴到 Webhook secret 中。请保存该值,稍后创建 Kubernetes secret 时还需要使用相同的值。
5

Set repository permissions

在 Permissions > Repository permissions 下,授予以下权限:
  • Contents:Read and write
  • Issues:Read and write
  • Pull requests:Read and write
  • Metadata:Read-only(自动选择)
在 Permissions > Account permissions 下,授予 Email addresses: Read-only。
这些是 Fleet 内置 GitHub 工具所需的最低权限(问题管理、创建拉取请求和访问仓库内容)。如果需要其他工具能力,请进行相应调整。
6

Choose install visibility

在 Where can this GitHub App be installed? 下,选择符合分发需求的选项。对于大多数自托管部署,选择 Only on this account 即可。
7

Create the app

点击 Create GitHub App。在应用设置页面记下以下值:
8

Generate a client secret

在 Client secrets 下,点击 Generate a new client secret 并复制其值。这就是 FLEET_GITHUB_APP_CLIENT_SECRET。GitHub 只会显示一次。
9

Generate a private key

滚动到 Private keys,然后点击 Generate a private key。GitHub 会下载一个 .pem 文件。请妥善保管该文件,因为它授予 GitHub App 完整访问权限。PEM 内容就是 FLEET_GITHUB_APP_PRIVATE_KEY。
10

Generate a state JWT secret

LangSmith 使用 HMAC 密钥对短期 OAuth 状态令牌进行签名。生成一个密钥:
这就是 FLEET_GITHUB_APP_STATE_JWT_SECRET。
11

Create a Kubernetes secret

将敏感值存储在 Kubernetes secret 中:
对于生产部署,请通过现有的 secret 管理流程管理此 secret(例如 Sealed Secrets 或 External Secrets Operator)。更多信息请参阅使用现有 secret。
12

Add the configuration to your langsmith_config.yaml

添加以下内容,并将占位值替换为上面收集的非敏感值:
必须在工具服务器上设置 FLEET_GITHUB_APP_ENABLED,这样才能注册 GitHub 工具。其余 FLEET_GITHUB_APP_* 变量由平台后端使用,并放在 commonEnv 下。
13

Deploy and install the app on repositories

运行以下命令应用更改:
Pod 健康运行后:
  1. 在 LangSmith 中打开 Fleet 代理,并在代理编辑器中前往 GitHub 集成。
  2. 点击 Connect GitHub,将应用安装到 Fleet 应访问的仓库。
  3. 对于私有仓库,必须在安装过程中明确选择每个仓库。
每位用户还必须通过 LangSmith 中的重新授权流程,使 GitHub App 获得其 GitHub 帐户的授权。这样,Fleet 才能为代表用户执行操作的工具解析每个用户对应的令牌。

禁用功能

要禁用 Fleet、Insights 和 Chat 中的任意组合,请在 langsmith_config.yaml 中将对应标志设置为 false:

可选配置

配置其他数据平面

不建议使用;计划弃用。 不建议通过控制平面配置其他数据平面,未来版本将弃用这种方式。请改为部署独立 Agent Server,并将其配置为向自托管 LangSmith 实例发送轨迹。
除了上面创建的数据平面之外,还可以在不同的 Kubernetes 集群中,或在同一集群的其他命名空间中创建更多数据平面。有多种实现方式,请根据用例选择最合适的方案。

前置条件

1

Review cluster organization

阅读混合模式(旧版)文档中的集群组织指南,了解如何根据用例组织集群。
2

Verify hybrid prerequisites

为新集群确认混合模式部分中的前置条件。在前置条件的第 5 步中,将 egress 配置为访问你的自托管 LangSmith 实例,而不是 https://api.host.langchain.com 和 https://api.smith.langchain.com。
3

Enable the feature in Postgres

对 LangSmith Postgres 实例运行以下命令,以启用此功能。记下 workspace ID,供后续步骤使用。

部署到其他集群

1

Follow the hybrid setup guide

按照混合模式设置指南中的第 2 至第 6 步操作。将 config.langsmithWorkspaceId 设置为上一步获取的 workspace ID。
2

(Optional) Add more data planes to the same cluster

若要向同一集群添加多个数据平面,请按照在同一集群中配置其他数据平面中的说明操作。

部署到同一集群中的其他命名空间

1

Update your config

在 langsmith_config.yaml 中进行以下修改:
  • 将 operator.watchNamespaces 设置为当前运行自托管 LangSmith 实例的命名空间,以避免与新数据平面添加的 operator 冲突。
  • 使用 Gateway API 或 Istio Gateway。相应地调整 langsmith_config.yaml。
2

Apply the changes

3

Follow the hybrid setup guide

按照混合模式设置指南中的第 2 至第 6 步操作。将 config.langsmithWorkspaceId 设置为上一步获取的 workspace ID。将 config.watchNamespaces 设置为不同于现有数据平面所使用的命名空间。
4

(Optional) Configure log access

配置控制平面,使其可以读取新命名空间中的 Agent Server 部署日志。请参阅读取其他命名空间中的 Agent Server 日志。

配置私有仓库身份验证

如果你的 Agent Server 部署将使用私有容器仓库中的镜像(例如 AWS ECR、Azure ACR 或 GCP Artifact Registry),请配置镜像拉取 secret。此配置会自动应用于所有部署,使它们能够通过身份验证访问私有仓库。
1

Create a Kubernetes image pull secret

将这些值替换为你的仓库凭据:
  • myregistry.com:仓库 URL
  • your-username:仓库用户名
  • your-password:仓库密码或访问令牌
  • langsmith:安装 LangSmith 的 Kubernetes 命名空间
2

Configure the deployment template in your langsmith_config.yaml

要让 Agent Server 部署使用私有仓库 secret,请将 imagePullSecrets 添加到 operator 的部署模板中:
3

Apply the changes

通过 LangSmith UI 创建的所有用户部署都会继承这些仓库凭据。
有关特定仓库的身份验证方式,请参阅 Kubernetes 关于从私有仓库拉取镜像的文档。

读取其他命名空间中的 Agent Server 日志

不支持在控制平面(host-backend)和数据平面(listener)部署于不同 Kubernetes 集群的自托管部署中获取服务器日志。
对于控制平面和数据平面位于同一集群的部署,请确保控制平面 Kubernetes 部署(host-backend)有权限从 Agent Server 部署所在的命名空间中对 Kubernetes deployments、pods、replicasets 和 logs 执行 get、list 和 watch 操作。有多种实现方式。下面的示例使用 Kubernetes RBAC,但你应选择最适合用例的方案:
1

Create a Role with the required permissions

在 Agent Server 所在的命名空间中创建一个 Role。替换 <data_plane_namespace>:
2

Get the control plane ServiceAccount

替换 <control_plane_namespace>:
3

Bind the Role to the control plane ServiceAccount

替换 <data_plane_namespace>、<control_plane_namespace> 和 <control_plane_service_account>:
在此示例中,Role 和 RoleBinding 与 Agent Server 部署位于同一个 Kubernetes 命名空间。你可以为 Role 和 RoleBinding 指定任意名称,并根据需要进行自定义。

后续步骤

启用 LangSmith Deployment 后,请参阅使用控制平面进行部署,通过 LangSmith UI 构建和部署应用程序。