RAG 및 벡터 연산
Contexa는 RAG (Retrieval-Augmented Generation) 워크플로우를 위한 계층형 벡터 스토리지 아키텍처를 제공합니다. VectorOperations 인터페이스가 계약을 정의하고, UnifiedVectorService가 캐싱을 갖춘 범용 스토리지를 제공하며, AbstractVectorLabService가 지표, 보강, 검증이 포함된 도메인별 벡터 서비스를 지원합니다.
개요
벡터 연산은 AI Pipeline의 CONTEXT_RETRIEVAL 단계를 구동합니다. 문서는 메타데이터와 함께 저장되고, Spring AI의 임베딩 모델을 통해 임베딩되며, 구성된 Spring AI VectorStore를 통해 영속화됩니다. PgVector를 연결하면 동일한 계약이 PgVector 저장소 위에서 동작합니다. 유사도 검색은 LLM 실행 전 관련 컨텍스트를 검색합니다.
아키텍처는 두 개의 레이어로 구성됩니다:
- UnifiedVectorService — 캐시 통합이 포함된 범용 벡터 연산. 표준 문서 저장 및 검색에 사용됩니다.
- AbstractVectorLabService — 도메인별 벡터 서비스의 기본 클래스. Lab별 메타데이터 보강, 검증, 지표 추적, 필터 표현식을 추가합니다.
BehaviorVectorService가 행동 분석 데이터의 주요 구현체입니다.
VectorOperations
모든 벡터 스토어 상호작용을 위한 핵심 인터페이스입니다.
public interface VectorOperations
SearchRequest를 통해 topK, 유사도 임계값, 필터 표현식을 완전히 제어하는 고급 검색.UnifiedVectorService
VectorStoreCacheLayer를 통한 캐시 통합이 포함된 범용 구현체입니다.
public class UnifiedVectorService implements VectorOperations
주요 동작
- 자동 생성된
id,timestamp,documentType,version메타데이터로 문서를 보강합니다. - 검색 결과 캐싱에
VectorStoreCacheLayer를 사용합니다. 쓰기 작업 시 캐시가 무효화됩니다. - 배치 삽입은
PgVectorStoreProperties에서 설정된batchSize를 사용합니다. - 모든 쓰기 작업은
@Transactional입니다.
AbstractVectorLabService
Lab 인식 처리, 지표, 보강, 검증을 추가하는 도메인별 벡터 서비스의 기본 클래스입니다.
public abstract class AbstractVectorLabService implements VectorOperations
추상 메서드 (구현 필수)
지표 통합
VectorStoreMetrics 빈이 사용 가능하면 모든 연산 (STORE, SEARCH, DELETE)이 Lab별 연산 횟수, 소요 시간, 오류율과 함께 자동으로 추적됩니다.
BehaviorVectorService
사용자 행동 분석 데이터를 저장하고 조회하기 위한 특화된 벡터 서비스입니다. 이상 탐지를 위한 HCAD 시스템에서 사용됩니다.
public class BehaviorVectorService extends AbstractVectorLabService
메타데이터 보강
저장되는 각 문서에 시간 메타데이터 (hour, dayOfWeek, isWeekend)와 네트워크 메타데이터 (IP 주소에서 추출한 networkSegment)를 자동으로 추가합니다.
설정
spring:
ai:
vectorstore:
pgvector:
index-type: HNSW
distance-type: COSINE_DISTANCE
dimensions: 384
contexa:
rag:
lab:
batch-size: 50
top-k: 100
similarity-threshold: 0.75
validation-enabled: true
enrichment-enabled: true
코드 예제
문서 저장 및 검색
// Store a security policy document
Document policyDoc = new Document(
"Users must use MFA for admin operations",
Map.of("documentType", "POLICY", "category", "auth"));
unifiedVectorService.storeDocument(policyDoc);
// Search for relevant context
List<Document> context = unifiedVectorService.searchSimilar(
"multi-factor authentication requirements",
Map.of("category", "auth"));
행동 패턴 저장
BehavioralAnalysisContext context = BehavioralAnalysisContext.builder()
.userId("user-456")
.remoteIp("10.0.1.55")
.currentActivity("ADMIN_ACCESS")
.userAgent("Mozilla/5.0")
.build();
behaviorVectorService.storeBehavior(context);
// Find similar historical behaviors
List<Document> similar = behaviorVectorService
.findSimilarBehaviors("user-456", "10.0.1.55", "/admin", 5);
관련 문서
RAG 및 벡터 스토어
application.yml 속성은 AI 설정을 참조하세요 — ContexaRagProperties (defaults, lab 튜닝, ETL 옵션)와 PgVectorStoreProperties (연결, 배치 크기, 차원, 인덱싱)를 다룹니다.