Skip to content

文件夹结构怎么定,AI 才不会乱放文件? ​

导读 ​

工程化的本质,是给项目建立一套没有歧义的职责契约:职责槽位、相对路径、命名规则。你可以把项目的控制权完全交给 AI,但为了避免几轮之后项目彻底失控,你至少要掌握项目结构的抓手:在项目守则里注册槽位,让 AI 理解每一类内容归属;后续新增目录时,你也有统一的命名方式。

为什么开头很顺利,越往后越难 ​

前期 AI 产出的代码、文档都能正常跑,但迭代几轮之后项目彻底乱掉。造成这样问题的原因简单得令人咋舌:严谨地说,是因为缺乏工程思维造成的,说直白一些,就是没见(没干)过。

AI 没有维护文档的意识

AI 只管产出能运行的结果,它没有长期维护意识,很容易私自新建文件夹、散落文件、改写原有结构。等到你想要修改、扩展功能时,整个项目没有清晰的抓手,你必须把项目整体再扔给 AI,继续依赖 AI 修改;而 AI 二次改动很容易推翻原有逻辑,把项目改到面目全非、彻底废掉。

我同时不建议你给 AI 下达维护文档的任务和指令,因为前文多次提到,这样会分散 AI 的注意力,非常不利于你的项目推进。

这种工程思维其实很好培养

这种工程思维只要或深或浅地参与过(哪怕盯着别人做一个项目),都能仅靠直觉有所领悟,但是要把这种工程思维写出来反而不容易:这就好比网上有很多“如何骑自行车”的帖子,但是初学者很难找到靠谱的《如何学骑自行车》的教材。这是因为前者默认你已经学会了自行车,所谓“如何骑自行车”的话题,实质是高级玩家的经验分享。

你找这种知识是因为没有经验,但学这种知识却要求你有经验。两头堵了属于是。

当然,我依然不建议现在小白去学编程,因为它的性价比只会越来越低。而且它并不能解决你目前的问题。

我给你的建议是一套无门槛的约束框架:职责槽位 + 相对路径规则 + 守则里的别名表 + 命名规范。

同样的,没有必要背,了解即可。

职责槽位:没有歧义的文件夹结构 ​

我们先建立一个核心概念:职责槽位。你可以粗暴地把它理解为一个“专事专用的文件夹”。一个文件夹就代表一类固定职责:存放什么、能不能修改、给谁看、生命周期是什么。

常见的文件夹结构样例:
text
项目文件夹/
├── README.md          ← 项目卡片:这是什么,东西在哪
├── project-rules.md   ← 规则入口:AI 怎么干活
├── 00_CHANGELOG.md    ← 变更轨迹:每次改了什么,最新在上
├── 01_docs/           ← 决定“怎么做对”的文档
│   ├── spec/
│   ├── lessons.md     ← 踩坑库
│   └── bulletin.md    ← 公告板
├── 02_input/          ← 原料:还没加工的素材
├── 03_output/         ← 产出:将来要交出去的东西
│   ├── draft/         ← 未被确认的文件
│   └── final/         ← 已确认、要交出去的文件
├── 04_references/     ← 外来参照:工具、教程、别人的做法
├── 05_methods/        ← 做法:这件事本身怎么干,连同每一轮运行记录
└── 06_archive/        ← 归档:不再用了,但先别删

数字前缀的好处:视觉上有序、容易识别;AI 在没有额外指令时,很少主动新建带这套编号前缀的顶层目录。一旦 AI 私自新增顶层文件夹,你一眼就能发现它脱离了约定(文件漂移)。

高频基础槽位(绝大多数 AI 协同项目都会用到) ​

槽位标识核心职责读写权限生命周期说明常见子分区
DOCS规格、需求、标准、约束、项目约定、spec、公告板、踩坑经验库可迭代修订项目全程持续更新,是项目的 “宪法”spec、lessons、bulletin
INPUT原始原料、原始数据、原始素材、外部导入源文件只读,禁止修改原始文件一旦入库原则上不改动;数据清洗、衍生产物放到 OUTPUT可按素材类型分子文件夹
OUTPUT项目产出、交付物、生成产物可新增、可修订、定稿后谨慎改动迭代产出,草稿流转,定稿封存draft(待确认草稿)、final(确认定稿交付)
REFS外部参考资料、竞品资料、教程、文献、别人的方案、截图素材只读查阅只收集外部素材,不在这里改写内容可按来源 / 主题分类
METHODS工作流、处理逻辑、实验方案、运行记录、复盘、处理口径、脚本思路持续迭代跟着每一轮实验、开发迭代更新,记录 “怎么做”runs(每轮运行快照 / 日志)
ARCHIVE归档、废弃方案、旧版本、淘汰文档、过期中间稿只读封存,只进不改移出活跃迭代流,备查,不删除按版本 / 时间归档
按需扩展槽位(复杂项目、调研、数据分析、Vibe Coding 工程项目启用,简单项目不用建)
槽位标识核心职责读写权限生命周期说明常见子分区
SRC手写源代码、业务代码(前端 / 后端脚本)频繁修改项目核心开发区,持续迭代components、utils、api、hooks 等代码子目录
SCRIPTS一次性工具脚本、数据清洗脚本、导出脚本、辅助工具,和主业务代码解耦可修改用完可留存,废弃脚本移入 archive按用途分组
TESTS测试用例、测试脚本、测试报告、校验规则随代码 /spec 同步更新跟随迭代维护unit、e2e
ASSETS项目内使用的素材:图标、配图、字体,参与打包编译可新增、替换随项目迭代更新区分处理后资源
PUBLIC静态资源,直接对外托管、不经过编译处理可新增、替换对外静态访问
TEMPLATES文档模板、报表模板、提示词模板、组件模板谨慎修改,模板一旦定版尽量不动模板是基准,实例化副本放到 output
NOTES私人随手笔记、临时想法、碎片化思路,不对外自由读写低约束,仅个人备忘,不纳入正式交付
TEMP真正临时缓存、中转文件、一次性中间产物可随时删除用完即清,gitignore,绝对不长期留存不要和 archive 混为一谈
BACKUP项目快照、独立异地备份(一般放在项目根之外,跨盘)只写入,不直接在备份里编辑备份只读,源文件修改后再生成新快照按版本 / 哈希归档

