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

要求

Azure Blob 存储从 Helm chart 版本 0.8.9 开始可用。删除跟踪项目 功能在 Azure 中从 Helm chart 版本 0.10.43 开始支持。原生 GCS Blob 存储引擎支持(使用 engine: "GCS")从 Helm chart 版本 0.13.29 开始可用。对于更早的版本,GCS 通过 S3 兼容 API 支持,通过设置 engine: "S3" 并使用 HMAC 凭证。
  • 访问有效的 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. 您需要向 LangSmith 提供角色 ARN。您可以通过在 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 密钥。这比直接在配置中提供访问密钥和秘密密钥更推荐。有关预期的密钥键,请参阅生成的密钥模板

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
  }
}