先说一个你可能也遇到过的场景。
上周我跟我的 AI 助理说:“以后写公众号的文章,标题不要用问句。”它答应了。
这周我又发了一篇,标题是个问句。
我问它:“我不是说过不要用问句吗?”
它说:“抱歉,我没有这条记录。”
那一刻我才意识到一个事:它每次对话都记得清清楚楚,但只要这次对话结束,一切归零。
它不是笨。它是从来不做梦。
人靠睡觉整理记忆,AI 呢?
人白天接收的信息,是在晚上睡觉的时候才真正被整理的。浅睡扫一遍、深睡挑出重要的、REM 阶段把不相关的连起来,长出新的东西。
AI 缺的正是这一环。
我把这个想法做成了一个东西,叫记忆梦境引擎,开源在这里:
https://gitee.com/savantcat/memory-dream-engine
它干的事很简单:让你的 AI 每 3 小时睡一觉。
它到底卡在哪三个地方
我把“AI 失忆”拆开看,其实是三个不同的病:
| 症状 | 真实原因 |
|---|---|
| 「我上周说过不要这样,你怎么又忘了」 | 记忆只活在当次对话里,从不沉淀 |
| memory 越写越满,快撑爆上限,但不敢删 | 没有衰减机制,不知道哪条该淘汰 |
| 攒了一堆零散结论,没人把它们变成产出 | 采集和产出之间断了一环 |
这三个病,对应三种药。所以整个引擎是五阶段的,本身就像一次完整的睡眠:
┌─ 浅睡 ── SignalCollector 采集四维信号(决策 / 纠偏 / 工具 / 灵感)
│
一轮 ───┼─ 深睡 ── SignalScorer 三维动态评分(按信号类型自适应调权)
(180min)│ MemoryWriter 去重 + 合并 + 替换,声明式写入
│
└─ REM ── SproutDetector 3 条 → 星球帖 / 5 条 → 公众号文章
▲
MemoryOptimizer 每 3 轮深度清理(去重 / 过期 / 压缩)
四个“别人没有”的点
市面上做 AI 记忆的项目不少,我列四个我认为真正有区别的:
一、零 LLM 事实提取。
纯正则,中英文通吃。提取一万条,不花一分钱 token。
这点很多人一开始不信,觉得“不用大模型怎么可能提取事实”。但事实提取这件事,本质是模式匹配,不是语义理解。用大模型去做,是拿高射炮打蚊子。
二、艾宾浩斯衰减。
30 天半衰期。常被访问的记忆自动增强,长期不用的自动归档。
记忆会自己“瘦身”——这是我做这个引擎最得意的一点。
三、三维动态评分。
决策类信号看“持久度”,纠偏类信号看“纠偏度”,工具类信号看“复用度”。
不是一把尺子量到底。
四、内容发芽。
同一批记忆攒够了,它会主动提示你:“这批可以出一篇公众号了。”
采集和产出之间那一环,被接上了。
和“溯忆”比一下
溯忆(Suyi)是同类里做得比较早的,我认真对比过:
| 特性 | 梦境引擎 | 溯忆 |
|---|---|---|
| 艾宾浩斯衰减 | ✅ | ✅ |
| 零 LLM 提取 | ✅ 中英文 | ⚠️ 仅英文 |
| 五阶段流水线 | ✅ | ❌ |
| 四维信号采集 | ✅ | ❌ |
| 三维动态评分 | ✅ | ❌ |
| 内容发芽 | ✅ | ❌ |
| 三方依赖 | 零 | 需向量库 |
一句话概括差别:溯忆是“被动存储”,梦境引擎是“主动生长”。
60 秒跑起来
约 800 行 Python,零三方依赖,纯标准库,8 个单元测试全过。
git clone https://gitee.com/savantcat/memory-dream-engine.git
cd memory-dream-engine
python -m pip install -r requirements.txt
python cli.py
接进你自己的 Agent
引擎不绑定任何框架,你只要实现三个适配器函数:
from engine import DreamEngine
def my_session_search(query, limit, sort):
return [{"content": "...", "role": "user"}]
def my_memory(action, target, content, old_text=None):
return {"status": "ok"}
def my_get_usage():
return (1500, 2200) # (已用字符数, 总字符数)
engine = DreamEngine(
session_search_fn=my_session_search,
memory_fn=my_memory,
get_usage_fn=my_get_usage,
)
report = engine.dream(days_back=2, existing_memories=[...])
print(report.summary())
顺便澄清一个坑:早期版本 README 里写过“编辑 .env 配置环境变量”,那是错的——引擎从不读任何环境变量,接入方式只有上面这一种:传 Python 函数。已经改过来了。
一个必须提醒你的运维坑
这个坑我踩了两次,值得单独说:
多数 Agent 框架的 cron 子进程,没有 memory 工具的权限。
后果是:引擎照常采集、照常评分,但阶段三(写入)和阶段四(优化)会静默失败。你会发现报告里反复出现“阶段3:写入 — 受阻”,同一批高分记忆连着几轮都写不进去。
解法是:每跑 3 轮 cron,安排一次交互式会话手动补写阶段三和四;memory 占用到 95% 时立刻清理。
定时任务能读、不一定能写——这个边界一定要先测。
最后说两句
我做这个引擎,起因就是开头那句“我没有这条记录”。
当时我有点不服气。不是因为 AI 忘了,是因为它从来没有机会去记住——没有人给它设计一个“睡觉”的时间。
现在它每 3 小时睡一觉。醒过来的时候,多多少少比睡前聪明一点。
记忆不是越多越好,是越活越好。
引擎开源在这里,MIT 协议,另有部署指南和 8 个单测:
https://gitee.com/savantcat/memory-dream-engine
我做的其他几个开源工具都放在这个门面里:
https://gitee.com/savantcat/savantcat-portfolio
我们下期见。
#AI第二大脑 #知识管理 #AIAgent #记忆系统 #效率提升
你的 AI 有没有过“我明明说过”的时刻?欢迎在评论区吐槽。
>
觉得这篇有用,点个 赞 或 在看,让更多需要的人看到它。