AI 编码“昏招频出”?三步法助你改善Vibe Coding体验

14 阅读7分钟

摘要:AI生成的不是幻觉代码就是屎山?问题不一定在AI,在协作方式。本文给出三步方法论:/init做项目规划锁定边界,胶水编程只拼装不发明轮子,alpha→omega提示词让AI自我优化。用一套React待办清单案例对比正反做法,把Vibe Coding从玄学变成工程。


目录

  1. Vibe Coding 的本质:与 AI 协作,不是对 AI 下命令
  2. 第一步:规划就是一切
  3. 第二步:胶水编程——能抄不写,能连不造
  4. 第三步:用元方法论让 AI 自我进化
  5. 总结

一、Vibe Coding 的本质:与 AI 协作,不是对 AI 下命令

用 AI 写代码的体验常常两极分化。一端是幻觉代码——看起来像那么回事,一跑就崩。另一端是屎山代码——能跑,但逻辑缠绕、结构混乱,改一行牵全身。

问题出在哪儿?不是 AI 不够聪明,而是你把 AI 当成了一个"命令执行器",而不是一个需要上下文、需要边界、需要约束的协作伙伴

Vibe Coding 的核心思维转变只有一句话:把 AI 当新入职的同事,而不是代码生成机。 你不会让第一天报到的同事直接上手写核心模块——你会先给他员工手册、讲业务流程、画功能边界。AI 同理。

flowchart LR
    A[错误方式<br/>直接要代码] --> B[幻觉或屎山]
    C[正确方式<br/>先规划再胶水] --> D[可维护的代码]

二、第一步:规划就是一切

新手用 AI 的第一反应是:"帮我写一个 React 待办清单,支持新增、删除。"然后收到一堆代码,开始复制粘贴。

正确做法是先让它输出一份规划文档,审核通过后再写代码。 具体操作:用 /init 或专门的规划指令,让 AI 先理解你的技术栈和项目约束。

实战:React 待办清单的规划对比

错误指令(Vibe 新兵)

帮我写一个 React 待办清单页面,支持新增、删除任务。

AI 不知道你要不要本地存储,不知道要不要拖拽排序,不知道数据结构长什么样——它只能猜,猜错了就是幻觉。

正确指令(先规划、后编码)

遵守胶水编程思维:优先使用成熟方案,避免凭空造逻辑。
第一个阶段:只做规划,禁止输出任何代码。

1. 确认技术栈:React 19 + TailwindCSS + useState
2. 梳理功能边界:
   - 新增待办、删除待办、切换完成状态
   - 不做本地持久化、筛选、拖拽功能
3. 拆分模块(乐高组件):
   输入框组件、待办条目组件、列表容器组件
4. 定义数据流:
   useState 存储 task 数组,数据结构:{ id, text, completed }
5. 输出这份完整规划,等待我确认无误后,再分段实现编码。
flowchart TD
    A[init 设定技术栈与项目上下文] --> B[AI 输出规划文档]
    B --> C[你审核规划<br/>确认技术栈/功能边界/数据结构]
    C --> D{是否通过?}
    D -->|是| E[AI 按模块分段编码]
    D -->|否| F[修改规划要求]
    F --> B
    E --> G[规划文档伴随全周期]

规划文档的四个价值

价值解决的问题具体操作
划定边界AI 擅自多加功能,无限膨胀明确写死"不做本地持久化、不做筛选"
模块划分AI 生成一个巨型组件难维护提前拆成输入框/条目/容器三个组件
约束字段AI 擅自用 title 而你期望 text规定数据结构 {id, text, completed}
全程复用每次对话 AI "失忆"规划文档随每次 prompt 一并发送

第一条铁律:规划文档是项目的"员工手册",不是你审一次就扔掉的废纸。 每次和 AI 继续对话时,把规划文档作为上下文一起发送,确保 AI 始终在一个统一的约束框里工作。


三、第二步:胶水编程——能抄不写,能连不造

规划完成后进入编码阶段。胶水编程的核心公式:

胶水编程 = 成熟组件 A + 成熟组件 B + 你写的衔接代码

你写的部分只有"衔接、调用、数据流转"的胶水层。轮子别人已经造好,你只做胶水——不生产零件,只联通零件。

