以编程方式使用文档

除了基础 LangSmith 平台外,您还可以启用以下功能:

  • - **Fleet** 让您无需编写代码即可直接在 LangSmith 内创建、部署和管理 AI 代理。
  • - **Insights** 在 LangSmith 内提供对跟踪和应用程序数据的 AI 驱动分析。
  • - **Chat** 提供工作区内的聊天体验,帮助您分析跟踪、线程、提示和实验结果。

前提条件

Install the base LangSmith platform

按照 Kubernetes 安装指南 安装基础 LangSmith 平台后再继续。

Install KEDA

运行以下命令在您的集群上安装 KEDA

    helm repo add kedacore https://kedacore.github.io/charts
    helm upgrade --install keda kedacore/keda --namespace keda --create-namespace
    

Configure an ingress

为您的 LangSmith 实例配置入口、网关或 Istio。所有代理将作为 Kubernetes 服务部署在此入口后面。参见 设置入口。您必须在 hostname 中提供一个 langsmith_config.yaml.

Verify cluster capacity

确保您的集群有足够的容量来支持多个部署。建议使用集群自动扩缩容。

Verify storage

确保您的集群上有有效的动态 PV 配置器或 PV。

    kubectl get storageclass
    

至少一个 StorageClass 应该有 PROVISIONER 值(不是 kubernetes.io/no-provisioner)并标记为 (default),否则您必须在继续之前配置一个。

Verify egress

确保到 https://beacon.langchain.com 的出口可用。参见 出口文档.

启用 LangSmith 部署

组件

启用 LangSmith 部署会在您的集群中配置以下资源:

  • - listener:监听 控制平面 以了解部署的变更并创建或更新下游 CRD。
  • - LangGraphPlatform CRD:管理 LangSmith Deployment 的实例。
  • - operator:处理 LangSmith CRD 的变更。
  • - host-backend:The 控制平面.

启用该功能

要启用 LangSmith Deployment,请更新您的 langsmith_config.yaml:

Enable deployment in your config

在您的 langsmith_config.yaml中,启用 deployment 选项。您还必须配置有效的 ingress。

    config:
      deployment:
        enabled: true
    

(Optional) Configure image mirroring

如果需要将镜像镜像到私有仓库,请配置 hostBackendImageoperatorImage 中的选项 langsmith_config.yaml。请使用中指定 最新的 LangSmith Helm chart 版本.

    hostBackendImage:
      repository: "docker.io/langchain/hosted-langserve-backend"
      pullPolicy: IfNotPresent
    operatorImage:
      repository: "docker.io/langchain/langgraph-operator"
      pullPolicy: IfNotPresent
    

(Optional) Configure base agent templates

覆盖 中的基础代理模板 values.yaml (如果需要自定义 operator 创建代理 Kubernetes 资源的方式,最常见的用例是添加) imagePullSecrets 来向私有容器仓库进行身份验证。请参阅 配置私有仓库的身份验证 了解更多详细信息。

Apply the changes

运行以下命令来应用更改。本指南中每次要求您应用更改时都会使用此命令。请替换 <version><namespace> 为您的值:

    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

在继续之前,请验证新 pod 正在运行:

    kubectl get pods -n <namespace>
    

您的实例现已准备好创建部署。

启用 Fleet、Insights 和 Chat

每个功能都需要一个 Fernet 加密密钥。您可以在单个 Helm 配置中启用所有三个功能。

组件

启用这些功能会在您的集群中为每个功能(Fleet、Insights、Chat)配置以下组件:

  • - api-server:处理该功能请求的主 API 服务器。
  • - queue:后台任务处理队列。
  • - postgres:用于该功能数据的专用 PostgreSQL 实例。可以替换为外部 PostgreSQL 实例。
  • - redis: Dedicated Redis instance for the feature's caching and pub/sub. Can be replaced with an external Redis instance.

Fleet 还会额外配置: - toolServer:为代理提供 MCP 工具执行。 - triggerServer:处理 webhook 和计划触发器。

生成加密密钥

每个功能使用自己的 Fernet 加密密钥来加密特定于功能的密钥(如凭证和令牌)。单独的密钥允许独立轮换,并在密钥泄露时限制暴露范围。使用 Python 为每个功能生成一个密钥:

