最近一段时间,我反复在想一个问题:
我们到底应该给 AI 构建什么样的工作环境,才能让它持续地产出相对可靠的结果?
这个问题并不是从“模型能力够不够强”开始的,而是从很具体的开发体验开始的。
在实际的 AI 辅助开发里,大家大概率都遇到过几类问题:
- AI 生成得很快,但上下文一长就开始漂移
- 同一个问题,在不同轮次里会出现不一致的判断
- 文档、代码、测试彼此脱节,最后谁也说不清“当前以什么为准”
- 产出当下看起来合理,但过几天再看,已经很难继续复用
这些问题让我慢慢意识到,AI 协作里真正难的,也许不是“让 AI 生成”,而是:
怎么给它一个足够稳定的工作环境,让它生成的东西能被保留下来,并且在下一轮还能继续作为可靠输入。
一、问题不只是模型能力,而是工作环境
一开始我们很容易把问题归结为:
- 模型还不够强
- 上下文还不够长
- 提示词还不够细
这些当然都有关,但做着做着会发现,很多时候问题并不完全出在模型本身。
更常见的情况其实是:
- 没有明确的入口文档
- 没有清晰的权威来源
- 没有阶段边界
- 没有对结果的回写机制
于是 AI 每次都像在“重新理解这个项目”。
它不是在一个稳定系统里工作,而是在一堆临时上下文里猜。
所以我后来越来越倾向于一个判断:
AI 产出不稳定,很多时候不是因为它不会做,而是因为我们没有给它一个适合工作的环境。
二、什么样的环境更适合 AI 工作?
我现在会把这个环境拆成 5 个关键词:
- 入口
- 边界
- 状态
- 验证
- 回写
1. 入口
AI 需要知道“从哪里开始理解项目”。
如果一个项目里没有明确入口,它就只能在很多文件中自己判断什么重要、什么不重要,这时候跑偏几乎是必然的。
所以我觉得,项目里应该有一个明确的总入口,比如:
docs/README.md
这个入口不需要很长,但要明确:
- 项目是什么
- 当前有哪些模块
- 需求文档在哪里
- 开发文档在哪里
- 测试和验收以什么为准
2. 边界
AI 需要知道不同文档分别负责什么问题。
如果一个文档既写需求,又写实现,又写测试,那对人和 AI 都不友好。
所以边界应该尽量清晰:
- 项目总览:定义范围和入口
- 需求目录:定义需求生命周期
- 开发目录:沉淀实现结构和代码规范
- 测试与验收:负责验证和回写
3. 状态
AI 需要知道“当前到哪一步了”。
没有状态,所有文档看起来都像“差不多”,但实际上草稿、评审中、已确认、开发中、测试中,含义差很多。
所以我后来给需求目录引入了一套最小状态机:
draft -> reviewing -> approved -> implementing -> testing -> done
这件事看起来不大,但对 AI 判断“现在应该生成什么、更新什么”帮助很大。
4. 验证
AI 生成的内容不能只停在“写出来了”,还需要有验证依据。
在软件项目里,这个验证依据最自然的载体就是:
- 测试用例
- 验收结果
所以如果一个需求目录里已经有测试用例,那么 AI 在开发前就应该读取它;开发完成后,验收也应该回到这份测试用例上来验证。
5. 回写
这是我现在最看重的一点。
AI 产出要变可靠,不是靠“记住”,而是靠“回写”。
也就是说:
- 技术方案不是生成完就结束
- 开发文档不是写完就不管
- 测试结果不是执行完就消失
而是每一轮结果都要回写进系统,成为下一轮新的输入。
这时,AI 不是一次次“重新理解项目”,而是在一个持续积累的结构里工作。
三、顺着这个想法,我做了一个 Skill
有了上面的想法之后,我开始想:
既然问题不只是“写不写文档”,而是“如何构建一个让 AI 能稳定工作的环境”,那是不是可以把这套方法固化下来?
于是后来慢慢做出了这个 project-doc-governance-skill。
它的目标其实不复杂:
不是帮项目一次性生成很多文档,而是帮助项目逐步建立一个适合 AI 工作的环境。
我给它定了几个原则:
1. 优先复用项目已有规则
它不会默认推翻现有项目。
如果项目已经有:
- 目录结构
- 需求编号规则
- 文档入口
- Git / SVN 配置
那就优先复用。
只有在项目没有明确规则时,才回退到默认值。
2. 不做一次性脚手架生成
如果一开始就把一整套目录和文件全部铺出来,看起来很完整,但大概率后面没人维护。
所以这个 skill 的工作方式改成了:
- 用户在对话里明确进入哪个阶段
- Skill 只创建当前阶段需要的最小文档
- 后续随着项目推进继续补充
它更像一个“阶段驱动的文档代理”,而不是脚手架工具。
3. 一需求一目录
需求目录是我觉得特别重要的一层。
一个需求目录里可以包含:
REQ-001-用户登录验证/
├── README.md
├── PRD.md
├── prototype.html
├── technical-design.md
├── test-cases.md
├── acceptance.md
└── changelog.md
但这些文件不是一次性都生成,而是按阶段出现。
这样做的好处是:
- 上下文集中
- 生命周期完整
- 后续复盘容易
- AI 更容易找到正确输入
4. 开发目录单独存在
我后来也越来越觉得,需求目录里的技术方案文档和开发目录里的实现文档,不是一回事。
- 需求层的技术文档更偏“方案”
- 开发目录的技术文档更偏“落地”
例如:
docs/development/
├── README.md
├── architecture.md
├── path-conventions.md
├── coding-standards.md
├── interaction-map.md
└── commit-conventions.md
这部分存在的意义不是“写得更漂亮”,而是帮助人和 AI 都知道:
- 代码该写到哪里
- 模块怎么交互
- 规范怎么执行
5. 测试真正进入闭环
如果需求目录里已经有 test-cases.md,那它不应该只是附件,而应该同时服务两个阶段:
- 开发阶段:AI 需要先读取测试用例,再开始实现
- 验收阶段:根据测试用例验证结果,并回写
acceptance.md
这样整个链路才是闭环,而不是“代码写完就结束”。
四、这个 Skill 解决的其实不是“文档生成”
如果只看表面,这个 skill 像是在做文档治理。
但如果再往深一点看,它真正想解决的是:
如何让 AI 在一个项目里工作得更稳定。
我现在越来越觉得,AI 协作的关键不只是提示词,也不只是模型,而是:
你有没有给它提供一个稳定的工作环境。
一个环境如果具备这些特征:
- 有总入口
- 有分层边界
- 有生命周期状态
- 有测试和验收约束
- 有回写机制
那 AI 的产出就会更容易沉淀成“下一轮还能继续用的结果”。
否则,很多产出都只是一次性的。
当下看起来有帮助,但过不了多久就会失效。
五、这件事目前还远没有结束
老实说,这个 skill 现在也还远远谈不上“完美”。
它更像是我这段时间围绕这个问题做的一次系统化尝试。
目前已经补上的部分包括:
- 优先规则 + 回退规则
- 项目识别决策表
- 生命周期状态机
- 开发目录模板
- 测试闭环硬规则
- 中英文双版本 skill
但我觉得后面还有很多可以继续打磨的地方,比如:
- 更细的开发目录模板
- 更明确的验收模板
- 更好的仓库发布体验
- 更适合团队协作的默认约定
所以这篇文章也不是在说“这是一个成熟答案”。
更像是一次分享:
我是从“AI 在项目里为什么总会慢慢失真”这个问题出发,才逐步做出了这样一个 skill。
如果这个思路也能给你一点启发,那这篇文章就值了。
六、最后一句
我现在比较相信的一句话是:
AI 产出是否可靠,很多时候不取决于它这一轮说得多对,而取决于它有没有被放进一个可以持续积累、持续验证、持续回写的环境里。
这个 skill 本质上就是在尝试做这件事。
不是让 AI 更“自由”地工作,而是让它在一个更适合协作的环境里工作。
仓库地址: github.com/LaiGZ/proje…
欢迎各位大佬指导~