如何向 AI 清楚描述一个编程需求

前面几篇文章中,我们反复提到一个观点:

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 个要素:

  1. 背景:说明技术栈、项目环境和当前基础。
  2. 目标:明确这次要实现什么,以及做到什么程度。
  3. 限制:说明不能做什么、必须遵守哪些规则。
  4. 输出格式:告诉 AI 希望它用什么方式回答、如何运行和验证。

可以把它们记成一张简单的卡片:

text 复制代码
我现在在哪里?
我想完成什么?
有哪些事情不能做?
我希望你怎样交付?

请记住:

描述需求的过程,本身也是梳理需求的过程。

当你能够把一个问题说清楚,通常也会更容易理解自己到底想解决什么。

下一篇文章,我们继续练习 4 个新手可以直接套用的 AI 编程提示词模板:

解释代码、生成函数、排查报错和优化代码。


✍坚持原创,求关注,点赞,收藏

相关推荐
pqpo3 小时前
Agent Team 实践(一): 如何构建跨 Harness 的统一 Runtime
agent·ai编程
怕浪猫3 小时前
DeepSeek Harness 源码实战第2章:Cordis——驱动 dsh 的插件引擎
aigc·openai·agent
雨辰AI5 小时前
RAG 知识库搭建:基于人大金仓构建信创运维问答机器人|全栈国产化落地完整版
运维·ai·机器人·ai编程
kaliarch6 小时前
WorkBuddy 首日上线:权限、Workspace、网络与版本对齐清单
ai编程
lifallen6 小时前
模型不是函数:claude-cookbooks/misc 十四篇的公共底层
人工智能·学习·ai·ai编程
王莹月7 小时前
生图API 出问题怎么定位?给调用加 traceId 和结构化日志(nano-banana-pro)
gpt·ai·chatgpt·ai作画·aigc·agi
努力的小Qin8 小时前
记录随手记、周报一键成:我如何用「工作日迹」终结周五的周报焦虑
ai编程·trae·vibecoding
树下有只猫9 小时前
AI桌宠制作:从一张静态图片到一个动态桌宠
ai编程
大草原的小灰灰9 小时前
Cursor极速上手指南
ai编程·cursor
Hello_Damon_Nikola9 小时前
Ollama 终极使用指南
ai·ai编程