기본적으로 LangSmith는 run의 입력, 출력, 오류, manifest, extra, 이벤트를 ClickHouse에 저장합니다. 원하는 경우 이 정보를 blob storage에 저장할 수 있으며, 이는 몇 가지 주목할 만한 이점이 있습니다. 프로덕션 배포에서 최상의 결과를 얻으려면 blob storage 사용을 강력히 권장하며, 다음과 같은 이점을 제공합니다:
  1. 높은 trace 환경에서 입력, 출력, 오류, manifest, extra, 이벤트가 데이터베이스 크기를 급격히 증가시킬 수 있습니다.
  2. LangSmith Managed ClickHouse를 사용하는 경우, 사용자 환경에 있는 blob storage에 민감한 정보를 저장하고 싶을 수 있습니다. 이를 해결하기 위해 LangSmith는 run 입력, 출력, 오류, manifest, extra, 이벤트, 첨부 파일을 외부 blob storage 시스템에 저장하는 것을 지원합니다.

요구사항

Azure blob storage는 Helm chart 버전 0.8.9 이상에서 사용할 수 있습니다. trace 프로젝트 삭제는 Helm chart 버전 0.10.43부터 Azure에서 지원됩니다.
  • 유효한 blob storage 서비스에 대한 액세스
  • 데이터를 저장할 blob storage의 bucket/directory. LangSmith 데이터를 위한 별도의 bucket/directory를 생성하는 것을 강력히 권장합니다.
    • TTL을 사용하는 경우, 오래된 데이터를 삭제하기 위한 lifecycle 정책을 설정해야 합니다. TTL 구성에 대한 자세한 정보는 여기에서 확인할 수 있습니다. 이러한 정책은 LangSmith 구성에서 설정한 TTL과 일치해야 하며, 그렇지 않으면 데이터 손실이 발생할 수 있습니다. blob storage의 TTL에 대한 lifecycle 규칙 설정 방법은 여기를 참조하세요.
  • LangSmith Services가 bucket/directory에 액세스할 수 있도록 허용하는 자격 증명
    • LangSmith 인스턴스에 bucket/directory에 액세스하는 데 필요한 자격 증명을 제공해야 합니다. 자세한 내용은 아래 인증 섹션을 참조하세요.
  • S3 또는 GCS를 사용하는 경우, blob storage 서비스의 API url
    • LangSmith가 blob storage 시스템에 액세스하는 데 사용할 URL입니다
    • Amazon S3의 경우, S3 endpoint의 URL입니다. 예: https://s3.amazonaws.com 또는 리전별 endpoint를 사용하는 경우 https://s3.us-west-1.amazonaws.com
    • Google Cloud Storage의 경우, GCS endpoint의 URL입니다. 예: https://storage.googleapis.com

인증

Amazon S3

Amazon S3에 인증하려면 bucket에 다음 권한을 부여하는 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 Role for Service Account: LangSmith 인스턴스에 대한 IAM role을 생성하고 해당 role에 정책을 연결할 수 있습니다. 그런 다음 LangSmith에 role을 제공할 수 있습니다. 이것이 프로덕션에서 Amazon S3에 인증하는 권장 방법입니다.
    1. 정책이 연결된 IAM role을 생성해야 합니다.
    2. LangSmith service account가 role을 assume할 수 있도록 허용해야 합니다. langsmith-queue, langsmith-backend, langsmith-platform-backend service account가 role을 assume할 수 있어야 합니다.
      사용자 정의 release 이름을 사용하는 경우 service account 이름이 다를 수 있습니다. 클러스터에서 kubectl get serviceaccounts를 실행하여 service account 이름을 확인할 수 있습니다.
    3. LangSmith에 role ARN을 제공해야 합니다. Helm Chart 설치에서 queue, backend, platform-backend 서비스에 eks.amazonaws.com/role-arn: "<role_arn>" annotation을 추가하여 이를 수행할 수 있습니다.
  2. Access Key와 Secret Key: LangSmith에 access key와 secret key를 제공할 수 있습니다. 이것이 Amazon S3에 인증하는 가장 간단한 방법입니다. 그러나 보안성이 낮기 때문에 프로덕션 사용에는 권장되지 않습니다.
    1. 정책이 연결된 사용자를 생성해야 합니다. 그런 다음 해당 사용자에 대한 access key와 secret key를 프로비저닝할 수 있습니다.
  3. VPC Endpoint Access: VPC endpoint를 통해 S3 bucket에 대한 액세스를 활성화할 수 있으며, 이를 통해 VPC에서 S3 bucket으로 트래픽이 안전하게 흐를 수 있습니다.
    1. VPC endpoint를 프로비저닝하고 S3 bucket에 대한 액세스를 허용하도록 구성해야 합니다.
    2. 이를 구성하는 방법에 대한 지침과 예제는 공개 Terraform 모듈을 참조할 수 있습니다.

