AI 聊完就忘?我给它做了个“做梦”系统

📅 2026-09-12 · 👤 合尘猫 · 🧰 开源实践

先说一个你可能也遇到过的场景。

上周我跟我的 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 有没有过“我明明说过”的时刻?欢迎在评论区吐槽。

>

觉得这篇有用,点个 在看,让更多需要的人看到它。

🎁 想跟上AI行业变化?

加入知识星球,获取更多AI实战内容与行业洞察

立即加入 →

本文由 合尘猫 原创,首发于 https://savantcat.cn,转载须注明出处。