Memory OS of AI Agent: AI 에이전트 기억을 운영체제처럼 관리하는 3단 메모리 프레임워크
2026-07-14
1. 개요
Memory OS of AI Agent는 AI 에이전트의 기억을 **단기 기억(STM, Short-Term Memory) · 중기 기억(MTM, Mid-Term Memory) · 장기 개인 기억(LPM, Long-Term Personal Memory)**의 3단 계층으로 나누고, 저장(Storage)·갱신(Updating)·검색(Retrieval)·생성(Generation)을 통합적으로 관리하는 메모리 운영 프레임워크입니다.
이 논문은 EMNLP 2025 Oral로 소개되었으며, 운영체제(OS)의 메모리 관리 개념에서 영감을 받아 에이전트 메모리를 구조화합니다. 핵심은 기존 MemGPT의 2단 구조를 3단으로 확장하고, STM→MTM은 dialogue-chain 기반 FIFO, MTM→LPM은 segmented page + heat 기반 승격으로 설계했다는 점입니다. 이를 통해 긴 대화에서의 맥락 유지와 사용자 개인화 기억을 동시에 강화하는 것이 목표입니다.
팀원분께서 진행하는 스터디 자료를 바탕으로 재구성
2. 차별성
기존 방식의 한계와 MemoryOS의 접근
| 구분 | 기존 방식 | MemoryOS |
|---|---|---|
| 메모리 계층 | 보통 단일 버퍼 또는 2단 구조 | STM / MTM / LPM의 3단 구조 |
| 시간 축 처리 | 최근 대화 위주, 장기 정보와 혼재 | 시간 축에 따라 기억을 분리 관리 |
| 중간 요약 계층 | 없음 또는 약함 | 주제 세그먼트(session/segment) 기반 MTM |
| 장기 승격 기준 | 단순 요약 또는 수동 저장 | Heat score 기반 자동 승격 |
| 검색 방식 | 전체 히스토리 검색 또는 단일 벡터 검색 | 계층별 검색 + MTM 2단 검색(segment→page) |
| 개인화 | 프로필 프롬프트 주입에 의존 | LPM에 사용자/에이전트 지식을 구조적으로 저장 |
| 긴 대화 대응 | 컨텍스트 길이 한계에 취약 | 외부 메모리 전제 설계 |
핵심 역량
- 시간 기반 계층화(Time-aware hierarchy): 최근/반복/개인 지식을 분리 저장
- Dialogue-chain FIFO 업데이트: STM에서 밀려난 대화를 page 단위로 MTM에 반영
- Segmented page 구조: 대화를 page와 segment로 조직해 주제 단위 관리
- Heat 기반 승격(heat-based promotion): 자주 쓰이고 최근성이 높은 내용을 LPM으로 승격
- 적응적 검색(adaptive retrieval): STM/MTM/LPM을 병렬 검색 후 통합
- 개인화 응답 생성(personalized generation): 검색된 기억과 사용자 프로필을 함께 활용
기여와 한계
기여
- MemGPT의 2단 메모리를 3단 시간 계층 구조로 확장
- Heat 승격 메커니즘을 도입해 장기 기억 후보를 자동 선별
- LoCoMo에서 긴 대화 기억과 개인화 유지 측면에서 강한 성능 확인
한계
- 단계 전이, 유사도 임계값, heat 임계값 등 휴리스틱이 많음
- 대화형 벤치마크 중심 검증으로, 비대화형 task 일반화는 미검증
- JSON 파일 저장, in-memory FAISS 재구성 등 운영 환경 확장성 이슈 존재
3. 시스템 구성 요소
주요 컴포넌트
| 구성 요소 | 역할 | 상세 내용 |
|---|---|---|
| STM (Short-Term Memory) | 최근 대화 보관 | deque(maxlen) 기반 FIFO 큐, QA pair 저장 |
| MTM (Mid-Term Memory) | 반복 주제와 대화 흐름 보관 | segment(session)와 page 구조, embedding + FAISS 검색 |
| LPM (Long-Term Personal Memory) | 사용자/에이전트 장기 지식 저장 | user profile, user knowledge, assistant knowledge 저장 |
| Updater | 계층 간 전이 담당 | STM→MTM 이관, MTM→LPM 승격 트리거 |
| Retriever | 계층별 검색 통합 | STM/MTM/LPM 병렬 검색 후 top-k 취합 |
| Generator | 응답 생성 | 검색 결과와 프로필을 프롬프트에 통합해 LLM 응답 생성 |
작동 원리
[User Query] ↓ [STM에 최근 대화 저장] ↓ [STM 용량 초과?] ├─ No → 유지 └─ Yes → oldest QA pop ↓ [page 변환 + dialogue chain 연결] ↓ [multi-summary 생성] ↓ [기존 MTM segment와 유사도 비교] ├─ 유사 segment 존재 → 해당 segment에 병합 └─ 없음 → 새 segment 생성 ↓ [Heat 갱신] ↓ [Heat ≥ τ ?] ├─ No → MTM 유지 └─ Yes → LLM 분석 ↓ [user profile 갱신] [user knowledge 저장] [assistant knowledge 저장] [응답 시] ↓ [STM 전체 + MTM 검색 + LPM 검색] ↓ [검색 결과 통합] ↓ [LLM이 개인화된 응답 생성] ↓ [응답도 다시 STM에 저장]
핵심 컴포넌트 상세
3-1. STM: 최근 대화 버퍼
STM은 가장 단순한 계층입니다. 최근 QA pair를 FIFO 큐에 저장하며, 임베딩이나 LLM 분석 없이 빠르게 접근 가능한 현재 문맥 저장소 역할을 합니다.
| 항목 | 내용 |
|---|---|
| 자료구조 | deque(maxlen=7) |
| 저장 단위 | QA Pair |
| 특징 | 최근 대화 유지, 가장 오래된 항목부터 MTM으로 이동 |
| 저장 파일 | short_term.json |
저장 형식은 다음과 같습니다.
| 필드 | 설명 |
|---|---|
user_input | 사용자 입력 |
agent_response | 에이전트 응답 |
timestamp | 대화 시각 |
3-2. MTM: 주제 세그먼트 메모리
MTM은 MemoryOS의 핵심입니다. STM에서 밀려난 대화를 page로 변환하고, 유사한 page들을 segment(session) 단위로 묶어 관리합니다. 여기서 segment는 논문 표현, session은 코드 표현으로 사실상 같은 개념으로 볼 수 있습니다.
MTM page 구조
| 필드 | 설명 |
|---|---|
page_id | 페이지 식별자 |
user_input | 사용자 발화 |
agent_response | 에이전트 발화 |
timestamp | 시각 정보 |
page_embedding | page 임베딩 벡터 |
page_keywords | 키워드 |
pre_page / next_page | 대화 연속성 연결 |
meta_info | 대화 체인 개요 |
preloaded / analyzed | 상태 플래그 |
MTM session(segment) 구조
| 필드 | 설명 |
|---|---|
summary | 세그먼트 요약 |
summary_keywords | 세그먼트 키워드 |
summary_embedding | 세그먼트 임베딩 |
details | page 리스트 |
L_interaction | 상호작용 길이 |
N_visit | 검색 방문 횟수 |
R_recency | 시간 감쇠 기반 최근성 |
H_segment | heat score |
last_visit_time | 마지막 방문 시각 |
access_count_lfu | LFU 퇴거 카운터 |
Heat score
MTM에서 장기 기억 승격 여부는 heat로 결정됩니다.
| 요소 | 의미 |
|---|---|
N_visit | 얼마나 자주 검색되었는가 |
L_interaction | 얼마나 많은 대화가 축적되었는가 |
R_recency | 최근에도 쓰였는가 |
기본 식은 다음 의미를 가집니다.
H_segment = α·N + β·L + γ·R- 실험에서는
α=β=γ=1 - 승격 임계값
τ=5
즉, 자주 참조되고, 길게 축적되며, 최근에도 사용된 주제가 hot segment가 됩니다.
3-3. LPM: 장기 개인 기억
LPM은 사용자와 에이전트의 장기적 특성을 저장하는 계층입니다. 단순한 과거 대화 저장이 아니라, MTM에서 충분히 중요하다고 판단된 내용만 추출해 구조화합니다.
| 구성 | 역할 | 검색 여부 |
|---|---|---|
user_profiles | 사용자 서술형 프로필 | 보통 전체 주입 |
user knowledge | 사용자 관련 사실 조각 | 검색 대상 |
assistant knowledge | 에이전트 특성/지식 | 검색 대상 |
LPM의 핵심은 hot segment의 unanalyzed page들만 대상으로 LLM 분석을 수행한다는 점입니다. 이 과정에서 사용자 프로필과 지식 조각을 추출하고, 이후 검색 가능한 장기 기억으로 저장합니다.
4. 검증된 성능
LoCoMo 벤치마크 성능
논문은 긴 기간에 걸친 대화 기억을 평가하는 LoCoMo benchmark에서 MemoryOS의 강점을 보여줍니다. 특히 GPT-4o-mini 기반 실험에서 베이스라인 대비 다음과 같은 향상을 보고합니다.
| 벤치마크 | 모델 | 개선 지표 |
|---|---|---|
| LoCoMo | GPT-4o-mini | 평균 F1 49.11% 향상 |
| LoCoMo | GPT-4o-mini | 평균 BLEU-1 46.18% 향상 |
이 결과는 MemoryOS가 긴 대화에서 단순 사실 회상뿐 아니라 **맥락적 일관성(contextual coherence)**과 개인화된 기억 유지에 유리함을 시사합니다.
GVD 데이터셋 성능
GVD는 15명의 가상 사용자와 10일간 상호작용하는 멀티턴 대화 데이터셋입니다. LoCoMo보다 상대적으로 쉬운 설정으로 설명되며, MemoryOS는 여기서도 강한 결과를 보였습니다.
| 데이터셋 | 평가 항목 | 설명 |
|---|---|---|
| GVD | Memory Retrieval Accuracy | 0/1 이진 평가 |
| GVD | Response Correctness | 0 / 0.5 / 1 |
| GVD | Contextual Coherence | 0 / 0.5 / 1 |
| 결과 요약 | 내용 |
|---|---|
| 전반적 경향 | 모든 방법이 LoCoMo보다 높은 baseline accuracy 달성 |
| 비교 결과 | SOTA 베이스라인 A-Mem 대비 정확도 3.2% 상회 |
LoCoMo 데이터셋 구조
LoCoMo는 “며칠 전/몇 달 전에 나눈 이야기를 기억하는가”를 묻는 구조라 외부 메모리 시스템이 사실상 필수입니다.
| 항목 | 내용 |
|---|---|
| 샘플 수 | 10개 대화 |
| 세션 수 | 대화당 19~32개 |
| 특징 | 서로 다른 날짜의 장기 대화 |
| 핵심 평가 | 과거 사실, 시간, 다중 추론, 함정 질문 대응 |
LoCoMo QA category
| category | 유형 | 개수(전체) | 채점 방식 | 예시 |
|---|---|---|---|---|
| 1 | Multi-hop | 282 | 하위답 분해 후 부분 F1 | “What did Caroline research?” |
| 2 | Temporal | 321 | 전체 문구 F1 | “When did Caroline go to the LGBTQ support group?” |
| 3 | Open-domain | 96 | 첫 답 기준 F1 | “What fields would Caroline pursue?” |
| 4 | Single-hop | 841 | 전체 문구 F1 | “What did the charity race raise awareness for?” |
| 5 | Adversarial | 446 | 답이 없어야 정답 | 근거 없는 질문에 “not mentioned” |
검색 파라미터 k 실험
논문은 retrieval top-k를 {5, 10, 20, 30, 40}으로 실험했고, k가 커질수록 성능이 좋아지지만 일정 수준 이후 이득이 줄어든다고 보고합니다.
| k 값 | 경향 |
|---|---|
| 5 → 10 | 성능 개선 폭 큼 |
| 10 이상 | 개선은 있으나 점차 감소 |
| 최종 선택 | k=10 |
선정 이유는 계산 오버헤드와 성능 사이의 균형입니다.
5. 사용 방법
설치 방법
공개 리포지토리는 BAI-LAB/MemoryOS이며, Python 기반으로 사용할 수 있습니다. 실험 환경 단서로는 faiss-cpu, numpy, openai, streamlit 등이 사용됩니다.
pip install faiss-cpu numpy openai pandas python-dotenv requests streamlit
또는 Docker 기반 toy 환경으로 실행할 수 있습니다.
docker compose up --build
기본 사용 흐름
MemoryOS는 개념적으로 다음 순서로 동작합니다.
memoryos = MemoryOS(...) response = memoryos.get_response( query="지난달에 내가 말한 취미 기억해?", relationship_with_user="friend" ) print(response)
내부 처리 흐름 예시
1. 사용자 질문 입력 2. Retriever가 STM/MTM/LPM 병렬 검색 3. 최근 대화 + historical memory + user profile + knowledge를 prompt에 통합 4. LLM이 응답 생성 5. 해당 QA를 다시 STM에 저장 6. STM이 가득 차면 오래된 항목을 MTM으로 이관 7. MTM heat가 임계값을 넘으면 LPM 갱신
구현상 확인할 파일
| 논문 개념 | 구현 위치 | 설명 |
|---|---|---|
| 전체 오케스트레이션 | memoryos.py | 전체 흐름 제어 |
| STM | short_term.py | 최근 대화 FIFO 저장 |
| MTM | mid_term.py | segment/page 구조 관리 |
| LPM | long_term.py | user/assistant 장기 기억 저장 |
| Updating | updater.py | STM→MTM, MTM→LPM 전이 |
| Retrieval | retriever.py | 계층별 검색 통합 |
| Generation | prompts.py, memoryos.py | 프롬프트 구성과 응답 생성 |
6. 적용 시나리오
적합한 사용 사례
6-1. 장기 대화형 개인 비서
- 사용자의 취향, 일정, 반복 관심사를 장기적으로 유지해야 하는 경우
- 예: AI 비서, 코칭 에이전트, 멘탈 헬스 대화 시스템
6-2. 개인화 고객 응대
- 고객별 선호, 과거 문의, 반복 이슈를 기억해야 하는 경우
- 예: 프리미엄 고객 상담, 금융/보험 컨시어지
6-3. 멀티세션 에이전트
- 하루가 아니라 수주~수개월에 걸친 세션을 이어가야 하는 경우
- 예: 교육 튜터, 건강 관리 에이전트, 프로젝트 협업 에이전트
제한사항
6-4. 운영 환경 확장성
현재 구현은 short_term.json, mid_term.json, long_term_user.json 등 JSON 파일 중심 저장입니다. 사용자가 많아지면 I/O 병목과 동시성 문제가 발생할 수 있습니다.
| 항목 | 현재 방식 | 운영 환경 대안 |
|---|---|---|
| STM 저장 | JSON 파일 | Redis |
| MTM 저장 | JSON + in-memory FAISS | RDB + Vector DB |
| LPM 저장 | JSON | Document DB / KV Store |
| 동시성 | 파일 덮어쓰기 위험 | 트랜잭션/락/분산 저장소 |
6-5. 검색 품질 고도화 필요
현재는 embedding 기반 검색과 heat 승격이 중심입니다. 실서비스에서는 다음 보완이 필요합니다.
- keyword + vector hybrid search
- reranker 추가
- memory importance score 별도 도입
6-6. 비동기화 필요
현재 구조는 저장, 요약, 임베딩, 병합, 승격 판단이 요청 흐름에 걸릴 수 있어 응답 지연을 유발할 수 있습니다. 운영 환경에서는 다음 구조가 적합합니다.
[API Server] └─ 원본 대화 즉시 저장 ↓ [Queue] ↓ [Background Worker] ├─ MTM 요약 ├─ 임베딩 생성 ├─ Heat 갱신 └─ LPM 승격
6-7. 단일 사용자 가정
제공된 MCP/PyPI와 toy 구조는 전역 USER_ID 중심 설계에 가깝습니다. 실제 비즈니스 환경에서는 멀티테넌시, 권한 분리, 사용자별 메모리 격리 설계가 필요합니다.
7. 결론
MemoryOS는 AI 에이전트의 기억을 단순한 대화 로그가 아니라 시간 축에 따라 계층화된 운영체제형 메모리 시스템으로 다룹니다. 특히 STM→MTM FIFO 전이, segment-page 구조, heat 기반 LPM 승격은 긴 대화에서 맥락 일관성과 개인화 기억을 동시에 확보하려는 시도로 볼 수 있습니다.
실험적으로는 LoCoMo에서 강한 성능을 보였고, “기억의 시간 구조를 어떻게 나눌 것인가”라는 질문에 구체적인 시스템 설계로 답한 점이 인상적입니다. 다만 휴리스틱 의존성, 운영 확장성, 비대화형 task 검증 부족은 향후 보완이 필요한 지점입니다.