contexa-core

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
storeDocument(Document document) void
메타데이터와 텍스트 콘텐츠를 포함한 단일 문서를 벡터 스토어에 저장합니다.
storeDocuments(List<Document> documents) void
여러 문서를 일괄 저장합니다. 대량 문서 세트에 대해 설정 가능한 배치 크기를 사용합니다.
searchSimilar(String query) List<Document>
기본 topK 및 유사도 임계값 설정을 사용하여 쿼리 텍스트와 유사한 문서를 검색합니다.
searchSimilar(String query, Map<String, Object> filters) List<Document>
메타데이터 필터로 검색합니다. 필터 키는 동등 연산자로 매칭되고, 리스트는 IN을 사용하며, "gte"/"lte" 키를 가진 맵은 범위 필터로 처리됩니다.
searchSimilar(SearchRequest searchRequest) List<Document>
Spring AI의 SearchRequest를 통해 topK, 유사도 임계값, 필터 표현식을 완전히 제어하는 고급 검색.
deleteDocuments(List<String> documentIds) void
벡터 스토어에서 ID별로 문서를 삭제합니다.

UnifiedVectorService

VectorStoreCacheLayer를 통한 캐시 통합이 포함된 범용 구현체입니다.

public class UnifiedVectorService implements VectorOperations

주요 동작

  • 자동 생성된 id, timestamp, documentType, version 메타데이터로 문서를 보강합니다.
  • 검색 결과 캐싱에 VectorStoreCacheLayer를 사용합니다. 쓰기 작업 시 캐시가 무효화됩니다.
  • 배치 삽입은 PgVectorStoreProperties에서 설정된 batchSize를 사용합니다.
  • 모든 쓰기 작업은 @Transactional입니다.

AbstractVectorLabService

Lab 인식 처리, 지표, 보강, 검증을 추가하는 도메인별 벡터 서비스의 기본 클래스입니다.

public abstract class AbstractVectorLabService implements VectorOperations

추상 메서드 (구현 필수)

getLabName() String
지표, 로깅, 메타데이터 태깅에 사용되는 Lab 이름을 반환합니다.
getDocumentType() String
메타데이터에 저장되는 문서 타입 식별자를 반환합니다.
enrichLabSpecificMetadata(Document document) Document
도메인별 메타데이터로 문서를 보강합니다. 보강이 활성화되었을 때 전처리 중 호출됩니다.
validateLabSpecificDocument(Document document) void
도메인별 규칙에 대해 문서를 검증합니다. 검증이 활성화되었을 때 전처리 중 호출됩니다.

지표 통합

VectorStoreMetrics 빈이 사용 가능하면 모든 연산 (STORE, SEARCH, DELETE)이 Lab별 연산 횟수, 소요 시간, 오류율과 함께 자동으로 추적됩니다.

BehaviorVectorService

사용자 행동 분석 데이터를 저장하고 조회하기 위한 특화된 벡터 서비스입니다. 이상 탐지를 위한 HCAD 시스템에서 사용됩니다.

public class BehaviorVectorService extends AbstractVectorLabService
storeBehavior(BehavioralAnalysisContext context) void
사용자 ID, IP 주소, 세션 데이터, 유저 에이전트, 활동 상세를 포함한 사용자 행동 패턴을 저장합니다.
storeThreatPattern(BehavioralAnalysisContext context, BehavioralAnalysisResponse response) void
향후 유사도 매칭을 위해 감지된 위협 패턴을 저장합니다.
storeAnalysisResult(BehavioralAnalysisContext context, BehavioralAnalysisResponse response) void
이력 참조를 위해 행동 분석 결과를 저장합니다.
findSimilarBehaviors(String userId, String ip, String path, int topK) List<Document>
주어진 파라미터와 유사한 행동 패턴을 찾습니다. userId와 Lab 이름으로 필터링합니다.

메타데이터 보강

저장되는 각 문서에 시간 메타데이터 (hour, dayOfWeek, isWeekend)와 네트워크 메타데이터 (IP 주소에서 추출한 networkSegment)를 자동으로 추가합니다.

설정

YAML
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

코드 예제

문서 저장 및 검색

Java
// 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"));

행동 패턴 저장

Java
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 (연결, 배치 크기, 차원, 인덱싱)를 다룹니다.