第 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 架构师"。