Appearance
Claude Code反向引导技巧:让AI自己提问第一轮就对上
以前三到五轮才能对上,现在第一轮就对上。那句话是:在开始之前,先问我你需要知道的问题。
底层矛盾
用Claude Code开发,有一个底层矛盾:
你知道你想要什么,但你不知道你遗漏了什么。
你描述了主流程,忘了边界条件。你说了要什么,没说不要什么。你定义了成功状态,没定义失败状态。
这些遗漏不是因为你粗心,是因为你在描述需求时,脑子里已经默认填补了那些空白——但它没有。
解决方案:让它主动提问,是目前解决这个矛盾最有效的方法。
反向引导的三种用法
用法一:需求启动时的"问题清单"
最基础的用法,开始一个新功能时。
标准Prompt:
我要实现一个功能:[一句话描述]。在你开始任何实现之前,先列出你需要了解的所有问题,确保完全理解需求。问题列完之后等我回答,不要自己假设。关键是最后那句"不要自己假设"。不加这句话,它有时候会列出问题,然后自己回答,然后直接开始写代码——等于绕过了你。
实测案例:优惠券系统,它问了九个问题:
| 问题 | 你是否想到了 |
|---|---|
| 优惠码是固定折扣还是百分比折扣? | ✅ 想到了 |
| 同一个用户能用多次同一张优惠码吗? | ✅ 想到了 |
| 优惠码有没有使用次数上限(全局)? | ✅ 想到了 |
| 优惠码可以叠加吗? | ❌ 没想到 |
| 过期优惠码提示什么信息? | ❌ 没想到 |
| 前端验证还是后端验证? | ❌ 没想到(关键!) |
| 作用于哪个环节?Checkout还是Stripe? | ❌ 没想到 |
| 是否需要记录使用历史? | ❌ 没想到 |
| 后台能否管理优惠码? | ❌ 没想到 |
重要发现:"前端验证还是后端验证"这个问题尤其关键——如果只在前端验证,有人改JavaScript就能绕过去。用户没想到,AI问出来了。
用法二:复杂bug的"诊断式提问"
遇到难以定位的bug,不要直接把错误扔给它让它猜。
标准Prompt:
我遇到一个bug,[一句话描述现象]。我不确定是哪里的问题。你需要哪些信息才能帮我定位它?列出你的问题,我来回答。它会问你:
| 问题 | 作用 |
|---|---|
| 每次都复现还是偶发? | 判断稳定性 |
| 在什么操作之后出现? | 定位触发条件 |
| 前端还是后端报错? | 确定范围 |
| 最近有没有修改相关代码? | 回溯变更 |
| 数据库相关字段当前状态? | 查看数据 |
价值:这些问题本身就是一个排查清单。你回答的过程里,有时候答到一半自己就发现问题了。
用法三:方案设计前的"假设暴露"
最高阶用法,最容易被忽视。
标准Prompt:
我要做 [功能描述]。在你给出方案之前,先列出你在设计这个方案时会做的所有假设——关于用户行为、技术环境、边界条件的假设。列完之后我来确认哪些是对的,哪些需要纠正。实测案例:多时区支持功能,它列出的假设里有:
假设用户的时区信息在注册时已经收集并存储在数据库里。
实际系统根本没存这个字段,是实时从浏览器获取的。这个假设如果没有被暴露,整个方案会设计成"从数据库读时区",而实际上需要"从请求头读时区"——两种实现方式差很多。
出海产品尤其重要:AI对"北美英语用户"有根深蒂固的默认假设:
- 货币是美元
- 时区是UTC-5到UTC-8
- 日期格式是MM/DD/YYYY
如果你的产品面向其他市场,这些假设全部要被纠正。
控制提问质量:三条调节技巧
让它问问题,不等于让它漫无目的地问。
技巧一:限定问题类型
只问和技术实现直接相关的问题,不问业务背景类的问题(业务背景我已经在CLAUDE.md里说清楚了)技巧二:设定问题数量上限
最多问5个最关键的问题,不够关键的不用问很重要:不加限制的话,它有时候会问十几个问题,其中一半是可以推断的,浪费你的时间。
技巧三:要求问题排优先级
列出你的问题,按重要程度排序,最先列最影响技术方案的问题加了之后,如果你时间紧,可以只回答前三个问题,后面的它会基于上下文合理推断。
进阶用法:需求确认书
反向引导的完整版流程:
问题清单 → 你的回答 → 它生成需求确认书第三步Prompt:
好,基于我的回答,给我一份需求确认书。内容包括:
- 功能描述(你理解的版本,不是我说的原话)
- 边界条件列表
- 你将要做的假设(你自己确认过的)
- 不在本次范围内的内容
我确认这份文档之后,你再开始实现。隐性价值:这份文档是这次任务的上下文摘要。如果中途开新会话,把这份文档贴进去,新会话里的它立刻就知道这个任务的所有背景。
踩坑环节
坑一:它问了但自己回答了,直接开始写代码
一段时间Prompt是"先问我你需要知道的问题",没有加"等我回答"。
结果它列出问题清单,然后在每个问题后面自己猜答案,然后说"基于以上假设,我的实现方案是……"——直接绕过了用户。
解决方案:Prompt里明确加一句:
列完问题之后停下来,等我逐条回答,不要自己假设答案。坑二:问题太泛,像在走流程
有一次针对Webhook功能提问,它问了一堆"请问您的技术栈是什么"、"请问有什么特殊要求"。
这种问题是废话——技术栈在CLAUDE.md里,特殊要求根本没法回答。
解决方案:在让它提问之前,先明确说:
CLAUDE.md里已有的信息不用问,只问和这个功能的边界条件、错误处理、数据格式相关的问题。总结
让它提问,本质是把"你猜我想要什么"变成"我告诉你你不知道的事"。
| 对比 | 之前 | 现在 |
|---|---|---|
| 流程 | 写Prompt→等输出→发现遗漏→补充→再等 | 说一句话→让它问→回答→第一轮对上 |
| 轮数 | 3-5轮 | 1轮 |
| 盲点 | 你不知道你遗漏了什么 | 它的问题照亮你看不到的地方 |
学会让它问,比学会怎么描述需求更有价值。
关键词:Claude Code, 反向引导, 提问技巧, 需求确认, bug诊断, 方案设计
