PostgreSQL码农集散地

给 mem0 增加图存储记忆

为什么 AI Agent 需要记忆? 不用多说, 可阅读:
 《AI Memory 赛道分析:大模型越来越聪明,记忆确成了瓶颈》
PowerMem 未来可能成为 OB 的杀手锏

Agent 的记忆可内置(指由AI Agent服务提供商包含的能力, 是个黑盒, 你不需要知道)也可外挂(第三方插件), mem0就是外挂插件, 当然它自身也提供了云存储服务, 将记忆存储在云端. 也支持使用你自己的数据库存储记忆.

记忆存储需要用到 embedding、chunk、图的三元素转换等.

记忆召回则分为语义、图、模糊搜索、全文检索、关键词搜索、混合搜索、重排等.

mem0 目前支持将记忆存储在 PostgreSQL 中, pgvector存储向量, age存储图.

但是图的支持不是特别友好, 用M3实现了一把.

MiniMax M3 还不错, 用它顺利给 mem0 增加了图存储. (如果需要, 可通过如下链接订购双双折上再9折.  

https://platform.minimaxi.com/subscribe/token-plan?code=B9CalvTqij&source=link

  )

进入正题, mem0增加了图存储功能代码已提交到: https://github.com/digoal/mem0 

/goal 实现 mem0 原生图存储功能, 使用 postgresql apache age . 
/goal 全面测试 mem0 原生图存储功能(postgresql apache age). 

交付顺利

✅ 实现完成:mem0 原生图存储(Apache AGE)

核心代码(mem0 源码树)

┌───────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────┐
│               文件                │                                      作用                                       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/graphs/base.py               │ GraphStoreBase 抽象接口(add_node/edge/search/get_neighbors/delete/reset)      │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/graphs/apache_age.py         │ ApacheAGE 实现,复用 psycopg/psycopg2 池、agtype 解析、标识符注入防护           │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/configs/graphs/apache_age.py │ ApacheAGEConfig Pydantic 配置(与 PGVectorConfig 同等严格)                     │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/configs/base.py              │ 新增 GraphStoreConfig + MemoryConfig.graph: Optional[...] 字段,默认 None       │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/utils/factory.py             │ GraphStoreFactory(与 VectorStoreFactory 同模式)                               │
├───────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────┤
│ mem0/memory/main.py               │ Memory.graph_store 懒加载属性 + add_to_graph / search_graph 方法(同步 + 异步) │
└───────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────┘

测试(40 用例全过)
- tests/graphs/test_apache_age.py — 标识符安全、agtype 解析、3 种连接方式、9 个 Cypher 操作、Config 校验、Memory 接线、节点去重

文档
- docs/components/graph-stores/overview.mdx + dbs/apache_age.mdx
- docs/open-source/configuration.mdx 加 graph 示例
- docs/docs.json 加 "Graph Stores" 导航组
- docs/llms.txt 加 [OSS] 条目(docs-llms-txt-check.yml 验证通过)
- examples/graph-db-demo/apache_age_example.py 完整可运行示例

核心特性:单连接pgvector向量与ApacheAGE图双存储

回答你的关键问题 — 是,可以:

config = {
"vector_store": {"provider": "pgvector", "config": {…PG 连接…}},
"graph":       {"provider": "apache_age", "config": {…同一 PG…}},
}

更进一步:通过 connection_pool 参数可让 PGVector 和 ApacheAGE 共享同一个 psycopg 连接池(无需第二个池)。test_init_with_shared_connection_pool 用例专门验证了这条路径。

使用真实环境测试并修复 bug:

  变更:
  - mem0/docs/integrations/claude-code-pgvector-age.mdx 自托管场景:mem0 的向量存储与图存储都跑在你自己的 PostgreSQL 实例上,向量用 pgvector、图用 apache_age 扩展。Claude Code 通过一个本地 stdio MCP 服务器访问 mem0。
  - mem0/graphs/apache_age.py — 11 个 bug 修复(标识符校验、agtype_map 替换、cypher dollar-quoting、search SQL 回退、commit 传递、共享池保护等)
  - mem0/configs/graphs/apache_age.py — ruff 格式化
  - tests/graphs/test_apache_age.py — mock 测试适配新 SQL 形态
  - tests/graphs/test_apache_age_integration.py (新增) — 23 个活集成测试
  - docs/integrations/claude-code-pgvector-age.mdx (新增) — Claude Code + pgvector + AGE 配置手册
  - docs/components/graph-stores/auto-extraction.mdx (新增) — 自动抽取限制说明 + 桥接 helper
  - docs/llms.txt, docs/docs.json — 导航接入

附: mem0 与 AI Agent、数据库的三角关系

这四者(Mem0、Claude Code、pgvector、Apache AGE)共同构成了一个现代高效、具备“长期记忆”与“工程落地能力”的 AI Agent 技术生态。

1. 核心技术关系:一图看懂

这四个组件不是竞争关系,而是上下游的上下层建筑关系:

┌────────────────────────────────────────────────────────┐
│               【应用/开发层】 Claude Code                │  <-- 开发者编写、调试 Agent 的 AI 终端工具
└──────────────────────────┬─────────────────────────────┘
                           │ 驱动 / 使用
┌──────────────────────────▼─────────────────────────────┐
│               【记忆管理层】 Mem0                        │  <-- 智能体记忆管理框架 (提供内存/向量/图谱三层记忆)
└──────────────────────────┬─────────────────────────────┘
                           │ 存储与检索实现 (提供持久化底座) 
 这里少画了一层数据处理层: embedding , 将原始文本转换成向量.   
                        chunk 或 三元转化, 将原始文本打散或提取图的点、边、属性三元素再存入图中. 
