A-MEM Paper review
A-Mem: Agentic Memory for LLM Agents
https://arxiv.org/abs/2502.12110
A-MEM은 Rutgers University 등에서 만든 LLM 에이전트용 메모리 시스템이다.
2025년 2월 17일에 나왔고, 2025년 10월 8일에 v11까지 갔다. 저자 6명에 28쪽이다.
앞에서 본 Zep과 뒤에서 볼 Mem0는 사람이 구조를 정한다. Zep은 엔티티-관계-커뮤니티 3계층을 사람이 설계했고, Mem0는 네 가지 연산을 사람이 정했다.
A-MEM은 구조를 에이전트가 스스로 만들게 한다.
좀 더 자세히 알아보자.
1. Introduction
introduction 부분을 보면 문제 제기가 Zep이나 Mem0랑 좀 다르다.
지금 메모리 시스템들은 저장과 검색은 되는데 메모리를 정교하게 조직하지는 못한다고 한다. 그래프 DB를 쓴 최근 시도들도 마찬가지고, 연산과 구조가 고정돼 있어서 태스크가 바뀌면 적응을 못 한다고 한다.
Figure 1이 이 차이를 보여준다. 기존 메모리 시스템은 워크플로에 메모리 접근 패턴을 미리 정해둬야 한다. 그래서 새 환경에서 일반화가 안 되고 장기 상호작용에서 효과가 떨어진다고 한다.

(a)는 에이전트가 메모리를 단순히 읽고 쓰기만 하고, (b)는 메모리 쪽에도 에이전트가 붙어 있다.
A-MEM은 메모리 연산을 동적으로 해서 에이전트를 더 유연하게 만든다고 한다.
2. Methodology
설계를 제텔카스텐에서 가져왔다. 원자적 노트 작성과 유연한 조직화, 이 두 원칙이다. 노트끼리 동적 색인과 링크로 이어서 지식 네트워크를 만든다.

