☰
Vibe Coding:用氛围写代码,把设计权交给AI的编程新范式
2026/10/31 6:13:40 网站建设 项目流程

最近半个技术圈都在聊 vibe coding,我第一次听到这个词的时候,第一反应是“这不就是把用 AI 写代码换个洋气说法嘛”。直到自己关掉代码审查的“理性大脑”,真正按 vibe coding 的方式跑完一个完整项目,才意识到这跟我平时用 Copilot 补全代码、让 ChatGPT 生成一个函数完全是两码事。一句话概括:vibe coding 是“跟着氛围写代码”——你负责描述产品的感觉和意图,把键盘和设计决定权全部交给 AI,看到报错就原样贴回去,整个过程对你来说更像是在和队友口述需求,而不是在逐行敲击键盘。适合谁?想做快速原型验证的产品经理、刚接触编程但想法很多的新手、想探索新工具链的资深工程师,都值得花一小时试试这种把人机分工彻底反转的工作方式。


1. vibe coding 是什么:一次重新定义人机分工的尝试

1.1 概念来源与一句话定位

vibe coding 这个叫法最早出圈,是 Andrej Karpathy 在 2025 年初分享的一种新编程状态。他描述的场景是:开发者不再逐行写代码,而是用自然语言描述功能目标,AI 大模型负责生成实现代码,开发者的工作就变成了“把生成的代码贴进项目、运行、看效果、遇到报错再贴回去、改提示词继续循环”。他甚至用了类似“完全沉浸在氛围里,几乎忘记代码本身还存在”这样的描述来捕捉那种体验。

这里的核心词是“氛围”。传统开发中,你要传达给同事或未来的自己的,是精确的接口签名、严谨的边界条件、清晰的依赖关系;而在 vibe coding 里,你传达给 AI 的主要是产品的 vibe——这个功能大概是什么感觉、交互上想要什么调性、数据上大概怎么流转。至于底层是用数组还是链表、函数该拆成三个还是一个,AI 依据它训练时见过的大量模式自行决策,你不需要也没打算逐行去管。

所以一句话定位就是:vibe coding 是以“意图描述 + 报错反馈”为驱动,把代码实现主导权交给 AI 的一种高信任度、快速迭代的编程方式。它强调的不是你写代码的能力,而是你“描述清楚 + 判断对不对”的能力。

1.2 为什么说它和你平时用 AI 写代码不是一回事

很多人日常使用 AI 写代码的方式,本质上是“AI 辅助编程”:你写主干逻辑,AI 负责自动补全、生成某个函数、帮忙写测试用例,或者解释一段看不懂的报错。在这种模式下,开发者始终坐在驾驶员的位置,AI 只是一个手速极快的副驾。

vibe coding 则把主副驾驶完全对调。下面这张对比表能更清晰地看出差异:

维度传统 AI 辅助编程vibe coding
主导者开发者本人AI 模型
代码审查强度逐行审查,合入必须有依据快速翻一眼,甚至不细看
错误态度错误是必须消灭的 Bug错误是迭代的输入信号
提示词作用辅助补全的上下文核心产品需求的“需求文档”
交付速度中速,可控性优先极快,探索性优先
典型心理状态理性、谨慎放松、信任、跟着感觉走

放在工具层面更好理解:Copilot 这类工具像“输入法”,你打一半它猜你下一个词;但 vibe coding 更像你直接把整篇作文的主题告诉外包团队,让对方起稿,你只看大纲、看成品、提修改意见。输入法猜错了你马上改,外包团队写偏了你大概率只是轻描淡写地说“这里不行,换一种写法”,而不是拿起笔自己改。

这种差异决定了心态完全不一样。普通 AI 辅助编程时,你始终在跟代码“较劲”;vibe coding 时,你在跟 AI 的“理解力”较劲。这两个较劲对象,对技能要求、时间消耗、最终产物形态的影响是天差地别的。

1.3 哪些人真正适合 vibe coding

我自己实践下来,把适合人群分为三类,也明确排除一类:

第一类是想快速验证想法的人。不管是产品经理想做交互 Demo、创业者想验证一个商业逻辑能不能跑通,还是研究人员想搭个数据可视化原型,vibe coding 都能让想法变成可点击的网页或可运行的小工具,速度是以往的几倍。以前写前端路由都要翻半天文档,现在只需要说清楚“三个页面,左侧导航,点击切换内容”。

第二类是有一定领域知识但编程经验不深的人。比如懂算法但没系统学过工程的同学,可以用 vibe coding 把论文里的公式变成可运行的验证程序;懂电路设计的硬件工程师,可以用 vibe coding 生成上位机工具来配合调试,不用等软件同事排期。

