개념
memgen의 사고 모델. 한 번 읽으면 나머지 API가 자명해집니다.
메모리 루프
모든 상호작용은 같은 루프의 세 가지 연산 중 하나:
┌──────────┐ add(messages) ┌───────────┐
│ your │ ───────────────────────▶ │ memgen │ → LLM extracts
│ app │ │ Memory │ → embeds
│ │ ◀─── search(query) ───── │ Store │ → stores
└──────────┘ └───────────┘
│ ▲
│ reads retrieved memories │
│ feeds them to YOUR LLM │
└────────────────────────────────────┘memgen은 당신의 챗 LLM을 호출하지 않습니다. 저장/검색만. 가져온 메모리를 어떻게 쓸지는 당신의 앱 코드가 결정.
스코핑: user_id, agent_id, app_id, run_id
메모리는 4개 자유 문자열 ID로 파티션. 통상 의미:
| 필드 | 수명 | 전형적 의미 |
|---|---|---|
user_id | 영속 | 최종 사용자 (이메일, 계정 ID) |
agent_id | 영속 | AI 에이전트 정체성 ("travel_bot_v2") |
app_id | 영속 | 앱 컨텍스트 ("mobile", "web", "slack") |
run_id | 일시적 | 한 세션 (티켓, 회의, 여행) |
add에 일부만 전달, search에 일부를 필터로 전달. 독립적 차원입니다.
client.add(
messages=[...],
user_id="alice", # this person
agent_id="travel_bot_v2", # this AI agent
run_id="trip-paris-2026", # this trip session
)
client.search("hotel preferences", user_id="alice")
client.search("hotel preferences", run_id="trip-paris-2026")extraction_policy & label_taxonomy (프로젝트별)
memgen 도메인 특화의 유일한 다이얼. client.project.update(...)로 한 번 설정. 이후 모든 호출이 따릅니다.
extraction_policy— 추출 LLM system prompt에 주입되는 자연어 가이드라인. 당신의 도메인 전문성을 텍스트로.label_taxonomy— {label_name: description} 페어 목록. 자동 분류기가 이 풀에서만 태그를 선택.
mem0의
custom_instructions + custom_categories에 해당. 같은 개념, 우리 이름.레이어드 추출: core + extensions
모든 메모리는 단순 문자열이 아닌 구조화 payload를 들고 다닙니다:
{
"core": {
"summary": "...",
"entities": [...],
"tags": [...],
"key_facts": [...],
"importance": 1,
"timestamp": "ISO 8601"
},
"extensions": {
"ai_tutor": { ... }
}
}core는 자동. extensions는 extract의 extension 인자로 opt-in.
동기 vs 비동기 추출
add(messages, ...)— fire-and-forget. 백그라운드 추출. 채팅 루프에서 사용.extract(messages, ..., store=False)— 추출 완료 대기, 구조화 결과 반환.store=True면 저장도. 검사/모더레이션 용도.
검색
summary 필드 대상 dense vector 검색. 필터는 임베딩 스코어와 결합:
client.search(
query="programming preferences",
filters={
"user_id": "alice",
"categories": ["preferences"],
"metadata": {"channel": "email"},
},
top_k=10,
threshold=0.3,
)저수준 제어(raw 임베딩, 추출 래퍼 없음)는 Engine API 참조.
memgen이 하지 않는 것
- 챗 응답 생성 — 당신의 코드가 OpenAI / Claude / Gemini / Ollama를 호출.
- 대화 transcript 저장 — summary + facts만 추출하고 임베딩 후 raw turn 폐기. (필요하면
metadata에 직접 첨부.) - 사용자 계정 관리 — ID는 자유 문자열. 사용자 시스템은 직접 보유.
아키텍처 (개요)
┌────────────┐ /v1/memories/* ┌─────────────┐
│ your app │ ─────────────────▶ │ Backend │ ─→ extraction LLM (Ollama / Flash)
│ + SDK │ │ │ ─→ embedding (memory-engine)
└────────────┘ ◀─── search ───── │ │ ─→ Postgres (metadata)
└─────────────┘ ─→ Qdrant (vectors)