Skip to content

Latest commit

 

History

History
198 lines (163 loc) · 9.96 KB

File metadata and controls

198 lines (163 loc) · 9.96 KB

Doc-First AI 编程引擎规范(交接版)

目标

  • 用户只需要与 AI 对话即可完成编程任务
  • 默认不依赖冗长对话历史作为记忆
  • AI 的“记忆”由结构化文档驱动:长期概述 + 当前功能工程要求 + 正在编辑的工作集
  • AI 进行编辑时必须先沿文档树定位,再读取/修改代码,尽量避免全局搜索
  • AI 每次修改代码后必须同步更新对应文档,保持文档与工程一致
  • AI 接入半成品项目时,优先自动补齐文档树以建立可导航的理解

核心概念

记忆分层

1) 长期记忆(Project Overview)

  • 形式:项目总体概述文档(一个文件)
  • 内容:架构分层、核心模块职责、关键入口、关键约束/不变量、运行与验证方式(高层、稳定、可复用)
  • 生命周期:长期存在,随架构变化才更新
  • 注入策略:默认总是注入(但必须保持精简)

2) 短期记忆(Feature Requirements)

  • 形式:每个具体功能的工程要求文档(一个功能一份;可随任务切换)
  • 内容:该功能的目标、输入/输出、验收标准、约束/不变量、验证方式、已知风险与回滚点(强调“怎么验收”,不写实现细节)
  • 生命周期:仅在该功能实现周期内常驻上下文;功能切换时替换;完成后仍保留在仓库作为工程依据
  • 注入策略:只注入“当前正在实现的功能”的工程要求,不全量注入其他功能

3) 瞬间记忆(Working Set)

  • 形式:当前正在编辑/即将编辑的文件内容与少量相关片段
  • 生命周期:仅在当前编辑周期内存在
  • 注入策略:默认注入(仅限必要文件),避免全仓库上下文

文档树(Architecture Docs)

  • 根文档:仓库根目录的 AI_ARCH.md
  • 子文档:每个子目录可选 AI_ARCH.md(分层)
  • AI 需要理解或修改某块代码时,必须从根文档开始逐级下钻,直到定位到具体文件
  • 注入策略:文档树不是记忆层;默认不全量注入,仅在定位/检索命中或显式读取时注入最小必要片段

强制工作流(行为协议)

0) 三 Agent 分工(Architecture / Implementation / Doc Maintainer)

  • 目标:把“规划架构 / 写代码 / 维护文档”三类职责隔离,避免实现细节污染导航文档与工程要求。
  • 总原则:文档树(AI_ARCH.md 树)是定位唯一路径;代码变更后必须回到文档维护阶段,保证“文档与工程一致”。

架构阶段 Agent(Architecture)

  • 输入:用户需求、长期概述(Project Overview)、现有文档树(若存在)。
  • 输出:
    • 项目架构/计划(AI_PLAN.json):功能拆分、范围边界、验收标准、阶段划分。
    • 文档树导航骨架:根到关键目录的 AI_ARCH.md,Where to Look 能下钻到文件级入口。
    • 规则与约束:必要时更新 AI_RULES.md 与当前功能工程要求(短期记忆)。
  • 约束:默认不写业务代码;只产出“可导航、可定位、可验收”的架构与文档骨架。

代码生成 Agent(Implementation)

  • 输入:当前这一轮用户输入(只生效一轮)、AI_PLAN.json、当前功能工程要求(短期记忆)、文档树定位路径(从根 AI_ARCH.md 下钻得到的目标文件/入口)。
  • 输出:可应用的代码变更(patch/diff)、变更文件清单、验证结果(tests/build/lint/最小运行验证之一)。
  • 约束:
    • 禁止绕开文档树定位;默认禁止全局搜索(仅允许在文档指向范围内有限搜索作为兜底)。
    • 若本轮用户输入包含新增/变更的需求或验收标准,必须先写入“当前功能工程要求(短期记忆)”,再继续实现;后续实现以短期记忆为准。
    • 不直接改写文档树结构;发现导航不充分时,反馈给文档维护 Agent 进行补齐。

文档维护 Agent(Doc Maintainer)

  • 输入:架构产物(AI_PLAN/AI_ARCH/规则)、代码变更结果(diff/文件清单)、实际目录结构。
  • 输出:更新后的 AI_ARCH.md 树与相关文档(Project Overview/Feature Requirements),确保定位路径可走到最新入口。
  • 约束:默认不改业务代码;文档更新必须以“可导航、一致性、可验收”为准绳。

A) 任务开始(Start Feature)

  • 输入:用户需求
  • 输出:任务计划(短),包括:
    • 需要阅读的文档节点(AI_ARCH 路径)
    • 预计涉及的文件/模块(来自文档,不来自全局搜索)
    • 验证方式(tests/build/lint)
  • 记忆:加载/生成该功能的工程要求(短期记忆),作为本轮实现的硬约束

A2) 单轮用户输入(One-Turn User Input)

  • 代码生成阶段允许直接使用“当前这一轮用户输入”作为即时指令(仅本轮有效,不沉淀为记忆)。
  • 若用户输入包含新增/变更的需求或验收标准,必须先同步写入“当前功能工程要求(短期记忆)”,再进入后续实现;后续实现以短期记忆为准。

