# 三行速读

  1. 记忆系统的核心是 “筛选”,不是 “囤积”。
  2. 只保存跨会话仍有价值、且不易从当前仓库重建的信息。
  3. 记忆治理(合并、裁剪、过期)和记忆写入同样重要。

# 先修知识

  • 已理解 s06 的上下文压缩与存储分层。
  • 知道会话内状态与跨会话状态不是一回事。

# 读完后你应该能做到(可检验清单)

# 本篇要解决什么

会话结束后,哪些信息应该被保留到下次?s09 回答的是 “长期记忆边界”,不是 “把一切都存起来”。

核心问题:什么值得记,什么不该记。

# 用一个类比先理解

把记忆当 “项目交接手册”:

  • 记长期有效规则(风格偏好、团队约定、关键背景);
  • 不记短期临时状态(某次命令输出、当前游标位置)。

手册是为了下次接手更快,不是为了复制整个工作台。

# 为什么这一步必须现在做

如果没有记忆系统,跨会话协作会重复沟通;但如果记忆无边界,系统会被过时信息污染。s09 就是在建立 “长期价值筛选器”。

# 关键代码怎么读

# 1) 记忆存储结构

1
2
3
MEMORY_DIR = WORKDIR / ".memory"
MEMORY_INDEX = MEMORY_DIR / "MEMORY.md"
MEMORY_TYPES = ("user", "feedback", "project", "reference")

类型化是关键,它为后续检索和治理打基础。

# 2) MemoryManager 的核心职责

1
2
3
4
class MemoryManager:
def load_all(self): ...
def load_memory_prompt(self) -> str: ...
def save_memory(self, name, description, mem_type, content) -> str: ...

它做三件事:加载、注入、保存。职责清晰,便于扩展。

# 3) frontmatter 化存储

1
2
3
4
5
6
7
8
frontmatter = (
"---\n"
f"name: {name}\n"
f"description: {description}\n"
f"type: {mem_type}\n"
"---\n"
f"{content}\n"
)

可读、可查、可审计,比黑盒存储更适合教学与团队维护。

# 4) DreamConsolidator 的治理入口

1
2
3
4
class DreamConsolidator:
COOLDOWN_SECONDS = 86400
SCAN_THROTTLE_SECONDS = 600
MIN_SESSION_COUNT = 5

这部分强调 “慢治理”:记忆不是每轮都重排,而是按策略周期整理。

# 你可以怎么复现

  1. 先保存 3 条不同类型记忆。
  2. 重新启动会话,观察是否成功注入。
  3. 再刻意保存一条无价值临时信息,体会污染效果。

# 常见误区

  • 误区 1:把可从仓库重建的信息也写入记忆。
  • 误区 2:没有类型,后续召回杂乱。
  • 误区 3:不做清理,记忆库越积越脏。

# 一句话总结

s09 不是 “增加存储量”,而是 “增加跨会话方向感”。

# 补充解读:记忆系统的治理层设计

# A. load_all() 为什么不依赖 MEMORY.md 单点

1
2
3
4
for md_file in sorted(self.memory_dir.glob("*.md")):
if md_file.name == "MEMORY.md":
continue
parsed = self._parse_frontmatter(md_file.read_text())

它是 “从原始条目重建索引”,而不是盲信索引文件。这样索引损坏也能恢复。

# B. _rebuild_index() 的上限策略

1
2
3
if len(lines) >= MAX_INDEX_LINES:
lines.append(f"... (truncated at {MAX_INDEX_LINES} lines)")
break

这里在主动控制记忆可读性。上限不仅是性能问题,也是认知负担控制。

# C. save_memory() 的命名清洗

1
safe_name = re.sub(r"[^a-zA-Z0-9_-]", "_", name.lower())

这是非常实用的文件系统兼容处理,能避免奇怪标题导致落盘失败。

# D. Dream 七道门(should_consolidate)

这段 gating 思维很值得学:不是 “想合并就合并”,而是满足条件才执行,避免在高负载 / 低价值时做无用治理。

# 进阶练习

  1. 给 memory 条目增加 updated_at ,做最近使用淘汰。
  2. 给 Dream 增加 “同义合并” 策略。
  3. 测试异常 frontmatter 时的健壮性(空字段、乱码、缺失 type)。

# 统一术语口径(本章)

  • Memory Entry :可跨会话复用的持久知识条目。
  • Memory Index :记忆条目的摘要索引视图。
  • Consolidation :记忆去重、合并、裁剪的治理过程。

# 章节衔接(从易到难)

  • 本章解决 “跨会话方向感”。
  • 下一章 s10 进入 “模型输入面如何管道化组装”。