在 Kubernetes 上自托管 LangSmith
LangSmith 自托管是企业计划的一项附加功能,专为我们规模最大、安全意识最强的客户设计。请参阅我们的定价页面了解更多详情,如果您想获取许可证密钥以在您的环境中试用 LangSmith,请通过 sales@langchain.dev 联系我们。
本指南将引导您完成将 LangSmith 部署到 Kubernetes 集群的过程。我们将使用 Helm 安装 LangSmith 及其依赖项。
我们已在以下 Kubernetes 发行版上成功测试了 LangSmith
- Google Kubernetes Engine (GKE)
- Amazon Elastic Kubernetes Service (EKS)
- Azure Kubernetes Service (AKS)
- OpenShift
- Minikube 和 Kind (用于开发目的)
先决条件
请确保您已准备好以下工具/项。其中一些项标记为可选
-
一个可以通过
kubectl
访问的可用 Kubernetes 集群。您的集群应满足以下最低要求-
推荐:至少 16 个 vCPU,64GB 可用内存
- 您可能需要根据组织规模/使用情况,调整我们所有不同服务的资源请求/限制
- 我们建议使用集群自动伸缩器,根据资源使用情况处理节点的伸缩
- 我们建议设置指标服务器,以便开启自动伸缩
- 您必须拥有一个节点,该节点至少具备 4 个 vCPU 和 16GB **可分配**内存,因为 ClickHouse 默认会请求此数量的资源。
-
集群上可用的有效动态 PV 供应器或 PV。
- 我们将使用
PostgreSQL
数据库、Redis
缓存和ClickHouse
数据库来存储跟踪数据。这些服务需要持久存储。 - 我们的基础安装(假定没有外部数据库)将尝试在您的集群内部安装这些服务。为了启用持久性,我们将尝试为这些服务提供卷。
- 如果您的集群中使用 PV,我们强烈建议在生产环境中设置备份。
- 我们强烈建议使用由 SSD 提供支持的存储类以获得更好的性能。我们建议使用 7000 IOPS 和 1000 MiB/s 的吞吐量。
- 在 EKS 上,您可能需要确保已安装并配置
ebs-csi-driver
以进行动态供应。请参阅 EBS CSI Driver 文档了解更多信息。
您可以通过运行以下命令进行验证
kubectl get storageclass
输出应显示至少一个支持动态供应的存储类。例如
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) ebs.csi.eks.amazonaws.com Delete WaitForFirstConsumer true 161d注意我们强烈建议使用支持卷扩展的存储类。这是因为跟踪数据可能需要大量磁盘空间,并且您的卷可能需要随着时间推移进行大小调整。
有关存储类的更多信息,请参阅 Kubernetes 文档。
- 我们将使用
-
-
Helm
- 要安装
helm
,请参阅 Helm 文档
- 要安装
-
LangSmith 许可证密钥
- 您可以从您的 Langchain 代表处获取此密钥。欲了解更多信息,请通过 sales@langchain.dev 联系我们。
-
API 密钥盐
- 这是一个您可以生成的密钥。它应该是一串随机字符。
- 您可以使用以下命令生成此密钥
openssl rand -base64 32
-
JWT 密钥 (可选,但用于基本认证)
- 这是一个您可以生成的密钥。它应该是一串随机字符。
- 您可以使用以下命令生成此密钥
openssl rand -base64 32
-
出口到
https://beacon.langchain.com
(如果未在离线模式下运行)- LangSmith 需要出口到
https://beacon.langchain.com
进行许可证验证和使用情况报告。这是 LangSmith 正常运行所必需的。您可以在出口部分找到有关出口要求的更多信息。
- LangSmith 需要出口到
-
配置
- 您可以在
langsmith_config.yaml
文件中设置多个配置选项。有关特定配置选项的更多信息,请参阅配置部分。 - 如果您是 Kubernetes 或 Helm 的新手,我们建议您从 Helm Chart 仓库的 examples 目录中的示例配置开始:LangSmith Helm Chart 示例。
- 您可以在 Helm Chart 仓库的
values.yaml
文件中查看完整的配置选项列表:LangSmith Helm Chart
- 您可以在
配置您的 Helm Charts:
-
使用上一步中的配置选项创建一个名为
langsmith_config.yaml
的新文件。 -
至少,您需要设置以下配置选项(使用基本认证)
config:
langsmithLicenseKey: "<your license key>"
apiKeySalt: "<your api key salt>"
authType: mixed
basicAuth:
enabled: true
initialOrgAdminEmail: "admin@langchain.dev" # Change this to your admin email address
initialOrgAdminPassword: "secure-password" # Must be at least 12 characters long and have at least one lowercase, uppercase, and symbol
jwtSecret: <your jwt salt> # A random string of characters used to sign JWT tokens for basic auth.
部署到 Kubernetes:
-
验证您是否可以连接到您的 Kubernetes 集群(注意:我们强烈建议安装到一个空命名空间中)
-
运行
kubectl get pods
输出应如下所示
kubectl get pods ⎈ langsmith-eks-2vauP7wf 21:07:46
No resources found in default namespace.
命名空间如果您使用的不是默认命名空间,则需要在
helm
和kubectl
命令中使用-n <namespace>
标志来指定命名空间。 -
-
确保已添加 Langchain Helm 仓库。(如果您正在使用本地 charts,请跳过此步骤)
helm repo add langchain https://github.langchain.ac.cn/helm/
"langchain" has been added to your repositories -
查找 chart 的最新版本。您可以在 Helm Chart 仓库中找到可用版本。
- 我们通常建议使用最新版本。
- 您还可以运行
helm search repo langchain/langsmith --versions
查看可用版本。输出将如下所示
langchain/langsmith 0.10.14 0.10.32 Helm chart to deploy the langsmith application ...
langchain/langsmith 0.10.13 0.10.32 Helm chart to deploy the langsmith application ...
langchain/langsmith 0.10.12 0.10.32 Helm chart to deploy the langsmith application ...
langchain/langsmith 0.10.11 0.10.29 Helm chart to deploy the langsmith application ...
langchain/langsmith 0.10.10 0.10.29 Helm chart to deploy the langsmith application ... -
运行
helm install langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --debug
- 将
<namespace>
替换为您要部署 LangSmith 的命名空间。 - 将
<version>
替换为您要从上一步安装的 LangSmith 版本。大多数用户应安装可用的最新版本。
一旦
helm install
命令成功运行并完成,您应该会看到类似以下的输出NAME: langsmith
LAST DEPLOYED: Fri Sep 17 21:08:47 2021
NAMESPACE: langsmith
STATUS: deployed
REVISION: 1
TEST SUITE: None这可能需要几分钟才能完成,因为它会创建多个 Kubernetes 资源并运行多个作业来初始化数据库和其他服务。
- 将
-
运行
kubectl get pods
输出现在应如下所示(注意:确切的 pod 名称可能因您使用的版本和配置而异)langsmith-backend-6ff46c99c4-wz22d 1/1 Running 0 3h2m
langsmith-frontend-6bbb94c5df-8xrlr 1/1 Running 0 3h2m
langsmith-hub-backend-5cc68c888c-vppjj 1/1 Running 0 3h2m
langsmith-playground-6d95fd8dc6-x2d9b 1/1 Running 0 3h2m
langsmith-postgres-0 1/1 Running 0 9h
langsmith-queue-5898b9d566-tv6q8 1/1 Running 0 3h2m
langsmith-redis-0 1/1 Running 0 9h
验证您的部署:
-
运行
kubectl get services
输出应如下所示
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
langsmith-backend ClusterIP 172.20.140.77 <none> 1984/TCP 35h
langsmith-frontend LoadBalancer 172.20.253.251 <external ip> 80:31591/TCP 35h
langsmith-hub-backend ClusterIP 172.20.112.234 <none> 1985/TCP 35h
langsmith-playground ClusterIP 172.20.153.194 <none> 3001/TCP 9h
langsmith-postgres ClusterIP 172.20.244.82 <none> 5432/TCP 35h
langsmith-redis ClusterIP 172.20.81.217 <none> 6379/TCP 35h -
Curl
langsmith-frontend
服务的外部 IPcurl <external ip>/api/tenants
[{"id":"00000000-0000-0000-0000-000000000000","has_waitlist_access":true,"created_at":"2023-09-13T18:25:10.488407","display_name":"Personal","config":{"is_personal":true,"max_identities":1},"tenant_handle":"default"}]% -
在浏览器中访问
langsmith-frontend
服务的外部 IPLangSmith UI 应该可见/可操作
使用 LangSmith
LangSmith 运行后,您可以开始使用它来跟踪您的代码。您可以在自托管使用指南中找到有关如何使用自托管 LangSmith 的更多信息。
您的 LangSmith 实例现在正在运行,但可能尚未完全设置。
如果您使用了其中一个基本配置,系统将为您创建一个默认管理员用户帐户。您可以使用在 langsmith_config.yaml
文件中指定的电子邮件地址和密码登录。
下一步,强烈建议您与您的基础设施管理员合作,以
- 为您的 LangSmith 实例设置 DNS 以方便访问
- 配置 SSL 以确保提交给 LangSmith 的跟踪数据在传输过程中加密
- 为 LangSmith 配置单点登录 (SSO) 以保护您的 LangSmith 实例安全
- 将 LangSmith 连接到外部 Postgres 和 Redis 实例
有关如何配置这些选项的更多信息,请查阅我们的配置部分。