python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

我们建议将每个密钥存储在预定义的 Kubernetes secret 中,而不是直接在配置文件中设置它们。请参阅 使用现有 secret 了解相关参数: agent_builder_encryption_key, insights_encryption_keypolly_encryption_key.

启用功能

Add the configuration to your langsmith_config.yaml

Using Kubernetes secrets (recommended)

按名称引用您现有的密钥。chart 读取 agent_builder_encryption_key, insights_encryption_key,以及 polly_encryption_key 并自动从中。

        config:
          existingSecretName: "<your-secret-name>"

        fleet:
          enabled: true

        insights:
          enabled: true

        # Chat (formerly Polly)
        polly:
          enabled: true

        fleetToolServer:
          enabled: true

        fleetTriggerServer:
          enabled: true
        

Using inline values

直接在配置文件中设置加密密钥。请避免将此文件提交到版本控制。

        fleet:
          enabled: true
          encryptionKey: "<fleet-encryption-key>"

        insights:
          enabled: true
          encryptionKey: "<insights-encryption-key>"

        polly:
          enabled: true
          encryptionKey: "<chat-encryption-key>"

        fleetToolServer:
          enabled: true

        fleetTriggerServer:
          enabled: true
        

每个功能默认部署自己专用的 PostgreSQL 和 Redis 实例。如需使用外部数据库,请配置 postgres.externalredis.external 部分(每个功能下)。例如:

    fleet:
      enabled: true
      encryptionKey: "<fleet-encryption-key>"
      postgres:
        external:
          enabled: true
          connectionUrl: "<fleet-postgres-connection-url>"
      redis:
        external:
          enabled: true
          connectionUrl: "<fleet-redis-connection-url>"
    

Apply the changes

    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

验证 Fleet、Insights 和 Chat pods 是否正在运行:

    kubectl get pods -n <namespace>
    

(可选)为 Fleet 启用 OAuth 工具和触发器

要在 Fleet 中启用基于 OAuth 的工具(如 Gmail、Slack 或 Linear),请配置 providerOrgId 并为您要使用的每个集成添加提供程序 ID。您可以启用任意组合的提供程序。

可用的提供程序

提供程序启用的工具启用的触发器
googleOAuthProvider<br />设置指南Gmail、Google日历、<br />Google Sheets、BigQueryGmail
linearOAuthProvider<br />设置指南Linear-
linkedinOAuthProvider<br />设置指南LinkedIn-
microsoftOAuthProvider<br />设置指南Outlook、日历、Teams、SharePoint、<br />Word、Excel、PowerPointOutlook
salesforceOAuthProvider<br />设置指南Salesforce-
slackOAuthProvider<br />设置指南SlackSlack

常规配置

将以下内容添加到您的 langsmith_config.yaml。仅包含您需要的提供程序。

fleet:
  oauth:
    # Organization ID where OAuth providers are configured
    providerOrgId: "<your-org-id>"
    # Add provider IDs for integrations you want to enable.
    # Slack requires additional configuration.
    slackOAuthProvider: "<provider-id>"
    slackSigningSecret: "<signing-secret>"
    slackBotId: "<bot-id>"
    googleOAuthProvider: "<provider-id>"
    linkedinOAuthProvider: "<provider-id>"
    linearOAuthProvider: "<provider-id>"
    microsoftOAuthProvider: "<provider-id>"
    salesforceOAuthProvider: "<provider-id>"

提供程序设置指南

Google OAuth provider

要为 Fleet 启用 Google OAuth,请在 GCP 中创建一个 OAuth 客户端,并使用所需的 URL 和凭据对其进行配置。

Create OAuth client in GCP

Google Cloud Console.

Add URLs to GCP

将以下 URLs 添加到您的 OAuth 客户端,替换 <hostname> 替换为您 LangSmith 主机名和 <provider-id> 替换为您将使用的提供商 ID(例如, google):

已授权的 JavaScript 来源: - https://<hostname>

已授权的重定向 URI: - https://<hostname>/api-host/v2/auth/callback/<provider-id> - https://<hostname>/host-oauth-callback/<provider-id>

