OpenClaw 구축·운영 (14/26) — 메모리 아키텍처 설계기
1회성 대화를 넘어 에이전트에게 영구적 기억을 부여하는 법
핵심 요약
- sessions(휘발) → memory(일일, 30일 TTL) → bank(영구) 3계층 구조로 기억을 분리했다
- W/B/O/S 4종 Retain 태그로 에이전트가 기억할 정보를 스스로 선별하도록 강제했다
- 하이브리드 검색(벡터 0.7 + 텍스트 0.3) + recall-match.py 키워드 프리로드로 기억 인출 정확도를 극대화했다
배경
AI 에이전트를 실무에 투입할 때 가장 큰 장벽은 망각이다. 어제 긴 시간 논의한 설정이 오늘 새 세션에서 초기화된다. "저번에 말씀드린 프로젝트 건"이라 해도 에이전트는 "어떤 프로젝트를 말씀하시는 건가요?"라고 되물을 수밖에 없다. OpenClaw의 기본 memorySearch는 단기 기억에 효과적이지만, 6개월 전 아키텍처 원칙 같은 초장기 기억을 체계적으로 관리하기엔 한계가 있었다.
본문
3계층 메모리 구조
workspace-mir/
├── sessions/ # [1계층] 임시 세션 메모리 (세션 종료 시 소멸)
├── memory/ # [2계층] 일일 메모리 (30일 TTL)
└── bank/ # [3계층] 장기 메모리 (영구 보존)
├── world.md # 객관적 사실
├── experience.md # 완료된 활동
├── opinions.md # 의견 + 신뢰도 Decay
├── entities/ # 프로젝트/사람/조직 상태
└── patterns/ # 행동 및 인지 패턴
- sessions/: 실시간 컨텍스트. 가장 휘발성이 강하다
- memory/: 세션 종료 시 memoryFlush가 생성하는 일일 요약. 30일 후 자동 삭제
- bank/: Reflect 파이프라인이 memory/에서 중요 정보만 추출해 영구 저장
Retain 태그 시스템
모든 대화를 저장하면 노이즈만 증가한다. 4종 태그로 기억할 가치가 있는 정보만 선별한다.
| 태그 | 용도 | 예시 |
|---|---|---|
| W | 객관적 사실 | W: Hardware 환경 Mac Mini M4 32GB 확인 |
| B | 완료된 활동 | B: heartbeat 라운드로빈 구조 설계 완료 |
| O(c=0.XX) | 의견 + 신뢰도 | O(c=0.85): sessionKey 누락 시 세션 누적 심각 |
| S:엔티티명 | 상태 변경 | S:openclaw-rebuild: Phase C 진입 |
opinions.md의 신뢰도는 매일 decay된다. 3개월이 지나면 0.75가 0.50 근처로 내려간다.
memoryFlush — 세션 자동 증류
{
"compaction": {
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 6000,
"prompt": "세션을 memory/YYYY-MM-DD.md에 증류하라..."
}
}
}
6000토큰 초과 시 자동 트리거. identifierPolicy: "strict"로 파일 경로, 변수명 등 식별자를 정확히 보존한다.
memorySearch — 하이브리드 검색
{
"memorySearch": {
"query": {
"hybrid": {
"vectorWeight": 0.7,
"textWeight": 0.3,
"mmr": { "enabled": true, "lambda": 0.7 },
"temporalDecay": { "halfLifeDays": 30 }
}
}
}
}
- 벡터 + 텍스트 결합: 의미적 유사도와 정확한 키워드 매칭을 동시에 수행
- MMR: 중복 검색 결과를 솎아 컨텍스트 낭비 방지
- temporalDecay: 오래된 정보에 패널티 부여
- 로컬 임베딩: nomic-embed-text 모델로 API 비용 없이 무제한 처리
recall-match.py — 키워드 기반 프리로드
memorySearch에 더해, 특정 키워드 탐지 시 관련 bank/ 파일을 세션에 미리 로드한다.
{
"삼성전자": ["bank/entities/career-samsung/state.md"],
"HBM": ["bank/entities/career-samsung/state.md", "bank/world.md"],
"reflect": ["bank/research/self-architecture.md"]
}
"HBM 관련해서 말이야"라고 하면 topics.json에서 매칭되는 파일을 자동으로 불러온다.
시행착오 / 주의사항
- 모든 것을 저장하면 검색 정확도가 떨어진다. Retain 태그로 선별하는 제약 조건이 필수다
- opinions.md에 Decay가 없으면 1년 전의 한시적 판단이 지금도 동일한 가중치로 작용한다
- 임베딩은 데이터 변경 시마다 빈번하게 실행되므로, 클라우드 API 대신 로컬 처리가 비용 면에서 압도적이다
마무리
3계층 메모리 구조와 Reflect 파이프라인은 단순한 대화 기록이 아닌, 시간이 지날수록 축적되고 정제되는 진정한 지식베이스를 제공한다. 기억할 정보를 선별하고, 지식에 Decay를 부여하고, 임베딩은 로컬로 처리하라 — 이 세 가지가 핵심이다.
댓글
댓글 쓰기