Skip to main content

Documentation Index

Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt

Use this file to discover all available pages before exploring further.

本指南将向您展示如何在您的自托管 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 指定任何名称,并根据需要进行自定义。

后续步骤

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