
前面几篇文章中,我们反复提到一个观点:
AI 输出得好不好,和我们描述问题的方式有很大关系。
很多人第一次向 AI 提问时,通常只会说:
text
帮我写一个待办事项功能。
AI 确实可以生成代码。
但这段代码很可能和你的实际需求不一致,因为 AI 不知道:
- 你使用什么技术栈。
- 你想实现哪些具体功能。
- 数据应该保存在哪里。
- 哪些功能暂时不需要。
- 你希望 AI 输出代码,还是先解释思路。
这不是 AI 故意回答得不好,而是问题本身留下了太多需要猜测的地方。
今天我们就来学习一个非常实用的能力:
如何向 AI 清楚描述一个编程需求,让它少猜一点、少返工一点。
本文不会要求你学习复杂的 Prompt 术语。
只要记住 4 个要素:
text
背景
↓
目标
↓
限制
↓
输出格式
一、为什么"帮我写代码"通常不够清楚
我们先看一个很短的需求:
text
帮我写一个用户登录页面。
这句话看起来很明确,但真正开始实现时,还有很多问题没有答案:
- 使用 Vue、React,还是原生 HTML?
- 页面需要哪些输入框?
- 登录使用账号密码,还是手机号验证码?
- 用户名和密码是否必填?
- 密码是否需要显示和隐藏切换?
- 登录成功后跳转到哪里?
- 登录失败后如何提示?
- 是否需要显示加载状态?
- 是否需要调用真实接口?
- 是否需要保存登录状态?
如果你不补充这些信息,AI 就必须自行选择。
它可能生成一个简单的静态页面,也可能生成一个带路由、接口、状态管理和第三方组件库的复杂实现。
两种结果都可能"看起来合理",但未必符合你的目标。
所以,问题不一定是:
AI 为什么没有按照我的想法写?
也可能是:
我有没有把自己的想法说完整?
二、描述需求的第一个要素:背景
背景是告诉 AI:
你现在处于什么环境,要解决什么类型的问题。
背景不需要写成一篇项目介绍,只需要提供和当前任务有关的信息。
背景通常包含什么
根据任务不同,可以提供:
- 使用的编程语言。
- 使用的框架或运行环境。
- 当前项目的大致类型。
- 相关文件或模块。
- 你目前的学习阶段。
- 已经完成了哪些内容。
例如:
text
我正在学习 JavaScript,使用 Node.js 运行代码。
目前只会使用变量、函数、数组和条件判断。
我想通过一个小练习理解如何读取和处理文件。
如果是一个已有项目,可以这样描述:
text
这是一个 Vue 3 + JavaScript 的待办事项项目。
页面代码位于 src/components/TodoList.vue。
当前已经可以展示待办列表,本次只想增加删除功能。
项目使用 npm 管理依赖,不希望新增第三方库。
为什么背景很重要
同一个需求,在不同环境中的实现方式可能不同。
例如"读取文件":
- 浏览器中需要考虑文件选择器和用户权限。
- Node.js 中可以使用文件系统模块。
- Python 中有自己的文件操作方式。
- 移动端还需要考虑平台权限。
如果不说明背景,AI 只能给出一个通用答案。
通用答案适合学习概念,但不一定能直接放进你的项目。
背景不要写得过多
提供背景不等于把整个项目全部复制给 AI。
如果你只是想学习一个数组方法,不需要把整个项目目录、所有配置和无关代码都发过去。
可以遵循一个简单原则:
只提供完成当前任务必须知道的背景。
例如:
text
我使用 JavaScript。
下面有一个用户数组。
我想筛选出年龄大于 18 岁的用户。
这些信息已经足够 AI 解释 filter 的用法。
三、描述需求的第二个要素:目标
目标是告诉 AI:
这一次具体要完成什么。
目标越具体,AI 越容易判断工作范围。
不够具体的目标
text
帮我优化一下页面。
"优化"可能代表很多事情:
- 让页面加载更快。
- 让样式更好看。
- 让手机端适配更好。
- 减少重复代码。
- 提高代码可读性。
- 修复一个具体的交互问题。
如果没有进一步说明,AI 可能按照自己的理解进行大范围修改。
更清楚的目标
text
请优化待办事项列表的移动端显示效果。
本次只调整 CSS,不修改 JavaScript 逻辑。
要求:
1. 屏幕宽度小于 600px 时,列表不要出现横向滚动。
2. 每条待办事项的文字过长时可以换行。
3. 删除按钮保持在每条记录的右侧。
这个目标就比较清楚了:
- 优化对象是待办事项列表。
- 使用场景是移动端。
- 修改范围是 CSS。
- 不允许修改 JavaScript。
- 有明确的验收条件。
目标最好包含"做什么"和"不做什么"
很多返工都来自范围不清。
所以,描述目标时可以同时写:
text
本次要做:
- 增加待办事项删除功能。
本次不做:
- 不增加编辑功能。
- 不修改数据存储方式。
- 不重构现有列表组件。
明确不做什么,同样重要。
四、描述需求的第三个要素:限制
限制是告诉 AI:
哪些事情必须遵守,哪些事情不能自行决定。
没有限制时,AI 往往会选择它认为方便的实现方式。
常见的限制类型
1. 技术限制
text
- 只使用原生 JavaScript。
- 不使用第三方库。
- 使用项目现有的 axios 封装。
- 兼容 Node.js 18。
2. 修改范围限制
text
- 只修改 LoginForm.vue。
- 不修改路由配置。
- 不修改数据库结构。
- 不重命名现有接口。
3. 功能范围限制
text
- 本次只实现新增,不实现编辑和删除。
- 只处理未完成的待办事项。
- 暂时不接入真实登录接口。
4. 输出限制
text
- 先解释思路,再给代码。
- 代码拆分成三个文件。
- 每段代码后说明如何运行。
- 只输出需要修改的部分,不要重复整个项目。
5. 安全和数据限制
text
- 不要在日志中打印密码和令牌。
- 不要使用真实用户数据。
- 不要把密钥写死在前端代码中。
- 用户输入必须经过基本校验。
不确定的内容不要让 AI 自行猜
如果你不知道某条规则,也可以直接告诉 AI:
text
下面这条业务规则我还没有确认。
请先把它列为待确认问题,不要自行选择一种实现。
例如:
text
订单支付成功后是否允许取消,目前还没有确定。
请在方案中单独列出这个问题。
这样可以避免 AI 把一个猜测写进代码,之后又被当成了正式规则。
五、描述需求的第四个要素:输出格式
输出格式是告诉 AI:
你希望它用什么方式回答。
同一个需求,输出格式不同,结果的可用性也会不同。
只要求"给我代码"
text
帮我写一个读取 CSV 文件的程序。
AI 可能只返回一段代码。
如果你是初学者,可能还不知道:
- 代码应该保存成什么文件。
- 需要安装什么环境。
- 如何运行。
- 输入文件放在哪里。
- 输出结果是什么。
明确输出步骤
text
请按以下顺序回答:
1. 先用简单语言解释实现思路。
2. 说明需要准备的文件和目录。
3. 给出完整代码。
4. 说明如何运行。
5. 给出一份示例输入和预期输出。
6. 列出 3 个常见错误及排查方法。
这种格式特别适合初学者。
不同任务可以要求不同输出
学习代码
text
请先解释概念,再给一个最小示例。
逐行说明关键代码,并给出可以修改的练习。
生成小功能
text
请先复述需求,再给出实现思路和代码。
最后列出运行步骤和测试场景。
排查报错
text
请先解释报错含义。
再按可能性从高到低列出原因和排查步骤。
不要直接猜一个结论。
修改已有代码
text
请先说明准备修改哪些地方。
只修改与当前需求相关的代码。
不要重写无关部分。
修改后说明可能影响的功能。
输出格式越明确,你越容易阅读、检查和使用 AI 的回答。
六、把 4 个要素组合起来
下面用一个具体需求,把背景、目标、限制和输出格式组合起来。
原始需求
text
帮我做一个待办事项功能。
这句话太宽泛,AI 需要自行猜测很多内容。
补充背景
text
我正在学习原生 HTML、CSS 和 JavaScript。
目前已经可以创建一个网页,并使用 JavaScript 操作按钮点击事件。
我想通过一个小项目练习数组和 DOM 操作。
补充目标
text
请实现一个简单的待办事项列表。
用户可以输入待办内容,点击按钮后把它添加到列表中。
每条待办事项旁边显示一个删除按钮。
补充限制
text
要求:
1. 只使用原生 HTML、CSS 和 JavaScript。
2. 不使用第三方库。
3. 本次不接入数据库。
4. 待办内容为空时不能添加。
5. 只修改新增和删除,不实现编辑功能。
补充输出格式
text
请按以下格式输出:
1. 先解释实现思路。
2. 分别给出 index.html、style.css 和 app.js。
3. 说明每个文件的作用。
4. 说明如何在浏览器中运行。
5. 列出正常输入、空输入和连续删除的测试方法。
6. 代码要适合初学者阅读,避免不必要的复杂写法。
组合后的完整需求
text
我正在学习原生 HTML、CSS 和 JavaScript。
目前已经可以创建一个网页,并使用 JavaScript 操作按钮点击事件。
我想通过一个小项目练习数组和 DOM 操作。
请实现一个简单的待办事项列表。
用户可以输入待办内容,点击按钮后把它添加到列表中。
每条待办事项旁边显示一个删除按钮。
要求:
1. 只使用原生 HTML、CSS 和 JavaScript。
2. 不使用第三方库。
3. 本次不接入数据库。
4. 待办内容为空时不能添加。
5. 只修改新增和删除,不实现编辑功能。
请按以下格式输出:
1. 先解释实现思路。
2. 分别给出 index.html、style.css 和 app.js。
3. 说明每个文件的作用。
4. 说明如何在浏览器中运行。
5. 列出正常输入、空输入和连续删除的测试方法。
6. 代码要适合初学者阅读,避免不必要的复杂写法。
相比最开始的一句话,这个版本已经明确了:
- 学习背景。
- 技术环境。
- 具体功能。
- 本次范围。
- 不做的内容。
- 代码组织方式。
- 运行和测试要求。
AI 得到的信息越完整,越容易给出符合预期的回答。
七、不同场景下的需求描述模板
模板一:让 AI 解释代码
text
我正在学习 [编程语言或框架]。
下面是一段代码:
[粘贴代码]
请完成以下任务:
1. 用初学者能理解的语言说明整体作用。
2. 逐段解释关键代码。
3. 说明每个输入和输出。
4. 指出可能出现的错误。
5. 给我一个可以自己修改的练习。
模板二:让 AI 生成一个函数
text
我使用 [语言和版本]。
请实现一个 [函数功能]。
背景:
[说明函数会被用在哪里]
要求:
- 输入是 [参数和类型]
- 输出是 [返回值和类型]
- [业务规则或限制]
- [异常输入如何处理]
请先解释思路,再给代码。
最后提供正常、边界和异常测试示例。
模板三:让 AI 修改已有代码
text
这是当前代码:
[粘贴相关代码]
我想解决的问题:
[说明当前问题]
项目背景:
[技术栈、文件位置和相关规则]
限制:
1. 只修改与当前问题相关的部分。
2. 不新增第三方依赖。
3. 不改变已有功能的输入和输出。
请先说明问题原因和修改计划。
确认后再给出修改后的代码。
模板四:让 AI 排查报错
text
我在 [操作步骤] 时遇到了下面的报错:
[粘贴完整报错]
相关代码:
[粘贴报错位置附近的代码]
环境信息:
- 操作系统:
- 运行环境版本:
- 框架或库版本:
我已经尝试过:
[列出已经尝试的处理方式]
请:
1. 解释报错含义。
2. 列出最可能的原因。
3. 按顺序给出排查步骤。
4. 说明还需要哪些信息。
八、描述需求时最容易犯的 4 个错误
错误一:目标太抽象
text
帮我优化一下。
帮我完善一下。
帮我做得更好看。
改成:
text
请优化登录表单的移动端布局。
只修改 CSS,不修改交互逻辑。
当屏幕宽度小于 600px 时,表单内容不能出现横向滚动。
错误二:把多个大任务混在一起
text
帮我把这个项目的登录、支付、订单和后台管理全部做完。
改成:
text
本次只实现登录页面的表单校验。
登录接口和登录成功后的跳转放到下一步。
任务越小,越容易理解和验证。
错误三:只说技术,不说结果
text
用 React 写一个组件。
还需要说明:
text
这个组件用于展示待办事项。
需要接收 items 和 onDelete 两个参数。
每条记录显示标题、完成状态和删除按钮。
技术栈只能说明"用什么写",不能说明"要写出什么"。
错误四:只说结果,不说明学习阶段
如果你是初学者,可以直接告诉 AI:
text
我刚开始学习 JavaScript。
请避免使用我还没有学过的高级语法。
如果必须使用,请先解释它的作用。
AI 知道你的学习阶段后,可以调整解释深度和代码复杂度。
九、提交需求前的快速检查
向 AI 发送需求前,可以快速看一遍:
text
[ ] 我说明了使用的语言、框架或运行环境吗?
[ ] 我明确说明了这次要完成什么吗?
[ ] 我说明了哪些内容暂时不做吗?
[ ] 我写清楚了输入、输出和关键规则吗?
[ ] 我告诉 AI 希望它如何回答吗?
[ ] 我要求它提供运行或测试方法了吗?
[ ] 我是否删除了密钥、密码和真实用户数据?
如果暂时没有足够信息,也可以这样问:
text
在开始实现之前,请先列出完成这个需求还需要我补充的关键信息。
让 AI 先提问,通常比让它基于猜测直接写代码更稳妥。
十、总结
向 AI 描述编程需求,不是把 Prompt 写得越长越好,而是把真正重要的信息说清楚。
今天重点学习了 4 个要素:
- 背景:说明技术栈、项目环境和当前基础。
- 目标:明确这次要实现什么,以及做到什么程度。
- 限制:说明不能做什么、必须遵守哪些规则。
- 输出格式:告诉 AI 希望它用什么方式回答、如何运行和验证。
可以把它们记成一张简单的卡片:
text
我现在在哪里?
我想完成什么?
有哪些事情不能做?
我希望你怎样交付?
请记住:
描述需求的过程,本身也是梳理需求的过程。
当你能够把一个问题说清楚,通常也会更容易理解自己到底想解决什么。
下一篇文章,我们继续练习 4 个新手可以直接套用的 AI 编程提示词模板:
解释代码、生成函数、排查报错和优化代码。
✍坚持原创,求关注,点赞,收藏