개요
Mem0는 AI 에이전트를 위한 범용 메모리 레이어 입니다. LLM은 대화 간 기억을 유지하지 못하는 문제가 있는데, Mem0는 사용자 선호도, 컨텍스트, 대화 기록을 자동으로 추출하고 저장하여 개인화된 AI 경험을 제공합니다. 토큰 비용 90% 절감, 지연 시간 91% 감소를 달성합니다.
항목 내용 GitHub https://github.com/mem0ai/mem0 공식 사이트 https://mem0.ai 문서 https://docs.mem0.ai 라이선스 Apache-2.0 GitHub Stars 37K+
Mem0란?
왜 Mem0인가?
❌ LLM의 근본적 문제점:
- 대화 간 기억 없음 (Stateless)
- 매번 동일한 정보 반복 요청
- 개인화 불가능
- 긴 컨텍스트 = 높은 비용
✅ Mem0의 해결책:
- 영속적 메모리 레이어
- 자동 사실 추출 및 저장
- 의미 기반 검색
- 토큰 90%+ 절감
- 지연 시간 91% 감소
핵심 개념
"Instant memory for LLMs"
- 대화에서 핵심 정보 자동 추출
- 벡터 DB + 그래프 DB 하이브리드 저장
- 의미 기반 검색으로 관련 메모리 검색
- 세션 간 컨텍스트 유지
아키텍처
┌─────────────────────────────────────────┐
│ Your AI Application │
├─────────────────────────────────────────┤
│ Mem0 Layer │
│ (추출 → 저장 → 검색 → 업데이트) │
├──────────────┬──────────────────────────┤
│ Vector DB │ Graph DB │
│ (의미 검색) │ (관계 검색) │
│ Qdrant/Chroma│ Neo4j │
└──────────────┴──────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ LLM (OpenAI / Claude / Ollama) │
│ Embedder (OpenAI / Ollama) │
└─────────────────────────────────────────┘
주요 기능
🧠 메모리 관리
기능 설명 add() 대화에서 메모리 추가 search() 의미 기반 메모리 검색 get() 특정 메모리 조회 update() 메모리 업데이트 delete() 메모리 삭제 history() 메모리 변경 이력
📊 메모리 범위
범위 설명 user_id 사용자별 메모리 (세션 간 유지) agent_id 에이전트별 메모리 run_id 세션별 메모리 app_id 앱별 메모리
🤖 LLM 지원
제공자 모델 OpenAI GPT-4o, GPT-4, GPT-3.5 Anthropic Claude 3.5, Claude 3 Google Gemini Pro Ollama Llama, Mistral, Qwen Groq 초고속 추론 OpenRouter 모든 모델
💾 벡터 데이터베이스
벡터DB 설명 Qdrant 기본값, 고성능 Chroma 로컬 Pinecone 클라우드 pgvector PostgreSQL Milvus 대규모 Weaviate 클라우드/로컬
🔗 그래프 데이터베이스
그래프DB 설명 Neo4j 관계 메모리 Memgraph 실시간 그래프
🔧 임베딩
엔진 모델 OpenAI text-embedding-3-small Ollama nomic-embed-text HuggingFace 다양한 모델 Cohere embed-v3
시스템 요구 사항
항목 최소 권장 CPU 2 코어 4+ 코어 RAM 4GB 8GB+ 저장소 10GB 20GB+ 포트 8765 –
Docker 설치
방법 1: OpenMemory 원커맨드 (권장)
export OPENAI_API_KEY=your-openai-api-key
curl -sL https://raw.githubusercontent.com/mem0ai/mem0/main/openmemory/run.sh | bash
접속: http://localhost:3000 (UI), http://localhost:8765 (API)
방법 2: Mem0 REST API 서버
# 저장소 클론
git clone https://github.com/mem0ai/mem0
cd mem0/server
# 환경 설정
cp .env.example .env
# .env 파일 편집: OPENAI_API_KEY 설정
# 시작
docker compose up -d
방법 3: Docker Compose (기본)
# docker-compose.yml
services:
mem0:
image: mem0/mem0:latest
container_name: mem0
restart: unless-stopped
ports:
- "8765:8765"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
volumes:
- ./mem0_data:/app/data
depends_on:
- qdrant
qdrant:
image: qdrant/qdrant:latest
container_name: mem0-qdrant
restart: unless-stopped
ports:
- "6333:6333"
volumes:
- ./qdrant_data:/qdrant/storage
방법 4: 전체 스택 (Qdrant + Neo4j)
# docker-compose.yml
services:
mem0-api:
image: mem0/mem0:latest
container_name: mem0-api
restart: unless-stopped
ports:
- "8765:8765"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- QDRANT_HOST=qdrant
- QDRANT_PORT=6333
- NEO4J_URL=bolt://neo4j:7687
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=password
volumes:
- ./mem0_data:/app/data
depends_on:
- qdrant
- neo4j
qdrant:
image: qdrant/qdrant:latest
container_name: mem0-qdrant
restart: unless-stopped
ports:
- "6333:6333"
volumes:
- ./qdrant_data:/qdrant/storage
neo4j:
image: neo4j:latest
container_name: mem0-neo4j
restart: unless-stopped
ports:
- "7474:7474"
- "7687:7687"
environment:
- NEO4J_AUTH=neo4j/password
volumes:
- ./neo4j_data:/data
postgres:
image: postgres:15
container_name: mem0-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=mem0
- POSTGRES_USER=mem0
- POSTGRES_PASSWORD=password
volumes:
- ./postgres_data:/var/lib/postgresql/data
방법 5: Ollama 로컬 LLM
# docker-compose.yml
services:
mem0:
image: mem0/mem0:latest
container_name: mem0
restart: unless-stopped
ports:
- "8765:8765"
environment:
- LLM_PROVIDER=ollama
- OLLAMA_BASE_URL=http://host.docker.internal:11434
- OLLAMA_MODEL=llama3.2
- EMBEDDING_PROVIDER=ollama
- EMBEDDING_MODEL=nomic-embed-text
volumes:
- ./mem0_data:/app/data
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
- qdrant
qdrant:
image: qdrant/qdrant:latest
container_name: mem0-qdrant
restart: unless-stopped
volumes:
- ./qdrant_data:/qdrant/storage
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama:/root/.ollama
방법 6: OpenMemory MCP (Claude Desktop 연동)
# docker-compose.yml
services:
openmemory:
image: mem0/openmemory:latest
container_name: openmemory
restart: unless-stopped
ports:
- "8765:8765"
- "3000:3000"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- USER_ID=default
volumes:
- ./openmemory_data:/app/data
depends_on:
- qdrant
qdrant:
image: qdrant/qdrant:latest
container_name: openmemory-qdrant
restart: unless-stopped
volumes:
- ./qdrant_data:/qdrant/storage
Claude Desktop 설정 (claude_desktop_config.json):
{
"mcpServers": {
"mem0": {
"transport": "sse",
"serverUrl": "http://localhost:8765/sse"
}
}
}
방법 7: pgvector 사용
# docker-compose.yml
services:
mem0:
image: mem0/mem0:latest
container_name: mem0
restart: unless-stopped
ports:
- "8765:8765"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- VECTOR_STORE=pgvector
- POSTGRES_HOST=postgres
- POSTGRES_PORT=5432
- POSTGRES_USER=mem0
- POSTGRES_PASSWORD=password
- POSTGRES_DB=mem0
depends_on:
- postgres
postgres:
image: pgvector/pgvector:pg15
container_name: mem0-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=mem0
- POSTGRES_USER=mem0
- POSTGRES_PASSWORD=password
volumes:
- ./postgres_data:/var/lib/postgresql/data
방법 8: Chroma 사용
# docker-compose.yml
services:
mem0:
image: mem0/mem0:latest
container_name: mem0
restart: unless-stopped
ports:
- "8765:8765"
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- VECTOR_STORE=chroma
- CHROMA_HOST=chroma
- CHROMA_PORT=8000
depends_on:
- chroma
chroma:
image: chromadb/chroma:latest
container_name: mem0-chroma
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ./chroma_data:/chroma/chroma
환경 변수
LLM 설정
변수 설명 LLM_PROVIDERopenai, anthropic, ollama, groqOPENAI_API_KEYOpenAI API 키 ANTHROPIC_API_KEYAnthropic API 키 OLLAMA_BASE_URLOllama API URL OLLAMA_MODELOllama 모델명
임베딩 설정
변수 설명 EMBEDDING_PROVIDERopenai, ollama, huggingfaceEMBEDDING_MODEL임베딩 모델명
벡터 스토어
변수 설명 VECTOR_STOREqdrant, chroma, pgvector, pineconeQDRANT_HOSTQdrant 호스트 QDRANT_PORTQdrant 포트 (기본: 6333) CHROMA_HOSTChroma 호스트
그래프 스토어
변수 설명 NEO4J_URLNeo4j Bolt URL NEO4J_USERNAMENeo4j 사용자 NEO4J_PASSWORDNeo4j 비밀번호
OpenMemory
변수 설명 USER_ID기본 사용자 ID NEXT_PUBLIC_API_URLAPI URL (UI용)
Python SDK 사용
설치
pip install mem0ai
기본 사용
from mem0 import Memory
# 초기화
memory = Memory()
# 메모리 추가
result = memory.add(
"I prefer vegetarian food and am allergic to nuts",
user_id="user123"
)
print(result)
# [
# {"id": "abc", "memory": "Prefers vegetarian food"},
# {"id": "def", "memory": "Allergic to nuts"}
# ]
# 메모리 검색
memories = memory.search(
"What are the dietary preferences?",
user_id="user123"
)
# 모든 메모리 조회
all_memories = memory.get_all(user_id="user123")
# 메모리 업데이트
memory.update("abc", "Prefers vegan food")
# 메모리 삭제
memory.delete("abc")
채팅에 메모리 통합
from mem0 import Memory
from openai import OpenAI
memory = Memory()
openai_client = OpenAI()
def chat_with_memory(message, user_id="user123"):
# 관련 메모리 검색
memories = memory.search(message, user_id=user_id)
memories_str = "\n".join([m["memory"] for m in memories])
# 시스템 프롬프트에 메모리 포함
system_prompt = f"""Answer based on user memories:
User Memories:
{memories_str}"""
# LLM 호출
response = openai_client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": message}
]
)
assistant_response = response.choices[0].message.content
# 새 메모리 저장
memory.add(
[
{"role": "user", "content": message},
{"role": "assistant", "content": assistant_response}
],
user_id=user_id
)
return assistant_response
커스텀 설정
from mem0 import Memory
from mem0.configs.base import MemoryConfig
config = MemoryConfig(
llm={
"provider": "ollama",
"config": {
"model": "llama3.2",
"ollama_base_url": "http://localhost:11434"
}
},
embedder={
"provider": "ollama",
"config": {
"model": "nomic-embed-text"
}
},
vector_store={
"provider": "qdrant",
"config": {
"host": "localhost",
"port": 6333
}
},
graph_store={
"provider": "neo4j",
"config": {
"url": "bolt://localhost:7687",
"username": "neo4j",
"password": "password"
}
}
)
memory = Memory(config)
REST API 사용
메모리 추가
curl -X POST "http://localhost:8765/v1/memories/" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "I love hiking in the mountains"}
],
"user_id": "user123"
}'
메모리 검색
curl -X POST "http://localhost:8765/v1/memories/search/" \
-H "Content-Type: application/json" \
-d '{
"query": "outdoor activities",
"user_id": "user123"
}'
모든 메모리 조회
curl "http://localhost:8765/v1/memories/?user_id=user123"
백업 및 복원
데이터 구조
./
├── mem0_data/ # Mem0 데이터
├── qdrant_data/ # Qdrant 벡터 데이터
├── neo4j_data/ # Neo4j 그래프 데이터
└── postgres_data/ # PostgreSQL 데이터
백업
# 컨테이너 정지
docker compose down
# 전체 백업
tar -czvf mem0-backup-$(date +%Y%m%d).tar.gz \
mem0_data/ qdrant_data/ neo4j_data/
# 재시작
docker compose up -d
복원
tar -xzvf mem0-backup.tar.gz
docker compose up -d
업데이트
# 최신 이미지 가져오기
docker compose pull
# 재시작
docker compose down
docker compose up -d
트러블슈팅
Ollama 연결 안 됨
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434
Qdrant 연결 오류
컨테이너 이름으로 연결:
environment:
- QDRANT_HOST=qdrant # 컨테이너 이름
메모리 추출 안 됨
LLM API 키 확인
임베딩 모델 설정 확인
로그 확인: docker logs mem0
대안 비교
기능 Mem0 LangChain Memory Zep 자동 추출 ✅ LLM 기반 ❌ 수동 ✅ 의미 검색 ✅ ✅ ✅ 그래프 메모리 ✅ Neo4j ❌ ❌ 토큰 절감 ✅ 90%+ ❌ ✅ SDK Python, Node.js Python Python REST API ✅ ❌ ✅ MCP 지원 ✅ OpenMemory ❌ ❌ 셀프호스팅 ✅ N/A ✅
선택 가이드
용도 추천 AI 에이전트 메모리 Mem0 토큰 비용 절감 Mem0 Claude Desktop 연동 Mem0 (MCP)관계형 메모리 Mem0 (Graph)
활용 사례
1. 개인화 AI 어시스턴트
구성:
사용자 선호도 자동 학습
세션 간 컨텍스트 유지
맞춤형 응답
결과: 진정한 개인 AI 비서
2. 고객 지원 챗봇
구성:
고객별 이력 저장
이전 문의 내용 참조
맥락 있는 응답
결과: 고객 만족도 향상
3. AI 에이전트 시스템
구성:
에이전트별 메모리 분리
장기 작업 컨텍스트 유지
그래프 메모리로 관계 추론
결과: 지능적 멀티 에이전트
4. 학습 도우미
구성:
학습 진행 상황 기억
취약점 추적
맞춤형 복습
결과: 적응형 학습 시스템
5. MCP 통합 (Claude Desktop)
구성:
OpenMemory MCP 서버
Claude Desktop 연동
로컬 메모리 레이어
결과: Claude에 영속 메모리 추가
마무리
Mem0는 LLM의 근본적 한계인 “기억력 없음” 문제를 해결하는 메모리 레이어입니다. 대화에서 자동으로 핵심 정보를 추출하고, 의미 기반 검색으로 관련 메모리를 찾아 개인화된 AI 경험을 제공합니다. 토큰 비용 90% 절감, 지연 시간 91% 감소를 달성합니다.
핵심 장점
장점 설명 자동 추출 LLM이 핵심 정보 추출 의미 검색 벡터 기반 관련 메모리 그래프 메모리 Neo4j 관계 추론 토큰 절감 90%+ 비용 절감 지연 감소 91% 지연 시간 감소 MCP 지원 Claude Desktop 연동 다중 LLM OpenAI, Claude, Ollama 오픈소스 Apache-2.0
이런 분께 추천
AI 에이전트에 메모리가 필요한 분
토큰 비용을 줄이고 싶은 분
개인화된 AI 경험을 구현하려는 분
Claude Desktop에 메모리를 추가하고 싶은 분
장기 컨텍스트 AI 앱을 만드는 분