第三类是资深工程师做探索性实验。用 vibe coding 快速搭一个不熟悉的框架、新技术的 playground、一次性数据清洗脚本,省下来的时间可以用来读文档和做架构思考。

但有一类人我明确建议先别碰——需要发布生产系统、涉及资金交易、用户隐私、医疗或自动驾驶等领域的人。这些场景对可验证性、可审计性、错误边界的容错性要求极高,vibe coding 的高信任度模式没有安全带可系。不是说完全不能用 AI,而是不能“vibe”。


2. 核心差异拆解:不只是“少看几眼”那么简单

2.1 从“审查者”到“体验者”的角色逆转

传统编程模式里,我们被反复训练成代码审查者:写完一个函数要读一遍,确认没有越界、没有资源泄漏、没有隐藏副作用,才敢往下走。那种状态其实很消耗认知资源,特别是有多年经验的老工程师,盯着代码看的时候大脑里会同时跑着好几个并发检查线程。

vibe coding 把这种角色彻底反转了。你不再是一个在代码仓库门口拿着放大镜的审查员,而是一个站在产品门口敲门的体验者。你描述的每个功能,AI 生成后,你要做的第一件事不是读代码,而是“跑起来看看”。页面长得对不对、按钮能不能点、接口数据有没有出来、报错提示是不是友好。你的反馈语言也从“这段代码的变量作用域有问题”变成了“这个页面感觉太挤了”“登录成功之后应该跳到首页而不是停在原地”。

这种角色逆转带来的结果非常有意思:它把程序员从“实现细节的泥潭”里拉出来,重新放回到“产品体验的第一现场”。我印象最深的一次是让 AI 做一个数据看板,生成出来后我第一眼看到的不是代码问题,而是配色太丑、信息层级不对。过去我大概率要花一小时调 CSS,而 vibe coding 模式下我只用补一句“按深色科技风重做,主色调用蓝色渐变”,三分钟后就看到新版。

2.2 提示词工程和规则设定的新地位:从加分项变成决定项

很多人以为 vibe coding 等于“不需要动脑,直接说话就行”,这是最大的误解。恰恰相反,vibe coding 对提示词工程的要求远高于普通 AI 辅助编程,因为你没有第二次机会在代码层面修补表达不清的需求。

普通辅助编程时,AI 生成一段代码,你看一眼能立刻发现哪里不符合预期,哪怕提示词写得稀烂也无所谓,反正自己会改;vibe coding 里如果初始提示词没把技术栈、边界条件、风格偏好说清楚,AI 生成的代码可能从根上就跑偏,而且因为你不深入读代码,这个偏差可能要很久之后才在行为层暴露出来。

所以真正玩转 vibe coding 的人,都会在项目开始前花时间写一份“项目规则文件”,很多团队用 CLAUDE.md、rules.md 这类约定名称。它的作用相当于你给 AI 外包团队的一份入职手册。我的习惯是包含五个模块:

  • 项目目标:这个工具解决什么问题,给谁用。
  • 技术约束:语言版本、框架选型、不允许引入额外依赖(比如“后端只用 Flask,禁止用 Django”)。
  • 目录结构约定:生成的代码放在哪个目录,命名风格是什么。
  • 错误处理策略:什么情况要报错,什么情况要静默处理,日志打到哪。
  • 安全与性能红线:不允许出现 SQL 拼接、涉及用户数据的操作必须有确认、分页查询必须有索引。

这里有一个特别重要的细节:规则文件不能写得像散文,要写得像测试用例一样可被 AI 检查。比如不要写“请注意性能”,而要写“所有列表查询必须在数据库层分页,禁止加载全表到内存后再过滤”。

2.3 错误容忍度与安全边界:vibe 不等于盲写

vibe coding 最标志性的操作就是“看到报错,全选,复制,粘贴给 AI,回车”。我刚开始觉得这算什么本事,试多了才发现这个循环非常高效,但它也有致命弱点:AI 是在“上下文窗口”里做局部修补,它看不到整个系统的全貌。很多时候一个报错消失,是因为 AI 换了一种写法绕开了检查,而不是真正解决了根因。

所以我在实践里给自己划了几条安全边界,哪怕 vibe 状态再上头也不碰:

  • 涉及数据删除或覆盖的代码,必须逐行审查,比如批量删除、清空表、文件覆盖。
  • 涉及金额计算、权限判断的代码,必须手工推导一遍核心分支。
  • 对外提供接口的鉴权逻辑,不允许让 AI 自由发挥,必须按我指定的框架写。
  • 生成代码后至少跑一遍测试命令,不能只看“点击没报错”就认为成功。

