MemLedger 实战教程:给 AI Agent 装一个可追溯的记忆系统,每个事实都能查来源
用过 Claude Code 或 Codex 的朋友都知道,跨会话记忆一直是 AI 编码 Agent 的痛点。今天的对话里你跟 Agent 说过「项目用 Python 3.12,不要用 TypeScript」,明天新开一个会话它又全忘了。
现有记忆框架(Mem0、Zep 等)虽然解决了「记住」的问题,却带来了一个新麻烦:记忆变成了黑盒。Agent 确实「知道」某些事情,但你根本说不清一个事实从哪来的、为什么被保留了、或者三天前你设定的偏好怎么突然就消失了。当记忆出错时,你只能全部清空重来。
MemLedger(MIT 许可证,Python)用一种全新的方式解决了这个问题——给每一条记忆加上完整的溯源链。可以用一条命令查清某个事实是在哪次对话的哪句话中提取的、由什么模型处理的、什么时候被提升为永久知识的。
MemLedger 的核心设计
三层记忆架构
MemLedger 将 Agent 记忆分为三个层级,模拟人类认知的层次结构:
| 层级 | 名称 | 说明 |
|---|---|---|
| Instinct(本能层) | 核心事实 | 你手动注入或自动提升的永久知识,每次上下文都携带 |
| Episodic(情节层) | 长期记忆 | (主语, 关系, 值) 三元组,带置信度、影响分和 TTL |
| Working(工作层) | 当前对话 | 当前会话的逐轮缓存,对话结束后可提取为情节层 |
三者都建立在一个仅追加的事件账本(Event Ledger) 之上,底层存储是单个 SQLite 文件。账本本身才是唯一的事实来源,投影层(三层记忆)只是加速查询的缓存视图。
四大设计支柱
- 只在需要时调用 LLM:一个零成本的确定性过滤器判断哪些对话轮次值得提取。像「好的,谢谢」这样的废话永远不会消耗 Token,而「部署失败了,因为环境变量配错了」会被捕获。大多数聊天流量是客套话——MemLedger 能识别并跳过。
- 记忆可随模型升级而再生:其他框架一旦写入就冻结了。如果今天的模型提取质量差,那个错误就永久存在。MemLedger 始终保留原始对话源,当更好的模型出现时,运行
memledger regenerate就能从原始历史中重建整个记忆。
- 防投毒设计:新事实先隔离在检疫区,经过多个会话确认后才能成为永久知识。没有你的批准(
memledger review),任何东西都不会变成永久记忆。如果坏事实混进来了,溯源链能定位到源头,级联删除会移除它和所有衍生记忆。
- 真正属于你:单个 SQLite 文件,你选模型——甚至可以用 Ollama 上的免费小模型。无强制服务器,无供应商锁定。MIT 许可证,一台笔记本就能跑。
安装与初始化
pip install memledger
如果需要 CPU 嵌入支持:
pip install "memledger[local]"
初始化数据库:
memledger init
这会在当前目录创建 memory.db 文件。
基础使用:集成到你的 Agent 工作流
以本地模型为例
MemLedger 支持任何 OpenAI 兼容或 Anthropic 的端点。以下是搭配本地 Ollama(Qwen 3:4B)的用法:
from memledger import Ledger, Policy
ledger = Ledger(
"./memory.db",
policy=Policy.default(),
memory_model="openai-compat:http://localhost:11434/v1|qwen3:4b"
)
session = ledger.session(user_id="me")
while (msg := input("> ")):
memories = session.recall(msg, k=5)
ctx = session.build_context(
instinct=True, episodic=memories, working="tail"
)
reply = your_llm(
system=ctx.system, messages=ctx.messages, user=msg
)
session.observe(user=msg, assistant=reply)
print(reply)
report = session.checkpoint()
每段对话结束时调用 session.checkpoint(),MemLedger 会自动完成「提取 → 反思 → 提升」的三步流程,将本轮对话中的关键信息提取为结构化记忆,计算影响分,并在跨多个会话确认后将高置信度事实提升到 Instinct 层。
CLI 命令一览
| 命令 | 用途 |
|---|---|
memledger why | 查看某条记忆的完整溯源链 |
memledger review | 审查待确认的新事实 |
memledger replay --at | 重放到指定时间点的记忆状态 |
memledger rebuild | 从事件账本重建记忆视图 |
memledger regenerate --model | 用新模型重新提取所有记忆 |
memledger delete | 删除某条记忆并级联删除所有衍生内容 |
memledger stats | 查看记忆统计信息 |
实战场景:溯源一条可疑记忆
假设你的 AI Agent 突然在代码审查时强制要求所有函数使用类型注解,但你记得自己从来没设过这条规则。用 memledger why 就能查到来源:
$ memledger why tu_01J9ZKM3 tu_01J9ZKM3 (instinct, active) "Always use type annotations for all function parameters and return values" ├─ promoted 2026-07-02 cause: impact 5.5 ≥ 5 across 4 sessions, approved by dev │ └─ extracted 2026-06-28 model: qwen3:4b prompt: extract@v1 confidence: 0.95 │ └─ observed se_88 turn 3 "please add types, we need type safety in this project" │ └─ observed se_91 turn 12 "again: I want types on every function" └─ approved by user "dev" via `memledger review --approve tu_01J9ZKM3`
原来这条规则来自两周前你在两个不同会话中反复强调的要求,经过系统自动确认后提升为永久 Instinct 记忆。整个过程完全透明,每个决策步骤都有记录。
如果这条规则现在已经不需要了:
memledger delete tu_01J9ZKM3 --cascade
这条命令不仅会删除目标记忆,还会级联删除所有从它衍生出来的子记忆,确保数据一致性。
用配置控制记忆策略
MemLedger 的所有行为由 memory.policy.yaml 控制,包括提升阈值、影响分公式、保留策略和检疫设置。该文件在初始化时生成,配置变更的哈希值会记录在每个事件中,确保配置变化不会重写历史。
promotion: min_impact: 5.0 # 提升为 Instinct 的最低影响分 min_sessions: 3 # 需要在多少不同会话中出现 retention: episodic_ttl_days: 90 # 情节层记忆的默认 TTL quarantine: enabled: true # 新事实默认进入检疫区 auto_promote: false # 是否自动提升(推荐手动审核)
与类似工具的对比
| 特性 | MemLedger | Mem0 | Zep | 原生记忆 |
|---|---|---|---|---|
| 开源许可 | MIT 开源 | 部分开源 | 商业产品 | N/A |
| 溯源链 | ✅ 完整可追溯 | ❌ 黑盒 | ❌ 黑盒 | ❌ 黑盒 |
| 本地方案 | ✅ 纯 SQLite | ❌ 云端优先 | ❌ 云端优先 | ✅ 内置 |
| 防投毒检疫 | ✅ 多会话确认 | ❌ 立即写入 | ❌ 立即写入 | N/A |
| 记忆再生 | ✅ regenerate | ❌ 无法重建 | ❌ 无法重建 | ❌ 无法重建 |
| 本地模型 | ✅ Ollama 支持 | ❌ 需云端 API | ❌ 需云端 API | ✅ 直接注入 |
总结
MemLedger 的核心价值不是「让 Agent 记住更多」,而是让 Agent 记住的每件事都可追溯、可验证、可修复。对于依赖 AI 编码 Agent 的开发者来说,这意味着:
- 当记忆出错时,你能查到源头而不必全部清空
- 当模型升级时,你可以用更好的模型重新提取所有记忆
- 当需要调试时,你能看到完整的决策链
如果你正在给 Claude Code、Codex 或 Cursor 搭建持久化记忆系统,MemLedger 的「可审计记忆」理念值得一试。它用一条 memledger why 命令,打开了一扇其他框架仍然关着的窗户。
相关链接:
- MemLedger GitHub 仓库(MIT 许可证,14⭐)
- MemLedger 使用文档
- Ollama 本地模型部署指南