┌──────────────────────────┴─────────────────────────────┐
│               【统一数据库底座】 PostgreSQL               │
│  ┌───────────────────────────┬──────────────────────┐  │
│  │    pgvector (向量扩展)     │ Apache AGE (图扩展)   │  │  <-- 提供底层数据的存储、索引与混合召回
│  └───────────────────────────┴──────────────────────┘  │
└────────────────────────────────────────────────────────┘
┌──────────────────┐    stdio      ┌───────────────────────┐    psycopg    ┌────────────────────────────┐
│  Claude Code     │ ───────────▶  │ mem0-local-mcp-server │ ───────────▶  │  PostgreSQL                │
│  (CLI / Cowork)  │ ◀───────────  │ (Python MCP server)   │ ◀───────────  │  ├─ pgvector (向量)         │
└──────────────────┘               └───────────────────────┘               │  └─ Apache AGE (图)        │
                                                                           └────────────────────────────┘

核心组件角色拆解

组件
核心角色
比喻
核心能力
Claude CodeAgent 开发者/执行环境
聪明的手和脑
Anthropic 推出的命令行 AI 助手,可直接操作代码、运行测试。在开发 Agent 时,它是编写、测试和运行智能体逻辑的利器。
Mem0Agent 记忆管理引擎
记忆皮层(意识流)
连接大模型与数据库。负责把用户的对话“脱水”提炼成事实(Facts),决定什么时候存、什么时候删、怎么查。
pgvector向量数据库扩展
右脑(模糊语义记忆)
PostgreSQL 的向量插件。将记忆转化为向量,实现“基于语义相似度”的模糊搜索(如:记得用户喜欢喝拿铁)。
Apache AGE图数据库扩展
左脑(逻辑实体关系)
PostgreSQL 的图插件。支持 Cypher 语法,将实体和关系连成网,实现“多跳逻辑推理”(如:A是B的经理,B在C项目组)。

2. 如何工程化通过 Mem0 提升 AI Agent 体验?

AI Agent 最大的痛点是 “短时失忆” (每次对话都是陌生人)或 “上下文爆炸” (把所有历史揉进 Prompt 导致费用飙升且模型抓不住重点)。

工程化落地 Mem0 的核心目标是: 打造一个“低成本、高召回、具备自进化能力”的记忆体。

🛠️ 生产级落地架构图

在实际工程中,建议采用统一的 PostgreSQL(同时挂载 pgvector 和 Apache AGE)作为单一真理源,简化运维成本。

              ┌──────────────────────────┐
              │ 用户输入 (User Input)     │
              └────────────┬─────────────┘
                           │
                           ▼
              ┌──────────────────────────┐
              │   AI Agent (逻辑控制)     │
              └──────┬────────────▲──────┘
                     │            │ 3. 注入带记忆的 Prompt
       1. 提取/检索   │            │
                     ▼            │
    ┌──────────────────────────────────────────┐
    │                 Mem0                     │
    │  (记忆自适应调度:动态提取、评估、进化)       │
    └────────────────┬─────────────────────────┘
                     │
                     │ 2. 混合召回 (Hybrid Search)
                     ▼
    ┌──────────────────────────────────────────┐
    │           PostgreSQL 数据库               │
    │  ┌──────────────────┬─────────────────┐  │
    │  │     pgvector     │   Apache AGE    │  │
    │  │ (向量: 相似度匹配) │ (图谱: 关系推理)  │  │
    │  └──────────────────┴─────────────────┘  │
    └──────────────────────────────────────────┘

4 大工程化落地策略

① 实施“三路融合”的高效检索 (Hybrid Retrieval)

不要只依赖向量搜索。工程上,Mem0 通过底层技术支持原始记忆、向量、图谱三路召回:

  • 向量路由 (pgvector) :负责捕捉用户情绪、偏好等模糊语境。
  • 图谱推理 (Apache AGE) :负责精确锁死多实体关系,抑制大模型幻觉(Hallucination)。
  • 工程结果:对比全上下文(Full Context)塞入 Prompt,Token 消耗可降低 90% 以上,响应速度大幅提升。

② 记忆的“异步脱水”与写入

千万不要让用户在线等待记忆写入。

  • 做法:在 Agent 给出回复后,将“当前对话”投递到消息队列(如 Kafka/RabbitMQ)。
  • 后端处理:Mem0 异步调用低成本的大模型进行“记忆提取”(如:“我下周要去北京出差”  提取事实:[User, travel_to, Beijing, next_week]),然后写入数据库。

③ 引入“记忆自进化”与清理机制

记忆不能只增不减,否则会产生垃圾数据和冲突。

  • 冲突更新:用户今天说“我喜欢苹果”,下周说“我现在讨厌苹果”,Mem0 需具备自动识别时序并更新 Facts 的能力。
  • 权重衰减:引入类似 RRF(Reciprocal Rank Fusion)或时间衰减系数,久未提及的弱记忆自动降级或归档。

④ 用 Claude Code 加速 Agent 本身的迭代

在工程开发阶段,利用 Claude Code:

  • 自动化测试:让 Claude Code 自动编写测试脚本,模拟多轮对话,测试 Mem0 的记忆召回率(Recall Rate)。
  • 精细化 Prompt 调试:利用 Claude 强大的长文本和逻辑能力,调整 Mem0 提取 Fact 时的 System Prompt,确保提取的信息精准无误。

小结

提升 AI Agent 体验的核心在于 “让智能体像人一样克制地记住关键信息” 。通过 Mem0 组织意识逻辑,用 PostgreSQL (pgvector + Apache AGE) 实现低成本、高内聚的“图文/向量双驱一体化”存储,最后用 Claude Code 提升开发全链路的效能。这就是目前业内走向生产级(Production-ready)Agent 的标准技术栈之一。