Vibe Coding 踩坑实录:我照着 Google I/O 的思路做了个能跑的东西
Vibe Coding 踩坑实录:我照着 Google I/O 的思路做了个能跑的东西
Vibe coding 上了 Google I/O 的主舞台,朋友圈又开始刷屏了。
但我猜你和我一样——看完演示之后打开编辑器,第一句话不知道怎么写。光标在那里闪,你盯着空白页,脑子里有个模糊的想法,手指却不知道往哪儿按。
这不是你的问题。这是因为大多数"vibe coding 教程"只告诉你结果有多酷,没告诉你中间卡在哪里。
这篇文章是后者。
---
第一章:Google I/O 上那五分钟,让 Vibe Coding 突然「合法」了
Google I/O 2025 上,Google DeepMind 在主舞台演示了一个让很多人重新审视"AI 辅助创作"的工作流。
核心主张不复杂,甚至有点反直觉:你不需要写代码,你只需要描述意图。
演示里,工程师用接近自然语言的方式描述了一个交互效果——"我想要一个随着鼠标移动会呼吸的渐变背景,情绪是平静但有点神秘"——然后 Gemini 直接给出了可运行的前端代码。整个过程没有一行手写代码,但结果是真实可用的。
这个概念本身不新鲜。Andrej Karpathy 在更早之前就提出了"vibe coding"这个词,意思是你只需要描述感觉(vibe),让 AI 处理实现细节。但登上 Google 主舞台意味着什么?意味着它从极客圈的实验性玩法,正式进入主流工具链的讨论范围。
给你一个判断标准:如果你现在用 AI 写代码的方式是"把需求翻译成技术指令再喂给 AI",那你用的是传统的 AI 辅助编程。如果你能直接用创意语言描述"感觉",让 AI 自己做技术决策,那才算真正的 vibe coding。
两者的区别不在工具,在你有没有把自己从"技术实现者"切换到"创意定义者"的角色。
---
第二章:我照着这个思路做了什么——项目还原
我决定做一个足够小、足够完整、又足够能暴露问题的东西:
一个「心情配色生成器」 —— 用户输入一个词描述当前心情(比如"焦虑"、"慵懒"、"兴奋"),页面生成对应的渐变配色方案,并配上一句契合情绪的短句。选这个项目有三个原因:
1. 它需要创意判断:什么颜色代表"焦虑"?这不是技术问题,是审美问题,正好考验 vibe coding 的核心能力。
2. 它足够小:一个 HTML 文件就能跑,不需要复杂的工程配置,排除掉环境问题的干扰。
3. 它有明确的"好坏标准":结果要么好看,要么不好看,没有模糊地带,方便快速验证。
最终结果是这样的:
- 初始界面:简洁的输入框 + 一个"感受一下"按钮,背景是中性的浅灰
- 交互效果:输入"疲惫"后,背景变成低饱和度的蓝紫渐变,短句出现:"你不是在偷懒,你只是在充电。"
- 代码结构:主逻辑分成三个函数:
getMoodColor()、getMoodPhrase()、renderResult(),各自独立,可以单独修改
从想法到第一个能跑的版本,我花了大概 40 分钟。但这 40 分钟里,有 30 分钟在踩坑。
---
第三章:全流程拆解——哪一步最卡人
这是这篇文章最重要的部分。我把每一个卡点都还原了,包括我当时的第一反应。
卡点①:创意描述写得太模糊
我最开始发给 AI 的提示词是这样的:
❌ 差提示词:帮我做一个心情配色生成器,用户输入心情,生成对应的颜色和一句话。
AI 给了我什么?一个标准的表单页面,颜色方案是"红色=热情、蓝色=平静、绿色=自然"的教科书级别答案。没有任何创意感,像是从某个 UI 组件库里直接扒出来的。
我当时的第一反应是:这模型不行。
但后来我意识到:是我的描述不行。 我给的是一个需求清单,不是一个创意意图。
✅ 好提示词:帮我做一个心情配色生成器。风格参考:Lo-Fi 美学,低饱和度,有颗粒感。
颜色映射不要用常识(不要红色=热情),要反直觉一点:
- "焦虑"可以是一种很克制的橄榄绿
- "兴奋"可以是接近土黄的暖色,而不是荧光色
- "疲惫"可以是蓝紫色,但要偏灰
短句风格:像朋友发给你的消息,不是励志金句。
反例:不要"每一天都是新的开始"这种。
结果完全不同。AI 生成的配色有了真实的审美判断,短句也有了人味。
解法总结:创意描述里要包含三个要素——参考风格、反例排除、情绪限定词。缺一不可。---
卡点②:上下文断裂
做到第三轮对话的时候,我让 AI 帮我调整"疲惫"的配色,它给了我一个高饱和度的橙红色。
完全忘了我在第一轮里说过"低饱和度、Lo-Fi 美学"。
这是多轮对话里最常见的问题:AI 不是真的在"记住"你的风格,它只是在处理当前窗口里的文本。 当对话变长,早期的设定就会被稀释。
解法:用一段固定的"风格宪法"开头,每次新对话都粘贴进去:【项目风格设定 - 每次对话请保持】
- 整体美学:Lo-Fi,低饱和度,有颗粒感
- 颜色逻辑:反常识映射,避免高饱和原色
- 文案风格:朋友语气,不励志,不说教
- 技术要求:纯 HTML+CSS+JS,不引入外部库
把这段话固定在每次对话的开头,相当于给 AI 设置了一个"记忆锚点"。上下文断裂的问题基本消失了。
---
卡点③:代码能跑但不能改
第一版跑通之后,我想微调一下短句的字体大小。
我打开 AI 生成的代码,发现它把所有逻辑塞在一个 500 行的 标签里,变量名是 a、b、c,注释为零。
我改了一行,页面白屏了。我撤销,又白屏了。我花了 20 分钟才找到问题在哪。
这是 vibe coding 最隐蔽的陷阱:生成的代码是为了"能跑"优化的,不是为了"能改"优化的。
解法:在提示词里明确要求可维护结构:请按以下结构组织代码,并加中文注释:
// === 配置区(颜色映射表)===
// === 核心函数区 ===
// === 事件绑定区 ===
// === 初始化 ===
每个函数只做一件事,函数名用中文语义的英文命名。
生成的代码大概长这样:
// === 配置区:心情 → 颜色映射 ===
const moodColorMap = {
"焦虑": { from: "#7a8c6e", to: "#4a5c4a" }, // 克制的橄榄绿
"疲惫": { from: "#6b7fa8", to: "#3d4f6b" }, // 蓝紫偏灰
"兴奋": { from: "#c4a882", to: "#8b6f47" }, // 土黄暖色
};
// === 核心函数:根据心情获取渐变色 ===
function getMoodGradient(mood) {
const colors = moodColorMap[mood] || moodColorMap["疲惫"];
return linear-gradient(135deg, ${colors.from}, ${colors.to});
}
// === 核心函数:渲染结果到页面 ===
function renderMoodResult(mood, phrase) {
document.body.style.background = getMoodGradient(mood);
document.getElementById("phrase").textContent = phrase;
}
加了注释、分了模块之后,我想改什么改什么,再也不用担心牵一发动全身。
---
卡点④:调用 API 时的鉴权和额度焦虑
做到这一步,我想升级一下:不用预设的颜色映射表,而是实时调用模型,让 AI 动态生成配色和短句。
然后我卡在了 API 这里。
海外账号、信用卡绑定、额度限制、网络连通性——每一个都是单独的问题,叠加在一起就是"算了,我用预设表格吧"的放弃心理。这个卡点不是技术问题,是基础设施问题。
我当时的解决方案是:统一用 [api.884819.xyz](https://api.884819.xyz) 来管理模型调用。它聚合了 Gemini、GPT 系列、Claude 等主流模型,国内直接访问,按量计费,不需要绑定海外信用卡,也不用担心哪天网络突然不通。
对于 vibe coding 这种"频繁试错"的工作方式,稳定的 API 入口是基础设施,不是可选项。你不可能在每次灵感来的时候,还要先花 20 分钟解决网络问题。
---
第四章:Google 的「创意 + AI」框架,给了我们什么新东西
跳出实操,回到方法论层面。
Google DeepMind 在 I/O 上传递的核心主张,本质上是在重新定义人在 AI 工作流里的角色:从"写代码的人"变成"定义品味的人"。
这对不同层次的用户意味着不同的事:
- 对小白:门槛降低了。你不需要懂 CSS 渐变的语法,你只需要知道你想要什么感觉。
- 对进阶用户:你需要重新定义自己的核心竞争力。会写代码已经不够了,你能不能把"品味"说清楚,才是真正的差异化能力。
我把这个框架提炼成一个三层模型:
┌─────────────────────────────────────────┐
│ 意图层(你的创意) │
│ "我想要一种焦虑但克制的视觉感受" │
└──────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 转译层(提示词工程) │
│ 风格参考 + 反例排除 + 情绪限定词 │
│ + 上下文固定 + 结构要求 │
└──────────────────┬──────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ 执行层(模型 + 工具链) │
│ 稳定的 API 访问 + 合适的模型选择 │
│ + 可维护的代码输出 │
└─────────────────────────────────────────┘
大多数人把精力全放在"执行层"——纠结用哪个模型、哪个工具。但真正的瓶颈在"转译层":你能不能把意图层的模糊感受,转化成执行层能处理的精确指令。
这就是为什么同样用 Gemini,有人做出来的东西有创意感,有人做出来的是通用模板。
---
第五章:能不能跑起来,取决于你有没有稳定的「执行层」
整篇文章说到最后,我想给一个清醒的结论:
Vibe coding 不会替代你,但它会替代那个不愿意把创意说清楚的你。技术门槛在降低,创意表达能力的价值在上升。这是一件好事,但前提是你得先把流程跑通。
跑通流程需要两个东西:
1. 提示词能力:这篇文章里的四个卡点,每一个都有对应的解法,你现在就可以用。
2. 稳定的执行环境:如果你也想把本文的流程完整跑一遍,最省心的起点是先把 API 这层搭好。[api.884819.xyz](https://api.884819.xyz) 注册即可用,新用户注册即送体验 token,国产模型(Deepseek、千问等)完全免费,没有月租,按量付费。我自己在用,推荐给同样在折腾的你。
工具到位之后,你会发现 vibe coding 最大的乐趣不是"AI 帮我写了代码",而是你的审美判断第一次有了直接落地的通道——不需要经过任何技术中间层的翻译和损耗。
这次我做的还只是一个静态展示页。下一步我想试试让 AI 实时响应用户输入——把 vibe coding 的产出从"一次性生成"变成"持续交互"。这涉及到流式输出、状态管理,还有一个很多人没意识到的提示词陷阱:当你的 prompt 需要动态拼接用户输入时,很容易在不知不觉间注入了矛盾的上下文,让模型的输出开始飘。
如果你也想知道 "vibe coding 做出来的东西,怎么从 demo 变成真正能用的产品",下篇见。
---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#VibeCoding #GoogleIO #AI编程 #提示词工程 #8848AI #AI工具 #前端开发 #人工智能