Dream
定时运行的记忆维护:合并重复、收紧触发条件,并留下可审查的日记。
Dream 是 Lore 的定时记忆维护。它每晚检查一遍记忆图谱,做少量谨慎的修正,并写下一篇可以审查、也可以回滚的日记。
一次运行做什么
一次运行先收集启动记忆(boot,即 Agent 在会话开始时加载的基线)、最近一天的召回与记忆活动、路径质量摘要、结构审计、记忆卫生审计,以及最近五条已完成的日记。随后,一个 Agent 使用记忆工具依次完成五个阶段:
- 诊断(diagnose)读取召回查询、卫生审计、结构审计和记忆树,也可以回放真实的召回查询,看当前记忆树会召回什么。不做任何修改。
- 计划(plan)按结构、合并、术语三组列出候选变更,以及被跳过的类目和原因。卫生审计发现可处理的问题时,计划必须给出对应候选,或说明为什么先不动。不做任何修改。
- 预检(preflight)用与普通记忆写入相同的校验,检查每一项拟议写入。
- 应用(apply)执行变更,结构治理优先。一次运行最多两项内容变更(新增、改正文、删除或结构性移动),以及十二项纯卫生操作(修剪术语、把节点移出非规范域)。每次运行最多拆分一个过长节点。
- 审计(audit)记录改了什么、为什么改。随后 Lore 写入一条日记,包含摘要和叙述。
Dream 整理的是记忆树,不是当天的提示词。Agent 在工作时已经带着完整上下文写记忆,因此 Dream 不再从当天的查询里抽取新记忆。
Dream 会查找以下问题:
- 落在
project://、core://、preferences://之外的域、需要归位到规范域的记忆 - 只有占位正文、需要从子节点提炼真实抽象的父节点
- 超过 4000 字、需要压缩为“当前状态摘要 + 历史段落”的记忆
- 明确的重复或近似重复记忆,合并前后回放受影响的查询
- 关键词超过 30 个、需要删除重复、近义和泛化词的术语表
- 被八个以上节点共用、更适合上移到共同父节点的关键词
- 带日期尾缀的路径,以及错放在
core://projects下的项目概念
Dream 读取的是过去一天的召回查询,不读取完整对话,也不会写入召回日志。回放是只读的。
Dream 自己应用变更。你写入时适用的优先级(priority)和触发条件检查,同样适用于 Dream 的写入。每项变更都会记录在节点历史中,并附带审阅标记列在日记条目里。
术语修剪
术语关键词是召回入口,不是标签。每个关键词都会单独生成嵌入并进入语义召回,关键词文本同时参与精确匹配、包含匹配和 BM25 文本匹配。关键词无限增长,会把这条记忆拉进与它无关的提示词里。所以 Dream 只做修剪:对关键词超过 30 个的节点,删除重复、近义词和泛化词。
标识符类关键词不同——hash、版本号、host:port 地址、路径、全大写 token,以及带数字的连字符 token。它们只在有人真的输入该标识符时命中,所以 Dream 保留它们,也从不新增。新增其他任何关键词,都需要回放证据证明真实查询确实无法召回该节点。
定时与设置
Dream 默认开启,每天 03:00 运行。它需要一个 LLM:自托管服务器需要 View LLM,Loremem 云服务需要运行时 LLM 配置。在自托管服务器上,没有 View LLM 时,运行会跳过 Agent 循环,因此不做任何修改。
| 设置 | 默认值 | 作用 |
|---|---|---|
dream.enabled | 开启 | 按计划运行 Dream。关闭即可暂停定时运行。 |
dream.cron | 0 3 * * * | 用 5 段 cron 表达式(分 时 日 月 周)设置开始时间。 |
dream.auto_approve_changes | 关闭 | 变更产生时自动标记为已通过。关闭时,每项变更都以待审核开始。 |
dream.exclude_session_patterns | 空 | 正则表达式列表。召回查询文本命中任一正则的会话,不会进入 Dream 审阅的召回元数据。适合排除机器人和测试运行。 |
在自托管控制台中,这些设置位于 设置 → 做梦计划,标签分别为 定时做梦、做梦 Cron、自动通过 Dream 变更 和 Dream 排除会话。在 Loremem 云服务中,请使用 设置 → Dream。
需要了解的几个细节:
- 在自托管服务器上,cron 表达式按服务器所在时区执行。Docker Compose 读取
.env中的TZ,未设置时默认为Asia/Shanghai,因此请把TZ设为你所在的时区。 - 在自托管服务器上,Lore 每分钟检查一次计划。若服务器在计划时刻未运行,当天的运行就不会执行。无效的 cron 表达式永远不会运行。
- Loremem 云服务按服务时钟执行计划。
手动运行
在调整 Lore,或导入一批记忆之后,可以手动运行 Dream。
- 打开 Dream,选择 立即运行。在 Loremem 云服务中,选择 运行。
- 等待运行结束。状态会从 运行中 变为 已完成 或 错误。
- 先阅读日记条目,再审阅变更。
自托管服务器在一次运行尚未结束时,不会启动第二次运行。
审阅变更
运行中的每项变更都带有一个审阅标记:
| 标记 | 含义 |
|---|---|
| 待审核 | 默认状态。Dream 已做出变更,你尚未审阅。 |
| 已通过 | 你接受了这项变更。自动通过会替你设置此标记。 |
| 已忽略 | 你看过这项变更,但没有认可。Loremem 云服务中,对应的按钮和标记都显示为“已知晓”。 |
在变更上选择 通过 或 忽略,即可设置它的标记。审阅标记只记录你的决定。通过或忽略一项变更并不会撤销它,记忆会保留该变更,直到你回滚或手动修改。
要修正某项变更,在自托管控制台中选择 编辑,打开节点后手动修改。在 Loremem 云服务中,请从 记忆 页面打开该节点。
判断一项变更
在通过之前,先用下表检查每项变更。遇到不满足检查项的变更,应当拒绝或重写。
| 检查项 | 通过条件 |
|---|---|
| 范围 | 变更只解决一个清楚的问题。混合多个主题的变更,应拆分或手动重写。 |
| 触发条件质量 | 触发条件(disclosure)描述一个具体情境,并说明何时该出现这条记忆。不使用 OR 逻辑。 |
| 术语 | 术语是人们在提示词中真正会输入的词:产品名、别名和错误名。 |
| 优先级 | 重要性没有被抬高。0 和 1 只留给核心身份和关键事实。 |
| 没有编造事实 | 内容只写源材料支持的内容。 |
| 可追溯 | 你能说明变更为何有助于未来的召回,并且日记的审计列出了其依据。 |
这条记忆没有通过触发条件检查:它的触发条件同时提到了两种情境,因此其中任一情境出现时,它都可能被召回。
URI: project://checkout_api/webhooks
Priority: 1
Disclosure: When changing refund webhooks or payment webhooks in checkout-api
Glossary: refund webhook, payment webhook, idempotency key
Content: Refund webhooks are idempotent by event.id. Tests must replay the same event twice and assert a single refund row.应拆成两条记忆,分别对应退款 webhook 和支付 webhook。
撤销一次运行
回滚会撤销最近一次运行中的变更。
- 只能回滚最近一次运行。更早的运行不能整体回滚。
- 回滚会撤销该次运行中的每项变更,包括你已通过的变更,以及 Dream 删除或移动的术语关键词。
- 受影响的每个节点都会恢复到运行前的状态。你在运行之后对这些节点做的任何编辑都会被覆盖,因此请先检查。
- 在自托管控制台中,打开 Dream 页面中最近的一次运行,选择 回滚 并确认。在 Loremem 云服务中,打开最近的一次运行,选择 回滚。
如果只想撤销一项变更,请从节点的历史中回滚该节点:
- 在自托管控制台中,打开节点的历史,对你要恢复的新增或修改事件选择 回滚,然后确认。只有新增和修改事件可以这样回滚。
- 在 Loremem 云服务中,节点历史以差异形式显示每次变更。请编辑节点,恢复之前的文本。
安全使用 Dream
注意
Dream 可以新增、修改、移动和删除记忆。在批量通过变更或保持定时运行开启之前,请先备份。
- 开启定时运行之前,先验证备份,并在独立环境中测试恢复。参见 备份与恢复。
- 先手动运行几次 Dream,逐项审阅变更,再依赖定时计划。
- 导入大量记忆时,或嵌入与 LLM 端点不稳定时,暂停定时 Dream。
- 在你信任 Dream 的变更之前,保持自动通过关闭。
- 每次运行后,尝试两三个真实的召回查询,确认你关心的记忆仍能被召回。