正反对比:给待办列表加拖拽排序

错误示范(从零造轮子)

帮我写 React 待办清单的拖拽排序功能。

AI 很可能凭空手写一套拖拽逻辑——监听坐标、计算位移、重排数组、处理边界 case。手写拖拽的 edge case 极多(触摸事件、滚动容器、嵌套列表……),AI 不可能一次性写对,幻觉和 bug 贯穿始终。

正确示范(胶水编程)

遵守胶水编程原则:不从零自研底层逻辑,优先选择社区验证的成熟开源组件。
当前需求:给待办列表增加拖拽排序。

1. 先调研:React生态成熟的拖拽库,优先选用 react-beautiful-dnd
   pnpm i react-beautiful-dnd
2. 不要自己手写拖拽底层代码,只做粘合工作。
3. 输出内容顺序:安装依赖命令、把现有 TodoList 和 react-beautiful-dnd 进行衔接,
   只写模块之间适配、数据流转的粘合代码。
flowchart LR
    A[TodoList 组件<br/>已有代码] --> C[胶水代码<br/>数据适配和回调衔接]
    B[react-beautiful-dnd<br/>成熟拖拽库] --> C
    C --> D[带拖拽排序的<br/>TodoList 页面]

胶水编程的收益直截了当:

维度从零自研胶水编程
代码量几百行拖拽逻辑几十行粘合代码
Bug 率极高(edge case 多)极低(成熟库已扛过验证)
可维护性差(没人懂你写的拖拽算法)好(社区文档 + 标准 API)
AI 幻觉率高(凭空编造细节)低(只做数据传递和拼接)

第二条铁律:能抄不写,能连不造。 GitHub 上那些经过数千 Star 验证的成熟库就是你的零件库。你写的代码越少,AI 能搞砸的空间就越小。


四、第三步:用元方法论让 AI 自我进化

前两步解决了"让 AI 写出靠谱代码"的问题。第三步更进一步——让 AI 自己优化自己怎么干活

这套机制被称为 Alpha → Omega 提示词循环

  • α 提示词(Alpha):告诉 AI "怎么干活"的规范——项目规划、技术栈、胶水编程原则、代码风格要求。
  • Ω 提示词(Omega):根据 AI 的生成结果打分、判断、挑问题——这次生成的代码有没有幻觉?模块划分是否合理?有没有违反胶水原则?
flowchart TD
    A[α 提示词<br/>干活规范] --> B[AI 生成代码]
    B --> C[Ω 提示词<br/>评估生成结果]
    C --> D{通过?}
    D -->|是| E[合并代码]
    D -->|否| F[Ω 指出问题]
    F --> G[修正 α 提示词]
    G --> A

Ω 不是人工审查——它本身也是一段 Prompt,让另一个 AI(或同一 AI 的另一次调用)以"代码审查员"的角色评估生成结果。发现参数名不对?更新 α 里的字段定义。发现胶水不够彻底?加强 α 里的胶水约束。

Claude Code 和 Codex 这些工具内置的记忆模块和 Harness 架构,本质上就是这套 α-Ω 循环的工程化实现。规范越用越准,AI 越用越"懂你"。

第三条铁律:不要手动修 AI 的烂代码,去修生成烂代码的 Prompt。 修一次 Prompt,治一百次代码错误。


五、总结

Vibe Coding 不是对 AI 许愿然后祈祷代码能跑。它是一套可以工程化的方法论:

  1. 先规划,后编码:用 /init 和规划文档设定技术栈、功能边界、模块拆分、数据结构。规划文档伴随项目全周期,每次 prompt 都带上。
  2. 胶水编程:能抄不写(用 GitHub 成熟库),能连不造(只写衔接代码)。你写的代码量越少,AI 能搞砸的空间越小。
  3. α → Ω 自进化:α 定规范(怎么干活),Ω 做审查(干得怎么样),发现一个问题就修正一次 α。系统化而不是手动化地提升 AI 输出质量。
  4. 核心角色转变:你是架构师和 Code Reviewer,AI 是执行者。不要让 AI 做决策,它只负责在你划定的框里填内容。

—— 好代码不是"生成"出来的,是"约束"出来的。