文件夹命名不是固定的,中英文都行,你能看懂,而且AI 不会产生歧义就足够,但客观上确实存在优劣之分:没有歧义是底线,行业里的固定搭配优先使用。

举具体例子:

plan 和 methods 在中文里都可能被叫成“方法、计划”,但在英文里,plan 更偏向“打算怎么做”,methods 更偏向“用什么方法去做”。

所以用来存放想法和未验证的工作流,以及每一轮怎么干的运行记录,最好选择 methods 给这个文件夹命名。

让槽位真正生效:相对路径 + 别名表 ​

真正让这套契约跑起来的是两层机制:

第一层:使用相对路径,替代绝对路径 ​

  • 绝对路径: 绑定盘符、本机目录,项目迁移、拷贝到 U 盘、换电脑,链接直接失效,而且很难批量修复。

绝对路径样例:D:\project\openbook\docs\spec\constitution.md。

  • 相对路径: 以项目根目录作为唯一锚点。只要项目文件夹整体迁移,根锚点不变,所有引用自动生效。它解决可移植性。

相对路径样例:docs/spec/constitution.md

绝对路径是 \;相对路径是 /。

第二层:别名代号,维护单一真相源 ​

在项目守则里维护一张映射表:语义别名 → 相对路径。文档里只写别名,例如 <DOCS>/spec/constitution.md。后续如果你调整了文件夹名字、调换层级,只修改守则里的某一行映射,所有业务文档不用改动。

总结

在项目文档里新建一份项目守则,里面放一个这样的表格。

代号含义真实位置
<ROOT>项目根目录./
<DOCS>标准与规格文档01_docs
<INPUT>原始输入原料,不可修改02_input
<OUTPUT>交付产出物03_output
<REFS>外部参考资料04_references
<METHODS>工作方法、迭代记录05_methods
<ARCHIVE>归档封存目录06_archive
<BACKUP>独立外部备份F:\backup\my-project

这才是这套体系的核心:文档依赖语义,不依赖磁盘路径。 AI 收到指令「写一份 spec 文档」,它不需要猜路径,直接查表,把内容放到对应槽位。

文件命名规则:同目录下,区分单个文件 ​

这里面存在一个经常被人忽视的细节,槽位(文件夹)已经承载一部分信息了,所以文件名尽量折叠,不用已经明确的信息。比如文件放在 <OUTPUT>/final/auth/,槽位已经说明:产出、定稿、认证模块。

  • ❌ login方案_final.md

  • ✅ login-flow-spec.md

完整文件命名公式(上限,按需折叠):

[三位编号]_[领域]_[简短描述]_[文档类型].[扩展名]

示例:042_auth_login-flow-spec.md

普通文档直接精简为:login-flow.md、refund-rules.md、meeting-notes_2026-09-30.md

版本号规范:优先语义版本 + Git 短哈希 ​

版本号用于快照、打包交付物(zip、pdf 等)。 哈希本身是内容唯一标识,自带迭代身份,是这套体系的主干。

推荐主格式:[项目名]-v[语义版本]-[Git短哈希].[扩展名] 示例:todo-list-v1.0-a3f8c21.zip

语义版本给人看:v1.0 可用版,v1.1 微调,v2.0 重大变更; 短哈希给机器、给核验用:相同哈希 = 内容完全一致,规避人工忘改版本号的问题。

日期属于可选附加字段,不是必需品。如果你需要一眼看交付时间,可以追加: [项目名]-v[语义版本]-[Git短哈希]-[日期].[扩展名] 示例:todo-list-v1.0-a3f8c21-2026-09-30.zip

还没有使用 Git 时,退化为简化版:[项目名]-v[版本]-[日期].[扩展名]

硬约束(全局生效) ​

① 文件名尽量不用中文 中文文件名存在编码兼容风险:命令行、Git、压缩工具、云同步、部分 AI 工具链都可能出现乱码、读取失败。中文描述写在文件内部,文件名优先英文、缩写。

② 不要用空格 空格在终端里会被识别成参数分隔符;用 - 或者 _ 替代。

③ 规避特殊符号 # & ? % ( ) 等符号在 URL、命令行有特殊语义,容易转义报错;文件名只使用字母、数字、-、_、.。

④ 拒绝无意义、容易产生版本灾难的名字

禁用词风险说明
new无法界定 “新” 的基准,版本混乱
test1/test2如果它需要留存,它就不是临时测试文件
最终版、最最终版人为版本标记不可靠,容易无限套娃

除特别声明外,本书内容采用 CC BY-NC-SA 4.0 授权