ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Vibe Coding 实践指南:AI 辅助编程的完整工作流与工程化落地

Vibe Coding 实践指南:AI 辅助编程的完整工作流与工程化落地

Vibe Coding 实践指南:AI 辅助编程的完整工作流与工程化落地

一、先搞懂 Vibe Coding 到底在做什么

很多人第一次接触 Vibe Coding,都把它理解成"偷懒式编程":告诉 AI 要什么,它把代码吐出来,复制粘贴就完事。真正上手之后你会发现,Vibe Coding 的核心并不是"写代码"这个动作,而是"判断和决策"。

传统开发里,写代码是主要成本;在 Vibe Coding 里,写代码变成次要成本,主要成本转移到三件事上:把需求讲清楚、把结果验证到位、把方向把稳住。这三件事任何一件做不好,项目就会失控。

举个典型的翻车案例。有人让 AI 写一个图片压缩工具,只给了三句话:"用 Python,压缩图片,输出到新文件夹。“AI 十分钟生成了完整代码,看着能跑。但真拿几百张照片去压,问题全出来了:内存占用高得离谱,压到一半卡死;日志不输出,运行像黑盒;压缩质量参数没有校验,有些图明显失真。代码"能跑”,但离"能用"还有很大距离。

所以 Vibe Coding 更像是在"开一家由 AI 当主力工程师的公司",你作为负责人,要盯紧需求的清晰度、边界条件和质量验收。它适合有想法、又愿意花时间验证结果的人。

二、启动一个项目:从想法到第一个可用版本

2.1 需求描述:比你想的更重要的第一步

翻车的起点几乎都是同一个:脑子里只有一个模糊的大方向,就急着喊"帮我做一个项目"。AI 不懂你的沉默,只会按字面意思理解。你说"做个博客系统",它默认做出一个多用户、有后台管理、支持评论的完整博客——可你只想给自己写一个笔记工具。

动手之前,先花 15 分钟写一页纸需求,回答四个问题:这个项目要解决什么问题?核心功能是什么、哪些可以不做?使用场景是网页、命令行还是桌面软件?有没有必须用的语言或框架?

好的需求描述自带边界。比如:"做一个命令行工具,用 Node.js。输入目录路径,把里面所有 jpg 文件按拍摄日期重命名为 20240101_001.jpg。要求:递归处理子目录;跳过已符合命名规则的;输出改动明细;出错了不要中断全部,跳过该文件并计数。"有输入、有规则、有边界、有容错要求,AI 生成的东西基本就是可用的。

2.2 生成骨架并跑通

需求清晰之后,让 AI 生成项目骨架。关键技巧:不要让 AI 一次性把全部功能做完,先搭一个最小可运行的骨架。骨架能跑通,再在这个基础上加功能。如果跑不起来,问题一定出在骨架本身;如果直接生成 20 个文件的完整系统,一旦报错,排查范围大到无从下手。

骨架生成后一定要自己本地跑一遍。我第一次用 Vibe Coding 就吃过亏:AI 说"直接运行 main.py 就行",结果三个报错——缺依赖、路径写错、端口被占用。跑通之后记得做第一次 git commit,把初始版本存下来。

2.3 第一个版本的正确验收

每加一个功能就做一次"轻量验收":新功能确实生效了;旧功能没有被破坏;出错时提示信息可读。还有一个容易被忽略的验收点——让 AI 主动补充边界情况。比如做"导入 CSV"功能,直接问 AI:"文件格式不对怎么办?列名不一致怎么办?只有表头没有数据怎么办?"边界处理才是区分"Demo"和"工具"的分水岭。

三、核心循环:需求 → 生成 → 验证 → 修正

3.1 给 AI 约束,而不是给它自由

很多人觉得提示词越开放越好,让 AI 有发挥空间。恰恰相反。开放式提示词给 AI 太多自由度,它会选一个"最主流"的实现方案,而这个方案经常不是你的场景真正需要的。

有效提示词一般长这样:先说背景——“我有一个使用 SQLite 存储数据的工具,目前遇到一个问题……”;再说诉求——“帮我修改保存函数,让它能处理重复记录”;然后给约束——"不要改动数据库表结构,保持原有返回值格式,补充一条测试。"写约束的本质,是把你脑子里知道的背景提前告诉 AI,让它在这个框架内工作。

两个固定用法值得掌握:希望 AI 先理解再动手,就加"先解释这段代码在做什么,再提出修改方案";希望谨慎修改,就加"这是生产环境的代码,请最小化改动"。模型对风险词的敏感度比你想的高,"生产环境、最小化改动"这类词会让输出明显保守、靠谱。

3.2 验证环节不能偷懒

