Skip to main content
默认情况下,LangSmith 将运行输入、输出、错误、清单、附加信息和事件存储在 ClickHouse 中。如果您愿意,也可以将这些信息存储在 Blob 存储中,这有几个显著的好处。为了在生产部署中获得最佳效果,我们强烈建议使用 Blob 存储,它提供以下好处:
  1. 在高追踪环境中,输入、输出、错误、清单、附加信息和事件可能会使数据库大小急剧膨胀。
  2. 如果使用 LangSmith 托管的 ClickHouse,您可能希望将敏感信息存储在您环境中的 Blob 存储中。为了解决这个问题,LangSmith 支持将运行输入、输出、错误、清单、附加信息、事件和附件存储在外部 Blob 存储系统中。
对于特定云平台的设置,请选择您的平台:有关完整的特定云平台设置和架构指南,请参阅 AWSGCPAzure

要求

Azure Blob 存储在 Helm chart 版本 0.8.9 及更高版本中可用。从 Helm chart 版本 0.10.43 开始,Azure 支持删除追踪项目原生 GCS Blob 存储引擎支持(使用 engine: "GCS")在 Helm chart 版本 0.13.29 及更高版本中可用。对于早期版本,GCS 通过设置 engine: "S3" 并使用 HMAC 凭据,通过 S3 兼容 API 进行支持。
  • 访问有效的 Blob 存储服务
  • 您的 Blob 存储中的一个存储桶/目录,用于存储数据。我们强烈建议为 LangSmith 数据创建一个单独的存储桶/目录。
    • 如果您使用 TTL,您需要设置生命周期策略来删除旧数据。有关更多信息,请参阅配置 TTL。这些策略应与您在 LangSmith 配置中设置的 TTL 保持一致,否则可能会导致数据丢失。有关如何设置生命周期规则,请参阅 Blob 存储的 TTL 配置
  • 允许 LangSmith 服务访问存储桶/目录的凭据
    • 您需要向您的 LangSmith 实例提供访问存储桶/目录所需的凭据。有关更多信息,请阅读下面的身份验证部分。
  • 如果使用 S3 或 GCS,您的 Blob 存储服务的 API URL
    • 这将是 LangSmith 用于访问您的 Blob 存储系统的 URL
    • 对于 Amazon S3,这将是 S3 端点的 URL。类似于:https://s3.amazonaws.comhttps://s3.us-west-1.amazonaws.com(如果使用区域端点)。
    • 对于 Google Cloud Storage,这将是 GCS 端点的 URL。类似于:https://storage.googleapis.com

身份验证

Amazon S3

要向 Amazon S3 进行身份验证,您需要创建一个 IAM 策略,授予对您的存储桶的以下权限。
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ]
    }
  ]
}
一旦您有了正确的策略,有三种方式可以向 Amazon S3 进行身份验证:
  1. 服务账户的 IAM 角色 (IRSA)(推荐):您可以为您的 LangSmith 实例创建一个 IAM 角色,并将策略附加到该角色。这是在生产环境中向 Amazon S3 进行身份验证的推荐方式。
    1. 您需要创建一个附加了策略的 IAM 角色。
    2. 您需要允许 LangSmith 服务账户承担该角色。langsmith-queuelangsmith-backendlangsmith-platform-backendlangsmith-ingest-queue 服务账户需要能够承担该角色。
      如果您使用自定义发布名称,服务账户名称会有所不同。您可以通过在集群中运行 kubectl get serviceaccounts 来找到服务账户名称。
    3. 您需要将角色 ARN 提供给 LangSmith。您可以通过在 Helm Chart 安装中为 queuebackendplatform-backendingest-queue 服务添加 eks.amazonaws.com/role-arn: "<role_arn>" 注解来实现。
  2. 访问密钥和密钥:您可以向 LangSmith 提供访问密钥和密钥。这是向 Amazon S3 进行身份验证的最简单方式。但是,由于安全性较低,不建议在生产环境中使用。
    1. 您需要创建一个附加了策略的用户。然后您可以为该用户配置访问密钥和密钥。
  3. VPC 端点访问:您可以通过 VPC 端点启用对 S3 存储桶的访问,这允许流量从您的 VPC 安全地流向您的 S3 存储桶。
    1. 您需要配置一个 VPC 端点,并将其配置为允许访问您的 S3 存储桶。
    2. 您可以参考我们的公共 Terraform 模块以获取配置此内容的指导和示例。

KMS 加密头支持

从 LangSmith Helm chart 版本 0.11.24 开始,您可以传递 KMS 加密密钥头,并通过提供其 ARN 来强制写入使用特定的 KMS 密钥。要启用此功能,请在 Helm chart 中设置以下值:
config:
  blobStorage:
    kmsEncryptionEnabled: true
    kmsKeyArn: <your_kms_key_arn>

CH 搜索

默认情况下,LangSmith 仍会将搜索令牌存储在 ClickHouse 中。如果您使用 LangSmith 托管的 Clickhouse,您可能希望禁用此功能,以避免将潜在敏感信息发送到 ClickHouse。您可以在 Blob 存储配置中执行此操作。

配置

