跳到主要内容

启用 Blob 存储

默认情况下,LangSmith 将运行输入、输出、错误、清单、附加内容和事件存储在 ClickHouse 中。如果选择,您可以将这些信息存储在 Blob 存储中,这有几个显著优点

  1. 在高跟踪环境中,输入、输出、错误、清单、附加内容和事件可能会使您的数据库大小急剧膨胀。
  2. 如果使用 LangSmith 管理的 ClickHouse,您可能希望将敏感信息存储在您环境中的 Blob 存储中。为了缓解这个问题,LangSmith 支持将运行输入、输出、错误、清单、附加内容、事件和附件存储在外部 Blob 存储系统。

要求

注意

Azure Blob 存储在 Helm Chart 0.8.9 及更高版本中提供 Beta 版。
在 Beta 阶段,删除跟踪项目不受支持。

  • 访问有效的 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:*",
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}

获得正确的策略后,有两种方法可以与 Amazon S3 进行身份验证

  1. (推荐) 用于服务账户的 IAM 角色:您可以为 LangSmith 实例创建一个 IAM 角色,并将策略附加到该角色。然后您可以将该角色提供给 LangSmith。这是在生产环境中与 Amazon S3 进行身份验证的推荐方式。
    1. 您需要创建一个附加了策略的 IAM 角色。
    2. 您需要允许 LangSmith 服务账户承担该角色。langsmith-queuelangsmith-backendlangsmith-platform-backend 服务账户需要能够承担该角色。
      服务账户名称

      如果您使用自定义发布名称,服务账户名称将不同。您可以通过在集群中运行 kubectl get serviceaccounts 来查找服务账户名称。

    3. 您需要将角色 ARN 提供给 LangSmith。您可以通过将 eks.amazonaws.com/role-arn: "<role_arn>" 注解添加到您的 Helm Chart 安装中的 queuebackendplatform-backend 服务来完成此操作。
  2. 访问密钥和秘密密钥:您可以向 LangSmith 提供访问密钥和秘密密钥。这是与 Amazon S3 进行身份验证最简单的方法。但是,由于安全性较低,不建议在生产环境中使用。
    1. 您需要创建一个附加了策略的用户。然后您可以为该用户配置访问密钥和秘密密钥。

Google Cloud Storage

要对 Google Cloud Storage 进行身份验证,您需要创建一个 服务账户,并授予其访问您的存储桶所需的权限。

您的服务账户将需要 Storage Admin 角色或具有同等权限的自定义角色。这可以限定到 LangSmith 将使用的存储桶。

一旦您配置好服务账户,您将需要为该服务账户生成一个 HMAC 密钥。此密钥和秘密将用于与 Google Cloud Storage 进行身份验证。

Azure Blob 存储

要对 Azure Blob 存储 进行身份验证,您需要使用以下方法之一来授予 LangSmith 工作负载访问您的 容器 的权限(按优先级顺序列出)

  1. 存储账户和访问密钥
  2. 连接字符串
  3. 工作负载身份(推荐)、托管身份或由 DefaultAzureCredential 支持的环境变量。当上述任一选项的配置不存在时,这是默认的身份验证方法。
    1. 要使用工作负载身份,请将标签 azure.workload.identity/use: true 添加到 queuebackendplatform-backend 部署中。此外,将 azure.workload.identity/client-id 注解添加到相应的服务账户,该注解应为现有 Azure AD 应用程序的客户端 ID 或用户分配的托管身份的客户端 ID。请参阅 Azure 的文档 以获取更多详细信息。
注意

