coredot.today
기술 탐색으로 돌아가기
에이전트 기억성장

Mem0

대화에서 사실을 뽑아 쌓는 가장 가벼운 기억 레이어 — 2026년 4월부터는 고치지 않고 추가만 한다

직접 해보기 4실측빠른 시작
종류
오픈소스
라이선스
Apache-2.0
언어
Python
사실 확인
2026.10.24
pip install mem0ai

TRY IT

직접 해보기

OVERVIEW

개요

무엇인가

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 가이드의 그래프 설정은 지금의 오픈소스에서 동작하지 않습니다.

어떻게 동작하나

1. add()
대화 전체를 한 덩어리로 임베딩해 기존 기억 10개를 찾고, 그 UUID를 "0", "1" 같은 정수로 바꿔 LLM에 보여 준다(UUID를 잘못 베끼지 않게). 프롬프트 첫 줄은 "Your sole operation is ADD".
2. 모순 처리
옛 기억을 고치지 않는다. "아몬드 우유에서 귀리 우유 라테로 바꿨다"처럼 전환을 서술하는 새 기억을 추가하라고 지시한다. 옛 기억과 새 기억이 함께 남는다.
3. 중복·엔티티
앞서 찾은 10개와 MD5 해시가 정확히 같을 때만 건너뛴다. 엔티티는 spaCy 영어 모델(en_core_web_sm)로 뽑고, 정규화 문자열이 같거나 임베딩 코사인 0.95 이상일 때 잇는다.
4. search()
의미 검색 후보에 키워드·엔티티 점수를 더해 나누는 가산 점수로 순위를 매긴다. RRF가 아니고, LLM 호출은 0회다.

검색 방식에는 숨은 효과가 있습니다. 후보는 의미 검색 결과에서만 나오고, 기본 문턱 0.1이 의미 점수에 먼저 걸립니다. 그래서 임베딩이 놓친 오류 코드나 주문 번호는 키워드로 정확히 일치해도 결과에 나오지 않습니다. 또 분모가 결과 집합 전체에서 한 번 정해져, 같은 기억의 점수가 다른 후보 사정에 따라 오르내립니다. 반환 점수를 절대 문턱으로 쓰기 어렵습니다.

빠른 시작

bash
pip install mem0ai
# 키워드·엔티티를 쓰는 하이브리드 검색까지 쓰려면
pip install "mem0ai[nlp]"
python -m spacy download en_core_web_sm
python
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-lite80.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()하지 말고 출처를 붙여 격리한다.

DEEP DIVE

더 깊이 읽기