Amazon Web Services 한국 블로그

Amazon S3 Vectors, 필터링된 검색 재현율을 높이는 메타데이터 사전 필터링 지원

오늘은 Amazon S3 Vectors의 메타데이터 사전 필터링 기능을 발표합니다. 이 기능은 유사성 검색 전에 메타데이터 필터를 평가하여 필터링된 쿼리의 재현율을 높입니다. 테넌트, 범주, 상태 또는 시간 등의 속성을 기준으로 필터링할 수 있으며, 사전 필터링은 경로, URL 및 계층적 키에 대해 $startsWith를 사용한 접두사 매칭 기능을 추가합니다. 각 벡터에는 최대 2KB의 필터링 가능한 메타데이터를 포함할 수 있으며, 단일 쿼리는 최대 100개의 필터 제약 조건을 지원합니다. 추가 비용이 없으며, 데이터를 다시 수집하거나 쿼리를 변경할 필요도 없습니다.

대부분의 애플리케이션은 전체 인덱스를 검색하지 않습니다. 특정 사용자, 계정 또는 범주에 속하는 부분을 검색하고 해당 범위를 메타데이터 필터로 표현합니다. 시맨틱 검색, 검색 증강 생성(RAG), 에이전틱 애플리케이션은 모두 필터링된 쿼리에 동일한 기능을 요구합니다. 즉, 필터에 일치하는 벡터를 대상으로 유사성 검색을 수행하고 그중 가장 가까운 벡터를 반환해야 합니다. 사전 필터링을 사용하면 필터링된 쿼리가 인덱스에 포함된 관련 일치 항목을 더 많이 반환하므로 필터링된 검색의 재현율이 높아집니다.

일반적인 사용 사례
사전 필터링은 검색 결과의 관련성과 정확한 검색 범위가 모두 필요한 경우에 적용됩니다.

  • 법률 및 전문 서비스: 법률 사무소 또는 전자 증거 검색 플랫폼은 한 고객으로 범위를 제한하여 문서를 검색하고, $startsWith를 사용하여 사건 번호, 폴더 경로 또는 문서 ID 접두사를 기준으로 범위를 더 좁힙니다. 한 고객의 자료는 법률 사무소 전체 아카이브에서 차지하는 비중이 작으며, 이렇게 범위가 좁은 필터에서 사전 필터링의 재현율 개선 효과가 가장 큽니다.
  • 금융 서비스: 투자 리서치 플랫폼은 발행사, 문서 유형 및 발행일을 기준으로 범위를 제한하여 애널리스트 노트, 공시 자료 및 통화 녹취록을 검색합니다.
  • 미디어 및 엔터테인먼트: 스트리밍 서비스는 시맨틱 검색 전에 콘텐츠 등급과 지역별 라이선스를 기준으로 필터링하여, 특정 지역에서 라이선스를 확보한 G 및 PG 등급 콘텐츠 내에서 유사한 작품을 찾습니다.
  • 에이전틱 애플리케이션: 사용자 세션 내에서 작업하는 에이전트는 소유자, 문서 세트 및 타임스탬프 등의 필드를 기준으로 필터링하여 현재 작업과 관련된 자료를 검색 대상으로 삼습니다. 재현율이 높아지면 관련 자료가 에이전트에 더 많이 전달되어 작업의 신뢰성이 향상됩니다.

사전 필터링 작동 방식
S3 Vectors 인덱스의 각 벡터에는 애플리케이션에서 정의한 메타데이터를 포함할 수 있으며, 쿼리는 해당 필드를 기준으로 필터링할 수 있습니다.

모든 벡터 인덱스에는 인덱스 모드가 있습니다. 인덱스 모드가 ENHANCED인 인덱스에서는 S3 Vectors가 먼저 필터를 평가한 다음 일치하는 벡터만 검색합니다. 인덱스 모드가 CLASSIC인 인덱스에서는 S3 Vectors가 벡터 검색과 필터 평가를 동시에 수행하며, 검색 중 각 후보 벡터가 필터에 부합하는지 확인합니다. 기존 인덱스는 업데이트할 때까지 CLASSIC을 사용합니다.

에이전트가 반복적으로 발생하는 오류를 찾기 위해 한 고객의 이력을 검색하는, 800만 개의 티켓으로 구성된 지원 지식 베이스를 생각해 보겠습니다. 해당 고객의 티켓이 400개라면 customer_id를 먼저 평가할 때 400개 전체를 대상으로 유사성 검색이 실행되므로, 에이전트가 해당 고객에게 이전에 발생한 사례를 확인할 수 있습니다. 인덱스를 업데이트하기 전에는 동일한 쿼리가 전체 800만 개의 티켓에서 후보를 가져왔으며, 결과 집합에는 해당 고객의 일치하는 티켓이 더 적게 포함되었습니다.

