무엇인가
Mem0(멤제로, 구 EmbedChain)는 AI 앱과 에이전트에 붙이는 기억 레이어입니다. 대화가 들어오면 LLM이 "기억할 만한 사실"을 문장으로 뽑아 저장하고, 다음 대화에서 관련 사실을 찾아 프롬프트에 넣습니다. 사용자·에이전트·실행 단위(user_id·agent_id·run_id)로 기억을 나눠 담습니다. 저장소 별이 6만 7천 개를 넘는, 가장 많이 쓰이는 기억 라이브러리입니다.
2025년 4월 논문(arXiv 2504.19413)의 설계는 두 단계였습니다. LLM이 사실을 뽑고, 사실마다 기존 기억을 찾아 ADD·UPDATE·DELETE·NONE 중 하나를 다시 고르게 했습니다. 그래프를 켜면 관계 추출과 모순 삭제가 더해졌습니다. 2026년 4월 14일 SDK v2.0.0에서 이 뼈대를 갈아엎었습니다. 지금은 LLM 1회, 추가만 합니다. 그리고 Neo4j·Memgraph·Kuzu·AGE 그래프 드라이버 약 4,000줄이 오픈소스에서 빠졌습니다. 코어닷투데이가 2026년 4월 초에 쓴 Mem0 + Kuzu 가이드의 그래프 설정은 지금의 오픈소스에서 동작하지 않습니다.
어떻게 동작하나
en_core_web_sm)로 뽑고, 정규화 문자열이 같거나 임베딩 코사인 0.95 이상일 때 잇는다.검색 방식에는 숨은 효과가 있습니다. 후보는 의미 검색 결과에서만 나오고, 기본 문턱 0.1이 의미 점수에 먼저 걸립니다. 그래서 임베딩이 놓친 오류 코드나 주문 번호는 키워드로 정확히 일치해도 결과에 나오지 않습니다. 또 분모가 결과 집합 전체에서 한 번 정해져, 같은 기억의 점수가 다른 후보 사정에 따라 오르내립니다. 반환 점수를 절대 문턱으로 쓰기 어렵습니다.
빠른 시작
pip install mem0ai
# 키워드·엔티티를 쓰는 하이브리드 검색까지 쓰려면
pip install "mem0ai[nlp]"
python -m spacy download en_core_web_sm
from mem0 import Memory
memory = Memory() # 기본: OpenAI gpt-5-mini + text-embedding-3-small
memory.add(
[{"role": "user", "content": "나는 SF 영화를 좋아하고 스릴러는 싫어해"}],
user_id="minji",
)
found = memory.search(query="영화 추천해 줘", filters={"user_id": "minji"}, top_k=3)
for entry in found["results"]:
print(entry["memory"])
README의 기본 예제는 이 검색 결과를 시스템 프롬프트에 넣어 답한 뒤, 그 대화를 다시 memory.add()로 저장하는 루프입니다. 검색 → 증강 → 생성 → 저장의 순환입니다.
코어닷투데이 실측
코어닷투데이는 메모리 벤치마크 특집에서 Mem0 논문의 평가 코드(커밋 aae5989)를 그대로 써서 기준선을 다시 돌리고, Mem0의 2025년·2026년 채점 프롬프트에 일부러 틀린 답을 넣어 봤습니다(LoCoMo 1,540문항).
| 실험 | 결과 | 읽는 법 |
|---|---|---|
| 기억 없이 대화 통째로, gpt-4o-mini (논문 기준선 재현) | 74.0% (논문 72.90%) | 재현됐다 |
| 같은 프롬프트, 답변 모델만 gemini-3.1-flash-lite | 80.7% (1,540문항 2.51달러) | 2025년 Mem0 66.88%보다 높다. 점수의 상당 부분은 답하는 모델이 만든다 |
| 같은 답 1,540개, 채점 프롬프트만 바꿈 | 55.8%~81.4% | 26점이 채점 정의에서 나온다 |
| 정답과 오답을 나란히 적은 답 | Mem0 2025 채점 76.4%, 2026 채점 100% 통과 | 후보를 늘어놓으면 점수가 오른다 |
| 8~13일 어긋난 날짜 68개 | 2026 채점 100% 통과, 다른 세 프롬프트 0% | "14일 이내면 정답" 규칙 |
LoCoMo는 대화 10개에 문항이 몰려 있어 대화 단위로 잰 95% 구간이 ±3.1점입니다. Mem0와 Mem0 그래프판의 1.56점 차이는 이 선 아래에 있습니다.
언제 쓰고, 언제 피하나
- 잘 맞는다: 가장 싸고 단순한 개인화 기억. 쓰기 한 번에 LLM 1회, 검색은 0회다. 취향·신상처럼 "미리 사실로 뽑아 두면 되는" 기억, 사용자별 격리가 필요한 챗봇.
- 다른 방법을 먼저 본다: 바뀐 사실을 바로잡아야 하는 곳(옛 값과 새 값이 둘 다 검색된다), 오류 코드·제품 번호처럼 정확한 키워드로 찾아야 하는 곳, 한국어 엔티티 연결이 중요한 곳. '언제부터 참이었나'가 핵심이면 시간 그래프를 본다.
한계와 주의
- README 점수는 플랫폼 점수다. LoCoMo 92.5, LongMemEval 94.4는 관리형 플랫폼(오픈소스에 없는 최적화, top-200 검색)에서 잰 값이라고 README가 스스로 밝힌다. 오픈소스 기본 top_k는 20이다.
- 그래프·시간 질의·감쇠는 플랫폼으로 갔다. 오픈소스에서 감쇠 파라미터를 넘기면 오류가 나고,
expiration_date는 검색에서 숨기기만 한다. - 중복 제거가 느슨하다. 해시가 한 글자만 달라도 중복으로 쌓인다.
- 텔레메트리가 기본 켜짐이다. PostHog 수집은 환경변수로 끈다. 사내망이면 먼저 확인한다.
- 추출 프롬프트가 건강·정서 상태까지 뽑으라고 지시한다. 비밀·개인정보 마스킹 장치는 없으니 저장 앞단에 직접 둔다.
- 기억 오염 공격 ShadowMerge는 Mem0에서 평균 93.8%의 성공률을 보고했다. 외부 문서를 그대로 add()하지 말고 출처를 붙여 격리한다.