세 부분으로 돌아간다.
2.1 Note Construction
메모리 노트 하나는 일곱 항목으로 되어 있다.
m_i = { c_i, t_i, K_i, G_i, X_i, e_i, L_i }
c_i: 원본 상호작용 내용t_i: 타임스탬프K_i: LLM이 뽑은 키워드G_i: LLM이 만든 태그X_i: LLM이 쓴 맥락 서술e_i: 임베딩L_i: 연결된 메모리 집합
c_i가 남아 있다. 원본 내용을 버리지 않는다. Mem0처럼 사실만 뽑아두는 방식이 아니다.
임베딩은 텍스트 항목을 전부 이어 붙여서 만든다.
e_i = f_enc[ concat(c_i, K_i, G_i, X_i) ]
원문 + 키워드 + 태그 + 맥락 서술을 벡터 하나에 넣는 것이다.
앞에서 본 LongMemEval의 CP 2(키 확장)랑 같은 방법이다. 값에서 사실을 뽑아 키를 늘려서 검색 경로를 여러 개 만드는 것.
제텔카스텐의 원자성 원칙에 따라 노트 하나에 지식 단위 하나를 담는다.
2.2 Link Generation
새 노트가 들어오면 관련 있는 과거 메모리를 먼저 꺼내고, 연결을 맺을지는 LLM이 판단한다. 규칙으로 정하는 게 아니다.
논문은 이걸 box라고 부른다. 맥락 서술이 비슷한 메모리들이 서로 연결돼서 상자 하나를 이룬다.
제텔카스텐이랑 다른 점은 메모리 하나가 여러 상자에 동시에 들어갈 수 있다는 거라고 한다.
2.3 Memory Evolution
이 논문에서 제일 다른 부분이다. 링크를 만든 다음 꺼내온 기존 메모리들을 고친다.
가까운 이웃 메모리 m_j 각각에 대해 맥락·키워드·태그를 갱신할지 판단한다.
m*_j ← LLM( m_n ∥ M_near \ m_j ∥ m_j ∥ P_s3 )
고친 m*_j가 원래 m_j를 대체한다.
새 경험이 들어오면 옛 기억의 해석이 바뀐다는 생각이다. 논문은 이게 사람이 배우는 과정이랑 비슷하다고 한다. 시간이 지나면 지식 구조가 정교해지고 여러 메모리에 걸친 패턴을 찾게 된다는 것이다.
-> 그런데 나중에 볼 Rate-Distortion 기준으로 보면 이 대체는 비가역이다. c_i(원본)는 남지만 X_i(맥락 서술), K_i, G_i는 덮어쓴다. 진화가 잘못 가면 이전 해석으로 못 돌아가는 거 아닌가??
3. Experiment
3.1 Empirical Results
파운데이션 모델 여섯 개로 LoCoMo를 돌린다.
| 모델 | 방법 | Multi Hop F1 | Temporal F1 | Single Hop F1 | 순위 | 토큰 |
|---|---|---|---|---|---|---|
| GPT-4o-mini | LOCOMO | 25.02 | 18.41 | 40.36 | 2.4 | 16,910 |
| MEMGPT | 26.65 | 25.52 | 41.04 | 2.4 | 16,977 | |
| READAGENT | 9.15 | 12.60 | 9.67 | 4.2 | 643 | |
| MEMORYBANK | 5.00 | 9.68 | 6.61 | 4.8 | 432 | |
| A-MEM | 27.02 | 45.85 | 44.65 | 1.2 | 2,520 | |
| GPT-4o | LOCOMO | 28.00 | 9.09 | 61.56 | 2.0 | 16,910 |
| MEMGPT | 30.36 | 17.29 | 60.16 | 2.4 | 16,987 | |
| A-MEM | 32.86 | 39.41 | 48.43 | 1.6 | 1,216 | |
| Qwen2.5-1.5b | MEMGPT | 10.44 | 4.21 | 9.56 | 3.4 | 16,953 |
| A-MEM | 18.23 | 24.32 | 23.63 | 1.0 | 1,300 | |
| Qwen2.5-3b | MEMGPT | 5.07 | 2.94 | 7.26 | 2.4 | 16,961 |
| A-MEM | 12.57 | 27.59 | 17.23 | 1.0 | 1,137 |
표에서 보이는 건 세 가지다.
- 토큰을 훨씬 적게 쓴다. LOCOMO와 MEMGPT는 16,900토큰을 쓰는데 A-MEM은 1,200~2,500토큰으로 순위가 더 높다. 7~14배 차이다.
- 작은 모델에서 차이가 더 크다. Qwen2.5-3b에서 A-MEM은 순위 1.0, MemGPT는 2.4다. Multi Hop F1이 12.57 vs 5.07로 2.5배다. 컨텍스트에 다 넣어주는 방식은 약한 모델이 잘 소화를 못 하는 것 같다.
- Single Hop은 GPT-4o의 LOCOMO가 더 높다(61.56 vs 48.43). 단순 사실을 물을 때는 원문을 통째로 주는 게 낫다. 이 시리즈 다른 리뷰들에서도 계속 나오는 패턴이다.
3.2 Ablation Study
Link Generation(LG)과 Memory Evolution(ME)을 하나씩 빼본다.

GPT-4o-mini를 기반 모델로 잰 결과라고 한다.
- 둘 다 제거 : 성능이 크게 떨어진다. Multi Hop과 Open Domain에서 특히 그렇다
- LG만 (w/o ME) : 중간. 둘 다 없는 것보다는 훨씬 낫다
- 전체 : 모든 범주에서 제일 좋고, 복잡한 추론에서 특히 좋다
링크 생성이 메모리 조직의 토대고, 진화는 거기에 정제를 더하는 거라고 한다.
3.3 Scaling Analysis
1,000 → 10,000 → 100,000 → 1,000,000 항목으로 열 배씩 늘려가며 잰다.

