Skip to main content
本指南将向您展示如何在您的自托管 LangSmith 实例上启用 LangSmith 部署。这将添加一个控制平面和一个数据平面,让您可以直接通过 LangSmith UI 来部署、扩展和管理智能体与应用程序。 完成本指南后,您将能够使用 LangSmith 的可观测性评估部署功能。
重要
启用 LangSmith 部署需要 企业版 计划。
此设置页面用于在现有的 LangSmith 实例上启用 LangSmith 部署请查阅自托管选项以了解:

概述

本指南建立在 Kubernetes 安装指南 的基础上。您必须先完成该指南,然后才能继续。本页面涵盖了启用 LangSmith 部署所需的额外设置步骤:
  • 安装 LangGraph 操作器
  • 配置您的入口
  • 连接到控制平面

先决条件

  1. 您正在使用 Kubernetes。
  2. 您有一个正在运行的自托管 LangSmith 实例。
  3. 您的集群上已安装 KEDA
  helm repo add kedacore https://kedacore.github.io/charts
  helm install keda kedacore/keda --namespace keda --create-namespace
KEDA 用于根据队列大小自动扩展部署系统。
  1. 入口配置
    1. 您必须为您的 LangSmith 实例设置入口、网关或使用 Istio。所有智能体都将作为 Kubernetes 服务部署在此入口之后。请使用本指南为您的实例设置入口。要启用 LangSmith 部署,您需要在 values.yaml 中提供一个 hostname
  2. 您的集群中必须有足够的空间来容纳多个部署。建议使用 Cluster-Autoscaler 来自动配置新节点。
  3. 一个有效的动态 PV 供应器或集群上可用的 PV。您可以通过运行以下命令来验证:
  kubectl get storageclass
  1. 您的网络可以出站访问 https://beacon.langchain.com。如果未在隔离模式下运行,则需要进行许可证验证和使用情况报告。有关更多详细信息,请参阅出站访问文档

设置

  1. 作为配置自托管 LangSmith 实例的一部分,您需要启用 deployment 选项。这将配置几个关键资源。
    1. listener:这是一个服务,用于监听控制平面对您部署的更改,并创建/更新下游的 CRD。
    2. LangGraphPlatform CRD:用于 LangSmith 部署的 CRD。它包含管理 LangSmith 部署实例的规范。
    3. operator:此操作器处理对 LangSmith CRD 的更改。
    4. host-backend:这是控制平面
从 v0.12.0 开始,langgraphPlatform 选项已弃用。对于 v0.12.0 之后的任何版本,请使用 config.deployment
  1. 图表将使用两个额外的镜像。请使用最新版本中指定的镜像。
  hostBackendImage:
    repository: "docker.io/langchain/hosted-langserve-backend"
    pullPolicy: IfNotPresent
  operatorImage:
    repository: "docker.io/langchain/langgraph-operator"
    pullPolicy: IfNotPresent
  1. 在您的 LangSmith 配置文件(通常是 langsmith_config.yaml)中,启用 deployment 选项。请注意,您还必须有一个有效的入口设置:
  config:
    deployment:
      enabled: true
    # 从 v0.12.0 开始,此部分已弃用。对于 v0.12.0 之后的任何版本,请使用 config.deployment。
    langgraphPlatform:
      enabled: true
      langgraphPlatformLicenseKey: "YOUR_LANGGRAPH_PLATFORM_LICENSE_KEY"
  1. 在您的 values.yaml 文件中,配置 hostBackendImageoperatorImage 选项(如果您需要镜像镜像)。如果您使用的是需要身份验证的私有容器注册表,则还必须配置 imagePullSecrets,请参阅为私有注册表配置身份验证
  2. 您还可以通过覆盖 values.yaml 中的基础模板 来为您的智能体配置基础模板。 您的自托管基础设施现在已准备好创建部署。

(可选)配置额外的数据平面

除了上述步骤中已创建的现有数据平面外,您还可以创建更多位于不同 Kubernetes 集群或同一集群不同命名空间中的数据平面。

先决条件

  1. 阅读混合部署文档中的集群组织指南,以了解如何根据您的用例最佳地组织此操作。
  2. 验证新集群满足混合部署部分中提到的先决条件。请注意,在先决条件的第 5 步中,您需要启用对您的自托管 LangSmith 实例的出站访问,而不是 https://api.host.langchain.comhttps://api.smith.langchain.com。
  3. 针对您的 LangSmith Postgres 实例运行以下命令以启用此功能。这是您的自托管 LangSmith 设置附带的 Postgres 实例
update organizations set config = config || '{"enable_lgp_listeners_page": true}' where id = '<org id here>';
update tenants set config = config || '{"langgraph_remote_reconciler_enabled": true}' where id = '<workspace id here>';
记下您选择的工作空间 ID,因为在后续步骤中您将需要它。

部署到不同的集群

  1. 按照混合设置指南中的步骤 2-6 操作。config.langsmithWorkspaceId 值应设置为在先决条件中记下的工作空间 ID。
  2. 要在集群中部署多个数据平面,请遵循在同一集群中配置额外数据平面的规则。