Copy credentials

复制 **客户端 ID** 和 **客户端密钥** 从 GCP OAuth 应用。

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商** 并添加一个新的提供商: - **客户端 ID**:来自 GCP - **客户端密钥**:来自 GCP - **授权 URL**: https://accounts.google.com/o/oauth2/auth - **令牌 URL**: https://oauth2.googleapis.com/token - **提供商 ID**:唯一字符串,例如: google

Apply the changes

将 LangSmith OAuth 提供商 ID 添加到您的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-org-id>"
        googleOAuthProvider: "<provider-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Microsoft OAuth provider

要启用 Microsoft OAuth for Fleet,请创建 Azure 应用注册,添加所需的 Microsoft Graph 委派权限,并在 LangSmith 中配置 Microsoft OAuth 提供商。

Create an Azure app registration

Microsoft Entra 管理中心, go to **应用程序 > 应用注册** 并创建新的注册。

Choose supported account types

选择与您的部署匹配账户类型。如果您需要来自多个 Microsoft Entra 租户的用户进行身份验证,请选择多租户选项。如果您的部署仅限于一个租户,您可以使用单租户应用注册。

Add the redirect URI

添加以下 Web 重定向 URI,替换 <hostname> 替换为您 LangSmith 主机名和 <provider-id> 替换为您提供商 ID:

    https://<hostname>/host-oauth-callback/<provider-id>
    

Create a client secret

In **证书和机密**,创建新的客户端机密。复制 **应用程序(客户端)ID** 和生成的客户端机密值。

Add Microsoft Graph delegated permissions

In **API 权限**,添加以下 Microsoft Graph 委派权限: - Mail.ReadWrite - Mail.Send - Calendars.ReadWrite - Team.ReadBasic.All - Channel.ReadBasic.All - Channel.Create - ChannelMessage.Send - ChannelMessage.Read.All - Chat.Create - Chat.ReadWrite - User.ReadBasic.All - Files.ReadWrite.All - Sites.ReadWrite.All

Grant tenant consent

如果您的 Microsoft 365 策略要求这些委派权限的租户管理员同意,请授予。

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商** 并添加一个新的提供商: - **名称**:例如, Microsoft - **提供商 ID**:唯一字符串,例如: microsoft-oauth-provider - **客户端 ID**:应用程序(客户端)ID 来自 Azure - **客户端密钥**:来自 Azure 的客户端密钥值 - **授权 URL**: https://login.microsoftonline.com/common/oauth2/v2.0/authorize - **令牌 URL**: https://login.microsoftonline.com/common/oauth2/v2.0/token - **提供商类型**: microsoft - **令牌端点身份验证方法**: client_secret_post

Apply the changes

将以下内容添加到您的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-org-id>"
        microsoftOAuthProvider: "<provider-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Linear OAuth provider

要为 Fleet 启用 Linear OAuth,请创建一个 Linear OAuth 应用并使用所需的凭据进行配置。

Create a Linear OAuth app

Go to Linear 设置 > API > 应用程序 并创建一个新的 OAuth 应用程序。

Add callback URL

设置回调 URL,替换 <hostname> 为您的 LangSmith 主机名,以及 <provider-id> 为您的提供商 ID:

    https://<hostname>/host-oauth-callback/<provider-id>
    

Copy credentials

创建应用后,复制 **客户端 ID** 和 **客户端密钥**.

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商** 并添加一个新的提供商: - **客户端 ID**:来自 Linear 应用 - **客户端密钥**:来自 Linear 应用 - **授权 URL**: https://linear.app/oauth/authorize - **令牌 URL**: https://api.linear.app/oauth/token - **提供商 ID**:唯一字符串,例如: linear

Apply the changes

将以下内容添加到您的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-org-id>"
        linearOAuthProvider: "<provider-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

LinkedIn OAuth provider

要为 Fleet 启用 LinkedIn OAuth,请创建一个 LinkedIn OAuth 应用并使用所需的凭据进行配置。

Create a LinkedIn OAuth app

Go to linkedin.com/developers/apps 并创建一个新应用。

Add redirect URI