S3용 KMS 암호화 헤더 지원

LangSmith Helm chart 버전 0.11.24부터 KMS 암호화 키 헤더를 전달하고 ARN을 제공하여 쓰기에 특정 KMS 키를 강제할 수 있습니다. 이를 활성화하려면 Helm chart에서 다음 값을 설정하세요:
Helm
config:
  blobStorage:
    kmsEncryptionEnabled: true
    kmsKeyArn: <your_kms_key_arn>

Google Cloud Storage

Google Cloud Storage에 인증하려면 bucket에 액세스하는 데 필요한 권한이 있는 service account를 생성해야 합니다. service account에는 Storage Admin role 또는 동등한 권한이 있는 사용자 정의 role이 필요합니다. 이는 LangSmith가 사용할 bucket으로 범위를 지정할 수 있습니다. 프로비저닝된 service account가 있으면 해당 service account에 대한 HMAC key를 생성해야 합니다. 이 key와 secret은 Google Cloud Storage에 인증하는 데 사용됩니다.

Azure Blob Storage

Azure Blob Storage에 인증하려면 다음 방법 중 하나를 사용하여 LangSmith workload가 container에 액세스할 수 있는 권한을 부여해야 합니다(우선순위 순서로 나열):
  1. Storage account와 access key
  2. Connection string
  3. Workload identity (권장), managed identity 또는 DefaultAzureCredential에서 지원하는 환경 변수. 이는 위의 두 옵션에 대한 구성이 없을 때 기본 인증 방법입니다.
    1. workload identity를 사용하려면 queue, backend, platform-backend deployment에 azure.workload.identity/use: true label을 추가하세요. 또한 해당 service account에 azure.workload.identity/client-id annotation을 추가해야 하며, 이는 기존 Azure AD Application의 client ID 또는 user-assigned managed identity의 client ID여야 합니다. 자세한 내용은 Azure 문서를 참조하세요.
일부 배포에서는 기본 service URL(https://<storage_account_name>.blob.core.windows.net/) 대신 Service URL Override를 사용하여 연결 구성을 추가로 사용자 정의해야 할 수 있습니다. 예를 들어, 다른 blob storage 도메인(예: government 또는 china)을 사용하려면 이 override가 필요합니다.
기본적으로 LangSmith는 검색을 위한 token을 여전히 ClickHouse에 저장합니다. LangSmith Managed Clickhouse를 사용하는 경우, 잠재적으로 민감한 정보가 ClickHouse로 전송되는 것을 방지하기 위해 이 기능을 비활성화할 수 있습니다. blob storage 구성에서 이를 수행할 수 있습니다.

구성

bucket을 생성하고 필요한 자격 증명을 얻은 후 blob storage 시스템을 사용하도록 LangSmith를 구성할 수 있습니다.
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
access key와 secret을 사용하는 경우, 인증 정보가 포함된 기존 Kubernetes secret을 제공할 수도 있습니다. 이는 구성에서 access key와 secret key를 직접 제공하는 것보다 권장됩니다. 예상되는 secret key는 생성된 secret 템플릿을 참조하세요.

TTL 구성

LangSmith와 함께 TTL 기능을 사용하는 경우, blob storage에 대한 TTL 규칙도 구성해야 합니다. blob storage에 저장된 trace 정보는 특정 prefix 경로에 저장되며, 이는 데이터의 TTL을 결정합니다. trace의 보존 기간이 연장되면 새로운 연장된 보존 기간과 일치하도록 해당 blob storage 경로가 변경됩니다. 다음 TTL prefix가 사용됩니다:
  • ttl_s/: 단기 TTL, 14일로 구성됩니다.
  • ttl_l/: 장기 TTL, 400일로 구성됩니다.
LangSmith 구성에서 TTL을 사용자 정의한 경우, blob storage 구성의 TTL을 일치하도록 조정해야 합니다.

Amazon S3

blob storage로 S3를 사용하는 경우, 위의 prefix와 일치하는 filter lifecycle 구성을 설정해야 합니다. 이에 대한 정보는 Amazon 문서에서 찾을 수 있습니다. 예를 들어, Terraform을 사용하여 S3 bucket을 관리하는 경우 다음과 같이 설정합니다:
  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 bucket에 대한 lifecycle 조건을 설정해야 합니다. 이에 대한 정보는 Google 문서, 특히 matchesPrefix 사용에서 찾을 수 있습니다. 예를 들어, Terraform을 사용하여 GCS bucket을 관리하는 경우 다음과 같이 설정합니다:
  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 storage

위의 prefix와 일치하는 객체를 만료시키기 위해 container에 lifecycle 관리 정책을 구성해야 합니다. 예를 들어, Terraform을 사용하여 blob storage container를 관리하는 경우 다음과 같이 설정합니다:
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
      }
    }
  }
}

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.
I