创建存储桶并获取必要的凭据后,您可以配置 LangSmith 以使用您的 Blob 存储系统。
config:
  blobStorage:
    enabled: true
    engine: "S3" # 或 "GCS" 或 "Azure"。区分大小写。
    chSearchEnabled: true # 如果您想禁用 CH 搜索,请设置为 false(推荐用于 LangSmith 托管的 Clickhouse)
    bucketName: "your-bucket-name"
    apiURL: "Your connection url"
    accessKey: "Your access key" # 可选。仅在使用 S3 访问密钥和密钥时需要
    accessKeySecret: "Your access key secret" # 可选。仅在使用访问密钥和密钥时需要
    # 以下 Blob 存储配置值适用于 Azure,需要 blobStorage.engine = "Azure"。否则请省略。
    azureStorageAccountName: "Your storage account name" # 可选。仅在使用存储账户和访问密钥时需要。
    azureStorageAccountKey: "Your storage account access key" # 可选。仅在使用存储账户和访问密钥时需要。
    azureStorageContainerName: "your-container-name" # 必需
    azureStorageConnectionString: "" # 可选。
    azureStorageServiceUrlOverride: "" # 可选
  backend: # 可选,仅在 AWS 上使用服务账户的 IAM 角色、GKE 上的工作负载身份或 AKS 上的工作负载身份时需要
    deployment: # 仅限 Azure
      labels:
        azure.workload.identity/use: true
    serviceAccount:
      annotations:
        azure.workload.identity/client-id: "<client_id>" # 仅限 Azure
        eks.amazonaws.com/role-arn: "<role_arn>" # 仅限 AWS
        iam.gke.io/gcp-service-account: "<gsa_name>@<project_id>.iam.gserviceaccount.com" # 仅限 GCP
  platformBackend: # 可选,仅在 AWS 上使用服务账户的 IAM 角色、GKE 上的工作负载身份或 AKS 上的工作负载身份时需要
    deployment: # 仅限 Azure
      labels:
        azure.workload.identity/use: true
    serviceAccount:
      annotations:
        azure.workload.identity/client-id: "<client_id>" # 仅限 Azure
        eks.amazonaws.com/role-arn: "<role_arn>" # 仅限 AWS
        iam.gke.io/gcp-service-account: "<gsa_name>@<project_id>.iam.gserviceaccount.com" # 仅限 GCP
  queue: # 可选,仅在 AWS 上使用服务账户的 IAM 角色、GKE 上的工作负载身份或 AKS 上的工作负载身份时需要
    deployment: # 仅限 Azure
      labels:
        azure.workload.identity/use: true
    serviceAccount:
      annotations:
        azure.workload.identity/client-id: "<client_id>" # 仅限 Azure
        eks.amazonaws.com/role-arn: "<role_arn>" # 仅限 AWS
        iam.gke.io/gcp-service-account: "<gsa_name>@<project_id>.iam.gserviceaccount.com" # 仅限 GCP
  ingestQueue: # 可选,仅在 AWS 上使用服务账户的 IAM 角色、GKE 上的工作负载身份或 AKS 上的工作负载身份时需要
    deployment: # 仅限 Azure
      labels:
        azure.workload.identity/use: true
    serviceAccount:
      annotations:
        azure.workload.identity/client-id: "<client_id>" # 仅限 Azure
        eks.amazonaws.com/role-arn: "<role_arn>" # 仅限 AWS
        iam.gke.io/gcp-service-account: "<gsa_name>@<project_id>.iam.gserviceaccount.com" # 仅限 GCP
如果使用访问密钥和密钥,您也可以提供一个包含身份验证信息的现有 Kubernetes secret。这比直接在配置中提供访问密钥和密钥更受推荐。有关预期的 secret 密钥,请参阅生成的 secret 模板

TTL 配置

如果在 LangSmith 中使用 TTL 功能,您还需要为 Blob 存储配置 TTL 规则。存储在 Blob 存储上的追踪信息存储在特定的前缀路径上,该路径决定了数据的 TTL。当追踪的保留期延长时,其对应的 Blob 存储路径会更改,以确保与新的延长保留期匹配。 使用以下 TTL 前缀:
  • ttl_s/:短期(基础)TTL,配置为 14 天。
  • ttl_l/:长期(扩展)TTL,默认配置为 400 天。

自定义工作区级别保留前缀

如果您使用工作区级别扩展保留,LangSmith 会将 Blob 数据写入 ttl_XXd/ 形式的前缀,其中 XX 是为该工作区配置的天数。例如,如果工作区配置了 90 天的扩展保留,则该工作区的 Blob 数据将写入 ttl_90d/ 前缀。 您必须为每个在工作区中配置的自定义保留期创建一个生命周期规则。常见示例:
  • ttl_90d/ — 90 天保留
  • ttl_180d/ — 180 天保留
  • ttl_365d/ — 365 天保留
如果缺少针对已配置保留期的生命周期规则,则该前缀下的 Blob 数据将永远不会被自动删除。确保在配置新的工作区保留期时添加匹配的生命周期规则。
例如,如果您有配置了 90 天和 180 天扩展保留的工作区,您需要默认的 ttl_sttl_l 规则之外添加以下生命周期规则:
rule {
  id      = "ttl-90d"
  prefix  = "ttl_90d/"
  enabled = true
  expiration {
    days = 90
  }
}
rule {
  id      = "ttl-180d"
  prefix  = "ttl_180d/"
  enabled = true
  expiration {
    days = 180
  }
}
如果您在 LangSmith 配置中自定义了 TTL,则需要调整 Blob 存储配置中的 TTL 以匹配。

Amazon S3 生命周期规则

如果使用 S3 作为 Blob 存储,您需要设置一个匹配上述前缀的过滤生命周期配置。您可以在 Amazon 文档中找到相关信息。例如,如果您使用 Terraform 管理 S3 存储桶,您将设置如下内容:
rule {
  id      = "short-term-ttl"
  prefix  = "ttl_s/"
  enabled = true
  expiration {
    days = 14
  }
}
rule {
  id      = "long-term-ttl"
  prefix  = "ttl_l/"
  enabled = true
  expiration {
    days = 400
  }
}