AI의 기억 시스템
새로 이직한 회사에서 다양한 개발을 진행하고 있다.
그 중 ai 메모리 시스템을 개발을 내가 중점적으로 맡아서 진행중인데, 여러모로 쉽지 않다.
‘쉽지 않다’의 의미가 다양해서 더 문제인 것 같다.
개발적으로도, 개인적인 문제들도, 업무적으로도 모든 게 다 뒤틀린 느낌이랄까.
가끔 인생이 너무 행복하다고 느끼는 순간들이 있었다. 그 이후로는 어김없이 최악의 시기들이 찾아왔다.
그저 고점과 저점이 높아져가는거라고 생각해야겠다. 결국 내 태도, 생각에 달린 문제들이고, 변곡점을 만드는 주체도 나다.
정신줄 잘 잡고 나아가야지, 나아져야지.
어쨌든 각설하고, 개발 방식과 필요성에 대해 다양한 논의가 이루어졌는데
여러 요소들을 종합해본 결과 우리 메모리 구조는 최소 스펙으로만 설계 후 개발하기로 하였다.
개발하다보니 여러 문제들을 마주치게 되었는데, 다른 오픈소스나 ai mcp들은 어떤식으로 문제를 풀어냈는지 궁금해서 찾아보게 되었다.
claude
우리들의 친한 친구 클로드다.
글을 쓰는 이 시점(26.03.02) 클로드는 다른 AI 툴들과 메모리를 마이그레이션하는 기능까지 출시되었다. 링크
클로드의 기억 관리 시스템은 굉장히 직관적인 편이다.
클로드가 알아서 관리하는 자동 메모리 시스템, 개발자가 직접 편집하는 CLAUDE.md 파일 방식이 있는데, 결국 두 방식 모두 자연어 형식으로 파일에 메모하는 느낌이다.
기록의 주체에 따라서 자동 방식, 수동(파일) 방식 이렇게 보면 될 것 같다.
| 메모리 유형 | 위치 | 목적 | 사용 사례 예시 | 공유 대상 |
|---|---|---|---|---|
| 조직 전체 지침 | • macOS: /Library/Application Support/ClaudeCode/CLAUDE.md• Linux: /etc/claude-code/CLAUDE.md• Windows: C:\Program Files\ClaudeCode\CLAUDE.md | IT/DevOps에서 관리하는 조직 전체 지침 | 회사 코딩 표준, 보안 정책, 규정 준수 요구사항 | 조직의 모든 사용자 |
| 프로젝트 메모리 | ./CLAUDE.md 또는 ./.claude/CLAUDE.md | 프로젝트를 위한 팀 공유 지침 | 프로젝트 아키텍처, 코딩 표준, 일반적인 워크플로우 | 소스 제어를 통한 팀 멤버 |
| 프로젝트 규칙 | ./.claude/rules/*.md | 모듈식, 주제별 프로젝트 지침 | 언어별 가이드라인, 테스트 규칙, API 표준 | 소스 제어를 통한 팀 멤버 |
| 사용자 메모리 | ~/.claude/CLAUDE.md | 모든 프로젝트에 대한 개인 기본 설정 | 코드 스타일 기본 설정, 개인 도구 단축키 | 본인만 (모든 프로젝트) |
| 프로젝트 메모리 (로컬) | ./CLAUDE.local.md | 개인 프로젝트별 기본 설정 | 샌드박스 URL, 선호하는 테스트 데이터 | 본인만 (현재 프로젝트) |
| 자동 메모리 | ~/.claude/projects/<project>/memory/ | Claude의 자동 메모와 학습 내용 | 프로젝트 패턴, 디버깅 인사이트, 아키텍처 메모 | 본인만 (프로젝트별) |
클로드에서는 이런식으로 메모리를 분류, 관리한다고 한다. 결국 다 마크다운 기반 파일이다.
한 가지 특이한건 CLAUDE.md 파일은 시작 시 전체가 로드되고, 하위 디렉토리의 CLAUDE.md 파일은 Claude가 해당 디렉토리의 파일을 읽을 때 필요에 따라 로드된다.
자동 메모리는 MEMORY.md의 처음 200줄만 로드되고, 더 구체적이고 지엽적으로 기술된 지침이 광범위한 지침보다 우선한다고 한다.
두루뭉술한 지침과 그걸 구체화한 구체적인 지침이 있다면, 보다 이해하기 쉬운 구체적인 지침을 기준으로 프롬프팅을 적용한다는 뜻 같다.
클로드는 메모리를 재귀적으로 읽는것도 흥미로웠다.
기억을 폴더별로 잘 구별해 놓으면 클로드가 최상위 폴더의 CLAUDE.md를 먼저 읽고, 그 이후에 여러 디렉토리별로 지침들을 읽는 방식이라고 한다.
supermemory
슈퍼 메모리는 자세한 구현이 공개가 되어있지 않아서 클로드한테 조사를 시켜봤다.
LongMemEval, LoCoMo, ConvoMem — AI 메모리 분야의 3대 벤치마크에서 모두 1위를 기록했다고 한다.
Supermemory의 핵심은 지식 그래프(Knowledge Graph)라고 한다.
문서를 그냥 저장하는 게 아니라, 내용을 이해하고 개념들 사이의 관계를 연결하는 방식으로, 인간의 뇌가 기억을 저장하는 방식에서 영감을 받았다고 한다.
특이했던 게 망각, 기억의 왜곡, 중간 공백 기억의 추론 등을 구현한 점이다.
어차피 사람도 여러 사실들로 다른 사실을 유추하고, 때론 그게 틀릴 수도 있는데 ai도 그 과정이 자연스럽게 일어날 수 있다고 본 것이다.
기억의 구성은 아래와 같이 이루어진다고 한다.
- Extracting — PDF, 이미지, 영상, 웹페이지 등 원본에서 텍스트를 추출한다
- Chunking — 의미 단위로 잘게 쪼갠다
- Embedding — 각 조각을 벡터로 변환해 의미적 유사성을 계산할 수 있게 한다
- Indexing — 다른 메모리들과의 관계를 파악해 그래프로 연결한다
만약 50페이지 PDF를 입력한다면, 수백 개의 연결된 메모리 단위로 변환된다.
각 단위는 단순한 텍스트 조각이 아니라, 전체 지식 베이스 안에서 맥락별로 이어져 있다고 한다. 이중 링크드 리스트 정도로 이해해보자.
Supermemory의 차별점 중 하나는 이중 타임스탬프 방식이다.
문서가 저장된 날짜와, 그 문서가 묘사하는 사건이 실제로 발생한 날짜를 따로 관리한다.
“3년 전 대화”와 “오늘 저장한 3년 전 대화”를 구분할 수 있다는 뜻이다.
이 덕분에 시간적 추론과 정보 충돌 처리에서 강점을 보인다고 하는데, 실제 사건이 발생한 시간(timestamp_evet)과 기록한 시간(created_at)을 나누었다고 보면 될 것 같다.
검색은 벡터 스토어와 그래프 DB를 동시에 활용하는 하이브리드 방식이다. 벡터 검색의 의미적 정확성과 그래프의 관계 이해를 결합해,
단순 키워드 매칭으로는 찾을 수 없는 연관 정보도 불러올 수 있다. 응답 속도는 300ms 이하를 목표로 한다.
Supermemory의 컨셉은 모든 것을 영원히 기억하지 않는 것이라고 한다.
어차피 사람도 조금 지나면 망각하고, 왜곡되고 뭐 그러지 않나.
그래도 이왕 기계 인프라를 쓰는거, 완전히 사람의 사고방식과 똑같을 필요는 없지 않나? 싶긴 하다.