长文

别让Agent患上失忆症:双轴决策记忆与退场机制

【DSH 工程哲学】第2篇:剖析 Agent 决策遗忘与方案幽灵复活,揭秘 DeepSeek Harness 670+ 篇 Notes 的双轴状态机与冷冻退场。

这是【DSH 工程哲学】系列的第二篇。在第一篇《跳出工具调用执念》中,我确立了“编写权让渡与裁判权收拢”的底线原则。但当开发者真正开始让 Agent 大规模接管复杂工程时,最先遭遇的幽灵并不是编译报错,而是模型的失忆与反复——两周前全团队刚推翻的错误方案,换个会话后被 Agent 兴高采烈地重新写了出来。本篇直面这一致命瓶颈,拆解 DeepSeek Harness 如何用双轴 ADR(Agent Notes)与冷冻退场机制,为 AI 原生项目铸造长期记忆。

DSH 决策记忆黑匣子与冷冻归档隐喻插图

你是否经历过这样的绝望时刻?

在会话 A 中,你与 Agent 辩论了半小时,最终确定了方案的严重隐患并断然否决;然而两周后,开启了新会话的 Agent 面对相似的需求,又把那个已被否决的方案一字不差地写进了代码库,并附带了一段无比真诚、看似无懈可击的解释。

在传统的软件工程里,这种“幽灵方案反复复活”的现象被称为沟通断层;但在由编码代理主导的工程体系中,这是最致命的系统性危机——Agent 拥有惊人的生成速度,却只有金鱼般的持久记忆。

很多团队试图用更大的上下文窗口(Context Window)或聊天记录摘要来对抗失忆。但事实证明,聊天窗口是转瞬即逝的沙滩,浪潮一过便了无痕迹。代码库真正需要的,是一套被纳入版本控制、受物理门禁捍卫的决策黑匣子。


一、第一性原理:P1 记忆瓶颈原理

在 DeepSeek Harness 源码库 的方法论体系中,最基础的第一性原理即是 P1 记忆瓶颈原理(Memory Bottleneck):

代码只承载“是什么”(What);团队真正丢失的是“为什么这样”(Why)和“为什么不那样”(Why Not)。 任何只存在于人脑、聊天记录或 PR 线程里的决策,都会随人员流动与上下文重置而瞬间蒸发。

代码本身是一具干瘪的骨架。它记录了一个函数接收什么参数、返回什么类型;但它从未记录:

  1. 为什么选择了方案 A 而不是更直观的方案 B?
  2. 方案 B 的致命缺陷究竟是什么?
  3. 未来如果出现什么新条件,方案 B 才可以被重新考虑(复活条件)?

一旦这些信息丢失,后来介入的无论是新员工还是新会话的 Agent,都会不可避免地跳入同一个陷阱。为了解决这一痛点,DSH 放弃了零散的 Issue 讨论,将架构决策记录(ADR)泛化为一种覆盖所有非平凡变更的工程载体——Agent Notes。

flowchart TD
    subgraph P1["P1 记忆瓶颈原理"]
        A[Git 源码] -->|仅承载| B["代码现状是什么 (What)"]
        C[人脑与会话] -->|极易流失| D["为什么这样做 (Why)"]
        C -->|彻底丢失| E["为什么不那样做 (Why Not)"]
    end

    subgraph Defense["DSH 长期记忆防御"]
        F[Agent Notes 决策载体]
        B --> F
        D -->|强制 Decision 节| F
        E -->|强制 Alternatives considered 门禁| F
    end

    classDef primary fill:#2563eb,stroke:#1d4ed8,color:#ffffff
    classDef soft fill:#f8fafc,stroke:#cbd5e1,color:#0f172a
    class F primary
    class A,B,C,D,E soft

二、双轴路径设计:把标签做进物理路径里

在很多团队的文档管理中,最常见的腐化是“文档标签与实际内容漂移”:文件 frontmatter 里明明写着 status: active,但正文里却写着“已被替代”;或者在表格里打着勾,实际代码早已删除。

DSH 采用了一种极度硬核的解决方案——双轴路径设计(Dual-Axis Path): 将记录的两个维度直接编码进文件系统的物理路径中: {lifecycle}/{class}/yyyy-mm-dd-topic-title.md

1. 状态轴(Lifecycle)

  • proposed/(提案中):决策尚未实施或正在审校阶段;
  • implemented/(已落地):当前活跃的权威事实,正文随源码同 PR 更新;
  • rejected/(已否决):明确被否决的提案,永久保留以防止后人重蹈覆辙;
  • archived/(冻结归档):退场的历史事实,永久封印。

2. 类别轴(Class)

