하이브리드 검색
처음이라면 세션을 넘나드는 기억 튜토리얼로 기본 검색 흐름을 먼저 경험해보세요.
memtomem의 하이브리드 검색은 키워드 검색과 시맨틱 검색을 결합하여, 정확한 용어 매칭과 의미 기반 유사도를 동시에 활용합니다.
왜 두 방식을 함께 사용하는가?
섹션 제목: “왜 두 방식을 함께 사용하는가?”키워드 검색은 mem_search, FastAPI 같은 고유 명칭을 정확히 찾아냅니다. 이러한 용어는 임베딩 공간에 의미가 분산되어 있지 않아 벡터 모델이 놓치기 쉽습니다. 반대로 시맨틱 검색은 “배포 방법”처럼 표현이 다른 문서까지 의미로 연결할 수 있습니다. 두 방식을 병렬 실행한 뒤 순위를 결합하면 양쪽 사례를 모두 포괄할 수 있습니다.
검색 아키텍처
섹션 제목: “검색 아키텍처”하이브리드 검색은 세 가지 검색 엔진을 병렬로 실행합니다:
| 검색 엔진 | 기반 | 강점 |
|---|---|---|
| BM25 | SQLite FTS5 | 정확한 키워드/용어 매칭. “FastAPI”, “mem_search” 같은 고유 명칭에 강함 |
| 벡터 검색 | sqlite-vec + ONNX/Ollama/OpenAI 임베딩 | 의미적 유사도. “배포 방법” → “deployment checklist” 매칭 가능 |
| RRF 융합 | Reciprocal Rank Fusion | 두 검색 결과의 순위를 결합하여 최종 랭킹 산출 |
리랭커 풀 튜닝
섹션 제목: “리랭커 풀 튜닝”리랭커가 활성화되면 후보 풀 크기는 max(min_pool, min(max_pool, int(oversample * response_top_k)))로 계산됩니다. 기본값(oversample 2.0, min_pool 20, max_pool 200)은 top_k=10에서 고전적인 2× 오버샘플링(풀 20)을 제공하면서 더 큰 top_k 요청에서는 자연스럽게 확장됩니다.
| 키 | 환경 변수 | 기본값 | 비고 |
|---|---|---|---|
rerank.oversample | MEMTOMEM_RERANK__OVERSAMPLE | 2.0 | response_top_k 대비 풀 배수 |
rerank.min_pool | MEMTOMEM_RERANK__MIN_POOL | 20 | 하한선 — 리랭커가 받는 후보 수의 최소값 |
rerank.max_pool | MEMTOMEM_RERANK__MAX_POOL | 200 | 상한선 — 큰 top_k에서 비용 폭주 방지 |
런타임 튜닝은 mm config set rerank.oversample 3.0 같은 방식으로 가능합니다. rerank.top_k는 deprecated이며 min_pool로 대체하세요.
시맨틱 청킹
섹션 제목: “시맨틱 청킹”인덱싱 시 지원되는 문서를 구조 기반 의미 단위로 분할한 뒤 짧은 섹션 병합 단계를 실행합니다.
| 청커 | 대상 | 동작 |
|---|---|---|
| Markdown | .md 파일 | 헤딩 레벨 기준 분할, 계층 구조 보존 |
| 구조화 데이터 | .json, .yaml, .yml, .toml 파일 | 최상위 키 기준 분할, 설정으로 recursive 모드 사용 가능 |
| 코드 | .py, .js, .ts, .tsx, .jsx 파일 | code chunking extra 설치 시 함수 / 클래스 인식 분할 |
과도하게 짧은 섹션은 indexing.target_chunk_tokens(기본값 384) 한도 안에서 인접 형제 노드와 결합됩니다. 각 청크가 검색 대상으로 의미를 갖도록 유지하기 위한 동작입니다. target_chunk_tokens=0으로 설정하면 해당 결합 단계가 비활성화되며, 모든 소형 섹션이 독립 청크로 유지됩니다.
디렉터리 인덱싱은 확장자로 필터링됩니다. 활성 registry가 청킹하지 않는 파일 형식은 일반 텍스트로 강제 인덱싱되지 않고 건너뜁니다.
증분 인덱싱
섹션 제목: “증분 인덱싱”전체 재인덱싱 대신, 변경된 부분만 갱신합니다:
- 각 청크의 SHA-256 해시를 저장
- 재인덱싱 시 해시 비교로 변경분만 탐지
- 변경된 청크만 재임베딩하여 인덱스 업데이트
대규모 문서셋에서도 인덱싱 비용을 최소화합니다.
네임스페이스
섹션 제목: “네임스페이스”기억을 스코프별로 구분하여 관리합니다:
- 폴더 이름에서 네임스페이스 자동 유도
- 검색 시 특정 네임스페이스 필터링 가능
- 멀티 에이전트 환경에서 에이전트별 격리와 공유 지원
유지보수 기능
섹션 제목: “유지보수 기능”- 유사 중복 탐지 — 내용이 거의 같은 기억 자동 식별
- 시간 기반 감쇠 — 오래된 기억의 검색 가중치 점진적 감소
- TTL 만료 — 설정된 기간이 지난 기억 자동 삭제
- 자동 태깅 — 콘텐츠 분석을 통한 태그 자동 부여