# neuro-mem
**Repository Path**: sean515/neuro-mem
## Basic Information
- **Project Name**: neuro-mem
- **Description**: NeuroMemory
神经符号混合记忆系统 (Neuro-Symbolic Hybrid Memory)
一个模拟人类大脑海马体和大脑皮层工作方式的 AI 记忆系统,融合知识图谱 (GraphRAG) + 高维向量 (Vector) + 情景记忆 (Episodic Memory),实现超越传统 RAG 的多跳推理能力。
核心特性
混合记忆架构: 结合 Neo4j 知识图谱与 Qdrant
- **Primary Language**: Python
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2026-01-12
- **Last Updated**: 2026-03-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# neuromem
**AI Agent 多层记忆框架**
基于 PostgreSQL 构建的 Python 记忆库,为 AI agent 提供开箱即用的多层记忆。利用 PostgreSQL 生态 pgvector 向量检索、pg_search 全文检索(BM25)、图检索、KV 检索等能力实现混合记忆检索。
- `ingest()` 自动提取记忆:**Fact**(持久事实)、**Episode**(带时间戳的情景记忆)、**Graph**(实体关系图谱)
- `digest()` 9 步反思引擎,从历史记忆中归纳 **Trait**(用户特质),经历 behavior → preference → core 三层升级
- `recall()` 混合检索(向量 + BM25 RRF 融合 + 图谱 boost + 时间衰减),零额外代码组装进 prompt
## 架构概览

