Vibe Coding(二):把 AI 当成一个新来的实习生

1、一个万能的心智模型

如果你只能记住 Vibe Coding 的一个技巧,那就记住这个:把 AI 当成一个新来的实习生。

你想想,一个刚入职的实习生是什么样的:

  • 能力很强,学东西很快,什么都会一点
  • 但不了解你的项目,不知道你们的代码规范,不知道业务的来龙去脉
  • 你给的任务如果太模糊,他会猜——猜错的可能性很大
  • 你给的任务如果足够清晰,他做得又快又好
  • 做完之后你需要检查,因为新人容易漏掉边界情况

是不是和 AI 一模一样?

这个心智模型的好处是:你不需要学什么 Prompt 工程的黑话,你就想想如果是带实习生,你会怎么布置任务,然后对 AI 也这么说就行了。

2、模糊的需求 vs 清晰的需求

来看两组对话。

差的需求

“写一个登录功能。”

实习生拿到这个任务,脑子里全是问号:用什么框架?用户名是邮箱还是手机号?要不要验证码?密码规则是什么?token 存哪里?session 过期多久?

AI 也一样。它猜了一个实现,大概率不是你想要的。

好的需求

“用 Express.js + JWT 实现一个简单的登录接口。用户输入邮箱和密码,后端验证后返回一个 JWT token。密码用 bcrypt 加密存储。token 有效期 7 天。邮箱格式要做基本校验(@符号前后有内容就行)。”

实习生拿到这个任务,立刻就知道怎么做了。

看,区别不在于需求的长短,而在于你的需求是否排除了歧义。每少一个歧义,AI 多对一分。

3、一个好的 Prompt 长什么样

不需要什么神秘公式。一个好的 Prompt 通常包含这几个要素:

目标:我要做什么?(一个函数 / 一个页面 / 一个接口) 输入:会收到什么数据?什么格式? 输出:期望得到什么结果?什么格式? 约束:用什么技术?有什么限制?不能做什么? 上下文:这段代码会在什么环境运行?和项目里的哪些部分有关系?

举个例子,我想做一个数据脱敏函数:

目标:写一个数据脱敏工具函数 maskSensitive

输入:两个参数 —— data(对象)、fields(需要脱敏的字段名数组)

输出:返回一个新的对象,指定字段的值被替换为 ***

约束:

  • 用 TypeScript 写
  • data 不能是 2 层以上的嵌套(只处理 data.field 这种一层嵌套)
  • 如果 data 中某个字段不存在,直接跳过,不要报错
  • 不要用 lodash 等第三方库

这个 Prompt 不复杂,但信息密度很高。AI 几乎不需要猜任何东西,所以生成的代码大概率符合预期。

4、迭代式对话:先粗后细

不用一开始就把 Prompt 写到完美。更实用的方式是先粗后细

第一轮(粗):“用 React 写一个计数器组件,有加和减两个按钮。”

AI 生成代码。你一看:

  • 数字能小于 0 吗?不想让它变成负数。
  • 好像少了点什么……对了,加一个重置按钮。
  • 样式太丑了,至少对齐一下。

第二轮(细):“不能减到小于 0。加一个重置按钮,点了归零。三个按钮水平排列,数字显示在中间。”

AI 修改。基本满意了。你再想想:

  • 能不能把当前数值存到 localStorage?刷新页面还在。

第三轮(更细):“把当前数值存到 localStorage,页面加载时读出来。key 用 counter_value,注意处理 JSON 解析失败的情况。”

这就是 Vibe Coding 的真实节奏。你不是在写需求文档,你是在和 AI 对话。 一次说太多反而容易乱,分几轮对话,每轮解决一个问题,效果更好。

5、让 AI 看到你的代码才是最好的 Prompt

很多人不知道一件事:给你的代码比给你的描述更有效。

比如你说:

“帮我加一个导出 CSV 的功能,格式参照表格里的数据。”

AI 可能猜半天。

但如果你说:

“帮我在这个页面加一个导出 CSV 的功能。”(然后把当前页面的代码也贴进去)

AI 看到你的真实数据结构、现有组件的写法、你用的框架版本——生成的代码几乎不需要修改。

这就是为什么很多 AI 编程工具(Cursor、CodeBuddy、Copilot)都支持 @文件引用——让 AI 直接读到你的项目代码,比任何文字描述都精准。

6、一个反常识的技巧:对 AI 说“不”

当 AI 做得不对的时候,很多人的第一反应是自己手动修改代码。这其实浪费了 Vibe Coding 最大的优势。

更好的做法是:告诉 AI 哪里不对,让它自己改。

比如 AI 写的代码里用了一个你已经废弃的工具函数:

不要说“算了我自己改”。要说:

formatDate 函数已经废弃了,我们用 dayjs 替换。请改用 dayjs(date).format('YYYY-MM-DD')。”

这个习惯一旦养成,你会发现自己越来越懒——但代码产出越来越快。因为你在训练 AI 理解你的项目,而不是每次都从头解释。


下一篇文章,我们聊一个关键的安全意识:为什么 AI 写的代码不能盲信?它会犯哪些典型错误?

每天前进一小步,就是一个新的高度!