在您的应用设置中,转到 **身份验证** 选项卡。添加以下重定向 URI,替换 <hostname> 为您的 LangSmith 主机名,以及 <provider-id> 为您的提供商 ID:

    https://<hostname>/host-oauth-callback/<provider-id>
    

Copy credentials

复制 **客户端 ID** 和 **客户端密钥** 从身份验证选项卡中获取。

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商** 并添加一个新的提供商: - **客户端 ID**:来自 LinkedIn 应用 - **客户端密钥**:来自 LinkedIn 应用 - **授权 URL**: https://www.linkedin.com/oauth/v2/authorization - **令牌 URL**: https://www.linkedin.com/oauth/v2/accessToken - **提供商 ID**:唯一字符串,例如: linkedin

Apply the changes

将以下内容添加到您的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-org-id>"
        linkedinOAuthProvider: "<provider-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Salesforce OAuth provider

要为 Fleet 启用 Salesforce OAuth,请创建一个 Salesforce 外部客户端应用,配置其 OAuth 设置和策略,检索其凭据,然后在 LangSmith 中配置 Salesforce OAuth 提供商。

Create an External Client App

在 Salesforce 中 **设置**,使用 **快速查找** 打开 **外部客户端应用管理器**,然后点击 **新建外部客户端应用**.

在 **基本信息**下,设置: - **外部客户端应用名称**:例如, LangSmith Fleet - **联系人邮箱**:管理员邮箱地址 - **分发状态**: **本地**

Enable OAuth and configure the OAuth settings

展开 **API(启用 OAuth 设置)** 并选择 **启用 OAuth**。然后配置:

  • 回调 URL,将 <hostname> 替换为您的 LangSmith 主机名, <provider-id> 替换为您的提供商 ID:
    https://<hostname>/host-oauth-callback/<provider-id>
    
  • 已选 OAuth 范围:添加 **通过 API 管理用户数据(api)** 和 **随时执行请求(刷新_令牌、离线_访问)**.
  • - 保持 **Web 服务器流程需要密钥** selected.
  • - 保留 **启用授权码和凭证流程** 和 **启用客户端凭证流程** 未选中。Fleet 使用标准的 Web 服务器(授权码)流程。

点击 **创建**.

Set the OAuth policies

打开应用,选择 **策略** 选项卡,然后点击 **编辑**:

  • 刷新令牌策略:选择 **刷新令牌在撤销前有效**.
  • 授权用户:保留 **所有用户均可自行授权**。如果选择 **管理员批准的用户已预授权** ,则必须先将应用分配给权限集或配置文件,否则授权将失败。

点击 **保存**.

Copy the credentials

在 **设置** 选项卡下,在 **OAuth 设置**,选择 **消费者密钥和密钥**。 **消费者密钥** 是您的客户端 ID, **消费者密钥** 是您的客户端密钥。

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商**,点击 **OAuth 提供商**,并填写: - **提供商 ID**:唯一字符串,例如: salesforce-oauth-provider。在下一步中使用相同的值用于 salesforceOAuthProvider 。 - **显示名称**:例如, Salesforce - **客户端 ID**:来自 Salesforce 的消费者密钥 - **客户端密钥**:来自 Salesforce 的消费者密钥 - **授权 URL**: https://.my.salesforce.com/services/oauth2/authorize - **令牌 URL**: https://.my.salesforce.com/services/oauth2/token

LangSmith 会根据令牌 URL 自动识别 Salesforce,因此没有提供商类型或令牌认证方法字段需要设置。将 **启用 PKCE** 关闭以匹配上面配置的 Web 服务器流程。

Apply the changes

将以下内容添加到您的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-langsmith-org-id>"
        salesforceOAuthProvider: "<provider-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Slack OAuth provider

要为 Fleet 启用 Slack OAuth,请创建一个 Slack 应用并使用所需的范围、凭据和事件订阅对其进行配置。

Create a Slack app

Go to api.slack.com/apps 然后点击 **创建新应用**.

Add scopes

In **OAuth 和权限**,添加以下范围: - channels:history - channels:read - chat:write - groups:history - groups:read - im:history - im:read - im:write - mpim:history - team:read - users:read - users:read.email

