默认情况下,LangSmith 将运行输入、输出、错误、清单、额外数据和事件存储在 ClickHouse 中。如果您选择,也可以将这些信息存储在 blob 存储中,这具有几个显著优势。为了在生产部署中获得最佳效果,我们强烈建议使用 blob 存储,它提供以下优势:
- 在高跟踪环境中,输入、输出、错误、清单、额外数据和事件可能会使您的数据库大小膨胀。
- 如果使用 LangSmith 托管的 ClickHouse,您可能希望将敏感信息存储在您环境中的 blob 存储中。为了缓解这种情况,LangSmith 支持将运行输入、输出、错误、清单、额外数据、事件和附件存储在外部 blob 存储系统中。
Azure blob 存储在 Helm chart 版本 0.8.9 及更高版本中可用。从 LangSmith 删除跟踪项目从 Helm chart 版本 0.10.43 开始支持 Azure。
-
访问有效的 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.com 或 https://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 进行身份验证
-
(推荐)用于服务账户的 IAM 角色:您可以为 LangSmith 实例创建一个 IAM 角色,并将策略附加到该角色。然后,您可以将该角色提供给 LangSmith。这是在生产环境中与 Amazon S3 进行身份验证的推荐方式。
- 您需要创建一个附加了策略的 IAM 角色。
- 您需要允许 LangSmith 服务账户承担该角色。
langsmith-queue、langsmith-backend 和 langsmith-platform-backend 服务账户需要能够承担该角色。
如果您使用自定义发布名称,服务账户名称将有所不同。您可以通过在集群中运行 kubectl get serviceaccounts 来查找服务账户名称。
- 您需要向 LangSmith 提供角色 ARN。您可以通过在 Helm Chart 安装中将
eks.amazonaws.com/role-arn: "<role_arn>" 注释添加到 queue、backend 和 platform-backend 服务中来完成此操作。
-
访问密钥和秘密密钥:您可以向 LangSmith 提供访问密钥和秘密密钥。这是使用 Amazon S3 进行身份验证的最简单方法。但是,不建议在生产环境中使用,因为它安全性较低。
- 您需要创建一个附加了策略的用户。然后,您可以为该用户提供访问密钥和秘密密钥。
-
VPC 端点访问:您可以通过 VPC 端点启用对 S3 存储桶的访问,这允许流量从您的 VPC 安全地流向您的 S3 存储桶。
- 您需要配置一个 VPC 端点并对其进行配置以允许访问您的 S3 存储桶。
- 您可以参考我们的公共 Terraform 模块,获取有关配置的指导和示例。
从 LangSmith Helm chart 版本 0.11.24 开始,您可以通过提供 KMS 加密密钥标头并强制使用特定的 KMS 密钥进行写入。要启用此功能,请在您的 Helm chart 中设置以下值
config:
blobStorage:
kmsEncryptionEnabled: true
kmsKeyArn: <your_kms_key_arn>
Google Cloud Storage
要使用 Google Cloud Storage 进行身份验证,您需要创建一个具有访问存储桶所需权限的 服务账户。 您的服务账户将需要 Storage Admin 角色或具有等效权限的自定义角色。这可以限定为 LangSmith 将使用的存储桶。 一旦您配置了服务账户,您将需要为该服务账户生成一个 HMAC 密钥。此密钥和秘密将用于向 Google Cloud Storage 进行身份验证。Azure Blob 存储
要向 Azure Blob 存储进行身份验证,您需要使用以下方法之一授予 LangSmith 工作负载访问您的容器的权限(按优先级顺序列出)
- 存储账户和访问密钥
- 连接字符串
- 工作负载身份(推荐)、托管身份或
DefaultAzureCredential 支持的环境变量。当以上任何一个选项的配置不存在时,这是默认的身份验证方法。
- 要使用工作负载身份,请将标签
azure.workload.identity/use: true 添加到 queue、backend 和 platform-backend 部署中。此外,将 azure.workload.identity/client-id 注释添加到相应的服务账户中,该注释应为现有 Azure AD 应用程序的客户端 ID 或用户分配的托管身份的客户端 ID。有关更多详细信息,请参阅 Azure 文档。
某些部署可能需要使用服务 URL 覆盖而不是默认服务 URL (https://<storage_account_name>.blob.core.windows.net/) 来进一步自定义连接配置。例如,为了使用不同的 blob 存储域(例如政府或中国),此覆盖是必需的。
CH 搜索
默认情况下,LangSmith 仍会将搜索令牌存储在 ClickHouse 中。如果您正在使用 LangSmith 托管的 ClickHouse,您可能希望禁用此功能,以避免将潜在的敏感信息发送到 ClickHouse。您可以在 blob 存储配置中执行此操作。
创建存储桶并获取必要的凭据后,您可以配置 LangSmith 以使用您的 Blob 存储系统。
config:
blobStorage:
enabled: true
engine: "S3" # Or "Azure". This is case-sensitive.
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
如果使用访问密钥和秘密,您还可以提供包含身份验证信息的现有 Kubernetes 秘密。与直接在配置中提供访问密钥和秘密密钥相比,这更受推荐。有关预期的秘密密钥,请参阅生成的秘密模板。
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
}
}
}
}