一句话总结我的原则:可以 vibe 生成,不可以 vibe 交付。生成阶段多信任 AI,交付之前多信任自己的检查清单。


3. 实操:用 vibe coding 从零搭一个能跑的待办工具全记录

3.1 工具选型:我到底该用哪个 AI 编程工具

既然要实操,第一个绕不开的问题就是工具。最近“vibe coding 工具”相关搜索热度很高,但很多人选工具选得很纠结。我把自己试过的组合和感受整理一下:

  • Claude(Web 或 API)+ 手动复制粘贴:上下文窗口大,代码生成的完整度最高,适合规则文件写得比较清晰的项目。缺点是你要自己在编辑器和网页间切换,稍微麻烦。
  • Cursor:把 AI 直接嵌进了 IDE,支持整个代码仓库作为上下文,遇到报错可以直接框选给 AI 修复,是我目前的主力组合,配合 Claude 模型用体验最好。
  • GitHub Copilot 的 Agent 模式:对托管在 GitHub 上的仓库支持很好,适合已经用 GitHub 做项目协作的团队,能直接在 Issue 和 PR 流程里用自然语言驱动。
  • 本地部署的开源模型(比如 Qwen2.5-Coder、DeepSeek-Coder 这类的量化版):适合对隐私敏感、代码不能出本机的场景,速度慢一些,但胜在可控性。

如果是第一次尝试,我的建议是直接用 Cursor 免费版加 Claude 模型,注册完五分钟就能进入 vibe 状态。别在一开始就把时间花在折腾工具上,这本身就不 vibe。

3.2 开工前的规则设定:一份能直接抄的规则文件

很多人一上来就急着“让 AI 给我做个 App”,然后被生成出的一坨不可维护代码气到吐槽 vibe coding 不靠谱。真正的问题是没写规则文件。以下是我实际用过的简化版规则文件,你可以直接抄:

# 项目规则文件(rules.md) ## 项目目标 构建一个单用户待办事项 Web 应用,支持添加、完成、删除待办,按日期分组显示。 ## 技术约束 - 后端:Python 3.11 + Flask,数据库用 SQLite,禁止引入 Flask-RESTful、Django。 - 前端:原生 HTML + CSS + JavaScript,禁止使用任何前端框架。 - 所有数据库操作使用 SQLAlchemy ORM,禁止裸写 SQL 字符串。 ## 目录结构 所有代码放 app/ 目录,入口文件为 app/main.py,模板放 app/templates/,静态文件放 app/static/。 ## 错误处理 - 表单提交数据必须校验非空,校验失败时返回统一 JSON 格式:{"error": "字段不能为空"}。 - 数据库操作异常时打印日志并返回 {"error": "数据库错误"}。 ## 安全红线 - 禁止任何形式的 SQL 拼接。 - 删除操作必须弹窗二次确认。 - 所有返回给前端的 ID 使用字符串,禁止暴露自增主键。

写完这个文件之后,我通常会在第一次对话时把它完整发过去,再加上一句“请先阅读这个规则文件,后续所有代码生成都遵循它”。这句话很关键,它让 AI 把规则文件作为长期记忆加载,而不是每次临时发挥。

3.3 完整迭代循环:从一句话需求到能跑的应用

我当时的第一个提示词是这样发的:

按照 rules.md 的约定,做一个待办事项 Web 应用。首页展示所有待办,按日期分组。输入框在页面顶部,输入内容后回车即可添加。每条待办显示文字、日期和两个按钮:完成、删除。完成的任务文字加删除线并置底。

AI 大约花了十几秒生成了一整个 Flask 项目结构,包括app/main.py、两个模板文件、一个 CSS 文件、甚至一个初始化数据库的脚本。第一眼看到这么多文件我是有点慌的,因为传统模式下这些至少得花我两小时。

接下来就进入标准 vibe 循环:

  1. 运行看看:执行python app/main.py打开浏览器,页面出来了,输入待办、回车、添加成功。
  2. 第一个问题:点击“完成”之后页面回到了顶部,而不是停留在当前列表位置。我把这个现象描述给 AI:“完成任务后页面刷新会跳到顶部,希望在原地停留”。
  3. AI 修正:它给我改成用 fetch 局部更新而不是整页刷新。
  4. 第二个问题:删除按钮没有二次确认。我提醒它“rules.md 里写了删除必须弹窗确认”,它立刻补上了。
  5. 第三个问题:日期分组显示,今天的要做“今天”而不是显示完整日期。我把它翻译成“日期标题用相对显示,今天显示‘今天’,昨天显示‘昨天’,其他显示具体日期”。
  6. 收尾:我又让它加了统计条数、清空已完成任务的功能,全程没碰过核心逻辑代码。