-> 메모리 사용량은 세 방법이 같은 값이고, 검색 시간은 ReadAgent만 크게 늘어난다.
- 공간 복잡도 : 세 시스템 모두 선형
O(N)으로 같다. A-MEM이 저장 공간을 더 쓰지는 않는다 - 검색 시간 : 100만 메모리에서도 0.31µs → 3.70µs 정도다. MemoryBank가 조금 더 빠르지만 A-MEM도 비슷하다고 한다
-> 쓰기 비용은 표에 없다. 노트 구성, 링크 판단, 진화가 전부 LLM 호출인데 이건 얼마나 드는지??
4. 지금 관점: 진화를 켤 것인가
이 시리즈의 다른 논문들이랑 나란히 놓아보면 이렇다.
- Mem0 : 구조는 사람이 정함(4연산). 원본 안 남김. 갱신은 DELETE
- Zep : 구조는 사람이 정함(3계층). 원본은 episode로 남김. 갱신은 무효화
- A-MEM : 구조는 에이전트가 정함(링크·진화). 원본은
c_i로 남김. 갱신은 덮어쓰기 - ReFind (뒤에서 볼 논문) : 구조 없음. 원본 남김. 갱신 없음
A-MEM은 원본은 남기고 해석은 덮어쓰는 쪽이다.
-> 중간 지점 같은데 걸리는 게 하나 있다. 진화가 연쇄된다. 새 메모리가 들어올 때마다 이웃 넷의 맥락이 바뀌고, 그 이웃들이 또 다른 메모리의 이웃이다. Rate-Distortion에서 다루는 반복 압축 오차 누적이 여기서도 생길 수 있을 것 같은데, 논문은 이걸 재지 않았다.
-> 키 확장은 가져다 쓰기 쉬워 보인다. concat(원문, 키워드, 태그, 맥락)으로 임베딩을 만드는 것만으로 검색 경로가 늘어난다. LongMemEval에서 +9.4%p recall이 나왔던 방법이고, 링크나 진화 없이도 쓸 수 있다.
-> 링크 생성은 ablation을 보면 효과가 있는데, 쓰기마다 LLM 호출이 붙는다. 쓰기가 잦으면 비동기로 돌려야 할 것 같다.
-> 진화는 아직 잘 모르겠다. 쓰기 경로에 LLM 호출이 또 붙고, 덮어쓰기라 되돌릴 수 없다. ablation은 진화를 켜면 한 번 더 좋아진다는 거지, 1만 번 진화해도 괜찮다는 건 아니다.
-> 작은 모델을 쓴다면 얘기가 달라질 수도 있다. Qwen2.5-3b에서 MemGPT 대비 2.5배 차이면 꽤 크다.
5. Conclusions
conclusion 부분을 보면 제텔카스텐의 조직 원리에 에이전트가 직접 판단하는 유연성을 합친 메모리 시스템이라고 정리한다. 노트 구성, 링크 생성, 메모리 진화 세 모듈로 돌아가고, 파운데이션 모델 여섯 개에서 기존 SOTA를 넘었다고 한다.
한계도 직접 적어두었다. 메모리를 동적으로 조직하긴 하지만 그 품질이 기반 언어모델 능력에 달려 있고, 모델이 다르면 맥락 서술이나 연결이 다르게 만들어질 수 있다고 한다.
-> 구조를 에이전트한테 맡기면 구조가 모델에 따라 달라진다는 얘기다. 나중에 볼 Memory Portability 논문에서 다루는 문제랑 이어지는 부분이다.
Zep이나 Mem0가 사람이 짠 구조에 기억을 넣는다면, A-MEM은 에이전트가 링크를 걸고 기존 기억까지 고쳐 쓰면서 구조를 만들어간다.
다음은 Mem0다. 대화에서 사실을 뽑아 ADD·UPDATE·DELETE·NOOP 중 하나로 반영하는 방식이고, full-context 대비 p95 지연을 91% 줄였다고 한다.
Leave a comment