Ninetails 메모리 엔진 V4.5: Int8 양자화 + LRU 캐시로 로컬 MCP 메모리를 60MB로 절감

Ninetails Memory Engine V4.5는 Int8 스칼라 양자화와 LRU 캐시 제거를 결합하여 로컬 MCP(Model Context Protocol) 도구의 메모리 병목 현상을 해결합니다. 이 솔루션은 전체 엔진 프로세스를 Tauri 데스크톱 앱 내에서 40-60MB RAM으로 실행되도록 유지합니다.
메모리 문제
표준 1536차원 float32 임베딩은 약 6144바이트(~6KB)를 차지합니다. 10,000개의 메모리를 저장하면 벡터만으로 ~60MB가 필요하며, 100,000개의 메모리로 확장되면 ~600MB에 이릅니다. SQLite에서 실행되는 로컬 도구의 경우, 이러한 리소스 소비는 허용되지 않습니다.
기술 구현
1단계: Int8 스칼라 양자화
float32(차원당 4바이트)를 int8(차원당 1바이트)로 압축함으로써 저장 용량을 원래 크기의 4분의 1로 줄입니다. 구현에서는 각 차원의 수치 범위를 계산하고, 부동 소수점을 -128에서 127 사이의 정수 범위로 매핑한 후, 검색 시 코사인 유사도를 위해 다시 float32로 역양자화합니다.
# 양자화: float32 → int8
def quantize_vector(vector_fp32, scale, zero_point):
quantized = np.round(vector_fp32 / scale) + zero_point
return np.clip(quantized, -128, 127).astype(np.int8)
# 역양자화: int8 → float32 (근사치)
def dequantize_vector(vector_int8, scale, zero_point):
return (vector_int8.astype(np.float32) - zero_point) * scale
실제 결과: 1536차원 벡터가 6144바이트에서 1536바이트로 감소합니다. 전역 스케일과 zero_point 오버헤드를 고려하면 실제 압축률은 약 3.8배에서 4.0배입니다.
2단계: LRU 캐시 제거
양자화된 벡터는 LRU(Least Recently Used) 전략과 10,000개 항목의 하드 제한을 사용하여 SQLite 데이터베이스(vector_cache.sqlite)에 저장됩니다. 고빈도 벡터는 RAM에 유지되는 반면, 오래된 벡터는 제거됩니다.
정밀도 고려사항
Int8 양자화는 손실이 있지만 메모리 검색에는 허용 가능한데, 그 이유는 다음과 같습니다:
- 엔진은 하이브리드 검색을 사용합니다: 70% 벡터 유사도 + 30% BM25. 양자화가 벡터 순위를 약간 왜곡하더라도, BM25를 통한 정확한 키워드 매칭이 관련 메모리를 다시 상위로 끌어올립니다.
- AI 메모리 검색은 추천 알고리즘과 달리 #1 순위에 대한 절대적 정밀도가 필요하지 않고, 상위 5개 결과에 컨텍스트를 표면화하기만 하면 됩니다.
"TurboQuant"에 대한 설명
이 엔진은 SQLite 벡터 저장을 위해 표준 Int8 스칼라 양자화를 사용하며, LLM GPU 추론 중 KV 캐시를 위해 설계된 3비트 압축 알고리즘(PolarQuant + QJL)인 Google의 TurboQuant(ICLR 2026)을 사용하지 않습니다. UI의 "TurboQuant Compression" 브랜딩은 공격적인 비트 감소 철학에 대한 경의입니다.
전체 기술 스택
- 벡터 압축: Int8 스칼라 양자화(~4배 실제 압축)
- 캐시 관리: SQLite + LRU 제거(제한: 10,000개 항목)
- 검색 엔진: 하이브리드: 70% 벡터 유사도 + 30% BM25
- 프로필 관리자: 자동 STATIC/DYNAMIC 사실 추출
- 사실 추출:
asyncio.to_thread백그라운드 비동기 LLM 호출 - 데이터 저장: 3개의 SQLite 데이터베이스(100% 로컬)
- 데스크톱 앱: Tauri + Vue 3 + PyInstaller 사이드카
이 엔진은 GitHub: sunhonghua1/ninetails-memory-engine에서 MIT 라이선스 하에 오픈 소스입니다.
📖 전체 Source 읽기: r/LocalLLaMA
👀 See Also

OpenClaw 사용자가 ChatGPT 에이전트 워크플로우 행동을 개선하기 위해 'feelslikeclaude' 스킬을 생성합니다
한 개발자가 OpenClaw 설정을 Claude에서 ChatGPT로 전환한 후 핵심 차이가 글쓰기 스타일이 아닌 워크플로우 행동에 있음을 발견했습니다. 그들은 ChatGPT의 실행 습관을 개선하기 위해 'feelslikeclaude'라는 clawhub 스킬을 만들었습니다.

여행 해킹 툴킷: 포인트와 마일 검색을 위한 AI 기술과 MCP 서버
GitHub 저장소는 Claude Code와 OpenCode에게 25개 이상의 마일리지 프로그램에서 상여석 항공편을 검색하고, 현금 가격을 비교하며, 로열티 잔액을 조회하고, 호텔과 페리를 찾는 방법을 가르치는 7개의 마크다운 스킬과 6개의 MCP 서버를 제공합니다. 설정은 저장소를 클론하고 setup.sh를 실행해야 합니다.

펨토봇: 저자원 환경을 위한 효율적인 러스트 에이전트
펨토봇은 저사양 머신에서 효율적으로 실행되도록 설계된 경량 Rust 기반 AI 에이전트로, 약 10MB의 바이너리로 대규모 런타임 종속성 없이 구동됩니다.

Claude Code로 구축한 로컬 음성-텍스트 macOS 앱: Vext 사례 연구
한 개발자가 3개월 동안 Apple Neural Engine에서 Whisper를 사용하는 macOS 음성-텍스트 앱 Vext를 만들었습니다. Claude Code가 Rust/Swift FFI, Core ML 최적화 및 단축키 아키텍처를 도왔습니다. 이 앱은 완전히 오프라인에서 실행되며 60초 오디오를 약 400ms에 변환합니다.