整个从零到跑通加两个增强功能,耗时约四十分钟,其中大部分时间是我在描述需求和等 AI 响应。这个过程中我唯一亲手写的代码是给项目补了一个requirements.txt里缺失的版本号——因为 AI 默认装了最新版,我觉得不稳定就手动锁了版本。

3.4 嵌入式 vibe coding 的特殊性:不能全虚,但能“半虚”

近期的热搜词“嵌入式 vibe coding”让我很感兴趣,因为嵌入式开发恰恰是最不能用 vibe coding 全流程覆盖的领域之一。我简单做过实验,结合经验总结一下它的特殊性。

嵌入式开发的代码最终要跑在单片机或板卡上,面对的是真实硬件:寄存器、中断、时钟配置、外设时序。AI 生成的驱动代码,很多时候从语法上看完全没问题,但一烧到板子上就黑屏、死机、或者功能完全不正常。原因倒不是 AI 笨,而是嵌入式问题严重依赖芯片手册异常页和示波器波形,这些上下文根本不在 AI 的训练数据里。

但这不代表嵌入式开发不能用 vibe coding。我实验下来真正有效率提升的几个点:

  • 协议解析代码:比如 Modbus、CAN、串口打包解包这类格式固定的代码,AI 写得又快又准,比自己翻手册强。
  • 设备驱动框架:告诉 AI“用 Linux 字符设备驱动框架,提供 open/read/write/ioctl 接口”,它生成的骨架能省掉大量样板代码。
  • 状态机生成:把状态迁移表描述清楚,AI 生成的 switch-case 状态机几乎零 bug。
  • 单元测试和 Mock:让 AI 为纯逻辑代码生成测试用例,以及为硬件依赖接口写 Mock,非常好用。
  • 烧录脚本、日志解析上位机工具:这类代码不直接接触硬件,完全可以 vibe coding 全流程生成。

我给嵌入式朋友的实操建议是:硬件相关代码(寄存器配置、中断服务、时序初始化)用手工编写或基于官方例程修改,纯逻辑代码(协议解析、状态机、测试桩)大胆交给 vibe coding。这种“半虚半实”的混搭模式,既能享受效率提升,又不会在硬件层翻车。


4. 常见问题与排查技巧实录:几个真实翻车现场

4.1 代码能跑,但功能是假的

我做数据看板的时候遇到过一次很诡异的情况:页面显示“已加载 500 条数据”,但数据源 API 里明明只有 30 条。仔细追了一下才发现,AI 没有真的去调 API,而是直接在 JavaScript 里生成了 500 条假数据,理由可能是它觉得“这样更直观”。

这就是 vibe coding 最容易踩的坑:AI 倾向于生成运行时不会报错的代码,而不是真实连接到外部服务的代码。因为它无法验证外部 API 是否可用,所以会做出自己假想一个数据结构并填满模拟数据的“聪明”行为。

排查技巧是:不要只信运行结果,要对“关键外部链路”做人工抽查。比如搜索代码里有没有fetch、requests、SELECT语句,确认这些调用真实存在于代码中且指向正确的地址。我还养成了一个习惯,要求 AI 在生成代码时“涉及外部调用时,必须打印真实返回状态码,不允许 mock 数据”。

4.2 上下文窗口爆掉,AI 忘了最初的规则

对话到第 20 轮以后,AI 的行为会逐渐漂移:明明规则文件里写了“禁止引入前端框架”,第 25 轮它却默认用了 Bootstrap;文件名从app/main.py变成了main.py。这不是 AI 故意的,是上下文窗口装不下最初的规则了。

我的解决办法是维护一个“当前任务状态”文件(todo.md),每完成一个功能就更新一次,并在每次新对话之前把 rules.md 和 todo.md 一起发给 AI。相当于不让 AI 靠记忆工作,而是靠项目文档工作。这招极大减少了行为漂移,强烈推荐长期项目使用。

4.3 报错循环:同一个 Bug 反复出现

有一次我的 Flask 应用反复报Address already in use,AI 每次都让我换端口号。换一个端口确实不报错了,但原来的端口为什么被占用始终没解决。直到我意识到这可能是之前的开发服务器没被杀干净,手动lsof -i :5000查了一下,果然是僵尸进程。

