헤르메스 메모리 3계층: Sophie에게 기억 심기
지난 가이드에서 첫 직원 Sophie를 채용하고 슬랙으로 옮겨 탔습니다. 그런데 막상 며칠 같이 일하다 보면 궁금해집니다. 이 친구는 대체 뭘 기억하고, 뭘 잊어버릴까요? 이걸 모르면 봇이 엉뚱한 맥락을 끌고 와 동문서답을 하기도 합니다.
결론부터 말씀드리면, 헤르메스의 기억은 세 개의 층으로 나뉩니다. 한 층씩 쌓아 올리면 "무엇을 기억하고 무엇을 잊는가"가 또렷해져요. 이 가이드는 그 3계층을 개념부터 실습까지 풀 코스로 다루고, 마지막엔 외부 메모리(Mem0)를 연결해 다른 세션의 기억까지 불러오는 것을 직접 확인합니다.
💡 사전 요구사항: 첫 직원 Sophie 페르소나 만들기를 먼저 보고 오세요. 아래 실습은 슬랙의 Sophie(또는
sophie chat)에서 진행합니다.
먼저, 메모리는 세 층입니다
| 층 | 무엇을 맡나 | 핵심 |
|---|---|---|
| L1 세션·컨텍스트 | 지금 이 대화 | /compress(현재 세션 압축) · 세션 검색(지난 원문 되찾기) |
| L2 빌트인 영구기억 | 세션이 끝나도 남는 것 | MEMORY.md(환경·프로젝트) · USER.md(나에 대한 프로필) |
| L3 외부 프로바이더 | 더 똑똑한 기억(선택) | 자동 추출·지식그래프·다른 세션 recall (Mem0 등) |
핵심 한 줄: 컨텍스트는 지금 대화만, 빌트인은 내가 시킨 것, 프로바이더는 흘린 것까지 자동으로.
1단계. 세션과 컨텍스트 (L1)
한 대화 안에서 모델이 들고 있는 게 컨텍스트, 그 묶음이 세션입니다. 여기엔 도구가 두 개 있는데 역할이 다릅니다.
/compress. 대화가 길어져 느려지거나 답이 잘릴 때, 지금까지 대화를 요약해 토큰을 줄입니다. 한 세션을 더 길게 끌고 가려는 거예요.- 세션 검색. 지난 세션에서 실제로 했던 말, 그 원문을 그대로 되찾습니다(거의 순식간, 토큰도 안 듦). 에이전트가 쓰는
session_search도구이고, 사람은hermes sessions list로 직접 열람할 수 있어요.
💡 압축은 "지금 대화를 짧게", 검색은 "지난 대화를 되찾기". 헷갈리지 마세요.
영구기억과 세션 검색이 무엇이 다른지 한 표로 정리하면 또렷합니다.
| 빌트인 영구기억 | 세션 검색 | |
|---|---|---|
| 용량 | 약 1,300토큰(고정) | 무제한(모든 세션) |
| 속도 | 즉시(시스템 프롬프트 상주) | 빠름(FTS5 검색) |
| 비용 | 매 프롬프트 토큰 비용 | 무료(LLM 호출 없음) |
| 용도 | 늘 필요한 핵심 사실 | 지난 대화 되찾기 |
해보기. Sophie와 길게 대화를 이어 컨텍스트를 쌓은 뒤 /compress로 압축해 보세요. 그다음 /new로 새 세션을 열고 "아까 그거 다시 보여줘"라고 하면 모릅니다(컨텍스트는 세션을 넘지 못함). 이어서 "지난 세션에서 ○○ 얘기한 거 원문 찾아줘"라고 하면 세션 검색이 그때 대화를 되찾아 옵니다.
2단계. 빌트인 영구기억 (L2 · MEMORY.md · USER.md)
세션이 끝나도 남는 기억을 헤르메스는 ~/.hermes/memories/의 두 파일로 듭니다.
MEMORY.md. 환경·프로젝트 메모(작업 규칙·작업일지 등).memory타깃, 약 2,200자.USER.md. 나에 대한 프로필(이름·역할·선호·말투).user타깃, 약 1,375자.
두 파일은 세션 시작 때 다시 주입되어, 한 번 기억시키면 다음 세션에도 압니다(중간에 고쳐도 다음 세션부터 반영). 기록은 add로 더하고 replace로 고치고 remove로 지웁니다.
기억 심기. Sophie에게 이렇게 말해 보세요.
나에 대해 기억해둬. 내 관심 주제는 AI랑 자동화고, 보고는 "요약 3줄 먼저"를 선호해. 그리고 나를 "단테님"이라고 불러줘.
업무 메모도 남겨줘. 자주 받는 문의는 "강의 일정 문의"고, 표준 답변 톤은 정중하고 간결하게.
/new로 새 세션을 연 뒤 "내 관심 주제가 뭐였지?"라고 물으면 새 세션인데도 압니다. 빌트인이 세션 시작 때 주입했기 때문이에요.
hermes memory status # 활성 메모리 상태 확인
📸 [스크린샷]
hermes memory status출력과~/.hermes/memories/USER.md내용. 업로드 위치 예:gs://dante-edu/hermes-inflearn/memory-layers/mem-01-status.png
무엇을 잊는가 (글자 한도)
이 파일들은 글자 수 한도가 있고, 이 한도가 곧 "무엇을 잊는가"를 정합니다. 한도를 넘기는 add는 그냥 실패하고, "지금 2,100/2,200자, 250자 더하면 초과. 기존 걸 지우거나 합쳐라" 는 에러를 돌려줍니다. 그러면 비슷한 항목들을 replace로 더 짧게 합친 뒤(consolidate) 새 걸 넣으면 돼요. 그래서 80%쯤 차면 미리 정리해 두는 게 좋습니다. 같은 내용을 또 넣으면 자동으로 중복 거부됩니다.
⚠️ 메모리도 보안의 대상입니다. 메모리는 시스템 프롬프트에 그대로 주입되기 때문에, 누가 몰래 이상한 명령이나 비밀번호, 심지어 눈에 안 보이는 특수문자를 기억에 심으려 하면 헤르메스가 검사해서 차단합니다(자세히는 보안 편에서).
좋은 기억 vs 나쁜 기억
같은 사실도 짧고 정보 밀도 높게 적어야 한도 안에서 더 많이 기억합니다.
좋은 예 (여러 사실을 한 줄에): macOS 14, Homebrew, Docker, 셸 zsh+oh-my-zsh, 에디터 VS Code(Vim 키)
좋은 예 (구체적·실행 가능): 프로젝트 ~/code/api는 Go 1.22·chi 라우터, 테스트는 make test
나쁜 예 (너무 모호): 나 프로젝트 있어.
나쁜 예 (너무 장황): 2026년 1월 5일에 사용자가 자기 프로젝트를 봐달라고 했는데...
3단계. 외부 메모리 프로바이더 (L3 · 선택)
빌트인 두 파일로도 충분하지만, 더 강력한 기억이 필요하면 외부 프로바이더를 얹습니다. 두 가지 성질만 기억하세요.
- 빌트인을 대체하지 않습니다. 빌트인은 그대로 돌고, 그 위에 지식그래프·자동 추출 같은 능력이 더해집니다.
- 한 번에 하나만 켭니다. 여러 프로바이더 중 하나를 골라 활성화합니다.
💡 언제 동작하나, 헤르메스가 자동으로. 프로바이더는 우리가 부르지 않아도, 대화 루프가 매 턴 직전에 관련 기억을 주입하고(prefetch), 매 응답 직후에 대화를 보내고(sync), 세션이 끝날 때 정리(extract) 합니다. 그래서 "기억해"라고 시키지 않은, 흘린 사실도 쌓이고 다른 세션에서 떠오릅니다. 빌트인과 정확히 반대예요(빌트인은 시킨 것, 프로바이더는 흘린 것까지).
| 프로바이더 | 특징 | 저장 | 비용 |
|---|---|---|---|
| Mem0 | 자동 fact 추출 + 시맨틱 검색 | 클라우드 | 유료(무료 티어) |
| Honcho | 대화를 곱씹어 유저 모델링(dialectic) | 클라우드 | 유료 |
| Hindsight | 지식그래프 + 종합 | 로컬/클라우드 | 무료(로컬)/유료 |
| Holographic | 로컬 SQLite·빠른 검색 | 로컬 | 무료 |
Honcho·Hindsight는 원리가 깊어 이번엔 개념만 봅니다. 실습은 무료·무키 로컬인 Holographic으로 감을 잡고, 클라우드 자동추출의 대표 Mem0로 실제 연결까지 해봅니다.
3-1. Holographic: 키 없이 로컬로 맛보기
hermes memory setup # 목록에서 holographic 선택 (키 불필요)
hermes memory status # 활성 프로바이더 확인
hermes memory setup을 치면 프로바이더 목록이 뜹니다(↑↓로 이동, ENTER로 선택).
Memory provider setup
↑↓ navigate ENTER/SPACE select ESC cancel
(○) holographic — local
(○) mem0 — API key / local
... (총 8종) ...
→ (●) Built-in only — MEMORY.md / USER.md (default)
📸 [스크린샷] 프로바이더 선택 메뉴(8종 + Built-in only). 업로드 위치 예:
gs://dante-edu/hermes-inflearn/memory-setup/setup-01-menu.png
holographic을 고르면 네 가지를 묻는데, 전부 대괄호 안 기본값이라 ENTER만 치면 됩니다.
Configuring holographic:
SQLite database path [~/.hermes/profiles/<프로필>/memory_store.db]:
Auto-extract facts at session end → (●) false
Default trust score for new facts [0.5]:
HRR vector dimensions [1024]:
→ Memory provider: holographic
Start a new session to activate.
📸 [스크린샷] holographic 4단계 + 완료 메시지. 업로드 위치 예:
gs://dante-edu/hermes-inflearn/memory-setup/setup-02-holographic.png
키 하나 없이 로컬에서 프로바이더가 켜집니다. hermes memory status에 holographic ← active와 Built-in: always active가 같이 보이면 성공이에요. "외부 프로바이더가 이렇게 붙는구나"를 먼저 몸으로 느껴 보세요.
📸 [스크린샷]
hermes memory status(holographic ← active). 업로드 위치 예:gs://dante-edu/hermes-inflearn/memory-setup/setup-03-status-holo.png
3-2. Mem0: 클라우드 자동추출 연결
mem0.ai에서 가입해 API 키를 받고, 무료 크레딧 범위 안에서 연결합니다.
hermes memory setup # 목록에서 mem0 선택
# .env 에 키 추가 (절대 커밋 금지)
# MEM0_API_KEY=...
hermes memory status
holographic과 달리, mem0는 고르면 패키지를 자동 설치한 뒤 키를 묻습니다.
Installing dependencies: mem0ai
✓ Installed mem0ai
Configuring mem0:
Mem0 Platform API key (current: ...****, blank to keep): ****
User identifier [hermes-user]:
Agent identifier [hermes]:
→ Memory provider: mem0
API keys saved to .env
Start a new session to activate.
키를 넣을 자리에 mem0.ai에서 받은 키를 붙여넣으세요(이미 있으면 blank to keep으로 유지). user id와 agent id는 기본값 ENTER로 충분합니다.
⚠️ API 키는
.env에만 두고 절대 깃에 커밋하지 마세요. 프로바이더 데이터는 프로필별로 격리되어 Sophie 전용으로 쌓입니다.
📸 [스크린샷] mem0ai 설치 + API 키 입력 화면. 업로드 위치 예:
gs://dante-edu/hermes-inflearn/memory-setup/setup-05-mem0-key.png📸 [스크린샷] 완료(API keys saved to .env) + hermes memory status (mem0 ← active). 업로드 위치 예:gs://dante-edu/hermes-inflearn/memory-setup/setup-06-status-mem0.png
3-3. 직접 확인: 다른 세션의 기억을 불러오나
이게 프로바이더의 백미입니다. 일부러 "기억해"라고 말하지 않고 지나가듯 흘려 보세요.
오늘 좀 정신없네. 다음 주 수요일 오후 3시에 치과 예약이 있어서 그 시간은 비워둬야 해. 일단 오늘 할 일부터 정리해줄래?
Sophie는 할 일 정리만 답합니다(치과 예약을 기억시킨 게 아니니까요). 이제 /new로 세션을 끊고, 완전히 새 세션에서 물어보세요.
나 다음 주에 병원 가는 일정 있었나?
빌트인엔 넣은 적이 없는데도, Mem0가 자동으로 추출해 둔 덕에 "네, 수요일 오후 3시 치과 예약이 있으세요" 라고 답하면 성공입니다. hermes memory off로 프로바이더를 껐다가 같은 질문을 해보면 "그런 기록은 없어요"로 바뀌는데, 다시 켜면 또 기억합니다. 이 자동 기억은 프로바이더가 하는 일이라는 증거예요.
3-4. 저장된 메모리 확인: 그냥 물어보세요
저장된 건 빌트인 ~/.hermes/profiles/<프로필>/memories/USER.md와 프로바이더에 들어가지만, 내용 확인은 헤르메스에게 자연어로 묻는 게 제일 쉽습니다. 파일이나 DB를 직접 열 필요 없어요.
지금까지 내가 너한테 기억해 달라고 한 걸 전부 정리해서 알려줘.
그러면 이렇게 정리해 줍니다(실제 응답).
님께서 기억해 달라고 한 내용은 현재 3가지입니다.
1. 관심 주제 — AI, 자동화
2. 일정 선호 — 회의는 오후 시간대
3. 강의 제작 워크플로 — Python 스크립트, Obsidian 정리, ffmpeg 편집
💡 대화로 "기억해둬" 한 건 대부분 USER.md(나에 대한 정보) 로 갑니다.
MEMORY.md는 봇이 실제 작업 중 발견한 환경·규칙을 적는 자리라, 대화만 할 땐 비어 있어도 정상이에요.
빠른 참조 한 장
# L1 — 세션·컨텍스트
/compress # 현재 세션 요약·압축 (대화창에서)
hermes sessions list # 지난 세션 목록 (세션 검색)
# L2 — 빌트인 영구기억 (대화로 기억 심기)
# "나를 단테님이라 불러줘 / 관심 주제는 AI·자동화" → USER.md
# "자주 받는 문의는 강의 일정 문의" → MEMORY.md
hermes memory status # 메모리 상태
# L3 — 외부 프로바이더
hermes memory setup # holographic → 그다음 mem0
hermes memory status # 활성 확인
hermes memory off # 외부 프로바이더 끄기 (빌트인만)
자주 묻는 질문
Q. /compress랑 세션 검색은 뭐가 달라요?
/compress는 지금 세션을 짧게 요약하는 거고, 세션 검색은 지난 세션의 원문을 되찾는 겁니다. 압축은 현재 대화 관리, 검색은 과거 대화 조회예요.
Q. 기억시켰는데 말투가 안 바뀌어요.
빌트인 메모리는 다음 세션부터 반영됩니다. /new로 새 세션을 열고 확인해 보세요.
Q. 메모리가 꽉 차면요?
add가 한도 초과 에러를 돌려줍니다. 비슷한 항목을 replace로 합쳐(consolidate) 자리를 만든 뒤 다시 넣으면 됩니다. 80%쯤 차면 미리 정리해 두세요.
Q. Mem0는 무료인가요?
클라우드 기반 유료 서비스지만 무료 티어/크레딧이 있어, 입문 연결과 실습은 그 범위 안에서 가능합니다. 키 없이 무료로만 쓰려면 로컬 프로바이더 Holographic을 쓰세요.
Q. 빌트인이랑 프로바이더, 둘 다 켜도 되나요?
네. 프로바이더는 빌트인을 대체하지 않고 위에 얹습니다. 다만 외부 프로바이더는 한 번에 하나만 활성화됩니다.
마무리, Sophie가 기억을 갖췄습니다
여기까지 오셨으면 Sophie는 세 층의 기억을 모두 쓰는 비서가 됐습니다. 지금 대화(컨텍스트), 지난 대화(세션 검색), 내가 시킨 핵심(빌트인), 흘린 것까지 자동으로(프로바이더). 이 기억은 다음 단계에서 일관된 자동 답신과 중복 정보 거름의 토대가 됩니다. 다음 시간엔 이 Sophie에게 어떤 모델(두뇌) 을 줄지 골라 봅니다.
진행하시다가 막히는 부분이 생기면 언제든 인프런 Q&A에 질문 남겨주세요.
