在 Kubernetes 上自托管 LangSmith
自托管 LangSmith 是为企业计划设计的附加功能,专为规模最大、对安全性要求最高的客户打造。如需更多详情,请查看我们的 定价页面;若希望获取许可证密钥以在您的环境中试用 LangSmith,请联系 sales@langchain.dev。
本指南将带您逐步完成将 LangSmith 部署到 Kubernetes 集群的过程。我们将使用 Helm 来安装 LangSmith 及其依赖项。
我们已成功在以下 Kubernetes 发行版上测试了 LangSmith:
- Google Kubernetes Engine (GKE)
- Amazon弹性 Kubernetes 服务 (EKS)
- Azure Kubernetes Service (AKS)
- OpenShift
- Minikube 和 Kind(用于开发目的)
前置条件
确保您已准备好以下工具/项目。其中一些项目为可选:
-
一个可通过
kubectl访问的工作中的 Kubernetes 集群。您的集群应满足以下最低要求:- 推荐:至少配备 16 个 vCPU 和 64GB 内存
- 您可能需要根据组织规模/使用情况调整我们所有不同服务的资源请求/限制
- 我们建议使用集群自动伸缩器,根据资源使用情况对节点进行扩容/缩容
- 我们建议设置指标服务器(metrics server),以便启用自动伸缩功能
- 您必须拥有一个至少具备 4 个 vCPU 和 16GB 内存且可分配的节点,因为 ClickHouse 默认将请求此量的资源。
- 集群上存在有效的动态 PV 供应器或可用的 PV。您可以通过运行以下命令进行验证:
- 我们将使用 PostgreSQL 数据库、Redis 和 ClickHouse 来存储追踪数据。这些服务需要持久化存储。
- 如果您在集群中使用 PV,我们强烈建议在生产环境中设置备份。
- 我们强烈建议使用基于 SSD 的存储类以获得更好的性能。我们推荐 7000 IOPS 和 1000 MiB/s 的吞吐量。
kubectl get storageclass输出应至少显示一个具有支持动态配额的存储类。例如:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 161d注意我们强烈建议使用支持卷扩展的存储类。这是因为追踪数据可能需要大量的磁盘空间,并且您的卷可能需要随时间进行扩容。
有关存储类的更多信息,请参阅 Kubernetes 文档。
- 推荐:至少配备 16 个 vCPU 和 64GB 内存
-
Helm
- 要安装 Helm,请参考 Helm 文档。
-
LangSmith 许可密钥
- 您可以从您的 Langchain 代表处获取此内容。如需更多信息,请通过 sales@langchain.dev 联系我们。
-
API 密钥盐值
- 这是您可以生成的一个密钥。它应该是一串随机字符。
- 您可以使用以下命令生成:
openssl rand -base64 32 -
JWT 密钥(可选,但用于基本身份验证)
- 这是您可以生成的一个密钥。它应该是一串随机字符。
- 您可以使用以下命令生成:
openssl rand -base64 32 -
Egress to
https://beacon.langchain.com(if not running in offline mode)- LangSmith 需要访问
https://beacon.langchain.com以进行许可证验证和使用报告。这是 LangSmith 正常运作所必需的。您可以在 出站流量(Egress) 部分找到更多关于出站流量要求的详细信息。
- 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.
-
-
确保已添加 Langchain Helm 仓库。(如果您使用的是本地图表,可跳过此步骤)
helm repo add langchain https://langchain-ai.github.io/helm/ \"langchain\" 已添加到您的仓库
如果您使用的命名空间不是默认命名空间,则需要在 helm 和 kubectl 命令中使用 -n <namespace 标志来指定该命名空间。
-
运行
helm install langsmith langchain/langsmith --values langsmith_config.yaml --version <version> --debug- 将
<your-namespace>替换为您要部署 LangSmith 的命名空间。 - 将
<version>替换为您要部署的 LangSmith 版本。您可以在 Helm Chart 仓库 中查找可用版本。我们通常建议使用最新版本。 输出结果应类似于:
NAME: langsmith
LAST DEPLOYED: Fri Sep 17 21:08:47 2021
NAMESPACE: langsmith
STATUS: deployed
REVISION: 1
TEST SUITE: None - 将
-
运行
kubectl get pods输出现在应该看起来像: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 -
对
langsmith-frontend服务的外部 IP 进行 curl:curl <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"}]% -
在浏览器中访问外部 IP 以连接
langsmith-frontend服务LangSmith UI 应可见且可操作

使用 LangSmith
现在 LangSmith 已运行,您可以开始使用它来追踪代码。有关如何使用自托管 LangSmith 的更多信息,请参阅 自托管使用指南。
您的 LangSmith 实例现在正在运行,但可能尚未完全设置完成。
如果您使用了其中一个基础配置,您可能已部署了无身份验证的配置。 在此状态下,不存在身份验证或用户账户的概念,也没有 API 密钥;只要将主机名传递给 LangChain 追踪器/LangSmith SDK,即可直接提交跟踪记录而无需 API 密钥。
作为下一步,强烈建议您与基础设施管理员合作:
- 为您的 LangSmith 实例配置 DNS 以实现更便捷的访问
- 配置 SSL 以确保提交给 LangSmith 的跟踪数据在传输过程中得到加密
- 配置 LangSmith 以使用 OAuth 身份验证 或 基本身份验证 来保护您的 LangSmith 实例
- 将 LangSmith 连接到安全的 Postgres 和 Redis 实例