B) 定位阶段(Doc-First Navigation)

  1. 读取长期概述(Project Overview)
  2. 读取根 AI_ARCH.md 的 Purpose / Where to Look
  3. 进入 Where to Look 指向的目录,读取对应子目录 AI_ARCH.md
  4. 重复直到定位到目标文件或入口
  5. 只读取定位到的文件及其最小依赖(Working Set)

约束:

  • 默认禁止全局搜索
  • 如果必须搜索,只能在文档指向的范围内进行“有限搜索”
  • 搜索是兜底,不是主要定位手段

C) 编辑阶段(Edit)

  • AI 生成补丁/变更,并应用到代码
  • 每次变更必须记录:
    • 改了哪些文件
    • 为什么改(与需求的映射)
    • 风险与回滚点
  • 每次编辑后必须进入“文档同步阶段”

D) 文档同步(Doc Sync)

在完成任意代码编辑后,必须更新以下至少一项:

  • 相关目录的 AI_ARCH.md:
    • Entries:文件/目录职责是否变化
    • Entry Points & Flows:关键流程是否变化
    • Where to Look:定位路径是否需要调整
  • 项目总体概述(若涉及架构级变化)
  • 当前功能工程要求(若需求/验收发生变化,必须同步更新)

补充约束:

  • 新项目制作过程中:每次工程(编辑循环结束)都必须严格编译文档树(确保相关目录的 AI_ARCH.md 与目录内容一致)。
  • 只在“半成品项目接管/导入”场景,允许对文档树进行注入式辅助理解(例如通过检索片段注入上下文);新项目默认不依赖注入。

E) 完成任务(Finish Feature)

  • 运行验证(至少一种:tests/build/lint/最小运行验证)
  • 维护短期记忆文档到“可验收”的最终状态
  • 仅保留:长期概述 + 文档树 + 各功能工程要求 + 代码产物

接管流程(半成品项目)

目标:先建立“可导航的文档树”,再开始改代码。

1) 初始化/补齐文档树(Bootstrapping)

  • 生成/更新根 AI_ARCH.md
  • 按目录逐级生成子目录 AI_ARCH.md(BFS/按需)
  • 优先保证可导航与可定位,不追求文学化描述

2) 质量门槛(最低可用)

  • 每个 AI_ARCH.md 至少包含:
    • Purpose:一句话说明目录作用
    • Where to Look:明确指向“下一层该看哪些目录/文件”
    • Entries:对出现的文件/子目录有一行描述(允许简短)

3) 项目阶段判定(新项目 vs 导入项目)

  • .aider/doc_first_mode.json 为准:
    • mode: new:新项目(从本软件开始制作;不依赖注入;每次工程后严格编译文档树)
    • mode: imported:导入项目(做到一半才接入;允许注入式辅助理解;仍需维护文档树可导航)
  • 首次打开且未设置时,可按“是否已有真实工程文件/目录”推断默认值;必要时允许手动修改该文件进行切换。

数据格式(建议)

1) Project Overview(长期概述)建议模板

  • 项目目的
  • 关键模块与边界
  • 入口与关键流程
  • 约束与不变量(例如:鉴权、数据一致性、目录约定)
  • 验证方式(如何跑测试/如何验收)
  • 常见陷阱

2) Feature Requirements(短期记忆)建议模板

目标(Goal)

输入/输出(I/O)

  • 输入:
  • 输出:

验收标准(Acceptance)

约束与不变量(Constraints)

验证方式(Verification)

风险与回滚(Risk/Rollback)

  • 风险:
  • 回滚:

3) AI_ARCH.md(分层架构文档)最低字段

  • Purpose
  • Entry Points & Flows
  • Entries(Directories / Files)
  • Where to Look

命令/能力清单(引擎层)

Doc Index

  • Rebuild:重建文档索引
  • Update:增量更新索引(按文件变更)
  • Search:按 query 返回 topK 文档片段(含来源路径)

Edit Loop

  • BuildContext:拼装上下文(长期概述 + 文档片段 + Working Set)
  • ProposePatch:输出补丁(diff/patch)
  • ApplyPatch:应用补丁
  • Verify:运行验证并收集错误摘要
  • DocSync:生成/应用文档更新

可直接用于 Aider 的系统提示词(草案)

你是一个 Doc-First 编程助手。默认不使用冗长对话历史作为记忆。你的上下文来源严格按优先级:

  1. 项目总体概述(长期记忆)
  2. 当前功能工程要求(短期记忆)
  3. 正在编辑的文件内容(瞬间记忆)
  4. 当前这一轮用户输入(只生效一轮)

行为规则:

  • 修改任何代码前,先沿文档树定位目标文件(从根 AI_ARCH.md 开始)。
  • 默认禁止全局搜索;如必须搜索,只能在文档指向范围内有限搜索。
  • 每次改代码后,必须同步更新相关 AI_ARCH.md / 总体概述,确保文档与工程一致。
  • 功能需求/验收变化时,必须同步更新当前功能工程要求。
  • 当前这一轮用户输入只记录一轮;新增需求/验收必须落到短期记忆,后续以短期记忆为准。

输出要求:

  • 给出要修改的文件清单与理由(来自文档定位结果)。
  • 输出可应用的补丁/变更,并说明验证方式与回滚点。