我开源了一个 AI Agent 三层记忆系统:语义 + 情景 + 程序性记忆

12 阅读3分钟

标题: 我开源了一个 AI Agent 三层记忆系统:语义 + 情景 + 程序性记忆

标签: AI, LLM, Agent, 开源, RAG


问题

我在构建 AI Agent 时遇到一个反复出现的问题:Agent 不断犯同样的错误。

部署应用 → 忘了数据库迁移 → 数据库崩溃。下次运行,同样的事情再次发生。

把"使用 PostgreSQL"存为事实并没有用。Agent 需要记住发生了什么以及流程应该如何改变

认知科学的启发

人类使用三种记忆:

记忆类型存储内容例子
语义记忆事实、知识"项目使用 Railway 部署"
情景记忆事件和结果"5月12日部署失败,忘了迁移"
程序性记忆工作流程"部署流程:构建→迁移→推送→部署"

目前大多数 Agent 记忆系统只实现了语义记忆。我把三层都实现了,并且开源了。

架构

1. 语义记忆 — 实体知识图谱

基于实体的知识图谱,事实挂载在实体上,实体之间有类型化关系。

实体: "Railway" (技术)
  事实: ["用于部署", "需要预检查迁移"]
  关系: → used_by → "项目X"

检索管线:Vector (HNSW) → BM25 (ts_rank_cd) → RRF 融合 → 图扩展 → 时间衰减+MMR → 重排序

2. 情景记忆 — 带结果的事件

从对话中提取事件,包含时间、参与者,以及关键的结果(成功/失败/待定)。

json

{
  "summary": "数据库因缺少迁移而崩溃",
  "outcome": "已解决",
  "resolution": "添加了部署前迁移检查",
  "date": "2025-05-12"
}
```

当 Agent 遇到类似情况时,情景搜索会返回过去的经验——什么有效,什么失败了。

### 3. 程序性记忆 — 会进化的工作流

这是最核心的部分。程序是从对话中提取的多步骤工作流。当程序失败时,它会自动进化:
```
v1: 构建 → 推送 → 部署
      ↓ 失败:忘了迁移
v2: 构建 → 运行迁移 → 推送 → 部署
      ↓ 失败:内存溢出
v3: 构建 → 运行迁移 → 检查内存 → 推送 → 部署 ✓

每个程序跟踪成功/失败次数,Agent 可以评估可靠性。

提取管线

单次 LLM 调用从对话中提取所有三种类型。去重使用 embedding 相似度(阈值 0.85)+ 大小写无关的名称匹配。

支持的 LLM:

  • 云端:OpenAI GPT 系列
  • 本地:Ollama(Llama 3.1 8B+、Mistral 7B、Gemma2 9B)

快速开始

bash

pip install mengram-ai

python

from mengram import Mengram

m = Mengram(api_key="om-...")

# 添加对话 — 自动提取三种记忆
m.add([
    {"role": "user", "content": "今天部署到 Railway,构建通过但忘了迁移,数据库崩了。加了预检查修复了。"}
])

# 统一搜索
results = m.search_all("部署问题")
# → {semantic: [...], episodic: [...], procedural: [...]}

# 程序反馈 — 触发进化
m.procedure_feedback(proc_id, success=False, context="第3步内存溢出")

也提供 JavaScript SDK、REST API 和 MCP Server(支持 Claude Desktop、Cursor)。

技术栈

  • Python + FastAPI
  • PostgreSQL + pgvector(HNSW 索引)
  • BM25 混合搜索(tsvector + ts_rank_cd)
  • OpenAI / Ollama 本地推理

开源

GitHub: github.com/alibaizhano…

Apache 2.0 许可证,免费使用。支持自托管(Ollama)或云端。

免费额度:每月 30 次添加、100 次搜索。


如果你也在做 Agent 记忆相关的工作,欢迎交流。特别想了解大家对"程序性记忆"的看法——有没有更好的方法来解决 Agent 重复犯错的问题?