🌟从"抽卡式编程"到规范驱动: 深度解析「Vibe Coding」的三层跃迁
在微信小程序生态中,"做一个计分器"这种需求看似轻如鸿毛------不就是加减分数、存个历史记录吗?但正是这类"小而美"的项目,成了检验AI编程成熟度的试金石。
我们曾幻想一句 "帮我做个扑克计分小程序" 就能一键生成可用代码;也曾陷入"改三天不如重写两天"的泥潭。直到一种全新的编程理念悄然崛起:Vibe Coding(氛围编程)。
这不是玄学,也不是摆拍晒屏的"氛围感",而是一套以开发者意图为核心、AI为协作者、规范为契约的现代开发哲学。
今天,我们就以一个"手搓计分小程序"的真实演进路径,拆解 Vibe Coding 的三大阶段,见证它如何从"碰运气"走向"控流程",最终实现 AI 驱动的工程化落地。
🧠 什么是 Vibe Coding?不是"写提示词",而是"营造开发场域"
很多人误解了 Vibe Coding ------ 它不是简单地把需求丢给 AI 然后祈祷出好代码,也不是靠截图+emoji 装酷炫技。
真正的 Vibe Coding,是通过精准的语言、结构化的上下文和角色化指令,在人与AI之间构建一种"共情式协作"的开发氛围。
就像乐队指挥不需要亲自演奏每件乐器,却能让整个乐团奏出和谐乐章。
Vibe Coding 的本质,是让开发者成为"导演"而非"码农",用"氛围"引导AI完成从理解→设计→编码→验证的全流程输出。
而这一过程,经历了三个关键跃迁:
✅ 第一阶段:Prompt 抽卡 ------ "试试看能不能中奖"
✅ 第二阶段:提示词工程化 ------ "我学会怎么下注了"
✅ 第三阶段:规范驱动 + 多Agent协作 ------ "我已经掌控牌局"
让我们从一个真实的案例出发,层层深入。
🎲 阶段一:抽卡式编程 ------ 当AI变成"随机代码生成器"
场景还原:
你打开 Cursor 或 Trae,输入:
"用 Vue 写一个微信小程序,用来记录四人打扑克的得分。"
几秒后,AI 返回了一堆代码:
- 页面布局错乱
- 分数计算逻辑不符合本地翻倍规则
- 数据没持久化
- 甚至用了 React 的语法......
你花了两小时 debug,最后发现还不如自己写。
这,就是典型的 "Prompt 抽卡"模式:把模糊需求扔进黑箱,期待开出 SSR 级别的代码 SSR(Super Super Rare),结果抽到一堆 N 卡。
问题根源在哪?
- ❌ 缺乏角色设定:AI 不知道自己该扮演谁
- ❌ 没有上下文约束:没有说明平台、技术栈、交互逻辑
- ❌ 输出无格式要求:返回的是碎片代码还是完整文件树?
- ❌ 忽视业务细节:"底分×翻倍""庄家轮换"等规则未明确
此时的 AI,就像一个天赋异禀但毫无纪律的新手程序员,能力强,但不可控。
💡 Vibe Coding 启示录①:没有氛围的提示 = 没有灵魂的施工图
🛠️ 阶段二:提示词工程化 ------ 开始建立"沟通契约"
当你意识到不能靠"一句话玄学"时,你就进入了 Vibe Coding 的第二层境界:工程化表达。
不再说"做个计分器",而是这样写提示词:
text
你是一位资深微信小程序前端工程师,擅长使用 WXML + WXSS + JavaScript 构建高性能原生应用。
请基于以下需求生成代码:
- 功能目标:支持4人扑克游戏计分,支持自定义底分、每局翻倍、更换庄家
- 核心功能:
1. 玩家人数可配置(2~6人)
2. 每局可录入胜负方及倍数,自动计算得分并累加总分
3. 历史记录保存至本地缓存
4. 界面适配移动端手势操作,按钮大小符合微信设计规范
- 技术要求:
- 使用 ES6+ 语法
- 页面结构为 pages/score/index
- 样式采用类 TailwindCSS 的原子类命名方式(如 mt-4, flex-center)
- 输出为完整的 .wxml + .wxss + .js 文件内容
- 输出格式:
严格按照【文件名】→【代码】的方式组织,例如:
【pages/score/index.wxml】
<view class="container">...</view>
这个提示词的变化在于:
| 维度 | 变化 |
|---|---|
| 角色 | 明确为"小程序工程师" |
| 上下文 | 包含业务规则和技术约束 |
| 结构 | 功能拆解 + 技术选型 |
| 输出控制 | 强制格式化,便于复制粘贴 |
结果呢?AI 一次性生成了90%可用的代码,只需微调即可运行。
✅ 成功的关键不再是"运气",而是"表达力"。
🌱 Vibe Coding 的进化意义
这一阶段的核心突破是:开发者开始掌握"与AI对话的语言体系"。
你不再祈求奇迹,而是通过专业化、结构化的 prompt,建立起与AI之间的"沟通契约"。这种契约感,正是 Vibe Coding 的核心气质 ------ 不是命令机器,而是共同创作。
💡 Vibe Coding 启示录②:好的提示词 = 给AI戴上耳机听清节奏
🚀 阶段三:SDD + 多Agent协作 ------ 进入生产级 Vibe Coding 时代
然而,即使提示词再精妙,单个 AI 工程师依然难以覆盖产品全链路。
真正的质变,发生在 SDD(Spec-Driven Development,规范驱动开发) + 多Agent协作 的融合之下。
这才是 Vibe Coding 的终极形态:一场由AI主演、人类导演的协同交响曲。
🎭 构建你的虚拟开发团队:多Agent协作架构
想象一下,你要开发的不是一个静态页面,而是一个真正可上线的小程序。你需要:
| 角色 | 职责 |
|---|---|
| 虚拟产品经理 | 输出PRD,明确功能边界与优先级 |
| 虚拟UI设计师 | 产出高保真原型,符合小程序规范 |
| 虚拟前端工程师 | 实现交互逻辑与页面渲染 |
| 虚拟后端工程师 | 设计API接口与数据模型 |
| 虚拟测试工程师 | 编写测试用例,执行自动化验证 |
现在,这一切都可以由 同一个大模型(如 Claude code 4.5 / Gemini 3 Pro)扮演不同角色 来完成。
所有环节围绕一份中心文档展开:规范说明书(Spec)
Vibe Coding 不再是"人 + AI"的单打独斗,而是演变为一套多 Agent 协作的自动化开发流水线 。
在真正写代码之前,先让 AI 扮演不同角色,按专业流程依次推进:
举个例子
如果你要开发一个微信计分小程序: 我们需要在微信开发者工具中建立一个新项目