---
## LoCoMo 基准测试成绩
在 [LoCoMo 长对话记忆基准](https://arxiv.org/abs/2309.11696)(ACL 2024)上的对比成绩(Judge: GPT-4o-mini):
| 框架 | Single-Hop | Multi-Hop | Open-Dom | Temporal | Overall |
|------|:---:|:---:|:---:|:---:|:---:|
| memU | — | — | — | — | 92.1% |
| Backboard | 89.4% | 75.0% | 91.2% | 91.9% | 90.0% |
| **neuromem** | **87.1%** | **80.9%** | **81.9%** | **71.6%** | **80.2%** |
| MemOS | — | — | — | — | 75.8% |
| Memobase v0.0.37 | 70.9% | 46.9% | 77.2% | 85.1% | 75.8% |
| Zep | 74.1% | 66.0% | 67.7% | 79.8% | 75.1% |
| Letta | — | — | — | — | 74.0% |
| Mem0-Graph | 65.7% | 47.2% | 75.7% | 58.1% | 68.4% |
| Mem0 | 67.1% | 51.2% | 72.9% | 55.5% | 66.9% |
| LangMem | 62.2% | 47.9% | 71.1% | 23.4% | 58.1% |
| OpenAI Memory | 63.8% | 42.9% | 62.3% | 21.7% | 52.9% |
> 各框架使用不同的 Judge LLM,分数不完全可比。详见 [LoCoMo 优化历程](https://github.com/MatrixDriver/neuromem/blob/master/evaluation/history/OPTIMIZATION_HISTORY.md)。
---
## 文档
| 文档 | 说明 |
|------|------|
| **[API 参考](https://github.com/MatrixDriver/neuromem/blob/master/docs/API.md)** | 完整的 Python API 文档(ingest, recall, digest 等) |
| **[快速开始](https://github.com/MatrixDriver/neuromem/blob/master/docs/GETTING_STARTED.md)** | 10 分钟上手指南 |
| **[架构设计](https://github.com/MatrixDriver/neuromem/blob/master/docs/ARCHITECTURE.md)** | 系统架构、Provider 模式、数据模型、情感架构 |
| **[使用指南](https://github.com/MatrixDriver/neuromem/blob/master/docs/SDK_GUIDE.md)** | API 用法、代码示例、Prompt 组装最佳实践 |
| **[为什么不提供 Web UI](https://github.com/MatrixDriver/neuromem/blob/master/docs/WHY_NO_WEB_UI.md)** | 设计理念和替代方案 |
| **[LoCoMo 优化历程](https://github.com/MatrixDriver/neuromem/blob/master/evaluation/history/OPTIMIZATION_HISTORY.md)** | 基准测试迭代记录(0.125 → 0.802,+541%) |
### Claude Code Skill
If you use [Claude Code](https://claude.com/claude-code), install the neuromem docs skill for inline API reference:
```bash
npx skills add https://github.com/MatrixDriver/neuromem
```
---
## 安装
### 方式 1: 从 PyPI 安装(推荐)
```bash
# 基础安装(包含核心功能)
pip install neuromem
# 或安装所有可选依赖(推荐)
pip install neuromem[all]
```
**依赖自动安装**: SQLAlchemy、asyncpg、pgvector、httpx 等核心依赖会自动安装。
### 方式 2: 从源码安装(开发者)
```bash
git clone https://github.com/MatrixDriver/neuromem
cd neuromem
pip install -e ".[dev]" # 包含测试工具
```
---
## 外部依赖
neuromem 需要以下外部服务(**不包含在 pip 包中**):
### 1. PostgreSQL 18 + pgvector + pg_search(必需)
neuromem 使用 [ParadeDB](https://www.paradedb.com/) 镜像,内置 PostgreSQL 18、pgvector 和 pg_search(BM25 全文检索)。
```bash
# 使用项目提供的 Docker Compose(推荐)
docker compose -f docker-compose.yml up -d db
```
> **pg_search 说明**:pg_search 提供 BM25 关键词检索,与向量检索融合为混合排序(RRF)。若 pg_search 不可用,系统自动降级到 PostgreSQL 内置的 tsvector 全文检索,功能仍可正常使用。
### 2. Embedding Provider(必需,三选一)
- **本地模型**(无需 API Key):`pip install sentence-transformers`,使用本地 transformer 模型
- **SiliconFlow**:[siliconflow.cn](https://siliconflow.cn/),需要 API Key
- **OpenAI**:[platform.openai.com](https://platform.openai.com/),需要 API Key
### 3. LLM API Key(必需,用于自动提取记忆和反思)
- [OpenAI](https://platform.openai.com/) 或 [DeepSeek](https://platform.deepseek.com/)
### 4. MinIO/S3(可选,仅用于文件存储)
```bash
docker compose -f docker-compose.yml up -d minio
```
---
## 快速开始
```python
import asyncio
from neuromem import NeuroMemory, SiliconFlowEmbedding, OpenAILLM
async def main():
async with NeuroMemory(
database_url="postgresql+asyncpg://neuromem:neuromem@localhost:5432/neuromem",
embedding=SiliconFlowEmbedding(api_key="your-key"),
llm=OpenAILLM(api_key="your-openai-key"), # 必需,用于自动提取记忆
auto_extract=True, # 默认启用,像 mem0 那样实时提取记忆
) as nm:
# 1. 存储对话消息 → 自动提取记忆(facts/episodes/relations)
await nm.ingest(
user_id="alice", role="user",
content="I work at ABC Company as a software engineer"
)
# → 后台自动提取:fact: "在 ABC Company 工作", relation: (alice)-[works_at]->(ABC Company)
# 2. 混合检索(向量 + BM25 RRF 融合 + 图谱 boost + 时间衰减)
result = await nm.recall(user_id="alice", query="Where does Alice work?")
for r in result["merged"]:
print(f"[{r['score']:.2f}] {r['content']}")
# 3. 反思:从记忆归纳用户特质(可选,定期调用或自动触发)
result = await nm.digest(user_id="alice")
print(f"分析了 {result['memories_analyzed']} 条记忆")
asyncio.run(main())
```
### 核心操作流程
neuromem 的核心使用围绕三个操作:
**插入记忆**(自动模式,默认):
- 对话驱动:`ingest()` 存储对话 **并自动提取记忆**(推荐,像 mem0)
- 自动提取 fact(持久事实)、episodic(情景记忆),可选 graph(实体关系三元组)
**召回记忆(recall)**:
- `await nm.recall(user_id, query)` — 向量 + BM25 RRF 融合 + 图谱 boost + 时间衰减
- 支持按类型过滤(`memory_type="fact"`)、时间范围过滤、时间旅行查询(`as_of`)
**反思与特质归纳(digest)**(可选,定期调用或自动触发):
- `await nm.digest(user_id)` — 9 步反思引擎:
1. **归纳特质**:从 fact/episodic 记忆中识别行为模式,生成 trait(特质)
2. **升级特质**:behavior → preference → core 三层递进升级
3. **矛盾处理**:检测与已有特质的矛盾,触发专项反思
4. **更新画像**:整合情感数据,更新用户情感画像
> `ingest()` 默认 `auto_extract=True`,每次调用自动提取记忆。`digest()` 专注于从已有记忆中归纳特质和更新情感画像。默认每 20 条消息自动触发一次(`reflection_interval=20`)。
**逻辑关系**:
```
对话进行中 → 存储消息 (ingest) → 自动提取 fact/episodic/graph
↓
agent 需要上下文 → 召回记忆 (recall) → 向量+BM25 RRF 融合+图谱 boost
↓
定期反思 → 归纳特质 (digest) → trait(behavior→preference→core) + 情感画像
```
---
## 核心特性
### 记忆分类(V2)
neuromem 基于认知心理学理论,将记忆分为 4 种核心类型:
| 记忆类型 | 说明 | 来源 | 召回方式 | 示例 |
|---------|---------|---------|---------|------|
| **Fact** | 持久事实,无时间属性 | `ingest()` 自动提取 | `nm.recall(query)` | "在 Google 工作" |
| **Episodic** | 带时间戳的情景记忆 | `ingest()` 自动提取 | `nm.recall(query)` | "昨天面试很紧张" |
| **Trait** | 用户特质(行为/偏好/核心) | `digest()` 反思归纳 | `nm.recall(query)` | "倾向于深夜工作" |
| **Document** | 文档记忆 | `nm.files.upload()` | `nm.files.search(query)` | 上传的 PDF/文档 |
**Trait 三层子类型**(全球独一无二的升级链设计):
| 子类型 | 阶段 | 升级条件 | 示例 |
|--------|------|----------|------|
| **Behavior** | trend → candidate → emerging | 首次识别的行为模式 | "工作日晚上才开始编程" |
| **Preference** | emerging → established | ≥2 个 behavior 一致 | "偏好深夜工作" |
| **Core** | established → core | ≥2 个 preference 一致 | "夜猫子型人格" |
**辅助系统**:
| 系统 | 说明 | 获取方式 |
|------|------|----------|
| **Graph**(实体关系图谱) | `(user)-[works_at]->(Google)` | `nm.graph.get_neighbors()` |
| **EmotionProfile**(情感画像) | 三层情感架构(micro/meso/macro) | `digest()` 自动更新 |
| **KV Store**(键值存储) | 应用层自定义数据 | `nm.kv.get/set()` |
| **TraitEvidence**(证据链) | 特质的支持/矛盾证据 | 反思引擎自动管理 |
### 单一 PostgreSQL 架构优势
neuromem 将所有记忆(向量、图谱、对话、KV、文档、情感画像)存储在**单一 PostgreSQL** 中,而非拼装多个独立数据库。这不是偶然选择,而是刻意的架构决策,带来六大差异化优势:
**1. 联合融合排序** — 图谱与向量结果交叉增强,而非各自为政
`recall()` 中,图三元组不仅提供结构化关系,还参与向量结果的排序:被图三元组覆盖的向量记忆获得加法 boost(双端命中 +0.10,单端命中 +0.04,上限 +0.20),图三元组本身以 `source="graph"` 进入统一的 `merged` 列表。竞品(mem0、graphiti)的图和向量存储在不同数据库中,无法实现这种交叉增强。
**2. 事务一致性 + 数据治理** — 单库原子操作,零数据不一致风险
`delete_user_data()` 在一个数据库事务内原子删除 8 张表的用户数据;`export_user_data()` 在一个快照内导出完整用户画像。竞品需要跨 3-4 个数据库协调删除/导出,任何一个库失败都会造成数据不一致。对于 GDPR/合规场景,单库事务意味着"删除即彻底删除",无需担心残留。
**3. 时间旅行查询** — 记忆版本化与时间点回溯
利用 PostgreSQL 原生能力实现记忆版本化:查询某个时间点的记忆快照、回滚错误更新。这在多库架构中几乎不可能实现——你无法对 Redis 缓存、Neo4j 图谱、Qdrant 向量同时做时间点快照。
**4. 跨类型记忆分析** — 让开发者获得记忆系统的可观测性
`entity_profile()` 通过 SQL JOIN 跨事实记忆、图谱关系、对话历史三种来源,构建一个实体的完整画像和时间线;`stats()` 提供按类型、按周的记忆分布统计;`cold_memories()` 发现长期未访问的记忆。这些分析能力让 agent 开发者能够观测和诊断记忆系统的健康状况,而不是把它当成黑盒。
**5. 安全与用户隔离** — 框架级强制隔离 + 集中式数据治理
neuromem 的所有 API 都强制要求 `user_id` 参数,框架层面保证每个查询都包含 `WHERE user_id = :uid` 过滤——开发者无法绕过隔离边界。所有数据存储在单一 PostgreSQL 中,可统一应用备份策略、审计日志和访问控制,数据治理只需管理一个数据库,而非 3-4 个不同技术栈的数据库。
**6. 部署极简** — 一个 PostgreSQL 搞定一切
| 框架 | 需要的存储组件 | 部署复杂度 |
|------|-------------|-----------|
| **neuromem** | PostgreSQL(含 pgvector + pg_search) | ⭐ 一个容器 |
| Mem0 | PostgreSQL + Qdrant + Neo4j | 3 个独立服务 |
| MemOS | PostgreSQL + Redis + Qdrant + Neo4j | 4 个独立服务 |
| graphiti | PostgreSQL + Neo4j + 向量数据库 | 3+ 个独立服务 |
开发者只需 `docker compose up -d db` 即可拥有完整的记忆存储——向量检索、全文检索、图查询、KV 存储全部内置。生产环境只需一个托管 PostgreSQL(如 AWS RDS、Supabase),无需额外运维 Redis、Neo4j、Qdrant 等专用数据库。
### LLM 驱动的记忆提取与反思
- **提取**:`ingest()` 自动从对话中识别事实、事件、关系,附带情感标注(valence/arousal/label)和重要性评分(1-10),content_hash 去重避免重复存储
- **反思** (`digest`):9 步反思引擎,从 fact/episodic 中归纳 trait(特质),支持 behavior → preference → core 三层升级、矛盾检测、证据质量四级分级(A/B/C/D)
- **情境标注**:trait 从 behavior 层即附带情境标签(work/personal/social/learning/general)
- **访问追踪**:自动记录 access_count 和 last_accessed_at,符合 ACT-R 记忆模型
理论基础:Tulving 语义/情景记忆 + Conway 自我记忆系统 + Allport 特质理论 + Mischel CAPS if-then 模式 + Generative Agents (Park 2023) Reflection + Ebbinghaus 遗忘曲线 + ACT-R 记忆模型。
### 存储架构(V2)
- **halfvec 量化**:向量使用 halfvec(float16)存储,空间减半,召回损失 <0.3%
- **双时间线**(Bi-temporal):`valid_from/valid_until` + `created_at/expired_at`,支持时间旅行查询(`recall(as_of=...)`)和记忆版本回滚
- **content_hash 去重**:MD5 快筛,避免重复记忆存储
- **证据链**(TraitEvidence 表):独立存储特质的支持/矛盾证据,避免 JSONB 写放大
- **变更审计**(MemoryHistory 表):记忆每次更新的版本历史
- **反思周期记录**(ReflectionCycle 表):每次反思的元数据追踪
---
## 路线图
### Phase 1(已完成)
- [x] PostgreSQL + pgvector 统一存储
- [x] 向量语义检索
- [x] 时间范围查询和时间线聚合
- [x] KV 存储
- [x] 对话管理
- [x] 文件上传和文本提取
- [x] 图数据库(关系表实现,无 AGE 依赖)
- [x] LLM 记忆分类提取
- [x] 可插拔 Provider(Embedding/LLM/Storage)
### Phase 2(已完成)
- [x] 情感标注(valence / arousal / label)
- [x] 重要性评分(1-10)
- [x] 多因子检索(cosine similarity + recency bonus + importance bonus)
- [x] 访问追踪(access_count / last_accessed_at)
- [x] 反思机制(从记忆中生成高层洞察)
- [x] 后台任务系统(ExtractionStrategy 自动触发)
- [x] auto_extract 模式后台自动 digest(`reflection_interval` 参数)
### Phase 3(已完成)
- [x] 基准测试:[LoCoMo](https://github.com/MatrixDriver/neuromem/blob/master/evaluation/history/OPTIMIZATION_HISTORY.md)(ACL 2024,Judge 0.802,13 轮迭代,+541%)
- [x] 联合融合排序(图三元组覆盖度 boost + BM25 RRF 融合)
- [x] 事务一致性 API(delete_user_data / export_user_data)
- [x] 时间旅行查询(记忆版本化 + as_of 召回 + rollback)
- [x] 记忆分类 V2:4 类体系(fact/episodic/trait/document),trait 三层升级链(behavior→preference→core)
- [x] 存储架构 V2:halfvec 量化、双时间线、content_hash 去重、证据链表、变更审计表
- [x] 9 步反思引擎:特质生命周期管理、矛盾检测、证据质量分级(A/B/C/D)、情境标注
### Phase 4(进行中)
- [ ] LIST 分区迁移(按 memory_type 分区,查询加速 67-83%)
- [ ] 物化视图衰减预计算(`mv_trait_decayed`)
- [ ] 基准测试:LongMemEval(ICLR 2025,超长记忆评测,500 个问题,115k~1.5M tokens)
- [ ] 自然遗忘(主动记忆清理/归档机制)
- [ ] 多模态 embedding(图片、音频)
- [ ] 分布式部署支持
---
## 贡献
欢迎贡献代码、文档或提出建议!
1. Fork 项目
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交改动 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 提交 Pull Request
---
## 许可证
MIT License - 详见 [LICENSE](LICENSE) 文件
---
**neuromem** - 让您的 AI 拥有记忆