部署到同一集群的不同命名空间

  1. 您需要对在上述设置说明第 3 步中创建的 langsmith_config.yaml 文件进行一些修改:
    • operator.watchNamespaces 字段设置为您的自托管 LangSmith 实例当前运行的命名空间。这是为了防止与作为新数据平面一部分添加的操作器发生冲突。
    • 必须使用 Gateway APIIstio Gateway。请相应地调整您的 langsmith_config.yaml 文件。
  2. 运行 helm upgrade 以使用新配置更新您的自托管 LangSmith 实例。
  3. 按照混合设置指南中的步骤 2-6 操作。config.langsmithWorkspaceId 值应设置为在先决条件中记下的工作空间 ID。请记住,config.watchNamespaces 应设置为与现有数据平面使用的命名空间不同的命名空间!
  4. (可选)配置控制平面以从其他命名空间读取 Agent Server 部署的日志。有关更多详细信息,请参阅说明

(可选)为私有注册表配置身份验证

如果您的 Agent Server 部署 将使用来自私有容器注册表(例如,AWS ECR、Azure ACR、GCP Artifact Registry、私有 Docker 注册表)的镜像,请配置镜像拉取密钥。这是一次性的基础设施配置,允许所有部署自动向您的私有注册表进行身份验证。 步骤 1:创建 Kubernetes 镜像拉取密钥
kubectl create secret docker-registry langsmith-registry-secret \
    --docker-server=myregistry.com \
    --docker-username=your-username \
    --docker-password=your-password \
    --docker-email=your-email@example.com \
    -n langsmith
将值替换为您的注册表凭据:
  • myregistry.com:您的注册表 URL
  • your-username:您的注册表用户名
  • your-password:您的注册表密码或访问令牌
  • langsmith:安装 LangSmith 的 Kubernetes 命名空间
步骤 2:在 values.yaml 中配置部署模板 要使 Agent Server 部署能够使用私有注册表密钥,您必须将 imagePullSecrets 添加到操作器的部署模板中:
operator:
  templates:
    deployment: |
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ${name}
        namespace: ${namespace}
      spec:
        replicas: ${replicas}
        revisionHistoryLimit: 10
        selector:
          matchLabels:
            app: ${name}
        template:
          metadata:
            labels:
              app: ${name}
          spec:
            enableServiceLinks: false
            imagePullSecrets:
            - name: langsmith-registry-secret
            containers:
            - name: api-server
              image: ${image}
              ports:
              - name: api-server
                containerPort: 8000
                protocol: TCP
              livenessProbe:
                httpGet:
                  path: /ok
                  port: 8000
                periodSeconds: 15
                timeoutSeconds: 5
                failureThreshold: 6
              readinessProbe:
                httpGet:
                  path: /ok
                  port: 8000
                periodSeconds: 15
                timeoutSeconds: 5
                failureThreshold: 6
步骤 3:在 Helm 安装/升级期间应用 当您使用 Helm 部署或升级 LangSmith 实例时,此配置将被应用。通过 LangSmith UI 创建的所有用户部署都将自动继承这些注册表凭据。 对于特定于注册表的身份验证方法(AWS ECR、Azure ACR、GCP Artifact Registry 等),请参阅 Kubernetes 关于从私有注册表拉取镜像的文档

(可选)配置从其他命名空间读取 Agent Server 部署日志的访问权限

重要
对于控制平面(host-backend)和数据平面(listener)部署在不同 Kubernetes 集群中的自托管部署,不支持检索服务器日志。
对于控制平面(host-backend)和数据平面(listener)部署在同一 Kubernetes 集群中的自托管部署,请确保控制平面 Kubernetes 部署(host-backend)有权从 Agent Server 部署所在的 Kubernetes 命名空间 get/list/watch Kubernetes deployments/pods/replicasets/logs。实现此目标的方法有多种,请根据您的用例实施最适合的解决方案。 示例实现:
  1. 在部署 Agent Server 的 Kubernetes 命名空间中创建一个具有所需权限的 Role。替换以下命令中的 <data_plane_namespace>
    kubectl apply -n <data_plane_namespace> -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    name: read-agent-server-logs-role
    rules:
    - apiGroups: [""]
        resources: ["pods"]
        verbs: ["get","list","watch"]
    - apiGroups: [""]
        resources: ["pods/log"]
        verbs: ["get","watch"]
    - apiGroups: ["apps"]
        resources: ["deployments"]
        verbs: ["get","list","watch"]
    - apiGroups: ["apps"]
        resources: ["replicasets"]
        verbs: ["get","list","watch"]
    EOF
    
  2. 获取控制平面 ServiceAccount。替换 <control_plane_namespace>
    kubectl get serviceaccounts -n <control_plane_namespace> | grep host-backend
    
  3. 将该 Role 绑定到控制平面 ServiceAccount。替换以下命令中的 <data_plane_namespace><control_plane_namespace><control_plane_service_account>
    kubectl apply -n <data_plane_namespace> -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    name: read-agent-server-logs-role-binding
    subjects:
    - kind: ServiceAccount
        name: <control_plane_service_account>
        namespace: <control_plane_namespace>
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: read-agent-server-logs-role
    EOF
    
在此示例中,RoleRoleBinding 定义在与 Agent Server 部署相同的 Kubernetes 命名空间中。您可以为 RoleRoleBinding 指定任何名称,并根据需要进行自定义。

后续步骤

一旦您的基础设施设置完成,您就可以开始部署应用程序了。有关构建和部署应用程序的说明,请参阅部署选项卡中的部署指南。