首页 › Vibe coding 项目实战专栏 › 第 1 章:什么是 Vibe Coding? › 第 4 章:进阶提示词技巧

第 4 章:进阶提示词技巧

​

🪢

🎯 本章目标:​

学会运用"分步拆解"(Divide and Conquer)和"思维链"(Chain of Thought)让 AI 处理系统级需求,通过迭代式对话修复顽固 Bug​

​

4.1 分步拆解复杂需求(Divide and Conquer)​

当你把一个庞大的任务直接丢给 AI 时,它经常会因为上下文过载而"顾头不顾尾"。​

Vibe Coding 的黄金法则:永远不要让 AI 一次写超过 200 行代码。​

什么是"一口吞"错误?​

❌ 错误示范:​

​

"帮我做一个完整的电商网站,要有首页、购物车、结算页、用户中心,后台要能管理订单,数据库用 PostgreSQL。"​

​

🤖 AI 的反应:​

它会给你生成一堆空壳文件,或者每个功能都只写了一半,最后很难跑起来。​

正确姿势:切香肠法​

将大任务拆解为一系列原子任务(Atomic Tasks)。​

步骤 1:生成计划 (The Blueprint)​

​

"我想开发一个电商网站的 MVP。请帮我列出核心模块的开发顺序,优先考虑数据库设计和用户认证。"​

​

步骤 2:逐个击破 (Sequential Execution)​

•

任务 A(数据库):"基于刚才的计划,请设计 User 和 Product 表的Schema。注意 User 需要包含 role 字段。"​

•

任务 B(后端):"复制刚才生成的 Schema(作为上下文)。请写一个 Next.js API Route,处理用户注册逻辑,并对密码进行哈希。"​

•

任务 C(前端):"现在我们有了注册 API。请写一个注册页面组件,使用 React Hook Form,提交数据到刚才的 API。"​

💡 连贯性秘诀:每一步都引用上一步的结果,让 AI 知道"我们在哪里"。​

🧠 为什么 AI 记不住?(Token 与上下文窗口)​

你可能听说过 "Context Window"(上下文窗口)。不仅是你的当前输入,之前的对话历史都会占用这个窗口。​

•

当对话太长,最早的信息就会被"挤出"窗口,AI 就忘记了你一开始定义的规则。​

•

最佳实践:当完成一个大模块(如"用户系统开发完毕")后,立刻开启新对话,只把必要的代码文件复制过去,保持上下文的"清爽"。​

​

​

4.2 引导 AI 的思考过程(Chain of Thought)​

这也叫 CoT (Chain of Thought) 提示法。对于逻辑复杂的算法或业务,强迫 AI "先把话说清楚" 再写代码。​

为什么需要 CoT?​

大模型本质上是概率预测。如果让它直接输出代码,它可能会凭直觉瞎猜。如果让它先写思路,它会把"思考过程"加入到上下文中,从而提高生成代码的准确率。​

怎么用?​

在提示词的结尾加上这句咒语:​

​

"请先一步步分析(Think Step-by-Step)这个需求,列出你的实现思路,确认无误后再给出代码。"​

​

案例对比​

需求:判断一个字符串是否是有效的 IPv4 地址。​

•

普通提示:"写个函数判断 IPv4。" —— AI 可能会直接扔给你一个简单的正则,但可能漏掉 0.0.0.0 或前导零的情况。​

•

CoT 提示:"请先分析 IPv4 的有效性规则(如数字范围 0-255、不能有前导零、必须是4段等),然后写一个不使用正则的解析函数。" —— AI 会先列出所有规则,然后写出极其严谨的代码。​

​

​

4.3 提供示例和上下文(Few-Shot Prompting)​

"举个栗子"是人类沟通的高效方式,对 AI 也是。这叫 Few-Shot Prompting(少样本提示)。​

什么时候用?​

•

代码风格统一:强制 AI 使用你习惯的写法(如 function vs const)。​

•

数据清洗/转换:这是 Vibe Coding 的隐藏神技。​

​

•

"请把下面的混乱文本转换成 JSON 格式。 示例输入:John (25岁, 工程师) 示例输出:{"name": "John", "age": 25, "role": "Engineer"}​

•

我的输入:Sarah (30岁, 设计师)..."​

​

•

当你使用了一个冷门的库时。​

•

当你想要特定的数据格式时。​

示例​

​

"我要给现有组件添加单元测试。请仿照下面的测试风格(注意我用了 Describe-It 结构和 mock 方式),为 UserProfile.tsx 编写测试:​

示例代码:​

​

​

​

通过提供这个样本,AI 就能模仿你的"口味",而不是自作主张。​

4.4 约束与边界条件的表达​

​

你的任务:测试 UserProfile 的加载状态和错误处理。"​

​

正如第 3 章提到的,清晰的约束是成功的关键。在进阶场景中,我们需要关注边界条件。​

常见的边界检查清单​

在写提示词时,想一想以下情况:​

空状态:如果列表为空显示什么?​

错误状态:如果 API 挂了怎么办?​

权限:如果用户没登录能看这个页面吗?​

性能:如果数据有 10 万条,这个列表会卡死吗?​

进阶提示词示例:​

​

"请实现一个搜索输入框。 约束与边界:​

必须使用 Debounce(防抖),延迟 500ms,避免 API 请求过多。​

处理 loading 状态,搜索时显示转圈动画。​

如果搜索结果为空,显示'未找到相关内容'的插画。​

输入框需要过滤掉 HTML 标签,防止 XSS 攻击。"​

​

4.5 迭代式对话:如何有效纠错​

Vibe Coding 不是"一锤子买卖"。当 AI 写出 Bug 时,不要直接放弃,也不要默默自己改(除非很简单)。利用 AI 来修复 AI。​

纠错三部曲​

这种写法也是错的 ❌​

​

"不对,代码跑不起来。" (AIos:???哪儿跑不起来?)​

​

提供证据 ✅​

​

"运行后报错:Uncaught TypeError: Cannot read properties of undefined (reading 'map')。我觉得可能是 API 返回的数据结构和前端定义的不一致。"​

​

引导自查 ✅✅​

​

"请不要只看这一行。检查一下 fetchData 函数的返回值,确认它是否真的返回了数组?如果 API 返回的是 { data: [...] } 这种格式,目前的逻辑是不是有误?"​

​

终极绝招:新建会话(New Chat)​

如果一个对话太长,从上下文里积累的错误信息太多,AI 会开始"发然"。此时,果断开启一个新的 Chat,把清理干净的核心代码贴进去,重新开始。​

​

"这是一个全新的会话。这是我目前的 UserList.tsx,它有一个搜索不生效的 Bug。请帮我分析原因。"​

​

​

​

📝 本章小结​

​

​

掌握了这些技巧,你就不再是一个简单的"指令下达者",而是一个能够驾驭 AI 解决复杂问题的"Vibe 架构师"。​