然后对拥有强能力的大模型如 Claude code 4.5 / Gemini 3 Pro等进行交流 (1)你是一个大师级的微信小程序产品经理,我现在需要你帮我把想法变成需求文档,用于给到AI编程工具进行实现
(2)我们需要先讨论一下需求,等确定了所有的需求,我们在进行第二步
(3)做一个微信小程序, 用于麻将或扑克的计分
经过一系列提问,LLM给出了他给出的需求文档
markdown
Role: Expert WeChat Mini Program Developer
Task: Create a standalone scoring Mini Program (offline-first).
Language: JavaScript (Native WeChat Framework), WXSS, WXML.
1. Project Context (项目背景)
这是一个用于线下桌游(麻将、扑克)的通用记分工具。
核心逻辑:基于"零和游戏"规则(Zero-Sum Game),即每局所有玩家的得分之和必须为 0。
运行模式:单机版,无后端,所有数据存储在本地缓存(LocalStorage)。
用户:通常由其中一名玩家操作,记录所有人的分数。
2. Tech Stack (技术栈约束)
Framework: Native WeChat Mini Program (原生开发).
Styling: Standard WXSS (Flexbox layout). Minimalistic design.
Storage: wx.setStorageSync / wx.getStorageSync.
Logic: No external dependencies. Pure JS logic.
3. Data Schema (数据结构设计)
Please strict follow this JSON structure for LocalStorage key game_history.
code
JSON
[
{
"id": "uuid_v4_string", // 唯一牌局ID
"name": "2023-10-01 欢乐麻将", // 牌局名称
"createTime": 1696123456789, // 创建时间戳
"playerCount": 4, // 玩家人数 (2-6)
"players": [ // 玩家列表
{ "id": 0, "name": "张三", "totalScore": 10 },
{ "id": 1, "name": "李四", "totalScore": -5 },
{ "id": 2, "name": "王五", "totalScore": -5 },
{ "id": 3, "name": "赵六", "totalScore": 0 }
],
"rounds": [ // 对局记录流水
{
"roundId": 1,
"timestamp": 1696123500000,
"scores": [10, -5, -5, 0] // 对应 players 数组索引的分数变化
}
]
}
]
4. Page Flow & Requirements (页面逻辑)
Page 1: Home (首页 - 牌局列表)
UI:
Show list of saved games (Name + Date + Player names).
If list is empty, show a placeholder image + "Create New Game" button.
Floating Action Button (FAB): "+" to create a new game.
Interaction:
Click item -> Go to Page 3 (Scoreboard).
Long press item -> Option to Delete game.
Page 2: Create Game (新建牌局)
UI:
Input: "Game Name" (Default: Current Date + "Game").
Selector: "Player Count" (Range: 2 to 6, Default: 4).
Dynamic Inputs: "Player Names" based on count (Default: P1, P2, P3...).
Logic:
On "Start": Initialize the data structure and save to LocalStorage, then redirect to Page 3.
Page 3: Scoreboard (计分看板 - 核心页)
Header:
Grid layout showing current totalScore for each player.
Highlight the winner (highest score) in Red, loser in Green.
Body (List):
Reverse chronological list of rounds (Round 10, Round 9...).
Show specific score changes for that round (e.g., +10 | -5 | -5 | 0).
Delete Function: Allow deleting the last record only (to prevent logic errors).
Footer:
Large Button: "Record Round" -> Opens Page 4.
Page 4: Input Score (记分录入)
UI:
List of players. Each row has: Player Name + Input Field (Number).
Auto-Balance Button: A button next to the last player or at the bottom.
Logic: Calculates 0 - (Sum of other players) and fills the remaining field.
Validation (Strict Zero-Sum):
Before saving, check: Sum(scores) === 0.
If Sum !== 0, show Toast error: "Total score must be 0! Current: +X".
Allow input of 0.
Save:
On success: Update players.totalScore, push to rounds, save to LocalStorage, go back to Page 3.
5. Edge Cases (异常处理)
Input Type: Ensure inputs handle negative numbers (keyboard type usually digit or number allowing -).
Empty Input: Treat empty input as 0.
Data Persistence: Update LocalStorage immediately after every round addition/deletion.
于是,我们通过虚拟产品经理得到了我们产品需求文档
然后,打开你喜欢的 AI 编辑器(比如 Trae、Cursor),把刚才新建的空项目文件夹拖进去,把这份 需求文档 粘进去,让它开始生成代码
不出意外,你将获得了一个代码质量还不错的微信小程序
这便是vibe coding 的魅力之一
📜 什么是 SDD?先定规则,再写代码
以登录功能为例,传统开发常因"我以为你是这么想的"导致返工。而在 SDD 模式下,一切以 唯一真理源(Single Source of Truth) 为准:
json
// spec/auth.login.json
{
"endpoint": "POST /auth/login",
"description": "用户登录接口",
"request": {
"body": {
"username": "string",
"password": "string"
}
},
"response": {
"success": {
"code": 0,
"data": { "token": "string", "expires_in": "number" }
},
"fail": [
{ "code": 401, "message": "用户名或密码错误" },
{ "code": 400, "message": "参数缺失" }
]
},
"validation": "需进行前后端双重校验"
}
前端按此写请求逻辑,后端据此实现接口,测试据此编写断言。
所有人对齐的不是口头约定,而是这份 JSON 文档。
✅ 当规范成为契约,AI 才能真正"履约式编程"。
⚙️ 大模型如何支撑 SDD 落地?
新一代大模型(如 Claude code 4.5、Gemini 3 Pro)具备三大能力,使 SDD 成为可能:
| 能力 | 应用场景示例 |
|---|---|
| 任务分解能力 | 将"做计分器"拆解为玩家管理、分数录入、规则引擎等模块 |
| 跨角色推理能力 | 同一模型切换身份:先当产品经理写PRD,再当工程师写代码 |
| 长上下文记忆 | 支持百万token上下文,保持全局一致性(如变量命名统一) |
这意味着:你只需提供初始意图,AI 自动帮你完成从0到1的系统设计。
🌈 Vibe Coding 的三层跃迁总结
| 层级 | 名称 | 核心特征 | 开发者角色 | AI角色 | 是否可用于生产 |
|---|---|---|---|---|---|
| L1 | 抽卡式编程 | 一句话Prompt,结果随机 | 用户 | 随机生成器 | ❌ |
| L2 | 提示词工程化 | 结构化Prompt,可控输出 | 导演 | 演员 | ✅(需人工审核) |
| L3 | SDD + 多Agent | 规范驱动,角色分工 | 总监制 | 全栈团队 | ✅✅✅(可直接部署) |
🎯 Vibe Coding 的终极目标:让人专注于"定义价值",让AI负责"实现价值"
🔮 未来已来:AI编程工程师的新能力模型
随着 Vibe Coding 的普及,未来的开发者竞争力将发生根本性重构:
| 旧能力 | 新能力 |
|---|---|
| 手敲代码速度 | 定义规范的能力 |
| 记忆API文档 | 设计提示词的能力 |
| Debug技巧 | 构建多Agent协作流程的能力 |
| 单兵作战 | 指挥AI团队协同的能力 |
就像工业革命中,工人从手工纺纱转向操作机床,程序员也将从"写代码的人"进化为"创造开发流程的人"。
📣 写给每一位开发者的建议
如果你还在用 AI "补一行少一行",那你只看到了冰山一角。
真正的 Vibe Coding,是:
- 在项目启动前,先让 AI 写 PRD;
- 在编码之前,先让 AI 出 Spec;
- 在测试之前,先让 AI 写用例;
- 最后再让 AI 写代码,并自动对比是否符合规范。
让 AI 不只是工具,而是贯穿 SDLC(软件开发生命周期)的协作伙伴。
哪怕只是一个"计分小程序",也能跑通整套流程。下次接到类似需求时,不妨试试:
"请你作为AI产品经理,为'四人斗地主计分小程序'撰写一份详细PRD,包含功能列表、交互流程、数据规则和扩展性考虑。"
你会发现,AI 不仅能给你答案,还能帮你提出更好的问题。
🏁 结语:从"手搓"到"流程驱动",Vibe Coding 正在重塑开发本质
我们曾以为 AI 是来抢饭碗的。
但现在明白:AI 不是替代者,而是放大器。
它放大的,是你对业务的理解、对系统的抽象、对协作的设计。
那个曾经需要一周才能交付的计分小程序,如今可以在 一个下午内,由你主导、AI执行、规范保障 完成交付。
而这,正是 Vibe Coding 的魅力所在 :
它不追求炫技式的"秒出代码",而是追求可持续、可复用、可规模化的智能开发新范式。