MCP-Native Long-Term Memory Infrastructure — 5 类长期分层记忆 / 4 信号 Hybrid Recall / LLM-as-Arbitrator + Staleness Detection 双策略 / 隐式行为模式挖掘
🌐 Live Demo: 部署后填
https://memocortex.vercel.app📦 GitHub: https://github.com/Justdoitfor/memocortex 📖 Claude Desktop 一键接入: 见 § MCP 集成
2026 年 Agent 落地最大的瓶颈不再是模型能力, 而是 长期记忆系统. mem0 官方 State of AI Agent Memory 2026 报告点名 5 个 open problem:
| Open Problem | 行业现状 | MemoCortex 方案 |
|---|---|---|
| 记忆陈旧性 (高置信度记忆事实过期后仍被高频召回) | mem0 v3 选 ADD-only, 旧事实留库靠 rank 压 | Staleness Detection — Ebbinghaus 公式 + 软废弃罚分 × 0.2 + 完整审计可回滚 |
| 隐式偏好学习 (用户从未明说但行为体现) | 仅 Honcho 在做, 方案黑盒 | Pattern Miner — 6 类行为信号 + 周期 LLM 归纳为 Implicit Memory |
| 跨会话身份归因 | 各方案普遍混淆 inferred / explicit | source_type 6 类 + 影响 effective_strength 计算 |
| 程序性记忆工具链 | 概念支持, 工具空白 | Procedural Memory + 专用 MCP recall_workflow 工具 |
| MCP 生态原生集成 | 都是事后 wrapper | 8 个动词驱动 MCP Tools + 3 个 Resources (一等公民) |
MemoCortex 是 MCP 一等公民的长期记忆基础设施, REST/SDK 为附加协议. 上游 Agent 框架 (LangChain/AutoGen/CrewAI) 通过 MCP 零侵入接入.
| 类型 | 定位 | 来源 | 何时被召回 |
|---|---|---|---|
| Episodic | 时序事件 | 业务方写入 (默认) | 显式 search 或新对话开头 |
| Semantic | 事实知识 (KG triple) | LLM 抽取 + 冲突仲裁 | 每轮按实体匹配注入 |
| Procedural | 任务模板 + 步骤 | 业务方写入 (含 structured.steps) | Agent 决策"我以前怎么做"时 |
| Reflective | 显式用户画像 | Worker 从 Semantic 周期聚合 (不可手动写) | 每轮注入 SystemPrompt |
| Implicit | 隐式偏好 | Pattern Miner 从行为信号挖掘 (不可手动写) | 高置信场景注入 |
| 短期会话上下文 | 内部缓冲, 不对外暴露 (那是 LangGraph state 的职责) | — |
理论根基: Tulving 1985 long-term memory 三分类 (Episodic/Semantic/Procedural) + 自研 Reflective (Worker 聚合) + 自研 Implicit (Honcho 风格 pattern mining).
final_score = w1·vector_sim # 向量召回 (语义相似)
+ w2·temporal_decay # 时间衰减 (exp(-Δt/τ), τ=30 天)
+ w3·bm25_score # SQLite FTS5 BM25 (字面 / 罕见词命中)
+ w4·importance # effective_strength (含 staleness × 0.2 软废弃)
权重默认 0.40 / 0.20 / 0.20 / 0.20, 可热配置.
effective_strength 公式 (Phase 1, MemoryMesh §5.1):
effective_strength(t) = confidence_score
× e^(-decay_rate × active_days) # Ebbinghaus
× (1 + 0.15 × log(recall_count + 1)) # 复习提升
× SOURCE_WEIGHTS[source_type] # 来源权重
× (0.2 if staleness_signal else 1.0) # 软废弃罚分
实测分数:
- 新写入的 explicit_statement: 1.000
- 30 天未召回: 0.741 (e^(-0.3))
- 高频召回 50 次: 1.590 (复习提升)
- 软废弃: 0.200
- 用户主动纠正 (corrected): 1.200
Claude Desktop 配置 (~/Library/Application Support/Claude/claude_desktop_config.json macOS, %APPDATA%\Claude\claude_desktop_config.json Windows):
{
"mcpServers": {
"memocortex": {
"url": "http://127.0.0.1:8766/mcp",
"transport": "streamable-http"
}
}
}8 个动词驱动 MCP Tools (uv run python -m mcp_server.server 启动):
| Tool | 描述 |
|---|---|
remember |
写入长期记忆 (episodic/semantic/procedural) |
recall |
4 信号 Hybrid Recall (含 vector_sim ≥ 0.55 阈值过滤) |
recall_workflow |
检索 Procedural Memory, 返回结构化步骤 |
get_profile |
获取 Reflective Memory 用户画像 |
track_signal |
上报 6 类行为信号 (Phase 2 Pattern Miner) |
reflect |
手动触发 Pattern Miner 挖掘 Implicit |
manage_memory |
list / forget / mark_stale 统一管理 |
list_arbitrations |
查询冲突仲裁审计日志 |
3 个 MCP Resources (Agent SystemPrompt 注入):
memory://summary/{user_id}— 核心 Semantic 摘要memory://profile/{user_id}— 用户画像 Markdownmemory://workflows/{user_id}— 所有 Procedural 索引
# 1. 安装 (含 chromadb / sentence-transformers / langchain 等)
uv sync --all-extras
# 2. (可选) 配置 LLM Key, 否则 semantic 抽取 / 冲突仲裁会走启发式降级
cp .env.example .env
# 编辑 .env: MEMOCORTEX_LLM_API_KEY=sk-...
# 3. 跑基础 demo (无需 LLM key 即可跑通主链路)
make demo预期输出 (截取):
【Hybrid Recall】 4 信号融合召回
Q: "运动相关" (latency=20ms)
[1] episodic score=0.587 (vec=0.72 temp=1.00 graph=0.00 imp=0.50) -> 晚上慢跑了 5 公里
[2] episodic score=0.586 ... -> 看了一部关于量子物理的纪录片
[3] episodic score=0.577 ... -> 下午去图书馆读了一本心理学的书
召回延迟: P50=18.2ms P95=19.6ms
┌────────────────────────────────────────────────────────────────────┐
│ 上游 Agent 框架 (任意) │
│ LangChain AutoGen CrewAI Custom (MCP Client) │
│ + Adapter + Stub + Stub ↓ │
└──────────────────────┬─────────────────────────────────────────────┘
统一接口: REST / Python SDK / MCP
│
┌───────────────────────▼────────────────────────────────────────────┐
│ MemoCortex Core │
│ │
│ Memory Orchestrator → write / search / get_profile / forget │
│ │
│ ┌─────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Working │ │ Episodic │ │ Semantic │ │Procedural│ │Reflective│ │
│ │ (LRU) │ │ (Vec) │ │ (KG+Vec) │ │ (Vec) │ │ (Profile)│ │
│ └─────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ Hybrid Recall Router (4 信号融合 + 重排) │
│ Conflict Arbitrator (LLM-as-Judge → REPLACE/MERGE/VERSIONED/IGNORE)│
│ Reflection Workers (APScheduler 4 个周期任务) │
└───┬────────────┬──────────────┬──────────────┬────────────────────┘
│ │ │ │
┌───▼───────┐ ┌──▼───────┐ ┌───▼──────┐ ┌─────▼──────┐
│ ChromaDB │ │ NetworkX │ │ SQLite + │ │ 本地 FS │
│ (向量) │ │ (KG) │ │SQLAlchemy│ │ (Cold) │
└───────────┘ └──────────┘ └──────────┘ └────────────┘
⇩ 生产替换 (改一行 import 即可, 业务代码不动)
Milvus Neo4j PostgreSQL S3/MinIO
| 类型 | 类比人类 | 存储 | 召回时机 |
|---|---|---|---|
| Working | 短期记忆 | 内存 LRU + SQLite 备份 | 当前对话每轮 |
| Episodic | 情景记忆 | ChromaDB + SQLite | 显式 search / 新对话开始时 RAG 注入 |
| Semantic | 语义记忆 | NetworkX KG + ChromaDB 双索引 | 每轮按实体匹配注入 |
| Procedural | 程序性记忆 | ChromaDB + 任务模板 | Agent 决策 "我以前怎么做" 时 |
| Reflective | 元记忆 / 用户画像 | SQLite JSONB | 每轮注入到 SystemPrompt |
final_score = w1·vector_sim + w2·temporal_decay + w3·graph_proximity + w4·importance
- vector_sim — ChromaDB cosine similarity
- temporal_decay —
exp(-Δt/τ), τ 默认 30 天 - graph_proximity — Neo4j-style BFS, 共现实体距离 ≤ 2 跳加分
- importance — 入库 LLM 打分, recall_count 饱和加成
权重可配 (.env), 也可通过 Optuna 在 LongMemEval 上自动调权 (留接口).
新事实 → Entity Extraction → KG 查冲突 → LLM 仲裁
↓
┌─────────────────────────┐
│ REPLACE / MERGE / │
│ VERSIONED / IGNORE │
└─────────────────────────┘
↓
应用 + 写审计日志
举例:用户先说 "我对花生过敏",后说 "其实芝麻也过敏"。
- mem0 v2 (2026-04+): ADD-only + 哈希去重,两条事实并存,靠召回 rank 处理 — 体验上"花生"还会被召回,得让上层 Agent 自己挑
- MemoCortex: 识别
allergic_to是list字段 → LLM 主动 MERGE → KG 中只保留一条合并后的多值事实,带审计日志可回滚 ✅
| 入口 | 端点 | 说明 |
|---|---|---|
| REST | POST /v1/memories |
写入 |
| REST | POST /v1/memories/search |
Hybrid 召回 |
| REST | GET /v1/users/{id}/profile |
Reflective Profile |
| REST | GET /v1/users/{id}/entities/{name} |
KG 查询 |
| REST | POST /v1/memories/forget |
GDPR 删除 |
| REST | POST /admin/reflect/{user_id} |
手动触发反思 |
| REST | GET /admin/arbitrations/{user_id} |
冲突审计日志 |
| REST | GET /metrics |
进程指标 (延迟/计数/cost) |
| Python SDK | MemoCortexClient.write/search/... |
同步 + 异步 client |
| MCP | memory_write / memory_search / memory_get_profile / memory_forget / memory_list_arbitrations |
任意 MCP 客户端可接入 |
启动:
make api # FastAPI → http://localhost:8765/docs
make mcp # MCP Server → http://localhost:8766/mcpmake eval-cn # 8 个中文冲突仲裁场景 (REPLACE/MERGE 全覆盖)
make eval-longmem # LongMemEval 子集 (需先下载数据集)
make eval # 全套每次跑分:
- 落盘
tests/eval/.last_eval_score - 入 SQLite
eval_runs表 (跨版本回归对比) - 跨版本对比输出
本次 80% / 上次 75% ↑ +5%
8 个中文场景:用户搬家(REPLACE) / 过敏原合并(MERGE) / 跳槽(REPLACE) / 多养宠物(MERGE) / 爱好新增(MERGE) / 年龄变更(REPLACE) / 多语言(MERGE) / 长期事件召回。
LongMemEval 子集:留扩展点,完整跑分步骤见 tests/eval/longmemeval/adapter.py。
| 维度 | mem0 v2.0.4 (2026-05) | Zep | Letta (MemGPT) | MemoCortex |
|---|---|---|---|---|
| 记忆分层 | 2 类 (user / agent memory) + entity collection | 时序为主 | 单 Agent OS 风格 | 5 类 (Working/Episodic/Semantic/Procedural/Reflective) |
| 召回信号 | 3 信号融合 (语义 + BM25 + entity boost,v2 新增) | 向量 + 时序 | 上下文窗口管理 | 4 信号 (向量 + 时间衰减 + 图扩展 + 重要度) |
| 冲突消解 | ADD-only + 哈希去重 + 召回 rank (v2 新路线) | 部分支持 | 不强 | LLM Arbitrator + 4 action + 完整审计可回滚 |
| 知识图谱 | 内置 entity linking (v2 移除 Neo4j) | 无 | 无 | NetworkX KG (MVP) / Neo4j (生产) + entity 双索引 |
| MCP Server | ❌ | ❌ | ❌ | ✅ 5 个工具 |
| Reflective Profile | ❌ | ❌ | ❌ | ✅ 后台 Worker 周期刷新 |
| 多框架支持 | Python SDK + Platform API | 自有 SDK | 自有 SDK | REST + SDK + MCP + LangChain Adapter |
| 定位 | Agent 内部模块 | 时序记忆库 | Agent OS | Agent-agnostic 基础设施中间件 |
mem0 v2 (2026-04 发布) 做了架构级重写, 在 Hybrid Retrieval 和 entity linking 上追上了一代差距,但路线选择完全不同:
- mem0 v2 选择: 写入侧极简 (ADD-only), 召回侧重 rank, 强调低延迟
- MemoCortex 选择: 写入侧主动消解 (LLM Arbitrator + 审计), 召回侧 4 信号融合, 强调可解释与可回滚
两条路线在不同业务场景各有取舍。MemoCortex 更适合需要"用户画像稳定、事实变更可追溯"的企业场景。
memocortex/
├── app/
│ ├── config.py # Pydantic Settings, 全 env 驱动
│ ├── models.py # 全部数据模型 (MemoryRecord/Triple/ArbitrationDecision/...)
│ ├── core/ # LLM 工厂 / Embedding
│ ├── storage/ # Protocol + 4 个 MVP 实现 (Chroma/NX/SQLite/FS)
│ ├── memories/ # 5 类记忆
│ ├── recall/ # Hybrid Router + 4 信号
│ ├── arbitrator/ # 冲突仲裁
│ ├── reflection/ # APScheduler 4 个周期任务
│ ├── orchestrator/ # read/write/search/forget 统一入口
│ ├── api/ # FastAPI 路由
│ ├── sdks/ # Python SDK (sync + async)
│ ├── adapters/ # LangChain (实做) + AutoGen/CrewAI (Stub)
│ └── utils/ # logger / metrics / token_meter
├── mcp_server/ # fastmcp Server (5 个工具)
├── examples/
│ ├── demo_basic.py # 5 类记忆 + Hybrid Recall (30 行)
│ ├── demo_conflict.py # 4 种 ConflictAction 演示
│ └── demo_langchain.py # 跨 session 长期记忆
├── tests/
│ ├── unit/ # 23 个单元测试
│ └── eval/
│ ├── cn_scenarios/data/ # 8 个中文场景
│ ├── longmemeval/ # LongMemEval 适配
│ ├── runner.py # 评测 runner
│ ├── judge.py # LLM-as-Judge
│ └── metrics.py # Recall@K / Precision@K / MRR / F1
├── pyproject.toml # uv 管理
├── Makefile # 一站式命令
└── .env.example # 配置模板
| 类别 | MVP 选型 | 生产替换路径 |
|---|---|---|
| Web | FastAPI + Uvicorn + sse-starlette | 不变 |
| Agent | LangChain + LangGraph | 不变 |
| LLM | langchain-openai (OpenAI 兼容,默认 DeepSeek) | 不变 |
| Embedding | HuggingFace bge-small-zh-v1.5 (本地) |
改 MEMOCORTEX_EMBEDDING_MODEL 即可 |
| 向量库 | ChromaDB 内嵌 | langchain-milvus / pgvector |
| 知识图谱 | NetworkX + JSON | neo4j-driver |
| 关系数据 | SQLite + SQLAlchemy 2.0 | asyncpg + PostgreSQL |
| 任务队列 | APScheduler 内存 | Celery + Redis |
| 冷存储 | 本地文件 | boto3 / minio SDK |
| MCP | fastmcp + langchain-mcp-adapters | 不变 |
所有 MVP 简化项都通过 Protocol 抽象, 业务代码只依赖 app/storage/base.py 的接口, 生产替换不动业务代码。
# 后端
make api # → http://localhost:8765 (REST + Swagger)
make mcp # → http://localhost:8766/mcp (MCP Server)
# 前端
cd web && npm install && npm run build && cd out && python -m http.server 3000
# → http://localhost:3000前端 (Vercel) — web/ 子目录已配置 vercel.json:
# 1. 把仓库连到 Vercel (https://vercel.com/new)
# 2. Root Directory 选 `web/`, 自动识别 Next.js + vercel.json
# 3. 在 Vercel 项目 Settings → Environment Variables 加:
# NEXT_PUBLIC_API_BASE=https://memocortex-api.onrender.com
# 4. Deploy → 拿到 https://memocortex.vercel.app后端 (Render) — 根目录已配置 Dockerfile + render.yaml:
# 1. https://dashboard.render.com → New + → Blueprint → 选 memocortex 仓库
# 2. Render 自动识别 render.yaml, 创建 web service
# 3. 在 Render dashboard 设置 Environment:
# MEMOCORTEX_LLM_API_KEY = sk-xxx (DeepSeek/OpenAI 兼容 key)
# 4. Deploy → 拿到 https://memocortex-api.onrender.com
# 5. 把这个 URL 回填到 Vercel 前端的 NEXT_PUBLIC_API_BASEdocker build -t memocortex:latest .
docker run -p 8765:8765 \
-e MEMOCORTEX_LLM_API_KEY=sk-xxx \
-v $(pwd)/data:/data \
memocortex:latest- Phase 1-7 MVP (本仓库)
- LongMemEval 全量 500 题跑分
- AutoGen / CrewAI Adapter 完整实现
- 多模态记忆 (图片 / 音频, CLIP Embedding)
- 跨用户共享记忆 + 团队 ACL
- Optuna 自动召回权重调优
- GDPR 严格合规 (加密 / 删除证明)
- Prometheus 标准 metrics + Grafana 模板
- Kubernetes Helm Chart
MIT