Amazon Bedrock Knowledge Base 벡터 스토어

Amazon Bedrock Knowledge Base 벡터 스토어 (Amazon Bedrock Knowledge Base)

이 섹션에서는 Amazon Bedrock Knowledge Base VectorStore를 설정해서 사전 구성된 Knowledge Base에 대해 유사도 검색을 수행하는 방법을 안내해요. Bedrock Knowledge Base는 완전 관리형 RAG(Retrieval-Augmented Generation) 기능으로, 문서 수집·청킹·임베딩을 내부적으로 처리해요. 다른 벡터 스토어와 달리 이 스토어는 읽기 전용이에요.

출처: 문서

본문

Amazon Bedrock Knowledge Base

이 섹션은 Amazon Bedrock Knowledge Base VectorStore를 설정해 사전 구성된 Knowledge Base에 대해 유사도 검색을 수행하는 방법을 안내해요.

Amazon Bedrock Knowledge Bases는 파운데이션 모델을 데이터 소스에 연결할 수 있게 해 주는 완전 관리형 RAG(Retrieval-Augmented Generation) 기능이에요. 다른 벡터 스토어와 달리 Bedrock Knowledge Base는 문서 수집, 청킹, 임베딩을 내부적으로 처리해요.

사전 준비 (Prerequisites)

  1. Bedrock 접근이 활성화된 AWS 계정
  2. 최소 하나의 데이터 소스가 동기화된 구성된 Bedrock Knowledge Base
  3. 구성된 AWS 자격 증명 (환경 변수, AWS config 파일 또는 IAM 역할을 통해)

참고: 이 벡터 스토어는 읽기 전용이에요. 문서는 add()나 delete() 메서드가 아니라 Knowledge Base의 데이터 소스 동기화 프로세스를 통해 관리돼요.

자동 설정 (Auto-configuration)

Spring AI는 Bedrock Knowledge Base Vector Store에 대한 Spring Boot 자동 설정을 제공해요. 활성화하려면 프로젝트의 Maven pom.xml 파일에 다음 의존성을 추가하세요:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-vector-store-bedrock-knowledgebase</artifactId>
</dependency>

또는 Gradle build.gradle 빌드 파일에:

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-vector-store-bedrock-knowledgebase'
}

참고: 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해 주세요.

참고: 다른 벡터 스토어와 달리 Bedrock Knowledge Base는 EmbeddingModel 빈을 요구하지 않아요. Knowledge Base는 데이터 소스 동기화 중에 임베딩을 내부적으로 처리해요.

Knowledge Base에 연결하려면 Spring Boot의 application.properties를 통해 Knowledge Base ID를 제공하세요:

spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id=YOUR_KNOWLEDGE_BASE_ID
spring.ai.vectorstore.bedrock-knowledge-base.region=us-east-1

또는 환경 변수로:

export SPRING_AI_VECTORSTORE_BEDROCK_KNOWLEDGE_BASE_KNOWLEDGE_BASE_ID=YOUR_KNOWLEDGE_BASE_ID

이제 애플리케이션에서 Vector Store를 오토와이어할 수 있어요:

@Autowired VectorStore vectorStore;

// ...

// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("What is the return policy?")
        .topK(5)
        .build());

구성 프로퍼티 (Configuration Properties)

Spring Boot 구성에서 다음 프로퍼티를 사용해 Bedrock Knowledge Base 벡터 스토어를 커스터마이즈할 수 있어요.

Property Description Default value
spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id 질의할 Bedrock Knowledge Base의 ID -
spring.ai.vectorstore.bedrock-knowledge-base.region Bedrock 서비스의 AWS 지역 SDK default
spring.ai.vectorstore.bedrock-knowledge-base.top-k 반환할 결과 수 5
spring.ai.vectorstore.bedrock-knowledge-base.similarity-threshold 최소 유사도 점수 (0.0 ~ 1.0) 0.0
spring.ai.vectorstore.bedrock-knowledge-base.search-type 검색 타입: SEMANTIC 또는 HYBRID null (KB default)
spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arn Bedrock reranking 모델의 ARN null (disabled)

검색 타입 (Search Types)

Bedrock Knowledge Base는 두 가지 검색 타입을 지원해요:

  • SEMANTIC - 벡터 유사도 검색만 (기본값)
  • HYBRID - 시맨틱 검색과 키워드 검색 결합

참고: HYBRID 검색은 OpenSearch 기반 벡터 스토어에서만 사용할 수 있어요. S3 Vectors, Aurora PostgreSQL 및 기타 벡터 스토어 타입은 SEMANTIC 검색만 지원해요.

spring.ai.vectorstore.bedrock-knowledge-base.search-type=HYBRID

