前言
参考官方文档:
- https://docs.smith.langchain.com/self_hosting/architectural_overview
- https://docs.smith.langchain.com/self_hosting/installation/kubernetes
架构概述
LangSmith 可以在您控制的云环境中通过 Kubernetes(推荐)或 Docker 运行。
LangSmith 应用程序由几个组件组成,包括 5 个 LangSmith 服务器和 3 个有状态服务:
- LangSmith 前端
- LangSmith 后端
- LangSmith平台后端
- LangSmith 实验室
- LangSmith 队列
- LangSmith ACE(任意代码执行)后端
- ClickHouse
- Postgres
- Redis
要访问 LangSmith UI 并发送 API 请求,您需要公开 LangSmith Frontend 服务。根据您的安装方式,这可以是负载均衡器或主机上公开的端口。
存储服务
LangSmith Self-Hosted 默认捆绑所有存储服务。LangSmith 可以配置为使用所有存储服务的外部版本。在生产环境中,我们强烈建议使用外部存储服务。
-
- 是一个用于联机分析处理 (OLAP) 的高性能、面向列的 SQL 数据库管理系统 (DBMS)。
- LangSmith 使用 ClickHouse 作为跟踪和反馈(大容量数据)的主要数据存储。
-
- 是一个功能强大的开源对象关系数据库系统,它使用并扩展了 SQL 语言,并结合了许多可以安全存储和扩展最复杂数据工作负载的功能
- LangSmith 使用 Postgres 作为事务工作负载和操作数据(除了跟踪和反馈之外的几乎所有数据)的主要数据存储。
-
- 是一个功能强大的内存键值数据库,可持久化存储于磁盘上。
- 通过将数据保存在内存中,Redis 可为缓存等操作提供高性能。
- LangSmith 使用 Redis 来支持排队/缓存操作。
服务
- LangSmith前端:
- 前端使用 Nginx 来提供 LangSmith 的 UI 服务,并将 API 请求路由到其他服务器。
- 这是应用程序的入口点,也是唯一必须向用户公开的组件。
- LangSmith后端
- 后端是 API 请求的主要入口点,负责处理应用程序的大部分业务逻辑。
- 这包括处理来自前端和 SDK 的请求、准备用于提取的跟踪信息,以及支持 Hub API。
- LangSmith队列
- 队列处理传入的跟踪和反馈,以确保它们被异步地提取并保存到跟踪和反馈数据存储中,
- 处理数据完整性检查并确保成功插入数据存储,处理数据库错误或暂时无法连接到数据库等情况下的重试。
- LangSmith 平台后端
- 平台后端是一项内部服务,主要处理身份验证和其他高容量任务。
- 用户无需直接与此服务交互。
- LangSmith Playgroun
- Playground 是一项服务,用于将请求转发到各种 LLM API,以支持 LangSmith Playground 功能。
- 它还可以用于连接您自己的自定义模型服务器。
- LangSmith ACE(任意代码执行)后端
- ACE 后端是一项在安全环境中执行任意代码的服务,用于支持在 LangSmith 中运行自定义代码。
K8s部署LangSmith
本指南将指导您完成将 LangSmith 部署到 Kubernetes 集群的过程。我们将使用 Helm 安装 LangSmith 及其依赖项。
Terraform 模块
官方将发布 Terraform 模块,帮助 LangSmith 配置资源。您可以在官方的公共 Terraform 仓库中找到这些模块。
例如,您可以在
modules/aws/langsmith
我们公共 Terraform 仓库的文件夹中找到用于创建 AWS 资源的 LangSmith 模块。
前置条件
确保您已准备好以下工具/物品。部分物品标记为可选:
- 正常运行并且可以通过kubectl访问的k8s集群,集群应满足以下最低要求
- 建议至少满足总16C64G的资源
- 需要根据组织规模/使用情况调整langsmith所有不同服务的资源请求/限制(request/limit)
- 建议使用集群自动缩放器来根据资源使用情况处理节点的扩缩容
- 建议设置指标服务,以便可以启用自动扩缩容
- 必须至少为Clickhouse准备一个node,其最低规格是4C16G
- k8s集群应存在可用的动态PV
- 将使用
PostgreSQL
数据库、Redis
缓存和ClickHouse
数据库来存储跟踪信息。这些服务需要持久存储。 - 基础安装假设没有外部数据库,并将尝试在您的集群内安装这些服务。为了实现持久性,我们将尝试为这些服务配置卷。
- 如果在集群中使用 PV,强烈建议在生产环境中设置备份。
- 为了获得更佳性能,我们强烈建议使用 SSD 支持的存储类别。我们建议 7000 IOPS 和 1000 MiB/s 的吞吐量。
- 在 EKS 上,您可能需要确保已
ebs-csi-driver
安装并配置动态配置。有关更多信息,请参阅EBS CSI 驱动程序文档。
- 将使用
- 建议至少满足总16C64G的资源
您可以通过运行以下命令来验证这一点:
1 | kubectl get storageclass |
输出应显示至少一个存储类,其配置器支持动态配置。例如:
1 | NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE |
我们强烈建议使用支持卷扩展的存储类。
这是因为跟踪可能需要大量磁盘空间,并且您的卷可能需要随着时间的推移调整大小。
有关存储类的更多信息,请参阅Kubernetes 文档。
Helm
- 安装helm,请参阅Helm 文档
LangSmith 许可证密钥
- 您可以从您的 Langchain 代表处获取此信息。如需了解更多信息,请联系sales@langchain.dev 。
Api Key Salt
这是您可以生成的密钥。它应该是一串随机字符。
您可以使用以下命令生成它:
1 | openssl rand -base64 32 |
JWT Secret(可选,但用于基本身份验证)
这是您可以生成的密钥。它应该是一串随机字符。
您可以使用以下命令生成它:
1 | openssl rand -base64 32 |
出口至
https://beacon.langchain.com
(如果不是在离线模式下运行)配置
在
langsmith_config.yaml
文件中存在多个配置选项,更多信息可以参考:“配置”如果您是 Kubernetes 或 Helm 的新手,我们建议您从 Helm Chart 存储库的示例目录中的示例配置之一开始:LangSmith helm chart examples。
您可以在 Helm Chart 存储库文件中的
values.yaml
文件里,查看配置选项的完整列表: LangSmith Helm Chart
配置helm Charts
- 使用上一步中的配置,创建一个新的文件:
langsmith_config.yaml
- 您至少需要设置以下配置选项(使用基本身份验证)
1 | config: |
部署到K8s集群
- 验证您是否可以连接到 Kubernetes 集群(注意:我们强烈建议安装到空的命名空间)
- 执行
kubectl get pods
,输出应该类似于:
- 执行
1 | kubectl get pods ⎈ langsmith-eks-2vauP7wf 21:07:46 |
命名空间
如果您使用的命名空间不是默认命名空间,则需要使用标志在
helm
和命令中指定命名空间。kubectl-n <namespace>
- 确保已添加 Langchain Helm repo。(如果使用本地图表,请跳过此步骤)
1 | helm repo add langchain https://langchain-ai.github.io/helm/ |
查找 Chart 的最新版本。您可以在Helm Chart 存储库中找到可用的版本。
通常建议使用最新版本。
你也可以运行
helm search repo langchain/langsmith --versions
来查看可用的版本。输出将如下所示:
1 | langchain/langsmith 0.10.52 0.10.132 Helm chart to deploy the langsmith application ... |
执行
helm install langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
替换
<namespace>
为您要部署 LangSmith 的命名空间。替换
<version>
为上一步中要安装的 LangSmith 版本。大多数用户应该安装最新版本。
helm install
命令运行并成功完成后,您应该看到类似如下的输出:
1 | NAME: langsmith |
这可能需要几分钟才能完成,因为它将创建几个 Kubernetes 资源并运行几个作业来初始化数据库和其他服务。
- 运行
kubectl get pods
输出现在看起来应该是这样的(请注意,确切的 pod 名称可能会根据您使用的版本和配置而有所不同):
1 | langsmith-backend-6ff46c99c4-wz22d 1/1 Running 0 3h2m |
验证部署
- 执行
kubectl get services
,输出应该类似于:
1 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE |
- Curl 服务
langsmith-frontend
的外部ip:
1 | curl <external ip>/api/tenants |
- 在浏览器上访问
langsmith-frontend
服务的外部 IP
LangSmith 的 UI 应该是可见的/可操作的
使用LangSmith
现在LangSmith正在运行,您可以开始使用它来跟踪您的代码。您可以在自托管使用指南中找到有关如何使用自托管LangSmith的更多信息。
您的 LangSmith 实例现在正在运行,但可能尚未完全设置。
如果您使用了其中一个基本配置,您将为您创建一个默认的管理员用户帐户。您可以使用在langsmith_gonfig.yaml
文件中指定的电子邮件地址和密码登录。
下一步,强烈建议您与基础设施管理员合作:
- 为您的 LangSmith 实例设置 DNS 以便更轻松地访问
- 配置 SSL 以确保提交给 LangSmith 的跟踪在传输过程中加密
- 使用单点登录配置LangSmith以保护您的LangSmith实例
- 将 LangSmith 连接到外部 Postgres 和 Redis 实例