Copy credentials from Slack

复制 **客户端 ID**, **客户端密钥**和 **签名密钥** 从 Slack 应用设置中。

Configure OAuth provider in LangSmith

在 LangSmith 中,转到 **设置 > OAuth 提供商** 并添加一个新的提供商: - **客户端 ID**:来自 Slack 应用 - **客户端密钥**:来自 Slack 应用 - **授权 URL**: https://slack.com/oauth/v2/authorize - **令牌 URL**: https://slack.com/api/oauth.v2.access - **提供商 ID**:唯一字符串,例如: slack

Add redirect URI to Slack

将以下重定向 URI 添加到你的 Slack 应用中,位置在 **OAuth 和权限 > 重定向 URL**,将 <hostname> 替换为你的 LangSmith 主机名,并将 <provider-id> 替换为你的提供商 ID(例如, slack):

    https://<hostname>/host-oauth-callback/<provider-id>
    

Get the bot ID

  1. 从 **OAuth 和权限** 中获取 bot 令牌。
  2. 运行以下命令:
    curl -X POST https://slack.com/api/auth.test \
      -H "Authorization: Bearer <bot-token>"
    

3. 从响应中复制 bot_id

Apply the changes

将以下内容添加到你的 langsmith_config.yaml 并部署:

    fleet:
      oauth:
        providerOrgId: "<your-org-id>"
        slackOAuthProvider: "<provider-id>"
        slackSigningSecret: "<signing-secret>"
        slackBotId: "<bot-id>"
    
    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Enable event subscriptions

  1. 部署后,转到 **事件订阅** 在你的 Slack 应用中并启用事件。
  2. 设置 **请求 URL** to:
       https://<hostname>/v1/triggers/webhooks/d809e66e-0000-4000-8000-000000000002
       

UUID 是一个固定的 LangSmith 标识符——不要替换它。

3. 添加以下 bot 事件: - message.channels - message.groups - message.im - message.mpim

Set up triggers and tools

1. 将 Slack bot 添加到你希望它读取的频道。 2. 在 Fleet 中配置 Slack 工具或触发器时,提供 **频道 ID** 和 **频道名称**.

(可选)为 Fleet 启用 GitHub 应用

Fleet 通过专用 **GitHub 应用** (不是 OAuth 应用)进行集成。GitHub 应用为 Fleet 的 GitHub 工具提供仓库访问权限,并支持私有仓库访问所需的用户授权流程。

设置涉及创建一个 GitHub 应用、收集其凭据、将它们存储为 Kubernetes 密钥,以及从你的 langsmith_config.yaml.

Create a GitHub App

Go to GitHub 设置 > 开发者设置 > GitHub 应用 并点击 **新建 GitHub 应用**.

Fill in basic details

- **GitHub 应用名称**:任何唯一名称,例如 acme-langsmith-fleet。请记下 GitHub 生成的 slug(名称的小写、连字符形式),因为这是您将用于 FLEET_GITHUB_APP_SLUG. - **主页 URL**:您的 LangSmith 主机名,例如 https://langsmith.acme.com. - 取消选择 **激活** 下的 **Webhook** 。稍后在生成 webhook 密钥后,您将在后续步骤中启用它。

Set callback URLs

在 **识别和授权用户**下,添加以下 **回调 URL**,将 <hostname> 替换为您的 LangSmith 主机名:

    https://<hostname>/v1/platform/fleet/providers/github-app/auth/callback
    

选择 **更新时重定向**.

在 **安装后**下,添加以下 **设置 URL**:

    https://<hostname>/v1/platform/fleet/providers/github-app/callback
    

选择 **更新时重定向**.

Set webhook URL and generate a webhook secret

生成随机 webhook 密钥:

    python3 -c "import secrets; print(secrets.token_urlsafe(48))"
    

在 **Webhook**: - 选择 **激活**. - 设置 **Webhook URL** to:

      https://<hostname>/v1/platform/fleet/providers/github-app/webhooks
      

- 将生成的值粘贴到 **Webhook 密钥**。保存它,因为稍后在创建 Kubernetes 密钥时需要相同的值。

Set repository permissions