来自封闭集合(由 scripts/agent-note-tree.ts 强校验):

  • feature:新引入的用户/模型可见能力;
  • bug-fix:缺陷修复与事故复盘闭环;
  • architecture:交付源码的结构设计、包边界与运行时契约;
  • process:工具链、门禁规则、包管理策略;
  • testing:测试策略与质量套件;
  • simplification:移除冗余代码、缩小表面积(重构不单设类别,属于此类)。

文件夹即标签(Folder-as-Tag)。分类和状态直接是物理路径本身,从根源上消除了“元数据与物理位置不一致”的伪状态。


三、状态机流转与 Alternatives considered 硬门禁

在 DSH 中,写 ADR 不是写随笔,每一篇 Active Note 都必须经历严格的机器语法与结构门禁:

stateDiagram-v2
    [*] --> proposed: 提出变更提案
    proposed --> rejected: 审校否决(记录Verdict)
    proposed --> implemented: 落地并同提交改写
    implemented --> archived: 决策闭合且不指导未来(哈希封印)
    rejected --> [*]
    archived --> [*]

1. 转换即改写(Status Transition is a Rewrite)

当一个提案从 proposed/ 移入 implemented/ 时,绝不仅仅是 git mv:

  • scripts/verify-agent-note-format.ts 强制检查:提案时的将来时标题(如 ## Proposal / ## Plan)严禁出现在 implemented 状态中;
  • 必须原地重写为代表当前事实的现在时 ## Decision,验收清单与风险必须收拢至 ## Consequences。

2. Alternatives considered 强制门禁

在任何一篇决策记录中,必须显式包含 ## Alternatives considered(被考量的替代方案)小节。 门禁脚本会通过正则与 AST 严格扫描这一节的存在性。“不记录落选方案的决策,是在邀请团队重开争端。” 每一项被否决的备选方案,都必须阐明“为何不那样做”,从而在物理上切断 Agent 日后“幽灵复活”该方案的可能。


四、退场的艺术:archived 永久冷冻与哈希封印

许多技术团队的 ADR 库最终退化为垃圾堆,原因在于没有解决退场机制。当代码库演进到数万次提交时,过期的决策会混杂在搜索结果中,成为干扰大模型与人类的陈旧噪音。

DSH 独创了工业级的第三态——archived/ 永久冷冻归档:

  1. 严格归档判据:只有 implemented 能够归档。归档意味着该决策已经彻底闭合,且其推理上下文不再指导未来研发;如果涉及核心安全边界、持久协议或易复发缺陷,必须永久保持 active。
  2. 物理隔离与搜索屏蔽:.rgignore 显式将 archived/ 排除在常规代码检索之外,防止全局 grep 搜出作废的历史事实误导 Agent。
  3. SHA-256 内容哈希封印: 在 scripts/verify-archived-agent-notes.ts 门禁中,每一个被归档的 Notes 三件套(英文 + 中文 + i18n 配置)都会计算其内容的 SHA-256 指纹,并永久封印进 manifest.json。 CI 门禁在每次运行时强制校验:已归档的文件不仅禁止修改,甚至连一个字节的空格变动都会直接触发非零退出。

五、从原理到实践:明天就能用上的落地动作

不要被 DSH 数百篇 Notes 的庞大规模吓退。作为向 AI 全栈转型的中基层工程师,你可以在自己的项目中用 10 分钟 建立第一道记忆防线:

  1. 建立最小目录:在项目根目录创建 .agents/notes/,下设 proposed/、implemented/ 与 rejected/ 三个目录;
  2. 立下第一条团队铁律:凡是非平凡变更(接口变动、引入新依赖、修改构建规则),必须在同一次提交(Same-Commit)中提交一份最小 Notes,必须包含两句话:
    • Why:为什么必须这样改;
    • Why Not:有哪些想到的候选方案,分别因为什么理由放弃。
  3. 把 Notes 变成 Agent 的必读输入:在你的 AGENTS.md 规则中写入一条简单指示:“在执行任何涉及架构与核心逻辑的任务前,必须先检索 .agents/notes/ 中相关决策”。

让 Agent 负责高速生成,让 ADR 守住决策记忆。唯有当每一次取舍都被物理锚定,AI 原生工程才不再是一场在流沙上建高楼的危险赌博。


🛠️ 本课哲学的实证落地:作为 AI Coding 工程质量控制元框架,PonyGo 将上述“双轴决策记忆与退场机制”沉淀为开箱即用的命令行工具。通过内置的 write-adr 规范与 ponygo audit 生命周期自检,现代代码库可以零成本建立起对标 DSH 的物理级决策记忆闭环。实践参考:https://github.com/lanhui100/ponygo

本文目录 本文由 Daniel Ma & AI协同编辑

本文要点

  • 01 一、第一性原理:P1 记忆瓶颈原理
  • 02 二、双轴路径设计:把标签做进物理路径里
  • 03 三、状态机流转与 Alternatives considered 硬门禁