-
LangSmith 部署 添加了一个控制平面和数据平面,让您可以直接通过 LangSmith UI 部署、扩展和管理代理及应用程序。
如果您不需要完整的基于 UI 的设置,请参阅独立服务器以获取轻量级替代方案。
- Fleet 允许您直接在 LangSmith 中创建、部署和管理 AI 代理,无需编写代码。
- Insights 在 LangSmith 中提供对您的跟踪和应用程序数据的 AI 驱动分析。
- Polly 提供一个嵌入在您 LangSmith 工作区中的 AI 助手,帮助您分析跟踪、线程、提示和实验结果。
先决条件
安装基础 LangSmith 平台
安装 KEDA
KEDA:配置入口
langsmith_config.yaml 中提供一个 hostname。验证集群容量
验证存储
PROVISIONER 值(不是 kubernetes.io/no-provisioner)并标记为 (default),否则您必须在继续之前配置一个。验证出口
https://beacon.langchain.com 的出口可用。请参阅出口文档。启用 LangSmith 部署
组件
启用 LangSmith 部署会在您的集群中配置以下资源:listener:监听控制平面对部署的更改,并创建或更新下游 CRD。LangGraphPlatform CRD:管理 LangSmith 部署的实例。operator:处理对 LangSmith CRD 的更改。host-backend:控制平面。
启用该功能
要启用 LangSmith 部署,请更新您的langsmith_config.yaml:
在配置中启用部署
langsmith_config.yaml 中,启用 deployment 选项。您还必须配置有效的入口。langgraphPlatform 选项已弃用。对于 v0.12.0 之后的任何版本,请使用 config.deployment。(可选)配置镜像镜像
langsmith_config.yaml 中配置 hostBackendImage 和 operatorImage 选项。使用最新 LangSmith Helm chart 版本中指定的镜像标签。(可选)配置基础代理模板
values.yaml 中的基础代理模板。最常见的用例是添加 imagePullSecrets 以向私有容器注册表进行身份验证。详情请参阅为私有注册表配置身份验证。应用更改
<version> 和 <namespace> 替换为您的值:启用 Fleet、Insights 和 Polly
组件
启用这些功能会在您的集群中为每个功能(Fleet、Insights、Polly)配置以下组件:api-server:处理功能请求的主 API 服务器。queue:后台任务处理队列。postgres:用于功能数据的专用 PostgreSQL 实例。可以替换为外部 PostgreSQL 实例。redis:用于功能缓存和发布/订阅的专用 Redis 实例。可以替换为外部 Redis 实例。
toolServer:为代理提供 MCP 工具执行。triggerServer:处理 webhook 和计划触发器。
生成加密密钥
每个功能使用自己的 Fernet 加密密钥来加密特定于功能的机密信息,例如凭据和令牌。单独的密钥允许独立轮换,并在密钥泄露时限制暴露。使用 Python 为每个功能生成一个密钥:agent_builder_encryption_key、insights_encryption_key 和 polly_encryption_key。
启用功能
将配置添加到您的 langsmith_config.yaml
- 使用 Kubernetes Secrets(推荐)
- 使用内联值
agent_builder_encryption_key、insights_encryption_key 和 polly_encryption_key。agentBuilderToolServer 和 agentBuilderTriggerServer 是 Fleet 所必需的。postgres.external 和 redis.external 部分。例如:应用更改
(可选)为 Fleet 启用 OAuth 工具和触发器
要在 Fleet 中启用基于 OAuth 的工具(如 Gmail、Slack 或 Linear),请配置providerOrgId 并为您要使用的每个集成添加提供程序 ID。您可以启用任何提供程序组合。
可用提供程序
通用配置
将以下内容添加到您的langsmith_config.yaml。仅包含您需要的提供程序。
提供程序设置指南
Google OAuth 提供程序
Google OAuth 提供程序
在 GCP 中创建 OAuth 客户端
将 URL 添加到 GCP
<hostname> 替换为您的 LangSmith 主机名,将 <provider-id> 替换为您将使用的提供程序 ID(例如 google):授权的 JavaScript 来源:https://<hostname>
https://<hostname>/api-host/v2/auth/callback/<provider-id>https://<hostname>/host-oauth-callback/<provider-id>
复制凭据
在 LangSmith 中配置 OAuth 提供程序
- 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
应用更改
Microsoft OAuth 提供程序
Microsoft OAuth 提供程序
创建 Azure 应用程序注册
选择支持的帐户类型
添加重定向 URI
<hostname> 替换为您的 LangSmith 主机名,将 <provider-id> 替换为您的提供程序 ID:创建客户端密钥
添加 Microsoft Graph 委托权限
Mail.ReadWriteMail.SendCalendars.ReadWriteTeam.ReadBasic.AllChannel.ReadBasic.AllChannel.CreateChannelMessage.SendChannelMessage.Read.AllChat.CreateChat.ReadWriteUser.ReadBasic.AllFiles.ReadWrite.AllSites.ReadWrite.All
offline_access,以便用户可以接收刷新令牌。授予租户同意
在 LangSmith 中配置 OAuth 提供程序
- 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
common 替换为您的租户 ID。应用更改
Linear OAuth 提供程序
Linear OAuth 提供程序
创建 Linear OAuth 应用
添加回调 URL
<hostname> 替换为您的 LangSmith 主机名,将 <provider-id> 替换为您的提供程序 ID:复制凭据
在 LangSmith 中配置 OAuth 提供程序
- Client ID:来自 Linear 应用
- Client Secret:来自 Linear 应用
- Authorization URL:
https://linear.app/oauth/authorize - Token URL:
https://api.linear.app/oauth/token - Provider ID:唯一字符串,例如:
linear
应用更改
LinkedIn OAuth 提供程序
LinkedIn OAuth 提供程序
创建 LinkedIn OAuth 应用
添加重定向 URI
<hostname> 替换为您的 LangSmith 主机名,将 <provider-id> 替换为您的提供程序 ID:复制凭据
在 LangSmith 中配置 OAuth 提供程序
- 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
应用更改
Slack OAuth 提供程序
Slack OAuth 提供程序
创建 Slack 应用
添加作用域
channels:historychannels:readchat:writegroups:historygroups:readim:historyim:readim:writempim:historyteam:readusers:readusers:read.email
从 Slack 复制凭据
在 LangSmith 中配置 OAuth 提供程序
- Client ID:来自 Slack 应用
- Client Secret:来自 Slack 应用
- Authorization URL:
https://slack.com/oauth/v2/authorize - Token URL:
https://slack.com/api/oauth.v2.access - Provider ID:唯一字符串,例如:
slack
将重定向 URI 添加到 Slack
<hostname> 替换为您的 LangSmith 主机名,将 <provider-id> 替换为您的提供程序 ID(例如 slack):获取机器人 ID
- 从 Slack 应用的 OAuth & Permissions 获取机器人令牌。
- 运行以下命令:
- 从响应中复制
bot_id。
应用更改
启用事件订阅
- 部署后,转到 Slack 应用中的 Event Subscriptions 并启用事件。
-
将 Request URL 设置为:
UUID 是一个固定的 LangSmith 标识符——不要替换它。
-
添加以下机器人事件:
message.channelsmessage.groupsmessage.immessage.mpim
设置触发器和工具
- 将 Slack 机器人添加到您希望它读取的频道。
- 在 Fleet 中配置 Slack 工具或触发器时,提供 channel ID 和 channel name。
(可选)为 Fleet 启用 GitHub App
Fleet 通过专用的 GitHub App(不是 OAuth 应用)与 GitHub 集成。GitHub App 为 Fleet 的 GitHub 工具提供仓库访问权限,并支持私有仓库访问所需的用户授权流程。 设置涉及创建 GitHub App、收集其凭据、将其存储为 Kubernetes Secrets,并从您的langsmith_config.yaml 中引用它们。
创建 GitHub App
填写基本详细信息
- GitHub App name:任何唯一名称,例如
acme-langsmith-fleet。记下 GitHub 生成的 slug(名称的小写、连字符形式),因为这是您将用于FLEET_GITHUB_APP_SLUG的值。 - Homepage URL:您的 LangSmith 主机名,例如
https://langsmith.acme.com。 - 目前取消选择 Webhook 下的 Active。您将在生成 webhook 密钥后的后续步骤中启用它。
设置回调 URL
<hostname> 替换为您的 LangSmith 主机名:设置 webhook URL 并生成 webhook 密钥
- 选择 Active。
-
将 Webhook URL 设置为:
- 将生成的值粘贴到 Webhook secret 中。保存它,因为您在后续步骤中创建 Kubernetes Secret 时需要相同的值。
设置仓库权限
- Contents:读写
- Issues:读写
- Pull requests:读写
- Metadata:只读(自动选择)
选择安装可见性
创建应用
生成客户端密钥
FLEET_GITHUB_APP_CLIENT_SECRET。GitHub 只显示一次。生成私钥
.pem 文件。请妥善保管此文件,因为它授予对 GitHub App 的完全访问权限。PEM 内容是 FLEET_GITHUB_APP_PRIVATE_KEY。生成 state JWT 密钥
FLEET_GITHUB_APP_STATE_JWT_SECRET。创建 Kubernetes Secret
将配置添加到您的 langsmith_config.yaml
FLEET_GITHUB_APP_ENABLED 必须在工具服务器上设置,以便注册 GitHub 工具。其余的 FLEET_GITHUB_APP_* 变量由平台后端使用,位于 commonEnv 下。部署并在仓库上安装应用
- 在 LangSmith 中,打开一个 Fleet 代理并转到代理编辑器中的 GitHub 集成。
- 点击 Connect GitHub 以在 Fleet 应访问的仓库上安装应用。
- 对于私有仓库,您必须在安装期间明确选择每个仓库。
禁用功能
要禁用 Fleet、Insights 和 Polly 的任何组合,请在您的langsmith_config.yaml 中将相应的标志设置为 false:
可选配置
配置其他数据平面
除了上面创建的数据平面外,您还可以在不同的 Kubernetes 集群中或在同一集群的不同命名空间下创建更多数据平面。有多种方法可以实现这一点,因此请实施最适合您用例的解决方案。先决条件
查看集群组织
验证混合先决条件
https://api.host.langchain.com 和 https://api.smith.langchain.com。在 Postgres 中启用该功能
部署到不同的集群
按照混合设置指南操作
config.langsmithWorkspaceId 设置为上一步中的工作区 ID。(可选)向同一集群添加更多数据平面
部署到同一集群中的不同命名空间
更新您的配置
langsmith_config.yaml 中,进行以下修改:- 将
operator.watchNamespaces设置为您的自托管 LangSmith 实例当前运行的命名空间。这可以防止与新数据平面添加的操作员发生冲突。 - 使用 Gateway API 或 Istio Gateway。相应地调整您的
langsmith_config.yaml。
应用更改
按照混合设置指南操作
config.langsmithWorkspaceId 设置为上一步中的工作区 ID。将 config.watchNamespaces 设置为与现有数据平面使用的命名空间不同的命名空间。(可选)配置日志访问
为私有注册表配置身份验证
如果您的 Agent Server 部署将使用来自私有容器注册表(例如 AWS ECR、Azure ACR 或 GCP Artifact Registry)的镜像,请配置镜像拉取 Secret。此配置会自动应用于所有部署,允许它们向您的私有注册表进行身份验证。创建 Kubernetes 镜像拉取 Secret
myregistry.com:您的注册表 URLyour-username:您的注册表用户名your-password:您的注册表密码或访问令牌langsmith:安装 LangSmith 的 Kubernetes 命名空间
在您的 langsmith_config.yaml 中配置部署模板
imagePullSecrets 添加到操作员的部署模板中:应用更改
从其他命名空间读取 Agent Server 日志
对于控制平面和数据平面在同一集群中的部署,请确保控制平面 Kubernetes 部署(host-backend)具有从 Agent Server 部署所在的命名空间中 get、list 和 watch Kubernetes deployments、pods、replicasets 和 logs 的权限。有多种方法可以实现这一点。以下示例使用 Kubernetes RBAC,但请使用最适合您用例的方法:
创建具有所需权限的 Role
Role。替换 <data_plane_namespace>:获取控制平面 ServiceAccount
<control_plane_namespace>:将 Role 绑定到控制平面 ServiceAccount
<data_plane_namespace>、<control_plane_namespace> 和 <control_plane_service_account>:
