
今年上半年vibcoding 这个词几乎像一阵风一样扫过我的朋友圈和技术群。我第一反应是原来我最近大半个项目都是这么写完的只是没人给过我一个名字。所谓 vibe coding就是不再把精力花在逐行敲代码上而是把想要的软件用自然语言描述清楚交给 AI 编程工具生成然后再通过“运行—报错—反馈—修改”的循环去逼近最终结果。整个过程像是在调整某种氛围而不是在传统意义上“写程序”。这篇文章我想借自己真实做过的几个项目好好拆一下这套工作方式的底层逻辑、适用范围、操作细节和安全底线希望对正准备尝试或者已经在用 vibe coding 的人有点用。1. 拆解 vibe coding 这个热词的底层逻辑1.1 “氛围感”到底指什么写代码本来是最讲究精确的事一个括号错了都可能让整个程序罢工为什么偏偏要用 vibe 这种模糊的词来形容我个人的理解是这个词强调的是人对编码过程的“感觉驱动”。传统模式下你写一行代码就要对这一行负责逻辑链必须随时闭合。vibe coding 不太一样你更像一个坐在副驾驶上的人车是 AI 在开你负责看方向、听导航、感觉到不对劲就立刻纠正。只要每一轮迭代的反馈是合理的项目整体氛围是“朝着想要的方向走”你就会很自然地放手让它继续。这是一种信任驱动的开发节奏和过去那种“不掌握每一行就不安心”的控制欲正好相反。有人会问这不就是让 AI 写代码吗对也不全对。让 AI 写一段代码只是其中的最小操作而 vibe coding 是一整套连续的工作流。它真正改变的是你的注意力分配你不再盯着语法、函数签名、库的调用方式而是把大部分精力放在“表达需求”和“验证结果”上。1.2 核心循环描述、生成、运行、报错、再喂回去我复盘自己用 vibe coding 完成的任务无论多复杂本质都在跑同一个循环描述用自然语言把功能需求、界面形态、交互逻辑讲清楚。生成AI 根据描述生成代码包括文件结构和依赖配置。运行把项目跑起来或者执行关键函数看真实表现。报错拿到错误信息、异常输出、界面效果偏差。反馈把这些信息带回给 AI请它修复或调整。这个循环里第 3 步是我觉得最核心也最容易被忽略的。很多刚接触 vibe coding 的人容易进入“生成完看一眼觉得差不多就直接进入下一个功能”的节奏结果一口气堆了几百行带病代码最后哪里坏了都不知道。我的习惯是每生成一个可运行单元就立刻运行一次。哪怕只是简单地打开页面、敲一段测试数据也要确认这一轮的输出没有明显问题。原因很简单让 AI 修复一个新鲜报错比修复一堆纠缠在一起的逻辑后遗症要高效得多。报错越新上下文越短修复成本就越低这算是这套工作流效率高低的决定性变量。1.3 与普通 AI 辅助编程的分水岭在哪早几年的 AI 辅助编程比如自动补全、单函数生成、注释转代码只能算“帮你少打几个字”。代码的整体结构、模块划分、数据流还是要人肉规划AI 是工具人。vibe coding 的跨越在于结构本身也可以由 AI 产出。你可以只给它一句话它替你决定用什么框架、建几个文件、数据怎么流动、界面怎么组织。人从“编码者”变成了“定义问题的人”和“验收结果的人”。这个转变带来了一个巨大的红利一个人可以同时推进好几个小项目或者一个项目里跨到完全陌生的技术栈。我试过在完全没写过 Vue 的情况下靠 vibe coding 做出一个能交付的插件页面。但代价也很明显——你对产物的理解程度取决于你投入了多少精力去审查。这就像你可以雇一个厨师替你做饭但你得自己尝、自己决定要不要把回锅肉里的辣椒减半你不能因为“菜不是我切的”就心安理得地说这道菜一定好吃。2. 一次完整 vibe coding 实战复盘三天需求一天半交付2.1 动工前我把给 AI 的首轮提示词当成了产品说明书真正能跑起来的 vibe coding 项目九成以上赢在第一步的描述。我做过一个内部订单数据看板当时的原始需求只有一句话“产品部想看看最近订单的情况。”这句话要是直接丢给 AI它能给你做出一百种完全不同的东西而且大概率不是你想要的那一种。我花了一小时把需求翻译成了下面这段提示词请帮我构建一个单页前端应用用于展示某业务系统的订单统计数据。 功能包括 1. 上传 Excel 文件读取里面的订单数据 2. 在页面顶部展示三个汇总卡片订单总数、销售总额、平均客单价 3. 支持按日期范围筛选数据 4. 用柱状图展示每日订单数量的趋势 5. 表格展示明细数据支持简单的关键词搜索。 约束条件 - 这是一个内部演示工具不需要登录、不需要权限体系 - 技术栈使用 React TypeScript Vite - 图表用 ECharts表格直接用表格元素即可不要引入重型组件库 - 不接入后端所有数据在前端内存中处理 - 界面请保持简洁不要多余的装饰。写清楚每个细节不是因为我啰嗦而是因为 AI 不是读心术。你对“简单的搜索”五个字可能理解为“根据订单ID精确匹配”AI 可能实现成全字段模糊匹配。后期多轮返工调整的往往就是这些一开始看起来无关紧要的模糊点。花一小时把需求写透可以为后面省下十个小时的修复时间。2.2 迭代过程中的“人肉搅拌”怎么把报错变成 AI 听得懂的话第一轮生成很快AI 给了我一套完整的项目结构还贴心地写了启动命令。我依次执行依赖安装、启动开发服务器页面倒是打开了但上传 Excel 文件后直接白屏控制台报了一个“Cannot read properties of undefined (reading map)”的错误。我没有直接把这个报错复制粘贴过去因为这类信息太泛了。我补上了必要的上下文我按你给的代码上传了一个测试 Excel 文件文件里包含三列订单编号、订单日期、订单金额。上传后页面白屏控制台报错Cannot read properties of undefined (reading map)。我怀疑是 Excel 解析后某个字段名和代码里不一致。请检查上传后的字段映射部分并告诉我应该在 Excel 表头怎么命名。AI 看到这段反馈后很快定位到是表头字段名和硬编码不一致顺手帮我加了表头自动兼容与缺省值处理。这就是我前面说的反馈质量决定修复速度。你给 AI 的信息越接近“做了什么事、用了什么方法、看到了什么结果、怀疑什么原因”它修复得越快也越不容易中途瞎猜出一条歪路。2.3 成果验收与隐藏成本一天半之后这个看板真的能用了可以上传表格、看趋势图、按日期过滤、搜关键词。团队同事试用反馈比预期好太多了。表面看起来很爽但我在复盘时给自己算了一笔真实成本账花在写需求描述上的时间约 1 小时。花在迭代反馈上的时间累计约 5 个半小时。花在最终人工检查代码、跑边界数据上的时间约 1 小时。总共加起来大约 8 小时换算成工作日确实是一天多一点。如果传统手写我估计需要两到三天还不算踩各种样式和图表配置的坑。efficiency gain 很明显但我也清楚这 8 小时里包含了大量高强度思考我需要判断 AI 每一次给出的修改到底对不对需要不断把产品需求翻译成精确的验收标准。这其实不是“不写代码就轻松了”而是把功夫下在了另一个地方。3. 什么样的任务适合 vibe coding我用一张筛选清单来判断3.1 低风险高结构化任务放心交给 AI我经过一段时间实践后整理出一个适合 vibe coding 的任务清单。可以放心做的有这么几类单页工具类应用比如内部数据看板、文件格式转换器、信息采集表单。原型验证产品想法还没定型时用 AI 快速做出一个可点击、可演示的版本。一次性脚本批量重命名文件、解析日志、整理 CSV 数据用完即弃。个人博客、个人主页、学习用 Demo坏了不影响别人。接口联调模拟写一个 Mock Server、造一批测试数据。这类任务有一个共性领域成熟、工具链常见、失败的影响可控、重新生成的成本低。在这类场景里vibe coding 的容错率特别高哪怕 AI 搞砸了你损失的最多也就是一个小时。3.2 高风险高复杂度任务要极度谨慎与上面相对的有几类任务我强烈建议不要闭眼 vibe涉及支付、真实资金流转的系统。涉及复杂权限模型和多角色数据隔离的系统。核心数据库的迁移、删改、批量数据修复。高并发、低延迟要求的后端服务。需要长期维护、多人协作的大型代码库新增核心模块。这不是说 AI 在这些领域一定做不好而是说这类项目有太多隐式约束权限不能越、事务不能断、数据不能丢。这些东西靠“感觉”是感觉不出来的必须靠严格的工程纪律去保证。AI 生成的代码往往很符合最佳实践的表面但边界条件、并发竞争、幂等处理这些细节才是真正见真章的地方而这些恰恰是 vibe coding 最容易浮于水面浅尝辄止的部分。3.3 发现“失控信号”的检视清单我给自己定过一个“失控信号”清单只要中了两条就立刻停下 vibe 模式连续三轮修改后问题没有收敛反而冒出新问题。生成的代码里开始出现重复函数、死代码、未被引用的组件。我已经说不清楚当前版本和上一个版本到底差在哪里。我发现自己不再看 AI 生成的代码只会机械地点“接受修改”。项目从“快速做原型”变成了“反复救火”每修一个问题都像拆东墙补西墙。出现这两三条同时满足时最理智的操作不是继续把报错贴给 AI 让它缝补而是回到上一个可用版本重新梳理需求边界换成人肉模式把问题定位清楚。vibe coding 擅长的是快速铺开和尝试并不擅长在烂摊子上做精细手术。4. vibe coding 模式下的质量底线这几件事我绝不偷懒4.1 不懂全部代码也要懂关键路径我非常清楚vibe coding 最被人诟病的一点就是程序员生成了自己都不理解的代码部署了自己都说不清楚逻辑的系统。我的应对方式不是强迫自己读懂每一行而是保证自己理解“关键路径”。比如那个数据看板我会沿着一个用户操作把整个链路翻一遍用户选择 Excel 文件后文件在哪个函数里被读取、解析成什么结构、存在哪个变量里、汇总卡片从哪些字段算出来、图表数据从哪里读取。我不需要背出每一行语法但我能准确说出来数据是怎么流动的。这个习惯在你需要排查问题时特别重要。系统出错时你不需要懂全部代码但必须知道该去哪里找问题。如果你连数据在哪一层被改都没概念那你连把正确的错误信息描述给 AI 都做不到。4.2 让 AI 顺手补齐测试而不是你自己反复试我踩过的最大的一个坑就是“看起来能跑其实是个定时炸弹”。后来我学聪明了每次需求描述里强制加一条要求 AI 同时生成简单的验证逻辑或测试文件。比如做订单看板时我要求它附带一个sample-data.xlsx和一个验证脚本用来断言“上传三行订单后订单总数的数值是否等于 3”。这个测试非常简单但它能在我每次改动后自动跑一遍防止某个修改把最核心的计算逻辑弄坏。对于更复杂的项目我会用 Vitest 或 Jest 这类测试框架写几个基础用例。目标不是追求覆盖率而是给 AI 的产出装上一个最低限度的“体检仪”。有测试和没测试vibe coding 的体验是两回事。有测试时AI 的每一次修改都有客观反馈没测试时全靠人肉盯着屏幕看眼神一飘就容易放走问题。4.3 版本控制是 vibe coding 最刚的护栏我见过不少朋友用 vibe coding 把自己逼进死角AI 连着改了七八轮每一轮都改坏了另一个东西最后想回退却发现根本没做版本管理只能含着泪手动还原。我的习惯是每开始一轮修改前先git commit一个干净版本。如果 AI 连续两次修改失败我不会再指望它继续修而是直接git reset --hard HEAD~1回到上一次可用状态换一种描述方式或者把问题拆小再试。这个动作虽然简单但可以说是 vibe coding 里最能止损失的一招。它让“试错”真正变成低成本的试探而不是一场有去无回的冒险。我还建议为每一个新功能开一个独立分支功能验证通过再合回主分支。这样即使某一个分支被 AI 弄到面目全非主分支也始终保有一个可发布的正常版本。4.4 秘密信息绝不进对话这一点是我给自己定的铁律数据库密码、云服务密钥、用户隐私数据绝不直接粘贴到 AI 对话里。AI 工具确实很强大但我没有理由把一个有权限的生产环境连接串交给一个第三方服务。不管是我自己用还是团队里的人用我都坚持只让 AI 生成读取环境变量的代码然后我用.env文件把真实的密钥存起来并且把.env写进.gitignore。# .env 示例 DB_PASSWORDxxx API_KEYyyy这样既不影响 vibe coding 的效率也把风险控制在可接受的范围。很多人觉得这只是一个大号的风险提醒但我在实际开发中见过不止一次因为图省事把密钥写死在代码里最后随着代码一起被传到公共仓库的惨案。密钥这种东西一旦泄露靠“继续 vibe”是救不回来的。5. 我踩过的坑那些让 vibe coding 翻车的真实场景5.1 “无限确认却改不动”的上下文泥潭有一次我做一个交互组件功能和状态非常复杂。AI 第一版生成得很好但从第二版修改开始它就像失忆了一样总是忘记最开始的约束。我让它加一个按钮它把之前的筛选逻辑又重写了一遍我让它改样式它顺带把数据层也动了。后来我发现这是因为它把太多内容塞在一个对话里长上下文的容量毕竟有上限。人长时间工作也会忘事AI 也一样。我的解法是在项目根目录维护一个PROJECT.md把核心需求、技术栈、已完成功能、未完成功能、约束条件全部写进去。每次新开对话时我第一句话先把这份文档贴给 AI相当于给它一份“项目记忆”。这个操作看起来很原始但真的非常管用它能有效避免项目走到一半时 AI 忽然开始自由发挥。5.2 “假修复”比不修复更麻烦有一次AI 生成的脚本在运行时报错我把错误信息贴回去它立刻回复“已修复”。我再跑一次确实不再报错但程序也没有任何输出。我检查了半天才发现它所谓的修复是在最外层加了一个try-catch把异常吞掉了业务逻辑本身还是坏的。这是一个很有代表性的问题AI 倾向于消除报错而不是真正实现预期的行为。报错消失不等于功能正常这个逻辑在 vibe coding 里必须靠人盯死。从那以后我验收时的标准不再是“有没有报错”而是“输入这个测试数据你应该返回什么结果实际返回了什么结果”。我会明确要求 AI 写清楚“本轮修改影响了哪些逻辑预期行为变化是什么”再跑一遍真实数据做验证。5.3 盲目相信“它能跑”没测试的时候全靠运气我还记得一次数据处理脚本翻车。AI 生成的脚本处理我给的样例数据时结果完全正确。我高兴地从 CSV 里挑了几组极端数据往里塞比如空值、重复值、超大数值结果脚本直接瘫痪。AI 默认生成的代码通常只会覆盖最常见的 happy path。它不是故意敷衍而是“世界上的边界情况太多你没有提它就无从知道”。现在我每次做数据处理类项目都会在提示词里加一句“请特别说明你对空值、缺失字段、异常类型的处理假设并给出对应的防御代码”。然后我会主动构造一两组刁钻数据去测试。别看这个动作小它能拦下很多将来上线后才会爆出来的问题。5.4 最隐蔽的坑我的过度自信连续高效完成几个小项目后我一度产生了“我可能不需要像以前一样懂代码了”的错觉。那段时间遇到问题我的第一反应就是复制报错、发给 AI、等修复。看起来效率很高但有一次一个时序问题折磨了我整整一个上午UI 的筛选条件状态总是在更新后被重新初始化我贴了一轮又一轮报错AI 改来改去都是这里碰一下那里碰一下始终不断根。最后我实在气不过关掉对话框自己把相关代码从头读了一遍五分钟就定位了问题有一个useEffect的依赖数组里少了一个状态变量。这件事给了我一个很深的教训vibe coding 可以帮你省下大量重复劳动但它不能替代你自己的判断力。如果你把自己降级成一个“只会复制粘贴的人”那 AI 出现偏差时你连纠偏的本事都没有。6. 关于 vibcoding 的争议我的态度是——6.1 它确实降低了技术门槛也让编程向“创意控制”倾斜vibcoding 最让我惊艳的地方是它把编程这件事从“懂代码的人”手里解放了一部分出来。产品经理可以自己做交互原型设计师可以自己搭作品集网站运营可以自己写数据清洗脚本。这对一个组织的创造力和响应速度是巨大的正向推动。我自己也开始用 vibe coding 做更多以前懒得碰的小工具自动整理截图、批量压缩图片、监控某个网页变化并提醒。这些需求太小、太琐碎过去根本不好意思让研发排期现在我自己就能顺手解决。这种感觉非常自由编程从一项专业技能变成了“表达想法的另一种方式”。6.2 但“成为 vibe coder”不等于“不用负责”我也看到一些人把 vibe coding 理解成“彻底躺平”觉得程序员这个角色要完蛋了。我个人完全不认同。你把一个需求交给 AI做出来的东西出了故障用户跑过来找的是你不是 AI。线上数据被算错责任在你。软件被攻击了责任也在你。所以我对 vibe coding 的定位是它是放大你能力的杠杆而不是替你扛责任的替身。你用好了可以一个人顶一个团队你用不好AI 会以极快的速度生产出大量你搞不定的技术债。每一次你说“这个改动我看不太懂但应该没问题”的时候其实就是往信任账户里透支一笔透支多了迟早要还。6.3 对新人来说先握好方向盘再开自动驾驶我经常被问到不会写代码的人能不能直接靠 vibe coding 做出产品我的回答是可以做原型但想做好生产级产品还是得补基础。原因很简单vibe coding 对“验收能力”的要求不是降低了而是提高了。面对 AI 生成的一大段代码你需要判断它有没有隐患、哪里可能出错、性能行不行。一个完全不懂编程的人很难做出这些判断。传统学习路径里手写代码的那些枯燥练习本质上是在建立你对代码的“体感”。有了这个体感你才能在 vibe coding 的时候闻出哪里不对劲。如果让我给新人一个学习路径建议我会说先老老实实用手写做一个几百行的小项目理解变量、函数、循环、条件判断、组件、接口这些基础概念。然后再打开 AI 工具试着让它帮你写更大的东西。那时候你才会真正感受到 vibe coding 的爽——它是站在你已有底盘上的加速器而不是平地起高楼的魔法。6.4 我现在的做法每天收尾前留一段“人肉模式”最后分享一个我目前坚持的习惯无论当天 vibe coding 了多长时间收工前我都会花至少二十分钟翻一遍当天 AI 生成或修改的代码 diff。不为了逐行审只为了弄清楚今天系统里发生了什么变化、数据流哪里被动过、哪个模块可能出现隐患。这个习惯让我第二天继续 vibe 的时候心里有底也让我的“氛围感”不是建立在空气上而是建立在真实的项目认知上。我始终觉得vibe coding 最理想的状态是你把 AI 当成一个效率极高的结对搭档它负责快速产出你负责理解和把关。你可以不知道它为什么选择这个变量名但你不能不知道它动了哪个功能、改了什么行为。保持这个习惯之后我再也没有遇到过“项目看着挺热实际一碰就塌”的尴尬局面。这也是我最想写给正在尝试 vibcoding 的人的一句话放开手去用它但永远别放开自己作为开发者的那份认真。