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)
- Bedrock 접근이 활성화된 AWS 계정
- 최소 하나의 데이터 소스가 동기화된 구성된 Bedrock Knowledge Base
- 구성된 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 |