Skip to main content

Memory management framework for AI agents

Project description

neuromem

AI Agent 多层记忆框架

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

  • ingest() 自动提取四种记忆:Fact(持久事实)、Episode(带时间戳的情景记忆)、Graph(实体关系图谱)、UserProfile(用户画像)
  • digest() 自动周期性反思,从多轮对话中自动提取 Insight(用户洞察,如行为模式、情感画像)
  • recall() 将多层记忆融合排序后返回,零额外代码组装进 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/yourusername/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. 多因子检索(cosine 相关性 + 时效性 + 重要性)
        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. 生成洞察和情感画像(可选,定期调用)
        insights = await nm.digest(user_id="alice")
        print(f"生成了 {insights['insights_generated']} 条洞察")

asyncio.run(main())

核心操作流程

neuromem 的核心使用围绕三个操作:

插入记忆(自动模式,默认):

  • 对话驱动:ingest() 存储对话 并自动提取记忆(推荐,像 mem0)

召回记忆(recall)

  • await nm.recall(user_id, query) — cosine 相似度为主信号,时效性和重要性为加成,找出最匹配的记忆
  • 在对话中使用:让 agent 能"想起"相关的历史信息来回应用户

生成洞察(digest)(可选,定期调用):

  • await nm.digest(user_id) — 高层记忆分析:
    1. 提炼洞察:从已提取的记忆生成高层理解(行为模式、阶段总结)
    2. 更新画像:整合情感数据,更新用户情感画像
  • 让记忆从"事实"升华为"洞察"

ingest() 默认 auto_extract=True,每次调用自动提取记忆。digest() 专注于生成 Insight 和更新情感画像,不处理基础记忆提取。

逻辑关系

对话进行中 → 存储消息 (ingest) → 自动提取记忆
     ↓
agent 需要上下文 → 召回记忆 (recall)
     ↓
定期分析 → 生成洞察 (digest) → 洞察 + 情感画像

核心特性

记忆分类

neuromem 提供 7 种记忆类型,每种有不同的存储和获取方式:

记忆类型 存储方式 底层存储 获取方式 示例
事实 Fact Embedding + Graph pgvector + 关系表 nm.recall(user_id, query) "在 Google 工作"
情景 Episode Embedding pgvector nm.recall(user_id, query) "昨天面试很紧张"
关系 Relation Graph Store PostgreSQL 关系表 nm.graph.get_neighbors(user_id, type, id) (user)-[works_at]->(Google)
洞察 Insight Embedding pgvector nm.recall(user_id, query) "用户倾向于晚上工作"
情感画像 Table PostgreSQL digest() 自动更新 "容易焦虑,对技术兴奋"
偏好 Preference KV (Profile) PostgreSQL nm.kv.get(user_id, "profile", "preferences") ["喜欢喝咖啡", "偏好深色模式"]
通用 General Embedding pgvector nm.recall(user_id, query) 通用记忆

单一 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),偏好存入用户画像
  • 反思 (digest):定期从近期记忆提炼高层洞察(行为模式、阶段总结),更新情感画像
  • 访问追踪:自动记录 access_count 和 last_accessed_at,符合 ACT-R 记忆模型

理论基础:Generative Agents (Park 2023) 的 Reflection 机制 + LeDoux 情感标记 + Ebbinghaus 遗忘曲线 + ACT-R 记忆模型。


路线图

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)
  • 事务一致性 API(delete_user_data / export_user_data)
  • 时间旅行查询(记忆版本化 + as_of 召回 + rollback)
  • 基准测试: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.1.tar.gz (95.6 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.1-py3-none-any.whl (103.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: neuromem-0.9.1.tar.gz
  • Upload date:
  • Size: 95.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for neuromem-0.9.1.tar.gz
Algorithm Hash digest
SHA256 cd6e65e2ca16b3c46a021b7829e2e1b695292014b897c09746a304fd28933be9
MD5 9b8aef9cfe99cecaae3228b7e3e7073a
BLAKE2b-256 0d3bf6995451de1489fac78a437c55dfd8f50354631ddebb89e8ceb1a5aa18d2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: neuromem-0.9.1-py3-none-any.whl
  • Upload date:
  • Size: 103.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for neuromem-0.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9a1e520cec0137ee780c979342dff77a8ec831c56e9c9fe4666ca90bcee19d91
MD5 bfbbd9fc9e198d812815a55c4a62cb62
BLAKE2b-256 116bd48e637d25b4e7a7c2da360cc3c425a82027a4d00e3572c5e72c1b6a57f7

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