Mnemo: LLM을 위한 로컬 우선 AI 메모리 레이어

Mnemo는 클라우드 의존성이나 Python 런타임 없이도 LLM 세션 전반에 걸쳐 지속적이고 구조화된 메모리를 제공하도록 설계된 로컬 우선 AI 메모리 레이어입니다. 대화에서 엔티티와 관계를 추출하여 지식 그래프를 구축하고, 이를 통해 관련성 점수가 매겨진 컨텍스트를 향후 프롬프트에 다시 주입하는 사이드카 서비스로 작동합니다.

핵심 기능 및 워크플로우

Mnemo는 정보의 추출 및 검색을 자동화함으로써 LLM 애플리케이션이 서로 다른 세션 간에 상태와 지식을 유지할 수 있도록 합니다. 시스템은 두 가지 주요 엔드포인트를 통한 파이프라인으로 작동합니다:

1. 인제스션(Ingestion) 및 추출

원시 텍스트(대화 턴 또는 문서 등)가 /ingest 엔드포인트로 전송되면, Mnemo는 구성된 LLM을 사용하여 명명된 엔티티(사람, 도구, 장소, 개념)와 그들 사이의 관계를 식별합니다. 이러한 엔티티는 이름과 유형별로 중복이 제거되고, 별칭(alias)은 병합되며, 결과 데이터는 SQLite 데이터베이스에 저장됩니다. 동시에, 지식 그래프의 구조적 관계를 유지하기 위해 인메모리 petgraph가 업데이트됩니다.

2. 검색 및 컨텍스트 주입

쿼리가 /retrieve 엔드포인트로 전송되면, Mnemo는 context_prompt를 구성하기 위해 6단계 검색 파이프라인을 실행합니다:

  1. 전체 텍스트 청크 검색: 관련 텍스트 세그먼트에 대한 초기 검색.
  2. 엔티티 이름 검색: 특정된 알려진 엔티티 검색.
  3. 그래프 확장: 관련 개념을 찾기 위해 지식 그래프에서 너비 우선 탐색(BFS) 수행.
  4. 관계 필터링: 정의된 관계를 기반으로 결과 필터링.
  5. 점수 산정 및 순위 지정: 관련성에 따라 결과 순위 지정.
  6. 조립: LLM의 시스템 프롬프트에 주입될 최종 컨텍스트 문자열 생성.

그래프 확장 결과는 직접적인 일치가 추론된 관계보다 항상 높은 순위를 차지하도록 0.5배의 점수가 부여됩니다.

기술 아키텍처 및 성능

Mnemo는 높은 성능과 작은 점유율을 보장하기 위해 4개의 Rust 크레이트(crate) 세트로 구현되었습니다:

  • mnemo-core: 엔티티 추출, 그래프 작업, 검색 엔진 및 데이터베이스 레이어를 처리하는 중앙 라이브러리.
  • mnemo-api: 핵심 로직 위에 얇은 핸들러 레이어로 작동하는 Axum 기반 REST API.
  • mnemo-cli: API와 상호작용하기 위한 명령줄 인터페이스.
  • mnemo-bench: 전용 벤치마킹 스위트.

성능 벤치마크

SQLite를 WAL 모드로 사용하고 인메모리 petgraph를 사용하는 Apple M2에서 테스트한 결과, 시스템은 핵심 작업에 대해 낮은 지연 시간을 보여줍니다 (디버그 빌드 수치이며, 릴리스 빌드는 3~5배 더 빠릅니다):

작업 평균 지연 시간 처리량
엔티티 삽입 (SQLite) ~0.12 ms ~8,300 ops/s
엔티티 ID로 조회 ~0.08 ms ~12,500 ops/s
청크 삽입 ~0.14 ms ~7,100 ops/s
전체 텍스트 청크 검색 ~0.28 ms ~3,500 ops/s
그래프 이웃 (depth=1) ~0.21 ms ~4,700 ops/s
그래프 이웃 (depth=2) ~0.89 ms ~1,100 ops/s
전체 검색 파이프라인 ~4.2 ms ~238 ops/s

배포 및 통합

Mnemo는 유연성을 위해 설계되었으며, Ollama와 같은 완전한 로컬 옵션을 포함하여 모든 OpenAI 호환 백엔드를 지원합니다.

통합 경로

  • Docker: Mnemo와 Ollama를 모두 배포하기 위해 Docker Compose를 사용하는 권장 경로.
  • Binary: LLM 백엔드를 별도로 실행하는 사용자를 위한 cargo install을 통한 설치.
  • Python SDK: Python 기반 LLM 파이프라인에 통합하기 위해 pip를 통해 사용할 수 있는 mnemo-sdk 패키지.

설정

설정은 환경 변수 또는 TOML 파일을 통해 처리됩니다. 주요 변수는 MNEMO_LLM_BASE_URL (기본값 Ollama), MNEMO_LLM_MODEL, 및 MNEMO_LLM_PROVIDER (ollama, openai, anthropic, 또는 custom 지원)를 포함합니다.

커뮤니티 인사이트 및 반론

Mnemo가 로컬 메모리에 대한 구조화된 접근 방식을 제공하지만, 커뮤니티 논의에서는 개발자를 위한 몇 가지 고려 사항이 강조됩니다:

  • 컨텍스트 윈도우 관리: 일부 사용자는 LLM의 컨텍스트 윈도우를 너무 많은 메모리로 채우는 것이 모델 성능을 저하시킬 수 있다고 제안합니다.
  • 기능적 동등성: BM25 임베딩을 통한 검색 성능 향상을 위한 가능성에 대한 논의가 있었습니다.
  • Project-level 메모리: 일부 개발자들은 메모리의 필요성이 세션 기반 메모리보다는 다양한 모델과 하네스를 공유할 수 있는 프로젝트 수준의 저장소로 이동하고 있다고 주장합니다.
  • 통합 트렌드: 관리형 에이전트 하네스가 결국 이러한 기능들을 기본적으로 포함하게 되어, 독립형 사이드카 서비스의 필요성을 줄일 수도 있다는 일반적인 견해가 있습니다.

Sources