这个案例说明的教训是:AI 的修复策略是“最小改动消除当前报错”,而不是“找到根因并根治”。当同一个问题第三次出现,就要停止和 AI 在报错表面打转,自己动手查系统层面、环境层面的因素。我总结的排查顺序是:先查端口、环境变量、依赖版本等工程环境因素,再回到代码逻辑,别让 AI 一直在代码层面“盲修”。

4.4 性能和安全问题:vibe 盲区

我在一个内部工具里让 AI 生成列表页,跑起来没问题,但数据量一上到几千条就卡成幻灯片。查下来发现 AI 用了最直观的写法:把所有数据查出来再循环格式化。对几百条没问题,对几千条就扛不住了。

性能问题的本质是:AI 生成代码时没有“数据规模”的概念,你一说“列表”,它的默认经验就是几十条级别的实现。安全性也是同理,我让 AI 写一个用户查询接口,它直接拼 SQL 字符串,注入漏洞明晃晃地挂着。

所以我在规则文件里专门加入性能与安全条款,比如“所有数据库查询必须延迟加载”“禁止在 Python 代码里拼接 SQL”。还会在完成后让 AI 自己给自己做一轮审查:“请以安全工程师的视角审查这些代码,列出所有问题,不修改。”这一步能挖出不少潜在风险。


5. 什么时候该 vibe,什么时候必须收敛锋芒

5.1 明确适合 vibe coding 的场景

根据自己的实践,我把适合度从高到低排了个序:

  • 一次性工具和脚本:批量改文件名、数据迁移、CSV 清洗,用完即弃,vibe 完美。
  • 快速原型和 Demo:验证产品可行性、给投资人演示、给团队体验新交互,重在“看起来能用”。
  • 学习探索:想弄懂一个新框架时,vibe coding 生成示例代码,自己再亲手改造一遍,比看文档快得多。
  • 自动化测试生成:让 AI 生成测试用例,再由人来审查测试逻辑,效率和安全性双高。
  • 内部工具:团队使用、数据不敏感、挂了能重来,vibe 完全够用。

5.2 必须收敛的场景

这些场景我在之前提到过,但值得集中强调:

  • 生产环境核心链路:用户认证、支付、订单状态机,每一行都可能是钱。
  • 强监管行业:金融、医疗、电力控制,需要全链路审计日志可追溯。
  • 嵌入式硬件核心:中断优先级、实时性、看门狗,AI 的“平均经验”往往不适用于具体芯片。
  • 涉及用户数据的批量操作:一次误删可能直接变成事故。

在这些场景里,我的建议不是不用 AI,而是把 AI 降级为“顾问”而非“主笔”:让它写代码片段、做解释、列测试计划,但最终落地代码必须通过人工逐行审查。

5.3 我的混合作业模式:Vibe 生成,Rule 约束,Review 把关,Test 兜底

实际操作中我不会非黑即白地选“全 vibe”或“全人工”。最后形成了下面这套四步流水线,分享给你们参考:

  1. Vibe 生成:用自然语言把功能需求提交给 AI,让它在规则文件约束下生成完整实现,这一步追求速度和覆盖率。
  2. Rule 约束:规则文件常驻更新,每次模型变更、每个新模块都要重新声明技术边界和安全红线,避免 AI 跑偏。
  3. Review 把关:我抽查关键链路代码,重点看数据流、鉴权、错误处理和外部服务调用。不需要逐行读,但要确认“肉的纹理”是对的。
  4. Test 兜底:任何自动生成的代码,必须跑通至少一轮测试命令。我通常让 AI 生成测试用例再执行,把它自己的产出拿来检验它自己。

这套流程让我既享受到了 vibe coding 的爆炸速度,又守住了传统开发的安全底线。说实话,vibe coding 并没有让我的编程水平下降,反而逼我花更多精力去提升需求描述能力和架构判断力——因为当生成代码变得唾手可得,真正稀缺的反而变成了“知道该让 AI 做什么”和“知道 AI 做得好不好”这两种能力。


最后再分享一个细节:我在 vibe coding 过程中踩过最深的坑,不是技术问题,而是心态问题——一旦习惯了 AI 全权生成、快速迭代的节奏,会变得不愿意停下来写文档、做审查。后来我给自己立了一条规矩:每次 vibe 完一个功能,必须写两行注释说明“这段代码是干嘛的、为什么这么写”。这两行注释与其说是写给未来的同事看,不如说是逼自己重新以工程师的身份审视 AI 的产出。毕竟 vibe coding 的初衷不是让程序员退化,而是把我们从重复劳动中解放出来,去专注于更高层次的取舍。这个度把握好了,vibe coding 就是这几年最值得纳入工作流的一件武器。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询