关于 dream
Mem0 Dream 是整理项目记忆的技能,可按保留策略查找近似重复、矛盾和过期条目。应用更改前会展示提案供确认;自动模式会跳过需要人工判断的矛盾。
主要功能
- 01加载保留策略
- 02获取全部项目记忆
- 03识别重复项和矛盾项
- 04标记过期或低置信度条目
- 05应用前审核更改提案
- 06自动模式跳过矛盾项
适用场景
- 01合并重复的项目记忆
- 02审查相互矛盾的已存决策
- 03按保留规则清理记忆
- 04自动整理并延后处理矛盾
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mem0ai/ mem0 --skill dream安装后在 Claude Code 中输入/dream确认已加载。
详细介绍
Mem0 Dream — 记忆整合
此技能会执行一次记忆整合:获取所有项目记忆、找出近似重复项、标记矛盾,并根据配置的保留策略清理过时条目。所有拟议更改都会以差异形式显示,供用户批准后才会进行修改。
重要:严格按顺序执行步骤(1 → 2 → 3 → 4 → 5 → 6)。每一步都依赖上一步。不要并行执行步骤,也不要跳过步骤。
步骤 1:加载保留策略
运行解析器脚本,确定当前启用的保留策略。根据当前平台使用适当的 PLUGIN_ROOT 变量(${CLAUDE_PLUGIN_ROOT}、${CODEX_PLUGIN_ROOT} 或 ${CURSOR_PLUGIN_ROOT}):
python3 "<PLUGIN_ROOT>/scripts/parse_mem0_config.py" "<cwd>"
解析 JSON 输出(一个 category → days | null 字典)。如果脚本失败或返回 {},则使用以下内置默认值:
metadata.type | 默认保留期 |
|---|---|
session_state | 90 天 |
compact_summary | 90 天 |
| 所有其他类型 | 不清理 |
保存已确定的策略,以供步骤 3 使用。
步骤 2:获取所有项目记忆
调用 get_memories,检索当前项目的所有记忆:
get_memories(
filters={"AND": [{"user_id": "<active_user_id>"}, {"app_id": "<active_project_id>"}]},
page_size=200,
)
如果响应显示还有更多页面,则继续翻页,直到获取所有记忆。收集完整列表后再继续。如果未找到任何记忆,则打印:
No memories found for project <project_id>. Nothing to consolidate.
……然后停止。
步骤 3:分析 — 查找问题
完全在内存中处理;暂时不要修改任何内容。
按 metadata.type 对记忆分组(字段缺失时使用 "unknown")。
针对每个分组,找出以下内容:
3a. 近似重复项(合并候选项)
当两条记忆表达相同的事实或决策,但措辞不同(例如,“使用 PostgreSQL 进行身份验证”和“身份验证数据库是 PostgreSQL”)时,它们属于近似重复项。
启发式规则 — 若以下条件全部成立,则两条记忆属于近似重复项:
- 相似度阈值:估算的余弦相似度 > 0.9(以名词/关键词重合度作为替代指标 — 如果重要名词的重合度 >60%,则视为相似度 >0.9)。
metadata.type相同。- 两条记忆均未固定(
metadata.pinned != true)。
针对每对符合条件的记忆,拟定一个比任一原始版本都更完整、更具体的合并版本。
3b. 矛盾
当两条记忆对同一主题提出相反事实(例如,“部署到 ECS”与“部署到 Vercel”)时,它们互相矛盾。
确定可能胜出的记忆:较新的记忆优先;若置信度更高,则优先级更高。 保存两条记忆的 ID 和内容,供用户审查。
3c. 清理候选项
符合以下任一条件的记忆属于清理候选项:
- 其
metadata.type有保留策略,且记忆的创建时间早于配置的天数(将created_at与今天比较)。 - 其置信度低于 0.3,且不包含本项目独有的信息(没有文件路径、标识符或领域专属名词)。
始终跳过 metadata.pinned == true 的记忆,无论其年龄或置信度如何。
步骤 4:打印差异报告
在进行任何更改之前,将结构化差异打印到终端。必须严格使用以下格式:
## dream — consolidation report
Merges (<N>):
[mem0:<id1>] + [mem0:<id2>] → "<merged content, 100 chars>"
Conflicts (<N>):
[mem0:<idA>] vs [mem0:<idB>] — "<topic>" [A/B/skip]
Prune (<N>):
[mem0:<id>] — <type>, <age>d old
Proposed: <N> merges, <N> prunes, <N> conflicts. Apply? [Y/n]
如果某个类别中没有项目,则完全省略该部分。
如果没有任何拟议更改(无合并、无清理、无冲突),则打印:
Dream complete. No duplicate, contradictory, or stale memories found.
……然后停止。
步骤 5:等待用户输入并应用更改
5a. 矛盾
对于报告中的每对 CONFLICT,等待用户输入 A、B 或 skip(不区分大小写)。如果用户未输入内容(为空),则视为 skip。
在进行最终应用确认之前,记录每对冲突的胜出项。
5b. 最终确认
收集完所有冲突的处理结果后,提示:
Apply? [Y/n]
如果用户输入 n 或 no(不区分大小写),则打印 Cancelled. No changes made. 并停止。
如果用户确认(输入 Y、yes,或直接按 Enter),则按以下顺序应用所有更改:
合并
对于每对已批准的合并项:
delete_memory(<id1>)delete_memory(<id2>)- 使用以下参数调用
add_memory:text="<merged content>"user_id=<active_user_id>app_id=<active_project_id>(顶层参数,不在 metadata 中)metadata={"type": "<original type>", "branch": "<active_branch>", "confidence": <higher of the two original scores>, "source": "mem0-dream"}infer=False
矛盾(已解决)
对于用户选择 A 或 B 的每项已解决冲突:
- 删除未选中的记忆:
delete_memory(memory_id=<loser_id>)
用户选择 skip 的矛盾保持不变。
清理
对于每个待清理项:
delete_memory(<memory_id>)
第 6 步:打印摘要
应用所有更改后,打印:
Dream complete — merged: <N>, pruned: <N>, conflicts resolved: <N>, skipped: <N>
自动模式
使用 --auto 调用时(例如 /mem0:dream --auto),以非交互方式运行:
- 合并:自动应用(无矛盾,且两项兼容)。
- 清理:自动应用(基于时间和置信度,不存在歧义)。
- 矛盾:跳过——需要人工判断。
并发保护
开始任何工作之前,检查 /tmp/mem0_dream_auto.lock 中是否存在锁文件:
- 如果锁文件存在且创建时间不足 10 分钟,打印
[mem0-dream --auto] Another run in progress — skipping.并停止。 - 否则,创建锁文件(写入当前时间戳)。完成后删除该文件(包括所有退出路径)。
执行
在自动模式下:
- 按正常流程加载策略并获取记忆(步骤 1–3)。
- 静默应用合并和清理,不打印差异或提示用户。
- 打印简要摘要:
[mem0-dream --auto] project=<id> merged=<N> pruned=<N> conflicts_skipped=<N> - 如果检测到但跳过了矛盾,在存储提醒之前,检查是否已存在
mem0-dream-auto提醒:- 搜索现有提醒:
search_memories(query="mem0-dream contradictions manual review", filters={"AND": [{"user_id": "<active_user_id>"}, {"app_id": "<active_project_id>"}, {"metadata": {"source": "mem0-dream-auto"}}]}, top_k=1) - 如果存在相似度 > 0.9 的结果,则跳过存储提醒(已有提醒)。
- 如果没有匹配项,则存储提醒:
add_memory( text="mem0-dream detected <N> contradiction(s) requiring manual review. Run /mem0:dream to resolve them interactively.", user_id="<active_user_id>", app_id="<active_project_id>", metadata={"type": "task_learning", "source": "mem0-dream-auto", "branch": "<active_branch>"}, infer=False, ) - 搜索现有提醒:
另请参阅
/mem0:forget— 定向删除特定记忆(搜索 + 确认 + 删除)/mem0:health --deep— 快速质量扫描,不应用更改