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

LLM 숨겨진 에이전시 신호(Â)를 활용한 향상된 도구 호출
개발자가 LLM이 AUC > 0.94로 도구 호출을 예측하는 선형 분리 가능한 숨겨진 상태 방향인 Â를 가지고 있음을 발견했습니다. 이 신호를 사용하여 도구 호출을 강제하면 Qwen3-1.7B 성능이 26.7%에서 85%로 향상되었으며(+58% 이득), 도구 미사용 실패가 43%에서 2.6%로 감소했습니다.

런타임: 모든 팀원을 위한 샌드박스 코딩 에이전트
Runtime (YC P26)는 비엔지니어가 Claude Code, Codex 등 에이전트를 안전하게 사용할 수 있는 샌드박스 코딩 에이전트 인프라를 제공합니다. Docker, Kafka, Redis, 시드 데이터베이스 등 다중 서비스 환경을 스냅샷하여 수 밀리초 만에 부팅하며, 인프라 수준에서 가드레일을 갖추고 있습니다.
ClaudeAI 브레인스토밍 모드, 목업과 UI 승인을 위한 시각적 동반자 기능 추가
한 사용자가 ClaudeAI 브레인스토밍 모드에서 로컬 웹 서버에 목업을 제공하는 새로운 'Visual Companion' 기능을 발견했습니다. 이 기능을 통해 실제 개발 전에 UI를 주고받으며 수정할 수 있습니다.

APEX 테스트 벤치마크 결과: 실제 코딩 작업에서의 Qwen 3.5 성능
APEX 테스트 벤치마크 결과는 Qwen 3.5 모델들의 70개 실제 GitHub 코딩 작업 성능을 보여주며, 397B 버전은 마스터 수준 작업에서 1194 ELO로 떨어지는 반면 GLM-4.7 양자화 버전이 1572 ELO로 로컬 모델 중 선두를 달리고 있습니다.