Skip to content

시맨틱캐싱 필터링 기능 업데이트 요망 #3

Description

@junyeong0619

이 기능은 @vectorize 데코레이터의 핵심 파라미터를 통해 작동하며, 단순한 유사도 검색을 넘어 데이터 격리(Isolation)정적 필터링을 가능하게 하는 중요한 개념이기 때문입니다.

다음은 문서 업데이트를 위한 구체적인 제안입니다.


1. 수정 대상 파일 및 위치

  • 파일: docs/core_concepts.md
  • 위치: ## 3. Semantic Caching 섹션의 하단 (기존 설명 및 예제 코드 바로 뒤)

2. 추가할 내용 (초안)

아래 내용을 기존 Setup Method 하단에 **"캐시 격리 및 필터링 (Cache Isolation & Filtering)"**이라는 소제목으로 추가하는 것을 추천합니다. semantic_cache_scope는 멀티 테넌트 환경에서의 데이터 보안(격리)을 위해, semantic_cache_filters는 버전 관리 등을 위해 필수적입니다.


[제안하는 문서 업데이트 내용]

캐시 격리 및 필터링 (Cache Isolation & Filtering)

단순히 입력값의 의미적 유사성만으로 캐시를 공유하면, 다른 프로젝트나 사용자의 데이터가 조회될 위험이 있습니다. VectorWave는 이를 방지하기 위해 동적 스코프정적 필터 기능을 제공합니다.

  • semantic_cache_scope (Dynamic): 함수의 인자(Argument) 중 특정 필드가 정확히 일치할 때만 캐시를 사용하도록 제한합니다. (예: project_id, user_id)
  • semantic_cache_filters (Static): 코드 레벨에서 고정된 메타데이터 필터링 조건을 적용합니다. (예: env='prod', version__gte=2)

사용 예시

@vectorize(
    semantic_cache=True,
    # 1. 동적 스코프: 'project_id' 인자가 같은 경우에만 캐시를 공유 (데이터 격리)
    semantic_cache_scope=['project_id'], 
    
    # 2. 정적 필터: 메타데이터에 'env'가 'production'인 데이터만 조회
    semantic_cache_filters={'env': 'production'},
    
    cache_threshold=0.85
)
def generate_report(project_id: str, content: str):
    # project_id가 'A'인 요청은 'B'인 요청의 캐시를 절대 사용하지 않음
    return llm_process(content)

3. 근거 및 참고 파일

이 내용은 사용자가 업로드한 테스트 코드의 실제 동작 방식을 기반으로 작성되었습니다.

  1. 동적 스코프 (semantic_cache_scope):
  • test_ex/semantic_filter.py에서 project_id가 다를 경우 동일한 입력(shared_content)이라도 캐시가 공유되지 않음(Isolation)을 검증하고 있습니다.
  • src/tests/core/test_cache_filtering.pytest_semantic_cache_dynamic_scope 테스트 케이스는 인자 값이 런타임에 필터로 변환되는 것을 보여줍니다.
  1. 정적 필터 (semantic_cache_filters):
  • src/tests/core/test_cache_filtering.pytest_semantic_cache_static_filters 테스트 케이스에서 고정된 딕셔너리 값(static_filter)이 쿼리 필터로 전달됨을 확인했습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions