作者:互联网 时间: 2026-07-24 08:17:01
2025 年,AI 编程工具(Cursor、Copilot、Claude Code 等)已经卷到飞起。你只需要用自然语言说一句话,AI 就能哗啦啦吐出一屏幕代码——看起来很爽,对吧?

但跑起来呢?
问题出在哪?
不是 AI 不够强,而是你把它当成了一个"神",而不是"新来的同事"。
想想看:你不会让一个刚入职的新人直接上手写核心业务代码吧?你会先让他熟悉公司技术栈、编码规范、业务流程。AI 也是一样。
这篇文章,不讲具体怎么写代码,而是讲一套可以用在任何 AI 编程工具上的方法论。这套方法论已经被我在多个实际项目中验证过,只要你照做,AI 生成的代码质量会有质的飞跃。
来看一个真实场景:用 React + TailwindCSS 实现一个任务清单(待办)页面。
新手 Vibe Coder 的典型做法是:
复制代码"帮我写一个 React 待办清单页面,支持新增、删除任务"
然后 AI 开始疯狂输出。但是——
id 是 string 还是 number?字段叫 text 还是 title 还是 content?全看 AI 的心情。结果:一个 Prompt 下去,开出来的是盲盒。
同样的需求,我们换一种方式。不写代码,只写规划:
复制代码遵守胶水编程思维:优先使用成熟方案,避免凭空造逻辑。第一个阶段:只做规划,禁止输出任何代码。1. 确认技术栈
React 19 + TailwindCSS + useState2. 梳理功能边界
- 新增待办、删除待办、切换完成状态
- 不做本地持久化、筛选、拖拽等功能3. 拆分模块(乐高组件)
输入框组件、待办条目组件、列表容器组件4. 定义数据流
useState 存储 task 数组
数据结构:{ id, text, completed }5. 输出这份完整规划,等待我确认无误后,再分段实现代码
这背后是一套清晰的逻辑:
| 规划动作 | 解决的问题 |
|---|---|
| 划定边界 | 防止 AI 擅自加功能,无限膨胀成屎山 |
| 强制模块拆分 | 好读好维护,AI 生成代码我们也要审核 |
| 预先规定数据结构 | 从根源减少 AI 字段幻觉(text 就是 text,不能让 AI 做主改 title) |
| 先规划 → 审核 → 再编码 | 这份规划将伴随项目开发的完整周期 |
不要上来就让 AI 写代码,先强制它读懂你的技术栈和项目规划。如果你用的是 Claude Code,可以直接用 /init 命令初始化项目规范文件。
就像你不会让新来的员工直接干活——去阿里入职要有"阿里 Java 员工手册",得让他熟悉公司业务流程一样。AI 在有规范约束的前提下生成的代码,逻辑清晰得多。
具体做法:
复制代码## 阶段一:只做规划,禁止输出代码请按以下结构输出项目规划:1. 技术栈确认(框架、状态管理、样式方案)
2. 功能边界清单(要做什么 + 不做什么)
3. 组件树拆分(每个组件的职责边界)
4. 数据流定义(状态在哪个层级、数据结构精确到字段名和类型)
5. 文件目录结构输出后等待我确认,不要写任何代码。
拿到规划后,你逐条审核——功能是否多了少了、数据结构字段名是否和你预期一致。确认无误后,再进入下一步。
这是整套方法论中最核心的概念——胶水编程。
需求:给 TODO 清单加拖拽排序。
错误示范(高幻觉风险):
复制代码"帮我写 React 待办清单的拖拽排序功能"
AI 很可能凭空手写一套拖拽逻辑——自行实现坐标监听、排序算法、边界判断……手写拖拽逻辑边界 case 非常多,写复杂了特别容易出现幻觉 bug,而且代码极难维护。
正确做法(胶水编程):
复制代码遵守胶水编程原则:绝不从零自研底层逻辑,优先选择社区长期验证的成熟开源组件。当前需求:给待办列表增加拖拽排序。1. 先调研 React 生态成熟的拖拽库,优先选用 @hello-pangea/dnd(react-beautiful-dnd 的继任者,业内广泛使用)2. 安装依赖:
pnpm add @hello-pangea/dnd3. 不要自己手写拖拽底层代码,只做粘合工作:
- 把现有 TodoList 组件用 DragDropContext + Droppable 包裹
- 把 TodoItem 组件用 Draggable 包裹
- 只写组件之间适配数据流转的粘合代码4. 输出内容顺序:
① 安装依赖命令
② 把现有 TodoList 组件和 @hello-pangea/dnd 进行衔接
③ 只写模块之间适配数据流转的粘合代码
来看看实际的"胶水代码"有多简洁:
TodoList.jsx —— 只用 DragDropContext 和 Droppable 包裹现有列表:
复制代码import { DragDropContext, Droppable } from '@hello-pangea/dnd'
import TodoItem from './TodoItem'export default function TodoList({ todos, onToggle, onDelete, onDragEnd }) {
if (todos.length === 0) {
return (
<div className="text-center text-gray-400 py-12">
<p className="text-5xl mb-4"></p>
<p>还没有待办事项,上方输入添加吧</p>
</div>
)
} return (
<DragDropContext onDragEnd={onDragEnd}>
<Droppable droppableId="todos">
{(provided) => (
<ul
ref={provided.innerRef}
{...provided.droppableProps}
className="space-y-2"
>
{todos.map((todo, index) => (
<TodoItem
key={todo.id}
todo={todo}
index={index}
onToggle={onToggle}
onDelete={onDelete}
/>
))}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
)
}
App.jsx 中只处理数据重排逻辑(10 行不到的胶水代码):
复制代码const handleDragEnd = (result) => {
if (!result.destination) return
const reordered = Array.from(todos)
const [removed] = reordered.splice(result.source.index, 1)
reordered.splice(result.destination.index, 0, removed)
setTodos(reordered)
}
看到了吗?你没有写任何拖拽底层逻辑——坐标计算、动画过渡、无障碍访问……这些已经被 @hello-pangea/dnd 验证过千万次了。你写的只是:
onDragEnd 里用 splice 重排数组(5 行 JS)这才是 AI 编程的正确打开方式:能抄不写(GitHub 经典、优质、经过验证的代码),能连不造(A、B、C 组件间用胶水粘合)。
有了规划(方法论)和胶水编程(执行策略),还有一个更重要的事——用这套方法论让 AI 自己不断优化你的提示词。
Alpha → Omega 提示词进化循环:
具体操作:
每次迭代,规范就进化一次。 几次项目下来,你的 .claude 目录(或 Cursor Rules)就是你的核心竞争力。
把上面三步串起来,就是一个完整的 AI 编程工作流:
复制代码┌─────────────────────────────────────────────────┐
│ 一、规划阶段 │
│ /init → 技术栈 → 功能边界 → 组件拆分 → 数据流 │
│ → 输出规划文档 → 人工审核确认 │
├─────────────────────────────────────────────────┤
│ 二、编码阶段(胶水编程) │
│ 调研成熟方案 → 安装依赖 → 只写粘合代码 │
│ → 代码审核 → 入 Git │
├─────────────────────────────────────────────────┤
│ 三、进化阶段 │
│ AI 自审查 → 更新规则 → 下次规划自动生效 │
└─────────────────────────────────────────────────┘
/init 让 AI 熟悉你的项目,不要上来就写代码AI 编程工具已经很强了,但强的是工具,不是你的方法论。
同样是 Cursor 或 Claude Code,有人用它一天写一个烂摊子,有人用它一小时写一套清晰可维护的模块。差距不在工具,而在你有没有给 AI 套上一套"工作规范"。
把这三步刻进你的工作流里:
你会发现,AI 不再是那个"能跑但改不动"的盲盒,而是一个真正高效、可控、可信赖的编程搭子。