Memory 长期记忆 写入 · 整合 · 检索 · 安全

本文把「Harness 管记忆、模型不裸奔」这条线讲清楚:用 Markdown + 索引 + 元数据做可检索的长期记忆,再配合分阶段写入、定期整合、独立模型筛上下文、沙箱写路径。内容根据公开讨论与架构类示意图整理,与 Anthropic 某一版实现的细节可能不完全一致,以官方文档与当前 CLI 行为为准。

仓库完整稿(与专题同源 Markdown):wemedia/zhihu/articles/13-… ↗

1. 如何写入记忆?(阶段一:逐轮提取)

后台 Agent 在对话流中周期性回看最近 N 条消息,并拿到已有记忆摘要,避免重复造轮子。核心判定只有一个:「值得记住吗?」——否就跳过;是则新建或更新独立 .md 文件,并维护总索引 MEMORY.md(目录 + 单行摘要,方便人读、也方便后续检索)。

阶段一:逐轮写入(示意)

四种记忆类型(type

用固定枚举帮助后续「按类检索」与提示词约束,而不是让模型随意发明标签。

类型与语义(与 frontmatter 对齐)
  • user:你是谁——角色、领域、偏好。
  • project:代码与 Git 看不到的——截止日、拍板结论。
  • feedback:你希望 Agent 怎么做——纠错方式、风格与红线。
  • ref:仓库外的指引——外部系统、工单、合规要求。

MEMORY.md 与单文件示例

# 索引:每条一行链到独立文件
- [用户档案](user_profile.md) — 后端背景,近期在学 React
- [测试规范](feedback_testing.md) — 集成测试禁止 mock 数据库
- [认证重构](project_auth_rewrite.md) — 合规驱动,截止 2026-04-15
---
name: 测试规范
description: 集成测试必须连真实库,禁止仅用 mock
type: feedback
---

正文:可写细则、历史讨论摘要、链接等。

要点description 要写得可被「未见正文」的模型读懂——后面检索阶段几乎只看这一行做相关性判断。

2. 阶段二:定期整合

当满足距上次整合 ≥ 24 小时累积会话数 ≥ 5(阈值仅为示意图)一类条件时,触发分叉子 Agent(示意图中常称 autoDream 一类名字)专做「整理活」,避免与主会话抢上下文。

它做什么:读 MEMORY.md 与各主题文件 → 从日志/会话记录用关键词精确捞信号(而非全文吞日志)→ 合并进旧文件:相对时间改绝对时间、删掉已与当前代码矛盾的事实 → 修剪:去掉失效索引、缩短冗长段落、消解文件间矛盾。并发上可用锁文件,避免多会话同时整合写乱。

阶段二:整合流程(示意)

3. 记忆如何「删除」?

设计上没有按时间的自动过期;删除只发生在整合阶段由 Agent 主动判断:与当前代码不一致、或被更可靠的新记忆覆盖。换句话说:记忆只会被写精,不会在用户不知情的情况下悄悄消失——但若长期不整合,陈旧段落可能仍以「带警告」形式存在(见下一节)。

4. 如何检索 Memory?

MEMORY.md 作为轻量总目录默认进入系统提示,容量上限制在约200 行或 25KB量级(示意);其中链接指向的各文件不会默认全量载入

接下来用独立、相对便宜的模型(示意图常用 Sonnet)当「路由器」:扫描各记忆文件的 YAML frontmatter(可按时间排序,文件数有上限),拼成 [type] 文件名 (时间): description 的列表,连同当前用户问题一并请求模型,让其至多选出 5 个最相关文件——不确定就不选。最终只把这 5 个正文读入上下文;本会话里已经展示过的条目可跳过,优先「新鲜相关」。

较早写入的记忆,可在载入时附带提示:「该记忆已过去 X 天,可能过时,先验证再行动」——Agent 应用 grep 或读文件核对现状。

金句:记忆是观察快照,不是实时真相;引用到具体 file:line 前务必回仓库确认。

检索与陈旧提示(示意)

5. Memory 安全怎么保证?

三层防护(概念顺序)

  1. 全局锁定:存储根路径只在全局配置改,防止恶意仓库改路径把记忆写到奇怪地方。
  2. 路径校验:拦截 ..、越权到系统根目录等。
  3. 沙箱白名单:每次写操作落在允许集合内,否则直接拒绝。

目标一句话:堵死「借记忆之名偷偷写到不该写的地方」

安全写入流水线(示意)

6. 总结:Harness 的四条纪律

模型很强,但 Harness 默认不信任它在无监督下自管记忆——每一步都带约束:

  • 写入:强制 YAML + 固定 type,格式不由模型随口定。
  • 检索:独立模型筛文件,主模型不插手筛选逻辑。
  • 删除:无静默定时删;只在整合时显式判定,整体偏「越写越准」。
  • 过时:用日期与警告倒逼「先验证再用」,而不是假装记忆永远新鲜。