재순위화 (Reranking)

Bedrock reranking 모델을 활성화해 검색 관련성을 개선할 수 있어요:

spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arn=arn:aws:bedrock:us-west-2::foundation-model/amazon.rerank-v1:0

사용 가능한 reranking 모델:

  • Amazon Rerank 1.0 - us-west-2, ap-northeast-1, ca-central-1, eu-central-1에서 사용 가능
  • Cohere Rerank 3.5 - AWS Marketplace 구독 필요

메타데이터 필터링 (Metadata Filtering)

Bedrock Knowledge Base 스토어에서도 일반적이고 휴대 가능한 메타데이터 필터를 활용할 수 있어요.

예를 들어 텍스트 표현 언어를 사용할 수 있어요:

vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("travel policy")
        .topK(5)
        .similarityThreshold(0.5)
        .filterExpression("department == 'HR' && year >= 2024")
        .build());

또는 Filter.Expression DSL로 프로그래밍 방식으로:

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("travel policy")
        .topK(5)
        .filterExpression(b.and(
            b.eq("department", "HR"),
            b.gte("year", 2024)).build())
        .build());

지원되는 필터 연산자 (Supported Filter Operators)

Spring AI Bedrock Description
EQ equals 같음
NE notEquals 같지 않음
GT greaterThan 보다 큼
GTE greaterThanOrEquals 보다 크거나 같음
LT lessThan 보다 작음
LTE lessThanOrEquals 보다 작거나 같음
IN in 목록 안의 값
NIN notIn 목록 안에 없는 값
AND andAll 논리 AND
OR orAll 논리 OR
NOT (negation) 논리 NOT

참고: 메타데이터 필터링은 Knowledge Base의 문서에 메타데이터 속성이 있어야 해요. S3 데이터 소스의 경우 문서 옆에 .metadata.json 파일을 만드세요.

수동 구성 (Manual Configuration)

벡터 스토어를 수동 구성하는 것을 선호한다면 빈을 직접 만들어서 할 수 있어요. 이 의존성을 프로젝트에 추가하세요:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bedrock-knowledgebase-store</artifactId>
</dependency>

참고: 빌드 파일에 Spring AI BOM을 추가하려면 Dependency Management 섹션을 참고해 주세요.

샘플 코드 (Sample Code)

@Bean
public BedrockAgentRuntimeClient bedrockAgentRuntimeClient() {
    return BedrockAgentRuntimeClient.builder()
        .region(Region.US_EAST_1)
        .build();
}

@Bean
public VectorStore vectorStore(BedrockAgentRuntimeClient client) {
    return BedrockKnowledgeBaseVectorStore.builder(client, "YOUR_KNOWLEDGE_BASE_ID")
        .topK(10)
        .similarityThreshold(0.5)
        .searchType(SearchType.SEMANTIC)
        .build();
}

그런 다음 벡터 스토어를 사용하세요:

List<Document> results = vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("What are the company holidays?")
        .topK(3)
        .build());

for (Document doc : results) {
    System.out.println("Content: " + doc.getText());
    System.out.println("Score: " + doc.getScore());
    System.out.println("Source: " + doc.getMetadata().get("source"));
}

네이티브 클라이언트 접근 (Accessing the Native Client)

Bedrock Knowledge Base Vector Store는 getNativeClient() 메서드를 통해 내부 네이티브 클라이언트에 접근을 제공해요:

BedrockKnowledgeBaseVectorStore vectorStore = context.getBean(BedrockKnowledgeBaseVectorStore.class);
Optional<BedrockAgentRuntimeClient> nativeClient = vectorStore.getNativeClient();

if (nativeClient.isPresent()) {
    BedrockAgentRuntimeClient client = nativeClient.get();
    // Use the native client for Bedrock-specific operations
}

제한 사항 (Limitations)

  • 읽기 전용: add()와 delete() 메서드는 UnsupportedOperationException을 던져요. 문서는 Knowledge Base의 데이터 소스 동기화 프로세스를 통해 관리돼요.
  • HYBRID 검색: OpenSearch 기반 벡터 스토어에서만 사용 가능해요.
  • Reranking 가용성: 모델 가용성은 AWS 지역에 따라 달라져요.

지원되는 데이터 소스 (Supported Data Sources)

Bedrock Knowledge Base는 여러 데이터 소스 타입을 지원해요. 소스 위치는 문서 메타데이터에 포함돼요:

Data Source Metadata Field Example
S3 source s3://bucket/path/document.pdf
Confluence source confluence.example.com/page/123
SharePoint source sharepoint.example.com/doc/456
Salesforce source salesforce.example.com/record/789
Web Crawler source example.com/page
Custom source Custom document ID

더 알아보기 (Learn more)