선택성이 높은 필터의 경우 사전 필터링은 기존 CLASSIC 인덱스에서 동일한 쿼리를 실행했을 때보다 조건에 일치하는 벡터를 최대 5배 더 많이 반환합니다.

시작하기
시작하기 전에 IAM 정책이 새 작업에 대한 권한을 부여하는지 확인하세요.

다음 세 단계로 시작할 수 있습니다. 아래 안내에서는 소규모 제품 카탈로그 인덱스를 구축하고 선택성이 높은 필터를 적용합니다. 이는 멀티 테넌트 RAG 저장소나 한 고객으로 범위가 제한된 문서 검색에 사용하는 것과 동일한 패턴입니다.

먼저 벡터 인덱스를 생성합니다.

aws s3vectors create-index \
  --index-name product-catalog \
  --vector-bucket-name my-vector-bucket \
  --dimension 1536 \
  --distance-metric cosine

dimension은 임베딩 모델의 출력 크기와 일치해야 하며, distance-metric은 해당 모델의 학습 방식과 일치해야 합니다(텍스트 임베딩에는 일반적으로 코사인을 사용합니다). 다음으로 PutVectors API를 사용하여 벡터를 기록하고, 각 벡터에 최대 2KB의 필터링 가능한 메타데이터를 연결합니다.

aws s3vectors put-vectors \
  --index-name product-catalog \
  --vector-bucket-name my-vector-bucket \
  --vectors '[{
    "key": "doc-001",
    "data": {"float32": [0.1, 0.2, 0.3, ...]},
    "metadata": {
      "tenant_id": "t-10428",
      "category": "legal",
      "created_date": "2026-03-15",
      "active": true
    }
  }]'

각 벡터에는 애플리케이션에서 필터링 기준으로 사용하는 속성이 포함됩니다. 이 예에서 tenant_id는 결과 범위를 한 고객으로 제한하고, category는 문서 유형별로 범위를 좁히며, created_date는 문서가 생성된 날짜를 기록하고, active는 불리언 플래그입니다. 기본적으로 모든 메타데이터 필드를 필터링할 수 있으므로, 스키마를 미리 선언하지 않고도 어느 필드든 쿼리할 수 있습니다.

마지막으로 QueryVectors API를 사용하여 필터링된 유사성 쿼리를 실행합니다. 필터는 간결한 JSON 구문을 사용합니다. 단순한 키-값 쌍은 동등 비교를 나타내며, $and, $or 및 $gt 등의 연산자는 조건을 결합하거나 구체화합니다. 쿼리가 각 벡터의 메타데이터를 반환하도록 --return-metadata를 전달합니다.

aws s3vectors query-vectors \
  --index-name product-catalog \
  --vector-bucket-name my-vector-bucket \
  --query-vector '{"float32": [0.1, 0.2, 0.3, ...]}' \
  --top-k 50 \
  --return-metadata \
  --filter '{"$and": [
    {"tenant_id": "t-10428"},
    {"category": "legal"},
    {"active": true}
  ]}'

예상 결과는 세 가지 필터 조건(tenant_id, category 및 active)을 모두 충족하는 유일한 벡터인 doc-001 하나입니다.

{
  "vectors": [
    {
      "distance": 0.9717477560043335,
      "key": "doc-001",
      "metadata": {
        "tenant_id": "t-10428",
        "category": "legal",
        "created_date": "2026-03-15",
        "active": true
      }
    }
  ],
  "distanceMetric": "cosine"
}

S3 Vectors는 먼저 검색 공간을 세 가지 필터 조건 모두와 일치하는 벡터로 좁힌 다음 해당 하위 집합에서 가장 유사한 50개의 벡터를 반환합니다. 필터는 검색 전에 적용되므로 필터와 일치하는 모든 벡터에서 해당 결과가 추출됩니다.

$startsWith를 사용한 접두사 매칭
사전 필터링은 경로, URL 및 계층적 키를 기준으로 필터링하는 접두사 매칭 연산자를 추가합니다. 사건 및 폴더 구조를 문서 ID에 인코딩하는 문서 저장소에서는 조건 하나로 검색 범위를 하위 트리로 제한할 수 있습니다.

--filter '{"$startsWith": {"document_id": "matter-4417/exhibits/"}}'

$startsWith는 동등 비교, 숫자 범위, 집합 포함 여부, 존재 여부 검사, $and 및 $or를 사용한 불리언 논리 등의 기존 연산자에 새로 추가됩니다.

