Skip to main content

在 Kubernetes 上自托管 LangSmith

需要企业许可证

自托管 LangSmith 是 Enterprise Plan 的一个附加组件,专为我们规模最大、安全性最强的客户而设计。有关更多详细信息,请参阅我们的定价页面,如果您想获取许可证密钥以在您的环境中试用 LangSmith,请通过 sales@langchain.dev 联系我们。

本指南将引导您完成将 LangSmith 部署到 Kubernetes 集群的过程。我们将使用 Helm 安装 LangSmith 及其依赖项。

我们已经在以下 Kubernetes 发行版上成功测试了 LangSmith:

  • 谷歌 Kubernetes 引擎 (GKE)
  • Amazon Elastic Kubernetes Service (EKS)
  • Azure Kubernetes 服务 (AKS)
  • OpenShift
  • Minikube 和 Kind(用于开发目的)

先决条件

确保您已准备好以下工具/物品。某些项目标记为可选:

  1. 您可以通过kubectl.您的集群应满足以下最低要求:

    1. 推荐:至少 16 个 vCPU,64GB 可用内存
      • 您可能需要根据组织规模/使用情况调整我们所有不同服务的资源请求/限制
      • 我们建议使用集群自动扩展程序来处理基于资源使用情况的节点扩展/缩减
      • 我们建议设置 Metrics Server,以便可以启用自动缩放
      • 您必须有一个节点至少具有 4 个 vCPU 和 16GB 可分配的内存,因为 ClickHouse 默认会请求此数量的资源。
    2. 集群上可用的有效动态 PV 预置程序或 PV。您可以通过运行以下命令来验证这一点:
      • 我们将使用 PostgreSQL 数据库、Redis 和 ClickHouse 来存储跟踪。这些服务需要持久存储。
      • 如果在集群中使用 PV,我们强烈建议您在生产环境中设置备份。
      • 我们强烈建议使用由 SSD 支持的存储类以获得更好的性能。我们建议使用 7000 IOPS 和 1000 MiB/s 吞吐量。
    kubectl get storageclass

    输出应显示至少一个存储类,其中包含支持动态配置的 provisioner。例如:

      NAME            PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 161d
    注意

    我们强烈建议使用支持卷扩展的存储类。这是因为跟踪可能需要大量磁盘空间,并且您的卷可能需要随着时间的推移而调整大小。

    有关存储类的更多信息,请参阅 Kubernetes 文档

  2. 掌舵

    1. 要安装 helm,请参阅 Helm 文档
  3. LangSmith 许可证密钥

    1. 您可以从您的 Langchain 代表处获取。有关更多信息,请通过 sales@langchain.dev 联系我们。
  4. Api Key 盐

    1. 这是您可以生成的密钥。它应该是一个随机的字符串。
    2. 您可以使用以下命令生成此函数:
    openssl rand -base64 32
  5. JWT 密钥(可选,但用于基本身份验证)

    1. 这是您可以生成的密钥。它应该是一个随机的字符串。
    2. 您可以使用以下命令生成此函数:
    openssl rand -base64 32
  6. 出口https://beacon.langchain.com(如果不在离线模式下运行)

    1. LangSmith 需要 egress 到https://beacon.langchain.com用于许可证验证和使用情况报告。这是 LangSmith 正常运行所必需的。您可以在 Egress 部分找到有关 egress 要求的更多信息。
  7. 配置

    1. 您可以在langsmith_config.yaml文件。您可以在 Configuration 部分找到有关特定配置选项的更多信息。
    2. 如果您不熟悉 Kubernetes 或 Helm,我们建议您从 Helm Chart 存储库的 examples 目录中的示例配置之一开始:LangSmith helm chart examples
    3. 您可以在values.yamlHelm Chart 存储库中的文件:LangSmith Helm Chart

配置 Helm Chart:

  1. 创建一个名为langsmith_config.yaml使用上一步中的配置选项。

  2. 您至少需要设置以下配置选项(使用基本身份验证):

    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:

  1. 验证您是否可以连接到您的 Kubernetes 集群(注意:我们强烈建议安装到空命名空间中)

    1. kubectl get pods

      输出应如下所示:

      kubectl get pods                                                                                                                                                                     ⎈ langsmith-eks-2vauP7wf 21:07:46
      No resources found in default namespace.
  2. 确保您已添加 Langchain Helm 存储库。(如果您使用的是本地图表,请跳过此步骤)

    helm repo add langchain https://langchain-ai.github.io/helm/ “langchain” 已添加到您的存储库

Namespace

如果您使用的是默认命名空间以外的命名空间,则需要在helmkubectl命令-n <namespace旗。

  1. 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
  2. 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

验证您的部署:

  1. 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
  2. curl 的外部 iplangsmith-frontend服务:

    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"}]%
  3. 访问外部 IP 以获取langsmith-frontend浏览器上的 service

    LangSmith UI 应该是可见的/可作的

    ./static/langsmith_ui.png

使用 LangSmith

现在 LangSmith 正在运行,您可以开始使用它来跟踪您的代码。您可以在自托管使用指南中找到有关如何使用自托管 LangSmith 的更多信息。

您的 LangSmith 实例现在正在运行,但可能尚未完全设置。

如果您使用了其中一个基本配置,则可能已部署了无身份验证配置。 在这种状态下,没有身份验证或用户帐户的概念,只要将主机名传递给 LangChain tracer/LangSmith SDK,就可以在没有 API 密钥的情况下直接提交 API 密钥和跟踪。

下一步,强烈建议您与基础设施管理员合作:

  • 为您的 LangSmith 实例设置 DNS 以实现更轻松的访问
  • 配置 SSL 以确保对提交给 LangSmith 的跟踪进行传输中加密
  • 配置 LangSmith 以进行 oauth 身份验证基本身份验证,以保护您的 LangSmith 实例
  • 将 LangSmith 连接到受保护的 Postgres 和 Redis 实例

这个页面有帮助吗?


您可以在 GitHub 上留下详细的反馈。