提出 docs-first 项目内存架构:将权威知识存储在人可维护的文档,用向量搜索和图索引作为加速层供 Agent 查询。避免复杂检索技术反而丧失可维护性。
在为 AI Agent 设计项目记忆时,人们很容易先去选择检索技术。但在嵌入文档、存储对话或构建图谱之前,项目需要先确定:持久化知识究竟存放在哪里。dotdotgod 的做法是,将这些知识保存在可供人们审阅和进行版本管理的文档中,再使用搜索和图谱作为派生层,将 Agent 引导至它们所需的文档。这就是文档优先(docs-first)项目记忆的基本结构。
前几篇文章介绍了目录、文件名和 README 文件如何为 AI Agent 构成文档目录,以及 dotdotgod 如何让这份目录保持更新。本文将在此基础上继续深入,把项目记忆的权威来源与可从中重建的检索数据区分开来。
项目记忆包含多个生命周期不同的层次。
维护中的文档可以由人们阅读、修改和审阅。当这些文档被提交到 Git 后,项目就可以追溯其内容何时发生变化,并在同一次变更中审阅 spec 与测试之间的关系。
.dotdotgod/ 下的 vector cache 由选定的 Markdown 段落计算得出。graph cache 除了索引文档之间的关系,还会索引 package、源代码、测试和配置的 metadata。二者都能提升检索速度与质量,但对于产品行为和设计决策的权威解释,仍然来自维护中的文档和代码。
Maintained documents
├── relationship extraction → graph index
├── passage embedding → vector cache
└── selective reading → session context
这些箭头的方向非常重要。维护中的文档负责保存含义;graph、vector cache 和 session context 则负责为当前任务检索并提供这些含义。
将源数据与派生层分离,可以形成清晰的故障边界。删除 vector cache 并不会影响 Markdown 源文件;过期或损坏的 graph index 也可以根据 repository 中的文件重新构建。当语义检索不可用时,Agent 仍然可以通过目录文档地图和 README 索引进行导航。即使某个 Agent session 已经结束,共享规则和 spec 也依然保留在 repository 中。
随着模型、embedding 格式和 Agent 工具不断变化,这种可恢复性能够保护项目的核心知识。local vector cache 和 graph cache 与其源数据相互分离,因此可以根据源文件、维护中的文档和项目配置重新计算。
当问题与文件名使用不同措辞时,自然语言检索非常有用。用户可能会问:“为什么旧计划没有包含在默认 context 中?”而相关文档的名称却是 LOAD_PROJECT.md 和 MEMORY_AREA_CONFIG.md。即使表述方式不同,多语言 embedding search 也可以找出含义相关的段落。
但仅凭语义上的接近程度,无法判断一个段落究竟是当前 spec、历史计划,还是未经验证的想法。目录路径会揭示文档的角色,而每个 README 则为其所在区域提供局部索引。Memory area 描述其作用范围,以及内容属于 fresh 还是 stale;显式 traceability 则把 spec 与实现和测试连接起来。
因此,搜索结果只是一个候选地址,指向值得阅读的源文档。Agent 会检查结果的路径和角色,阅读相关源文档,然后再作出决定。
relationship graph 可以找出那些在文件发生变更后,值得一同审阅的 spec、测试和命令。Markdown 链接、README 路径、package 关系以及结构化 traceability 提供了这些连接。
graph score 用于确定审阅优先级。结果会随着已记录关系的覆盖范围和质量而变化,因此,最终决定仍然需要通过阅读并验证排名最高的 spec、代码和测试来作出。
vector retrieval 和 relationship graph 从不同的输入出发。
每种方法都从不同的起点提供了一条返回维护中源文档的路径。
当 Agent 进行选择性阅读时,文档优先的结构最能发挥作用。dotdotgod 的 Load 工作流通过五个步骤,缩小当前任务的阅读范围。
检查 AGENTS.md、repository README 和 docs/README.md 等入口点。
在大范围阅读文档正文之前,先构建一份有深度限制的文档地图。
当用户提出问题时,使用语义检索缩小文档路径的范围。
只选择与当前任务相关的计划或历史记录。
阅读所需源文档中的相关章节。
Load 的输出是临时检索 context,会根据当前 session 和问题进行组织。后续任务可以基于同一批源文档,创建一条不同的阅读路径。
仅靠检索准确率,无法保证 AI 项目记忆的质量。人们必须能够审阅结果背后的源数据。路径必须能够区分当前 spec 与历史记录。即使搜索索引被删除,项目知识也必须继续存在;不同的 Agent 也必须能够访问相同的源数据和规则。
文档优先的项目记忆以可审阅的源数据为基础,把 vector retrieval、graph 和 Load 用作导航工具。
维护中的文档负责保存项目记忆。检索结果则指向当前值得阅读的那部分记忆。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。