在 **权限 > 仓库权限**下,授予以下权限:

  • 内容:读写
  • 问题:读写
  • 拉取请求:读写
  • 元数据:只读(自动选择)

在 **权限 > 账户权限**下,授予 **电子邮件地址:只读**.

Choose install visibility

在 **此 GitHub 应用可以在哪里安装?**下,选择与您的分发需求匹配的选项。对于大多数自托管部署, **仅在此账户上** 是正确的。

Create the app

点击 **创建 GitHub App**。在应用设置页面上,记下以下值:

查找位置环境变量
**App ID**数字,位于页面顶部FLEET_GITHUB_APP_ID
**公开链接**例如, https://github.com/apps/acme-langsmith-fleetFLEET_GITHUB_APP_PUBLIC_LINK
App slug公开链接的最后一个路径段FLEET_GITHUB_APP_SLUG
**Client ID**在 **About**FLEET_GITHUB_APP_CLIENT_ID

Generate a client secret

下方 **Client secrets**,点击 **生成新的客户端密钥** 并复制该值。这是 FLEET_GITHUB_APP_CLIENT_SECRET。GitHub 仅显示一次。

Generate a private key

滚动到 **私钥** 并点击 **生成私钥**。GitHub 会下载一个 .pem 文件。请妥善保管此文件,因为它授予了对 GitHub App 的完全访问权限。PEM 内容为 FLEET_GITHUB_APP_PRIVATE_KEY.

Generate a state JWT secret

LangSmith 使用 HMAC 密钥对短生命周期 OAuth 状态令牌进行签名。生成一个:

    python3 -c "import secrets; print(secrets.token_urlsafe(48))"
    

这是 FLEET_GITHUB_APP_STATE_JWT_SECRET.

Create a Kubernetes secret

将敏感值存储在 Kubernetes secret 中:

    kubectl create secret generic fleet-github-app \
      --namespace <your-langsmith-namespace> \
      --from-literal=client_secret="<client-secret>" \
      --from-literal=webhook_secret="<webhook-secret>" \
      --from-literal=state_jwt_secret="<state-jwt-secret>" \
      --from-file=private_key=/path/to/fleet-app.private-key.pem
    

对于生产部署,请通过您现有的 secret 工作流程管理此 secret(例如, Sealed Secrets or External Secrets Operator)。请参阅 使用现有 secret 了解更多。

Add the configuration to your langsmith_config.yaml

添加以下内容,将占位符值替换为上面收集的非敏感值:

    commonEnv:
      - name: FLEET_GITHUB_APP_ID
        value: "<app-id>"
      - name: FLEET_GITHUB_APP_SLUG
        value: "<app-slug>"
      - name: FLEET_GITHUB_APP_PUBLIC_LINK
        value: "https://github.com/apps/<app-slug>"
      - name: FLEET_GITHUB_APP_CLIENT_ID
        value: "<client-id>"
      - name: FLEET_GITHUB_APP_CLIENT_SECRET
        valueFrom:
          secretKeyRef:
            name: fleet-github-app
            key: client_secret
      - name: FLEET_GITHUB_APP_PRIVATE_KEY
        valueFrom:
          secretKeyRef:
            name: fleet-github-app
            key: private_key
      - name: FLEET_GITHUB_APP_WEBHOOK_SECRET
        valueFrom:
          secretKeyRef:
            name: fleet-github-app
            key: webhook_secret
      - name: FLEET_GITHUB_APP_STATE_JWT_SECRET
        valueFrom:
          secretKeyRef:
            name: fleet-github-app
            key: state_jwt_secret

    fleetToolServer:
      deployment:
        extraEnv:
          - name: FLEET_GITHUB_APP_ENABLED
            value: "true"
    

Deploy and install the app on repositories

运行以下命令应用更改:

    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Pod 就绪后:

  1. 在 LangSmith 中,打开一个 Fleet agent 并在 agent 编辑器中进入 GitHub 集成。
  2. 点击 **连接 GitHub** 以在 Fleet 应访问的仓库上安装该应用。
  3. 对于私有仓库,您必须在安装过程中明确选择每个仓库。

禁用功能