某些部署可能需要使用服务 URL 覆盖(而不是默认服务 URL https://<storage_account_name>.blob.core.windows.net/)进一步自定义连接配置。例如,为了使用不同的 Blob 存储域(例如政府或中国区域),这种覆盖是必要的。

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

配置

创建存储桶并获取必要的凭据后,您可以配置 LangSmith 以使用您的 Blob 存储系统。


config:
blobStorage:
enabled: true
engine: "S3" # Or "Azure"
chSearchEnabled: true # Set to false if you want to disable CH search (Recommended for LangSmith Managed Clickhouse)
bucketName: "your-bucket-name"
apiURL: "Your connection url"
accessKey: "Your access key" # Optional. Only required if using S3 access key and secret key
accessKeySecret: "Your access key secret" # Optional. Only required if using access key and secret key
# The following blob storage configuration values are for Azure and require blobStorage.engine = "Azure". Omit otherwise.
azureStorageAccountName: "Your storage account name" # Optional. Only required if using storage account and access key.
azureStorageAccountKey: "Your storage account access key" # Optional. Only required if using storage account and access key.
azureStorageContainerName: "your-container-name" # Required
azureStorageConnectionString: "" # Optional.
azureStorageServiceUrlOverride: "" # Optional

backend: # Optional, only required if using IAM role for service account on AWS or workload identity on AKS
deployment: # Azure only
labels:
azure.workload.identity/use: true
serviceAccount:
annotations:
azure.workload.identity/client-id: "<client_id>" # Azure only
eks.amazonaws.com/role-arn: "<role_arn>" # AWS only

platformBackend: # Optional, only required if using IAM role for service account on AWS or workload identity on AKS
deployment: # Azure only
labels:
azure.workload.identity/use: true
serviceAccount:
annotations:
azure.workload.identity/client-id: "<client_id>" # Azure only
eks.amazonaws.com/role-arn: "<role_arn>" # AWS only

queue: # Optional, only required if using IAM role for service account on AWS or workload identity on AKS
deployment: # Azure only
labels:
azure.workload.identity/use: true
serviceAccount:
annotations:
azure.workload.identity/client-id: "<client_id>" # Azure only
eks.amazonaws.com/role-arn: "<role_arn>" # AWS only
使用现有 Secret

如果使用访问密钥和秘密,您还可以提供一个包含身份验证信息的现有 Kubernetes Secret。这比直接在配置中提供访问密钥和秘密密钥更受推荐。请参阅 生成的 Secret 模板 以了解预期的秘密密钥。

TTL 配置

如果将 TTL 功能与 LangSmith 一起使用,您还需要为您的 Blob 存储配置 TTL 规则。存储在 Blob 存储上的跟踪信息存储在特定的前缀路径上,该路径决定了数据的 TTL。当跟踪的保留期延长时,其对应的 Blob 存储路径会更改,以确保与新的延长保留期匹配。

使用以下 TTL 前缀

  • ttl_s/:短期 TTL,配置为 14 天。
  • ttl_l/:长期 TTL,配置为 400 天。

如果您在 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
}
}

Google Cloud Storage

您需要为您正在使用的 GCS 存储桶设置生命周期条件。您可以在 Google 文档中找到相关信息,特别是使用 matchesPrefix。

例如,如果您使用 Terraform 管理您的 GCS 存储桶,您可以进行如下设置

  lifecycle_rule {
condition {
age = 14
matches_prefix = ["ttl_s"]
}
action {
type = "Delete"
}
}

lifecycle_rule {
condition {
age = 400
matches_prefix = ["ttl_l"]
}
action {
type = "Delete"
}
}

Azure Blob 存储

您需要配置一个 生命周期管理策略 在容器上,以便使匹配上述前缀的对象过期。

例如,如果您 使用 Terraform 管理您的 Blob 存储容器,您可以进行如下设置

resource "azurerm_storage_management_policy" "example" {
storage_account_id = "my-storage-account-id"

rule {
name = "base"
enabled = true
type = "Lifecycle"
filters {
prefix_match = ["my-container/ttl_s"]
blob_types = ["blockBlob"]
}
actions {
base_blob {
delete_after_days_since_creation_greater_than = 14
}
snapshot {
delete_after_days_since_creation_greater_than = 14
}
version {
delete_after_days_since_creation_greater_than = 14
}
}
}

rule {
name = "extended"
enabled = true
type = "Lifecycle"
filters {
prefix_match = ["my-container/ttl_l"]
blob_types = ["blockBlob"]
}
actions {
base_blob {
delete_after_days_since_creation_greater_than = 400
}
snapshot {
delete_after_days_since_creation_greater_than = 400
}
version {
delete_after_days_since_creation_greater_than = 400
}
}
}
}

此页面有帮助吗?


您可以留下详细反馈 在 GitHub 上.