Vibe Coding 实战全程实录:我用4小时做了个能跑的产品,中间差点放弃三次
本文最后更新于 2026-05-20,文章内容可能已经过时。
Vibe Coding 实战全程实录:我用4小时做了个能跑的产品,中间差点放弃三次
我花了4个小时,用自然语言从零搭了一个能用的产品。
我不是在炫耀——我想告诉你中间有多少次我以为它完了。
第一次崩溃发生在第37分钟,AI给我生成了一段"看起来完美"的API调用代码,本地跑起来一片报错。第二次是在第二个小时,我意识到它压根没理解我说的"支持搜索"是什么意思。第三次……算了,先从头说起。
这个过程改变了我对编程门槛的判断——不是变低了,而是变得更清晰了。
---
第一章:Vibe Coding 不是又一个噱头
2025年初,AI领域的教父级人物 Andrej Karpathy 在推文里造了一个词:Vibe Coding。
他的原话大意是:现在我写代码基本上靠"感觉"——把需求说给AI听,接受它给的代码,出错了就把报错扔回去,基本不细看代码本身。
这话一出,技术社区炸了。有人说这是在开倒车,有人说这才是未来。
但大多数人误解了这件事的本质。
Vibe Coding 和"AI辅助编程"的区别,不是量的差异,是质的不同。AI辅助编程是:你会写代码,AI帮你写得更快。
Vibe Coding 是:你有想法,AI帮你把想法变成能跑的东西——你不需要会写代码。
它改变的不是你写代码的速度,而是你是否需要会写代码这件事本身。
GitHub Copilot 的数据显示,开发者借助AI生成的代码占比已经超过40%。但这个数字背后藏着一个更重要的趋势:越来越多的产品原型,正在被完全不懂编程的人做出来。
这是一次真实的门槛位移。但门槛降低不等于消失——这正是我想通过实战告诉你的。
---
第二章:我选了什么来做实验,以及为什么这个选题重要
我给自己定了一个实验对象:「链接备忘录 + AI摘要」小工具。
功能很具体:
- 粘贴一个URL,自动抓取标题和摘要
- 调用AI生成一句话总结
- 所有链接本地存储,支持关键词搜索
- 有个简洁的Web界面
选这个不是随机的。它满足几个关键条件:
功能边界清晰——不会因为需求模糊而让AI乱跑。 有真实需求——我自己就有这个痛点,收藏夹里躺着几百个再也没打开过的链接。 技术栈有代表性——涉及前端界面、后端API、外部服务调用,足够测试Vibe Coding的上限和下限。如果这个能做出来,说明Vibe Coding在个人工具场景是真实可行的。如果中间翻车,翻车的地方就是边界所在。
---
第三章:全流程实录——从一句话需求到可以用的产品
3.1 Prompt 设计阶段:把"我想做一个XX"翻译成AI能执行的需求
最常见的错误是直接说:"帮我做一个链接收藏工具。"
这等于让厨师"做点好吃的"——AI会给你一个它认为合理的方案,但大概率不是你想要的。
我用的是一个结构化的需求描述模板:
你是一个全栈开发工程师。我需要你帮我构建一个Web应用,具体要求如下:
【产品名称】LinkMemo - 链接备忘录
【核心功能】
1. 用户粘贴URL后,自动抓取网页标题
2. 调用OpenAI API生成该链接内容的一句话摘要(中文)
3. 所有数据存储在本地JSON文件中
4. 支持按关键词搜索已保存的链接
5. 删除链接功能
【技术栈要求】
- 后端:Node.js + Express
- 前端:原生HTML/CSS/JS(不用框架,保持简单)
- 存储:本地JSON文件
【输出要求】
请先给我项目的文件结构,再逐个给出每个文件的完整代码。
不要省略任何代码,不要用"..."代替。
【约束条件】
- 代码要能直接运行,不需要额外配置
- API Key通过环境变量传入
- 界面要简洁,移动端也能用
这个模板做了几件关键的事:
- 给AI一个角色定位
- 功能描述具体到"一句话摘要"而不是"AI总结"
- 明确技术栈,避免AI自作主张用你不熟悉的框架
- 要求"不省略代码"——这一条非常重要,否则AI会给你残缺的代码
3.2 迭代对话阶段:第一版跑不通怎么办
AI给出了第一版代码,大约200行。我按照文件结构创建好,node server.js 跑起来。
然后——
Error: Cannot find module 'node-fetch'
这是第一个坑。AI生成的代码引用了一个没有在 package.json 里声明的依赖。
很多人到这里就放弃了,或者开始手动查文档。但Vibe Coding的正确姿势是:把报错原文扔回去,加一句上下文说明。
运行 node server.js 后出现以下报错,请帮我修复:
[报错信息粘贴在这里]
注意:我是直接按照你给的代码创建的文件,没有做任何修改。
请告诉我需要运行哪些命令来安装缺失的依赖,
并检查代码中是否还有其他未声明的依赖。
AI立刻给出了完整的 package.json 和安装命令。
这里有个细节很重要:"我没有做任何修改"这句话是关键。它让AI知道问题在它的输出里,而不是你的操作里,避免AI给你一堆"检查你的环境配置"的废话。
3.3 卡壳时刻:AI给了幻觉代码,我怎么发现的
第一次真正的卡壳发生在实现"自动抓取网页内容"这个功能上。
AI给出的代码是这样的(有问题的版本):
// AI生成的第一版 - 有问题
async function fetchPageContent(url) {
const response = await fetch(url);
const html = await response.text();
// 用正则提取正文
const bodyMatch = html.match(/
]>([\s\S]?)<\/body>/i);
const bodyContent = bodyMatch ? bodyMatch[1] : '';
// 去除HTML标签
const textContent = bodyContent.replace(/<[^>]+>/g, '');
return textContent.substring(0, 2000);
}
看起来没问题,对吧?
跑起来之后,我发现有两个问题:
1. 大量网站有CORS限制,直接从服务端fetch某些URL会被拒绝
2. 正则提取的内容乱七八糟,充满了script标签的内容、导航栏文字,完全不是正文
这段代码"能运行",但给AI的输入是噪声数据,生成的摘要毫无意义。
这就是Vibe Coding最危险的地方:AI给的代码在语法上是正确的,逻辑上看起来合理,但实际效果是错的。 如果你不测试真实场景,你不会发现这个问题。
修正后的方案:
// 修正版 - 使用 cheerio 做更精准的内容提取
const cheerio = require('cheerio');
async function fetchPageContent(url) {
try {
const response = await fetch(url, {
headers: {
'User-Agent': 'Mozilla/5.0 (compatible; LinkMemo/1.0)'
},
timeout: 10000
});
const html = await response.text();
const $ = cheerio.load(html);
// 移除无用元素
$('script, style, nav, footer, header, aside').remove();
// 优先提取 article 或 main 标签内容
const mainContent = $('article, main, [role="main"]').text()
|| $('body').text();
// 清理多余空白
return mainContent.replace(/\s+/g, ' ').trim().substring(0, 3000);
} catch (error) {
return ''; // 抓取失败时返回空字符串,不中断流程
}
}
这里我切换了一次模型(从 GPT-4o 换到 Claude Sonnet 4.6),发现对长代码文件的理解能力和错误定位能力差距很明显。如果你也想灵活切换模型测效果,[api.884819.xyz](https://api.884819.xyz) 的多模型统一接口省去了反复注册的麻烦——Vibe Coding 本质上是高频、长上下文的对话,模型能力不能妥协,但账单也不能失控。
3.4 最终上线:部署到 Vercel 的完整路径
本地跑通之后,我让AI帮我把项目改造成可以部署到Vercel的版本。
这里又有一个坑:原来用本地JSON文件存储的方案在Vercel上不可用(Vercel是无状态的Serverless环境)。AI建议我改用 Vercel KV(Redis)或者直接用免费的 PlanetScale MySQL。
我选了更简单的方案:localStorage + 纯前端应用。把后端逻辑压缩到最小,AI摘要生成通过前端直接调用API。
整个改造过程又花了大约40分钟,两轮对话完成。
最终产品:一个部署在Vercel上的静态Web应用,URL可以分享,数据存在浏览器本地。功能完整,界面能用。
---
第四章:诚实的复盘——能做什么,不能做什么
走完全程之后,我可以给出一个相对清醒的判断。
✅ Vibe Coding 真正擅长的场景
| 场景 | 原因 | | 个人工具 / 效率脚本 | 需求清晰,边界固定,容错率高 | | 原型验证 / MVP | 快速看到效果,迭代成本低 | | 单一功能的小应用 | 状态简单,逻辑线性 | | 数据处理脚本 | 输入输出明确,容易验证正确性 |❌ Vibe Coding 会持续踩坑的场景
| 场景 | 具体问题 | | 复杂业务逻辑 | AI会给出"局部正确但全局错误"的代码 | | 状态管理复杂的应用 | 多个状态之间的联动,AI很难一次性理解 | | 安全性要求高的场景 | SQL注入、XSS、权限校验,AI经常漏掉 | | 需要性能优化的系统 | AI倾向于给"能跑"而不是"跑得好"的方案 | | 多人协作的项目 | 代码风格混乱,缺乏架构一致性 |一个判断标准:如果你的产品出了bug,最坏的结果是"用户体验不好",Vibe Coding 可以接受。如果最坏的结果是"数据泄露"或"资金损失",请不要完全依赖 Vibe Coding。
整个实战过程中调用 Claude API 的费用,我用的是 [api.884819.xyz](https://api.884819.xyz) 做的中转——Vibe Coding 的核心就是高频、长上下文的对话,模型能力不能妥协,但账单也不能失控。这个平台支持 Claude Opus 4.6、GPT-5系列等主流模型,按量计费,没有月租,适合个人开发者做实验性项目。
---
第五章:你现在就能开始的 Vibe Coding 起手式
工具链推荐
需求描述 → Claude Sonnet 4.6 / GPT-5.1(理解力强,上下文长)
代码编辑 → Cursor / Windsurf(AI原生IDE,直接在编辑器里对话)
部署 → Vercel(前端项目免费,5分钟上线)
API中转 → api.884819.xyz(多模型统一接口,按量付费)
Prompt 模板:需求描述模板
你是一个[技术栈]全栈工程师。我需要构建一个[产品名称]。
【核心功能】
1. [功能1,描述要具体到用户操作层面]
2. [功能2]
3. [功能3]
【技术约束】
- 前端:[框架或"原生HTML/JS"]
- 后端:[语言+框架]
- 存储:[数据库或文件]
- 部署目标:[Vercel/本地/其他]
【输出格式】
请先给出完整的文件结构,再逐文件给出完整代码。
不要省略任何代码,不要用省略号代替实现。
【验收标准】
代码应该能在[运行环境]中直接运行,不需要额外配置。
Prompt 模板:报错追问模板
运行后出现以下报错,请帮我定位问题并给出修复方案:
【报错信息】
[完整粘贴报错内容]
【上下文】
- 我按照你上一条回复创建了文件,没有做任何修改
- 运行命令:[你执行的命令]
- 运行环境:[Node版本/Python版本/系统]
请先说明报错原因,再给出修复后的完整代码(不要只给改动部分)。
Prompt 模板:功能扩展模板
在现有代码基础上,我需要增加[新功能]。
【现有代码】
[粘贴相关文件的完整代码]
【新功能描述】
- 触发条件:[用户做什么操作]
- 期望结果:[系统应该做什么]
- 边界情况:[异常情况怎么处理]
请只修改需要改动的文件,给出修改后的完整版本。
Vibe Coding 工作流全图
你的想法
↓
结构化需求描述(用需求模板)
↓
AI生成初版代码
↓
本地运行测试
↓ ←─────────────────┐
发现问题? │
├── 报错 → 用报错模板追问 ┘
├── 功能不对 → 用功能扩展模板
└── 没问题 → 继续下一步
↓
真实场景验证(不只是"能跑",要测边界情况)
↓
部署(Vercel / Railway / 本地)
↓
上线使用,发现新需求,回到顶部
---
写在最后
Vibe Coding 不会让人人都成为工程师,但它会让更多人有资格把自己的想法变成可以跑的东西。
这是一个真实的变化,不是营销词汇。
如果你想现在就开始:
1. 打开 [api.884819.xyz](https://api.884819.xyz) 注册账号(新用户注册即送体验token,国产模型免费用,不需要邮箱验证,直接用户名+密码搞定)
2. 找一个你自己有真实需求的小工具想法
3. 用本文的需求描述模板写出你的第一个Prompt
4. 遇到报错不要关掉,把报错贴回去继续问
不要等到"学会编程"再开始。你的想法值得现在就被验证。---
这篇我们走完了 Vibe Coding 的完整链路。
但有一个问题我故意留到下一篇再说——
当你的产品真的能用了,你会发现下一个瓶颈不是代码,而是:怎么让 AI 帮你做产品决策,而不只是执行指令。
下一篇,我们聊 Prompt Engineering 的进阶用法:
如何把 AI 从"代码工人"变成"产品共创者"。敬请期待。
---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#VibeCoding #AI编程 #Claude #Prompt技巧 #8848AI #AI工具 #全栈开发 #人工智能