要禁用 Fleet、Insights 和 Chat 的任意组合,请将相应的标志设置为 false 在您的 langsmith_config.yaml:

fleet:
  enabled: false

insights:
  enabled: false

polly:
  enabled: false

可选配置

配置其他数据平面

除上面创建的数据平面外,您还可以在不同的 Kubernetes 集群或同一集群的不同命名空间下创建更多数据平面。有多种方式可以实现此目的,因此请实施最适合您用例的解决方案。

先决条件

Review cluster organization

阅读 混合(传统)文档 中的集群组织指南,以了解如何为此用例进行组织。

Verify hybrid prerequisites

验证 混合部分 中新集群的先决条件。在第 5 步的 先决条件中,配置出口到您的 自托管 LangSmith 实例 而不是 https://api.host.langchain.comhttps://api.smith.langchain.com.

Enable the feature in Postgres

针对您的 LangSmith Postgres 实例运行以下命令以启用此功能。记下工作区 ID 以便后续步骤使用。

    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>';
    

部署到不同的集群

Follow the hybrid setup guide

按照 混合设置指南中的第 2 到 6 步进行操作。设置 config.langsmithWorkspaceId 为上一步中的工作区 ID。

(Optional) Add more data planes to the same cluster

要在同一集群中添加多个数据平面,请按照 在同一集群中配置额外数据平面的说明.

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

Update your config

在您的 langsmith_config.yaml中,进行以下修改: - 设置 operator.watchNamespaces 为您的自托管 LangSmith 实例当前运行所在的命名空间。这可以防止与新数据平面添加的 operator 发生冲突。 - 使用 Gateway API or an Istio Gateway。调整您的 langsmith_config.yaml accordingly.

Apply the changes

    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

Follow the hybrid setup guide

按照 混合设置指南中的第 2 到 6 步进行操作。设置 config.langsmithWorkspaceId 为上一步中的工作区 ID。设置 config.watchNamespaces 为与现有数据平面使用的不同的命名空间。

(Optional) Configure log access

配置控制平面从新命名空间读取 Agent Server 部署日志的访问权限。请参阅 从其他命名空间读取 Agent Server 日志.

配置私有注册表的身份验证

如果您的 Agent Server 部署 将使用来自私有容器注册表(例如 AWS ECR、Azure ACR 或 GCP Artifact Registry)的镜像,请配置镜像拉取密钥。此配置会自动应用到所有部署,允许它们与您的私有注册表进行身份验证。

Create a Kubernetes image pull secret

    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 命名空间

Configure the deployment template in your langsmith_config.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
    

Apply the changes

    helm upgrade -i langsmith langchain/langsmith --values langsmith_config.yaml --version <version> -n <namespace> --wait --debug
    

所有通过 LangSmith UI 创建的用户部署都将继承这些镜像仓库凭证。

有关特定镜像仓库的身份验证方法,请参阅 Kubernetes 文档中关于从私有镜像仓库拉取镜像的内容.

从其他命名空间读取 Agent Server 日志

对于控制平面和数据平面在同一集群中的部署,请确保控制平面 Kubernetes 部署(host-backend)有权限 get, listwatch Kubernetes deployments, pods, replicasetslogs 来自 Agent Server 部署所在的命名空间。有多种方式可以实现此目的。以下示例使用 Kubernetes RBAC,但请使用最适合您用例的方法:

Create a Role with the required permissions

在 Agent Server 命名空间中创建一个 Role 替换 <data_plane_namespace>:

    kubectl apply -n <data_plane_namespace> -f - <


<section class="mdx-block"><h3>Get the control plane ServiceAccount</h3>

    替换 `<control_plane_namespace>`:

    
bash kubectl get serviceaccounts -n | grep host-backend
  
<section class="mdx-block"><h3>Bind the Role to the control plane ServiceAccount</h3> 替换 `<data_plane_namespace>`, `<control_plane_namespace>`和 `<control_plane_service_account>`: bash kubectl apply -n -f - < namespace: roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: read-agent-server-logs-role EOF ```

后续步骤

启用 LangSmith 部署后,请参阅 通过控制平面部署 以通过 LangSmith UI 构建和部署您的应用程序。