AI 写完代码后,看一眼觉得"好像没问题"就让它改下一个功能,这是项目后期失控的根源。验证分三个层级:第一层语法和启动——项目能正常启动,没有 import 或编译错误;第二层主流程——核心路径跑一遍,比如登录、转账、导出;第三层边界和异常——故意输入异常数据,看会不会崩、报错是否友好。

记住一句话:Vibe Coding 省下来的是编码时间,不是验证时间。AI 可以把编码效率提升十倍,你把验证也省掉,最终会用十倍的排查时间去还债。

3.3 让 AI 高效修正而不是越改越乱

修正环节最常见的问题是:让 AI 修一个 Bug,它把好好的功能也改坏了。原因是大模型收到"帮我修一下 Bug"时,往往会在局部过度修改——为了"确保修复",顺手重构你没让它动的代码。

应对方法:明确"一次只改一个问题"。提示词里最常加的一句是:"只修改导致此 Bug 的代码,不要动其他任何逻辑。"多个问题就拆成几轮对话,一个一个来。修正时还有个小技巧:把报错信息原样贴给 AI,不要转述。模型对真实报错的理解远强于对你的二手描述。

四、长期维护的核心难点:让代码库"对 AI 友好"

4.1 重构比写代码难十倍

Vibe Coding 项目做完第一版,会产生"项目已经好了"的错觉。随着需求变化,你开始加功能、删字段、改交互,才真正体会到:最难的不是让 AI 写代码,而是让它理解并修改一段不是它写的、甚至不在它当前记忆里的代码。

每次开新对话,AI 对旧项目一无所知,只能看到你粘贴的片段。如果代码没有组织好——函数几百行、命名混乱、依赖纠缠——AI 就没法准确理解,改动自然容易出错。

4.2 对 AI 友好的三条硬规则

第一,文件尽量小。一个文件控制在 200-300 行以内。AI 读文件受上下文限制,小文件更容易完整读入。可以直接在需求里要求:“每个文件不超过 300 行,超出就拆分。”

第二,命名必须语义化。handleData很烂,formatDateForDisplay很好。AI 生成代码时容易产出泛化命名,要在编码规范里加一条"命名要精确描述意图"。

第三,注释写"为什么"而不是"是什么"。AI 生成的解释性注释(“这一步是遍历数组”)帮助不大。真正有价值的是记录决策原因:"这里用正则而不是 split,因为日期字符串可能有多种格式。"这种"为什么"信息,能让未来的 AI 修改时理解当初的取舍。

4.3 自动化测试是"安身立命"的东西

代码大量由 AI 生成和修改,每次改动都可能引入隐蔽的回归问题——没有自动化测试,项目几乎无法长期维护。建议从"第二天"开始引入:骨架跑通、第一个功能完成之后,立刻让 AI 为核心逻辑写测试,覆盖正常路径和异常路径。之后的每次修改先手动跑一遍测试,失败就把报错丢给 AI。这种"测试当护栏"的方式,比任何代码审查都更适配 Vibe Coding 场景。

五、我踩过的坑与应对方案

功能膨胀。加功能太容易,你感受不到开发成本,但每个功能都在加重维护负担。做法是维护一份"功能冻结"列表:本次迭代只做这些,其他记到 backlog 里单独评估。

依赖混乱。AI 修复时顺手装个库,结果根本没用到,白白增加体积和冲突风险。给自己定三条规矩:改依赖前先看 requirements.txt 或 package.json;AI 说要装新库时先问"现有依赖有没有替代";定期检查哪些依赖未被引用,发现就删。

上下文危机。对话太长导致模型忘记开头需求,或项目太大贴不全。方案是"上下文预算":每个新对话只聚焦一个任务,开工前先粘贴一份"项目架构说明.md"(只记录项目定位、目录结构、关键模块职责、启动命令、测试命令,约二十行),再粘贴相关文件。

六、工具链与最终建议

工具链其实很简单:一个主流大模型对话工具 + 一个代码编辑器。选型的关注点:代码生成准确率、长上下文理解能力、错误修正能力。用同一个项目骨架分别让不同工具生成,谁的结构你更喜欢、谁改完出的问题少,就选谁。工具是次要的,工作流稳定才是核心。

版本管理是生命线:每完成一个功能提交一次 git commit,大重构前先切分支。AI 的改动经常不完全受控,分支机制给你"随时反悔"的底气。

给新手的起步路径:先选一个身边真实存在的小问题——批量重命名文件、把照片按月份归档——从命令行工具开始,因为验证路径最短、出错范围最小。第一周不追求做出多厉害的东西,只追求把循环跑顺:描述 → 生成 → 验证 → 修正。Vibe Coding 真正教会你的不是怎么偷懒,而是怎么把精力花在值得花的地方——它省掉重复劳动,换来你更多时间投入"判断项目往哪走"这种更高级的问题上。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进