拒绝“氛围编程”失败:如何用文档驱动系统让 AI 代码助手真正交付
为什么你明明使用了最先进的 AI 编程工具(如 Cursor 或 Claude Code),却依然只能得到一堆无法运行的破碎代码?
核心答案只有一个:问题不在于 AI“幻觉”,而在于你作为操作者缺乏结构化的思维与约束。AI 是一个翻译器,它将你的意图转化为代码;如果你的意图模糊、缺乏约束,输出的结果必然是混乱的。通过建立一套严格的“文档优先”系统,将所有规范、流程和上下文预先固化,你就能彻底解决 AI 编程中的不确定性,真正实现软件的高效交付。
本文将深入探讨如何从混乱走向秩序,利用文档系统和特定的工具链,构建出真正可用的软件产品。
图片来源:Unsplash
为什么你的 AI 编程尝试总是失败?
你失败的根本原因在于你跳过了基础,试图用一句模糊的描述来换取一个完整的应用程序。
如果你不知道什么是组件、什么是状态、为什么页面在手机上会崩坏,你就无法准确地向 AI 描述你的需求。AI 在没有清晰上下文的情况下,只能靠“猜”来填补逻辑空白。每一次猜测都是错误的累积,最终导致系统崩溃。
必须改变的心态:AI 是翻译器,不是魔术师
AI 并不具备直觉,它只能处理你输入的信息。当你说“做一个类似 Airbnb 的网站”时,这个指令对于 AI 来说充满了巨大的变量:是用 React 还是 Vue?数据库选什么?用户权限怎么设计?颜色用什么?如果没有明确的约束,AI 会随意填充这些空白,导致代码结构松散,依赖冲突。
解决之道不在于优化提示词,而在于提升你对构建对象的理解,并将这种理解转化为 AI 能读懂的硬性规则。
深度反思:从“命令者”到“架构师”的转变
我以前也常犯这种错误,打开 Cursor 就开始聊天,指望它能帮我搞定一切。结果往往是生成了一堆看起来很炫酷但实际上根本跑不通的代码。后来我意识到,我把自己当成了发号施令的经理,而 AI 成了一个没有明确执行标准的新手员工。当我开始坐下来,先写清楚需求文档和规范时,项目质量发生了质的飞跃。这不仅仅是多做了工作,这是在为项目打地基。
什么是“文档优先”系统?
要想让 AI 输出高质量代码,你必须先建立一套完整的知识库,这套知识库由六个核心文档和两个会话文件组成。
这套系统的核心逻辑是:在编写任何一行代码之前,先通过文档确立“单一事实来源”。AI 编程工具能力很强但确定性很低,缺乏约束文档会导致 AI 产生幻觉,随意添加你未授权的功能或做出错误的架构决策。
核心文档一:产品需求文档 (PRD)
这是你与 AI 签订的“合同”。它必须包含:
-
构建内容:具体是什么产品? -
目标用户:谁在使用它? -
功能列表:哪些功能在范围内,哪些明确排除在范围外? -
用户故事:用户在什么场景下做什么操作? -
成功标准:怎么做才算“完成”?
没有 PRD,你不是在开发软件,你只是在祈祷。
核心文档二:应用流程文档 (APP_FLOW.md)
用简单的英语或中文记录每一个页面和每一条用户导航路径。
-
触发流程的操作是什么? -
一步步的决策点在哪里? -
成功时发生什么?错误时发生什么? -
屏幕清单与路由规则。
这能有效防止 AI 猜测用户如何在应用中移动,确保交互逻辑的一致性。
核心文档三:技术栈文档 (TECH_STACK.md)
严格锁定每一个依赖包的精确版本。
不要只写“使用 React”,因为 AI 可能会选择任意版本。你应该写明:“Next.js 14.1.0, React 18.2.0, TypeScript 5.3.3”。这样可以完全消除依赖项幻觉和随机的技术选型。
核心文档四:前端指南文档 (FRONTEND_GUIDELINES.md)
这是你完整的设计系统规范,包含:
-
字体:字体系列与大小。 -
色彩板:带有精确十六进制代码的主色、次色、背景色、边框色等。 -
间距标度:如 4px, 8px, 16px 等倍数关系。 -
布局规则:组件样式、响应式断点。 -
UI 库偏好:是否使用特定组件库。
这能彻底解决 AI 随机生成颜色和间距不一致的问题。
核心文档五:后端结构文档 (BACKEND_STRUCTURE.md)
定义数据层的每一个细节:
-
数据库架构:每个表、每一列、类型和关系的定义。 -
认证逻辑:如何验证身份。 -
API 端点契约:接口规则。 -
存储规则与边缘情况。
如果你使用 Supabase,这里应包含精确的 SQL 结构。AI 将根据此蓝图构建后端,而不是基于它自己的假设。
核心文档六:实施计划文档 (IMPLEMENTATION_PLAN.md)
不要只写“构建应用”,要将其分解为:
-
步骤 1.1:初始化项目。 -
步骤 1.2:安装 TECH_STACK.md 中的依赖。 -
步骤 1.3:创建文件夹结构。 -
步骤 2.1:根据 FRONTEND_GUIDELINES.md 构建导航栏组件。
步骤越详细,AI 猜测的空间越小。
两个不可或缺的会话文件
除了上述六个文档,你还需要两个文件来维持会话的连续性和规则执行。
1. 规则文件 (.clauderules 或 .cursor/rules)
这是 AI 在每个会话开始时自动读取的第一个文件。它包含了该会话必须遵循的规则、约束、模式和上下文,例如:
-
技术栈摘要。 -
文件命名约定。 -
组件模式(例如:使用带有 Hooks 的函数组件)。 -
禁止的操作(例如:永远不要使用内联样式,必须使用 Tailwind)。 -
设计系统令牌。
这就是你的 AI 针对特定项目的操作手册。在 Cursor 中,你可以将项目规则放在 .cursor/rules/ 目录下;在 Claude Code 中,放在根目录的 .clauderules 即可。
2. 进度跟踪文件 (progress.txt)
这是最容易被忽视但最重要的文件。由于 AI 在会话之间没有记忆,当你关闭终端或开启新聊天时,一切都会归零。progress.txt 充当了你的外部记忆桥。
文件内容示例:
已完成:
- 通过 Clerk 实现用户认证
- 带侧边栏导航的仪表板布局
- 产品 API 端点 (GET /api/products)
进行中:
- 产品详情页 (/products/[id])
- 需要连接前端到 API
下一步:
- 购物车功能
- 使用 Stripe 结账
已知 Bug:
- 移动端导航点击链接后不关闭
每次完成一个功能后,你都要虔诚地更新这个文件。每当开始新会话、切换分支或一周后回归项目时,AI 读取此文件,就能瞬间接续上你的工作进度,无需从头重新解释。
如何在写代码前对 AI 进行“审讯”?
在编写任何文档之前,必须先让 AI 彻底剖析你的想法。这是改变一切的关键步骤。
核心操作:使用以下提示词,强制 AI 进入“仅规划模式”:
“
“在编写任何代码之前,请进入仅规划模式,不断地审讯我的想法。不做任何假设。一直提问,直到没有任何假设为止。”
AI 应该问你的关键问题
如果 AI 没有主动问,你需要确保自己能回答这些问题:
-
这是为谁服务的? -
用户采取的核心行动是什么? -
完成该行动后会发生什么? -
需要保存什么数据? -
需要显示什么数据? -
出错时怎么办? -
成功时怎么办? -
需要登录吗?需要数据库吗?需要在手机上工作吗?
实战案例:食谱分享应用
如果你在做一个食谱分享应用,审讯过程可能是这样的:
-
用户:家庭厨师,想保存和分享食谱。 -
核心行动:用户创建包含标题、配料表、步骤和照片的食谱。 -
后续:食谱保存到个人资料并在公共信息流中可见。 -
数据保存:食谱标题、配料(数组)、步骤(数组)、照片 URL、作者 ID、时间戳。 -
数据展示:最近食谱的信息流、单个食谱详情页、用户自己的食谱集合。 -
错误状态:上传失败、缺少必填字段、未经授权的编辑尝试。 -
登录:是的,创建食谱需要登录。浏览是公开的。 -
数据库:是的,用户表和带有外键关系的食谱表。 -
移动端:是的,大多数用户会在做饭时通过手机添加食谱。
一旦审讯完成且你有了所有清晰答案,使用第二个提示词:
“
“根据我们的审讯,生成我的规范性文档:PRD.md, APP_FLOW.md, TECH_STACK.md, FRONTEND_GUIDELINES.md, BACKEND_STRUCTURE.md, IMPLEMENTATION_PLAN.md。使用我们对话中的答案作为素材。具体且详尽,不允许模棱两可。”
这样生成的文档就是你项目唯一的真理来源。
必须掌握的 Web 开发核心概念
如果你无法用专业术语描述需求,AI 就无法准确执行。以下是你在与 AI 交流时必须熟练掌握的概念。
1. UI 与 UX 的区别
-
UI (用户界面):视觉层。颜色、字体、按钮形状、间距。 -
UX (用户体验):感受层。是否直观?流程是否顺畅?用户是否会感到沮丧?
操作技巧:不要说“让它看起来更好”,要说“让它更容易使用”。更高级的做法是使用截图作为参考。找到你喜欢的应用界面(例如在 Framer 或 Dribbble 上),截图并发给 AI,提示“匹配此布局”或“使用此 UI 作为灵感”。AI 可以从截图中提取设计模式、间距和配色。目前 Google 的 Gemini 3 Pro 在这方面表现出色。
2. 组件化思维
组件是可复用的界面片段,就像乐高积木。按钮是组件,导航栏是组件,卡片是组件。
错误提示:“帮我建一个落地页。”
正确提示:“建立一个落地页,包含以下组件:导航栏、英雄区、功能网格(3 个卡片)、推荐轮播、CTA 区、页脚。”
3. 布局逻辑
网页就是“盒子套盒子”。掌握容器、网格、卡片的概念。
场景示例:
“
“双栏布局。左侧边栏宽 250px。主内容占据剩余空间。边栏固定,不滚动。”
4. 状态管理
状态是会改变的数据。点击按钮、切换暗色模式、提交表单都是状态的变化。
如果点击按钮没反应,通常是状态问题。
提示示例:“当用户点击此按钮时,将模态框状态设置为打开。点击外部时,将其关闭。”
5. 样式与设计令牌
CSS 控制外观,Tailwind 是 CSS 的快捷方式。设计令牌是可复用的固定值(如品牌色 #2563EB,间距 4px 的倍数)。
所有这些必须预先锁定在 FRONTEND_GUIDELINES.md 中,这样 AI 生成的每个组件才能保持一致,而不是每个文件都有随机的颜色和间距。
6. 响应式设计与移动优先
响应式意味着适配所有屏幕。移动优先意味着先为最小屏幕设计,再为大屏幕添加复杂性。
断点参考:
-
移动端:0-640px -
平板:640-1024px -
桌面:1024px 以上
在文档中定义清楚:“导航栏在 768px 以下显示汉堡菜单,以上显示完整水平导航。”
7. 页面与路由
页面是用户看到的界面,路由是 URL。/ 显示首页,/about 显示关于页。区分静态路由和动态路由(如 /products/[id])。
8. 前端与后端及 API
-
前端:浏览器运行的界面。 -
后端:服务器上的数据处理、数据库、逻辑。 -
API:前后端沟通的桥梁(像餐厅服务员)。
新手建议:
-
简单站点(无数据库、无账户):仅前端。 -
复杂应用(用户数据、逻辑):前端 + 后端。 -
数据库推荐:Supabase(免费、简单)。 -
认证推荐:Clerk(简单、UI 好看)或 Supabase Auth。
9. 安全与环境变量
.env 文件存储 API 密钥和密码。
铁律:永远不要将 .env 提交到 Git,永远不要在截图或聊天中泄露密钥。一旦泄露,立即在服务商处撤销并重新生成。
如何正确使用 AI 工具链?
不同的工具适合不同的阶段。不要试图用一把锤子解决所有问题。
1. Cursor:你的代码编辑器
Cursor 有四个核心模式,大多数人只用了一个:
-
Ask 模式:只读模式。用于理解代码、探索、规划。就像咨询顾问。 -
Plan 模式:架构先行。在写代码前生成详细的实施计划,甚至画出视觉图。适合每个新功能的开始。 -
Agent 模式:主力工兵。自主写代码、改文件、装包。这是“氛围编程”发生的主要场所。 -
Debug 模式:调试神器。遇到顽固 Bug 时,它会插入日志、生成假设、逐步测试,而不是盲目猜测。
工作流:Ask 理解 -> Plan 架构 -> Agent 构建 -> Debug 修复。
2. Claude:你的思考伙伴
无论是网页版还是 Claude Code,Claude 适合做“重思考”的工作:审讯想法、写六个核心文档、规划复杂架构。Claude Code 运行在终端,能自动读取 .clauderules,非常适合大型重构或文档密集型任务。
3. Kimi K2.5:视觉专家
这是 Moonshot AI 的开源视觉模型。当你有设计稿(截图、Mockup)需要像素级还原成代码时,使用它。它能处理布局、动画、交互,比文本描述精准得多。
4. Codex:调试与收尾者
OpenAI 的 Codex 适合作为调试器和代码审查员。它在沙箱中运行,能追踪依赖关系、运行测试并修复 Bug。当架构已定但东西跑不通时,用 Codex 来收尾。
多工具协作流
-
Claude 负责思考和写文档。 -
Cursor Agent (或 Claude Code/Kimi K2.5) 负责具体构建。 -
Codex 负责调试和最终通过测试。
高级工作流:当基础熟练后
如果你想将速度提升数倍,可以尝试以下高级技巧:
1. 并行会话与 Git Worktrees
不要一次只做一件事。开启 3-5 个 git worktrees,每个运行独立的 Claude Code 会话。一个做认证,一个做布局,一个做 API。它们共享仓库但独立工作,最后合并。这能将原本一整天的工作压缩到几小时。
2. 计划模式的力场倍增
在实施前,不仅让一个 Claude 写计划,再开启第二个会话扮演“首席工程师”来审查计划:“找漏洞、找边缘情况、找会崩的地方”。修复计划后再写代码。
3. 自动化 Bug 修复
收到 Bug 报告或 CI 测试失败时,直接发给 Claude:“修复它”。不要解释怎么做。让它去读日志、追根溯源、解决它。
4. 语音口述提示
你说话的速度是打字的三倍,且细节更丰富。在 Mac 上使用语音输入(按两下 Fn 键),像对话一样详细描述你的需求。这通常能产生更好的代码输出。
部署、验证与迭代
代码写完了只是开始,能跑起来并交付才是终点。
1. Git 与版本控制
Git 记录每一次更改。习惯:每完成一个能运行的功能就提交一次。
-
git add . -
git commit -m "Added user login" -
git push
2. 部署流程
使用 Vercel 进行部署是最简单的:
-
推送代码到 GitHub。 -
将 GitHub 仓库连接到 Vercel。 -
Vercel 自动构建并部署。 -
在 Vercel 仪表板中添加环境变量(注意:这不会从本地 .env自动转移)。
常见问题:本地能跑,线上报错。99% 的原因是缺少环境变量或构建设置错误。把 Vercel 的错误日志发给 AI 修复。
3. 验证清单
在发货前,必须确认:
-
在真机上测试了吗? -
空数据状态(Empty State)处理了吗? -
错误状态处理了吗? -
慢网络时的加载状态呢? -
快速点击会弄坏应用吗? -
密钥真的没泄露吗?
4. 阅读错误信息
不要恐慌,错误信息就是说明书。
-
TypeError:你用错了东西。 -
Cannot read property ‘map’ of undefined:你试图对不存在的东西使用 .map()。 -
文件名:行号:直接告诉你去哪里修。
5. 迭代的艺术
好的迭代:“产品网格在桌面端显示 4 列,但我需要 3 列。卡片图片被拉伸了,应该用 object-cover。获取数据时没有加载状态。”
坏的迭代:“看起来不对,修一下。”
把大想法拆成小块(LEGO 积木),一步步执行。这就是 IMPLEMENTATION_PLAN.md 的作用。
图片来源:Unsplash
结论:重新定义你与 AI 的协作关系
如果你读完了这篇指南,还是无法交付软件,那问题出在努力程度,而不是信息缺失。
“氛围编程”不是靠一句咒语变出代码,而是靠一套严谨的系统来驾驭巨大的算力。当你建立了文档优先的思维,掌握了这些工具和概念,你就不再是一个只会发号施令的旁观者,而是一个能够指挥 AI 军团构建宏伟软件的指挥官。
从今天开始,不要只写一句“帮我做个 App”。坐下来,打开你的编辑器,写下第一个 PRD.md。这才是真正的高级工程师该做的。
实用摘要 / 操作清单
为了让你快速上手,以下是关键步骤的精简清单:
项目启动前
-
审讯想法:用 AI 提问自己,直到没有任何假设。 -
生成文档:让 AI 基于审讯结果生成 6 个核心文档。 -
锁定规则:创建 .clauderules文件,确立技术栈和命名规范。 -
初始化跟踪:创建 progress.txt,记录起始状态。
编码过程中
-
引用文档:每次提示 AI 时,引用具体的文档章节(例如:“按照 FRONTEND_GUIDELINES.md 第 2 节设计”)。 -
分步执行:按照 IMPLEMENTATION_PLAN.md一步步来,每次只做一个步骤。 -
即时更新:每完成一个功能,立即更新 progress.txt并提交 Git。 -
善用工具:用 Plan 模式架构,用 Agent 模式构建,用 Debug 模式排错。
部署与维护
-
保护密钥:确保 .env在.gitignore中,且仅在服务器端配置。 -
真机验证:必须在移动端和不同浏览器上测试。 -
日志驱动:遇到部署错误,直接把 Vercel 日志丢给 AI。
一页速览
-
核心理念:文档优先,代码在后。 -
关键文档:PRD, App Flow, Tech Stack, Frontend Guidelines, Backend Structure, Implementation Plan。 -
记忆辅助: .clauderules(规则),progress.txt(进度)。 -
工具组合:Claude (思考/文档) + Cursor Agent (构建) + Codex (调试)。 -
必知概念:UI/UX, 组件, 状态, 响应式设计, API, 数据库, 环境变量。 -
黄金法则: specificity (具体性) > everything else。具体得让 AI 无从猜测。
常见问题 (FAQ)
1. 为什么 AI 总是生成我不想要的依赖包?
因为你没有在 TECH_STACK.md 中锁定精确版本。AI 会自由发挥,导致版本冲突。
2. 每次打开新窗口 AI 都忘了之前的上下文怎么办?
利用 progress.txt 文件。这是你在不同会话之间的外部记忆桥,确保每次新会话开始前都指示 AI 读取它。
3. 如何让生成的界面和我的设计稿一模一样?
使用截图作为参考输入,并使用擅长视觉的模型(如 Kimi K2.5 或 Gemini 3 Pro),同时在 FRONTEND_GUIDELINES.md 中定义好所有设计令牌。
4. 遇到顽固 Bug 该怎么办?
不要手动修。切换到 Cursor 的 Debug 模式,或者使用 Codex。把错误日志和代码一起丢给它,让它去追踪依赖和假设根因。
5. 我是一个完全的新手,能直接上手这套系统吗?
可以,但建议先花时间理解文中所列的基础概念(如组件、状态、API)。如果你不知道自己在构建什么,文档也没法帮你。
6. 是否必须使用 Git?
是的。没有版本控制,你就失去了“撤销”的能力。一旦代码崩坏,你将无法回退。在每完成一个功能后提交代码是最佳实践。
7. 部署时本地能用但线上报错,最常见的原因是什么?
绝大多数情况是环境变量(.env)没有在部署平台(如 Vercel)上配置,或者构建命令不匹配。检查 Vercel 的设置面板。
8. .clauderules 和 progress.txt 应该放在哪里?
放在你项目的根目录下。大多数 AI 工具(如 Claude Code)会自动检测并读取根目录下的配置文件。

