Skip to main content

Memory management framework for AI agents

Project description

neuromem

AI Agent 多层记忆框架

基于 PostgreSQL 构建的 Python 记忆库,为 AI agent 提供开箱即用的多层记忆。利用 PostgreSQL 生态 pgvector 向量检索、pg_search 全文检索(BM25)、图检索、KV 检索等能力实现混合记忆检索。

  • ingest() 自动提取记忆:Fact(持久事实,含双时间线 + 程序性记忆)、Episode(带时间戳的情景记忆)、Graph(实体关系图谱)
  • digest() 9 步反思引擎,从历史记忆中归纳 Trait(用户特质),经历 behavior → preference → core 三层升级;支持两阶段反思 + Zettelkasten 记忆关联
  • recall() 混合检索(向量 + BM25 RRF 融合 + 图谱 boost + 时间衰减 + 关联扩展 + 前瞻降权),零额外代码组装进 prompt

架构概览

NeuroMem 架构图


LoCoMo 基准测试成绩

LoCoMo 长对话记忆基准(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 优化历程


文档

文档 说明
API 参考 完整的 Python API 文档(ingest, recall, digest 等)
快速开始 10 分钟上手指南
架构设计 系统架构、Provider 模式、数据模型、情感架构
使用指南 API 用法、代码示例、Prompt 组装最佳实践
为什么不提供 Web UI 设计理念和替代方案
LoCoMo 优化历程 基准测试迭代记录(0.125 → 0.802,+541%)

Claude Code Skill

If you use Claude Code, install the neuromem docs skill for inline API reference:

npx skills add https://github.com/MatrixDriver/neuromem

安装

方式 1: 从 PyPI 安装(推荐)

# 基础安装(包含核心功能)
pip install neuromem

# 或安装所有可选依赖(推荐)
pip install neuromem[all]

依赖自动安装: SQLAlchemy、asyncpg、pgvector、httpx 等核心依赖会自动安装。

方式 2: 从源码安装(开发者)

git clone https://github.com/MatrixDriver/neuromem
cd neuromem
pip install -e ".[dev]"  # 包含测试工具

外部依赖

neuromem 需要以下外部服务(不包含在 pip 包中):

1. PostgreSQL 18 + pgvector + pg_search(必需)

neuromem 使用 ParadeDB 镜像,内置 PostgreSQL 18、pgvector 和 pg_search(BM25 全文检索)。

# 使用项目提供的 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 模型
  • SiliconFlowsiliconflow.cn,需要 API Key
  • OpenAIplatform.openai.com,需要 API Key

3. LLM API Key(必需,用于自动提取记忆和反思)

4. MinIO/S3(可选,仅用于文件存储)

docker compose -f docker-compose.yml up -d minio

快速开始

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(已完成)

  • PostgreSQL + pgvector 统一存储
  • 向量语义检索
  • 时间范围查询和时间线聚合
  • KV 存储
  • 对话管理
  • 文件上传和文本提取
  • 图数据库(关系表实现,无 AGE 依赖)
  • LLM 记忆分类提取
  • 可插拔 Provider(Embedding/LLM/Storage)

Phase 2(已完成)

  • 情感标注(valence / arousal / label)
  • 重要性评分(1-10)
  • 多因子检索(cosine similarity + recency bonus + importance bonus)
  • 访问追踪(access_count / last_accessed_at)
  • 反思机制(从记忆中生成高层洞察)
  • 后台任务系统(ExtractionStrategy 自动触发)
  • auto_extract 模式后台自动 digest(reflection_interval 参数)

Phase 3(已完成)

  • 基准测试:LoCoMo(ACL 2024,Judge 0.802,13 轮迭代,+541%)
  • 联合融合排序(图三元组覆盖度 boost + BM25 RRF 融合)
  • 事务一致性 API(delete_user_data / export_user_data)
  • 时间旅行查询(记忆版本化 + as_of 召回 + rollback)
  • 记忆分类 V2:4 类体系(fact/episodic/trait/document),trait 三层升级链(behavior→preference→core)
  • 存储架构 V2:halfvec 量化、双时间线、content_hash 去重、证据链表、变更审计表
  • 9 步反思引擎:特质生命周期管理、矛盾检测、证据质量分级(A/B/C/D)、情境标注
  • 双时间线:提取 event_time(事件发生时间 vs 系统记录时间),recency 排序使用事件时间
  • 前瞻记忆:已过期的未来意图自动降权 0.5x,digest 时自动过期为 historical
  • 程序性记忆:识别多步骤工作流(category=workflow),结构化存储 procedure_steps
  • Zettelkasten 记忆关联:digest 时建立记忆间双向语义链接,recall 时 1-hop 关联扩展
  • 两阶段反思:重要反思先生成关键问题,再检索历史证据验证,提高反思质量

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 文件


neuromem - 让您的 AI 拥有记忆

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neuromem-0.9.8.tar.gz (104.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

neuromem-0.9.8-py3-none-any.whl (111.6 kB view details)

Uploaded Python 3

File details

Details for the file neuromem-0.9.8.tar.gz.

File metadata

  • Download URL: neuromem-0.9.8.tar.gz
  • Upload date:
  • Size: 104.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for neuromem-0.9.8.tar.gz
Algorithm Hash digest
SHA256 80a43468426c65264d9d02a342e86622ba5898514e443ba2d1c980b34198fd8e
MD5 64f8280e72d326ea549d0c5ed4bdbd20
BLAKE2b-256 a00be03dfd96d3eb6eeb47633991f71799ba34c301e2b74705f73b8c14a621c1

See more details on using hashes here.

File details

Details for the file neuromem-0.9.8-py3-none-any.whl.

File metadata

  • Download URL: neuromem-0.9.8-py3-none-any.whl
  • Upload date:
  • Size: 111.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for neuromem-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 01d6bfd5103ac0e681b6feb84dd62455818d00973644555400330cdfeb29e7a5
MD5 5b3738819c7889defc9c53d7fe580db9
BLAKE2b-256 b7167e06c51033f61c59a0e29252aa13028d6b7f68ce6c5a9905d7c80302388c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page