기존 인덱스에서 사전 필터링 활성화
기존 인덱스에서 UpdateIndexMode를 호출하여 사전 필터링을 활성화합니다.

aws s3vectors update-index-mode \
  --vector-bucket-name my-vector-bucket \
  --index-name product-catalog \
  --index-mode ENHANCED

사전 필터링은 기존 인덱스에 그대로 적용됩니다. 기존 벡터는 다시 수집되지 않고, 쿼리는 변경되지 않으며, 새로운 필터 연산자를 즉시 사용할 수 있습니다.

다음은 동일한 인덱스와 동일한 쿼리에서 나타나는 차이입니다. 업데이트 전에는 한 테넌트로 범위를 제한한 쿼리가 요청된 결과 10개 중 2개를 반환합니다.

aws s3vectors query-vectors \
  --vector-bucket-name my-vector-bucket \
  --index-name product-catalog \
  --query-vector '{"float32": [0.1, 0.2, 0.3, ...]}' \
  --top-k 10 \
  --return-metadata \
  --filter '{"tenant_id": "t-10428"}'
{
  "vectors": [
    { "key": "doc-114", "distance": 0.41 },
    { "key": "doc-322", "distance": 0.55 }
  ],
  "distanceMetric": "cosine"
}

업데이트 후 동일한 쿼리가 해당 테넌트의 문서 전체에서 가져온 전체 결과 집합을 반환합니다.

{
  "vectors": [
    { "key": "doc-018", "distance": 0.09 },
    { "key": "doc-207", "distance": 0.13 },
    { "key": "doc-114", "distance": 0.41 },
    ... 추가 7개
  ],
  "distanceMetric": "cosine"
}

전체 인덱스에 적용
한 인덱스에서 사전 필터링을 검증한 후에는 벡터 버킷의 기본 인덱스 모드를 설정하여 추가 호출 없이 새 인덱스가 ENHANCED를 사용하도록 합니다.

aws s3vectors put-vector-bucket-default-index-mode \
  --vector-bucket-name my-vector-bucket \
  --default-index-mode ENHANCED

나머지 기존 인덱스도 전환하려면 인덱스 목록을 조회하고 각 인덱스의 모드를 확인한 다음, 여전히 CLASSIC을 사용하는 인덱스에서 UpdateIndexMode를 호출합니다.

aws s3vectors list-indexes \
  --vector-bucket-name my-vector-bucket

aws s3vectors get-index \
  --vector-bucket-name my-vector-bucket \
  --index-name product-catalog

알아야 할 사항

  • 2026년 9월 30일 또는 그 이후에 생성된 벡터 버킷에서 생성되는 인덱스는 ENHANCED 인덱스 모드를 사용합니다. 해당 날짜 이전부터 존재한 버킷의 인덱스는 버킷 기본값을 설정할 때까지 CLASSIC을 사용하며, 이후에 해당 버킷에서 생성된 인덱스도 여기에 포함됩니다.
  • 단일 쿼리는 최대 100개의 필터 제약 조건을 지원하며, 제약 조건 수는 필터가 평가하는 각 값을 기준으로 계산됩니다. 쿼리가 이 한도를 초과하면 일반적으로 필터를 통합할 수 있습니다. 예를 들어 법률 사건에 대한 값 300개의 $in 조건을 단일 caseId 필드로 대체하거나, 더 작은 쿼리로 나누어 병렬로 실행한 다음 거리를 기준으로 결과를 병합할 수 있습니다.

지금 시작하기
메타데이터 사전 필터링은 Amazon S3 Vectors를 사용할 수 있는 모든 상용 AWS 리전과 AWS 중국 리전에서 추가 비용 없이 사용할 수 있습니다. 스토리지, PUT 요청 및 쿼리에는 표준 S3 Vectors 요금이 부과됩니다. 자세한 요금 정보는 Amazon S3 요금 페이지를 참조하세요. 리전별 가용성은 Amazon S3 Vectors 리전 및 할당량을 참조하세요.

RAG 애플리케이션의 범위를 한 테넌트로 제한하거나, 에이전트의 검색 범위를 한 사용자의 문서로 제한하거나, 카탈로그 검색 범위를 라이선스 기간으로 좁히는 경우에도 사전 필터링을 사용하면 재현율을 떨어뜨리지 않고 이러한 필터를 적용할 수 있습니다. 자세히 알아보고 시작하려면 Amazon S3 Vectors 설명서를 참조하세요. AWS re:Post for S3 또는 AWS Support 담당자를 통해 피드백을 보내 주세요.

– Daniel Abib