第23章-AI提问技巧之需求描述四要素


今天不学语法。今天学的是这门课里最实用的一课:怎么把需求说给 AI 听

你已经在用 AI 写代码了,但大部分人的问法是这样的——「帮我写个通讯录」。五个字,AI 收到的信息只有"通讯录"三个字,剩下的全靠猜:你是初学者还是老手?数据存哪?要哪些功能?界面长什么样?每个没说的细节,AI 都会自己挑一个默认答案。猜对了算运气好,猜错了就是"AI 写的代码不对"。

今天教你一套固定的说法,把需求一次说清楚,AI 写出来的代码十有八九直接能用。学完你会有个直观的对比:问得好,5 分钟出活;问得差,2 小时扯皮。

先做个实验:两种问法,两种结果

在 Cursor 里分别复制下面两段提示词,看看 AI 的产出差多少。

第一段,一句话需求:

帮我写个通讯录。

第二段,把话说全:

我是 Python 初学者,第一次写通讯录程序。
请帮我写一个通讯录程序:支持添加联系人(姓名 + 电话)、查看全部联系人、按姓名搜索。
数据保存到 contacts.json 文件,程序关闭再打开数据还在。
用函数封装每个功能,代码加中文注释,尽量简单,控制在 80 行以内。

跑一遍对比,你会看得非常清楚:第二段生成的代码,功能、结构、注释都贴着你说的来,几乎可以直接用。第一段生成的东西,是 AI 按自己的想象写的——它不坏,但它不是你要的那个东西。

这里先摆正一个观念:AI 写代码的能力已经很强,但"读懂人心"的能力是 0。它只会按你写出来的字面意思行动,没写 = 不知道。所以高质量的提问,就是把"你脑子里的需求"原样搬进提示词里,让 AI 不用猜。

一次说清四件事

"把话说全"不是让你写作文。你只需要交代四件事,按固定顺序:

背景 / 角色 → 目标 → 输入输出 → 约束

这个顺序是有讲究的:先自我介绍,再谈要做什么,然后谈细节,最后谈要求,和人与人沟通的顺序一样,AI 顺着理解最省力。下面一项一项拆开讲。

要素一:我是谁(背景 / 角色)

第一句告诉 AI 你是谁、水平如何。这决定它用多深的词、多花哨的写法:

你说 AI 的反应
我是 Python 零基础初学者 用最基础的写法,每行加注释,不装高深
我在准备面试,需要完整规范的写法 补全边界判断、异常处理、类型标注
我上过一个月 Python 课,会函数和字典 跳过基础解释,直接用你会的技术

新手最典型的坑,就是不说水平。AI 默认按"有一定基础"写,代码里冒出 lambda、列表推导式、dataclass,你根本看不懂,更别提维护。把身份说清楚,AI 才知道该用几成功力。

写法示例:

我是 Python 零基础初学者,只学过变量、列表、字典、函数,还没学过类。

"初学者"不是丢人的标签,是为了让 AI 不给你挖坑——维护不了的高级代码等于没用。背景可以写得更细:学过哪些语法、项目是给别人看还是自己练手、要不要中文注释。后面还能接一句"请用我学过的语法写",进一步约束。

要素二:要做出什么(目标)

第二句告诉 AI 最终要交付一个什么东西,一句话说清"程序的名字 + 核心用途"。

目标具体到什么程度算够?有个判断标准:把这句话念给另一个同学听,他能说清楚"这程序是干嘛的",就算合格。看看模糊和清晰的区别:

模糊的目标 清晰的目标
写个成绩的东西 写一个成绩管理系统,能录入学生成绩
搞个记账 写一个记账本程序,能记录每天的收入和支出
做个计算器 写一个命令行计算器,支持加减乘除四种运算

写法示例:

目标是:写一个成绩管理系统,能录入学生成绩。

目标是"做什么",不是"怎么做"——具体技术属于后面的约束要素,别混在一起写。目标也别贪多,一个程序聚焦一件事:想把成绩管理和记账本合体,AI 写出来的代码复杂度会暴涨,新手改不动。目标写清楚后,AI 生成的代码开头注释里一般会有一句程序简介,读它就能验证 AI 有没有理解错你的目标。

要素三:喂什么、吐什么(输入输出)

第三句告诉 AI 用户会输入什么、程序要输出什么。这是最容易漏、也最容易让 AI 写偏的一项。拆成两个问题问自己:

问题 例子(成绩管理系统)
输入什么?用户怎么操作? 输入学生姓名和成绩;菜单选择:录入/查看/退出
输出什么?屏幕上要显示什么? 打印每个学生的姓名和成绩;打印平均分

提示词里最好把操作流程一条条列出来,用 1. 2. 3.,AI 就能把菜单、函数、分支都对齐你的预期:

程序的交互流程:
1. 用户选择功能:1 录入成绩,2 查看全部,3 退出
2. 录入时依次输入姓名、成绩
3. 查看时打印所有学生的「姓名:成绩」
4. 退出时程序结束

写法示例:

输入:用户从键盘输入姓名和成绩。
输出:屏幕上打印每个学生的姓名和成绩,并打印平均分。

只写"输入"不写"输出",AI 可能把结果显示成别的样子(比如只存不打印)。交互流程用数字列表写,比一大段散文更容易让 AI 逐条实现。再想想"程序跑起来用户先看到什么"——通常是一个菜单,AI 默认会做菜单,但你写了流程后它做得更准确。

要素四:有哪些限制(约束)

第四句告诉 AI 有哪些限制和偏好。这是"定制化"的来源:同样写一个程序,约束不同,产出完全不同。常见的约束分几类:

约束类型 例子
数据存储 数据保存到 JSON 文件 / 用字典列表存内存
代码风格 用函数封装每个功能 / 用类实现 / 加中文注释 / 尽量简单
环境限制 只用 Python 标准库,不要装第三方包
界面形式 命令行黑窗口版,不要图形界面
规模要求 控制在 80 行以内 / 分成多个文件

新手常见心理:觉得"约束"是刁难,不加约束让 AI 自由发挥。恰恰相反——不加约束,AI 就按它自己的默认喜好写(可能用你完全没学过的库),加了约束,代码才真正归你所有。

写法示例:

约束:只允许使用 Python 标准库(不许用第三方库),用函数封装每个功能,
代码加中文注释,尽量简单,适合零基础阅读。

"尽量简单"这四个字对新手特别重要:写出来看不懂的代码,等于废代码。约束也要现实:别同时要求"非常简单"又"支持 10 万条数据高性能",AI 会精神分裂。存储方式直接影响程序行为,务必明确:数据要不要"关掉程序再打开还在",存文件还是存内存,一句话的事。

四要素合体:一张模板卡走天下

四要素的顺序固定为背景 → 目标 → 输入输出 → 约束。完整模板抄进笔记,这就是你的"模板卡",以后每个项目都用它:

【背景 / 角色】我是 <水平描述>,学过 <学过的内容>。
【目标】请帮我写一个 <程序名>:<一句话用途>。
【输入输出】
  输入:<用户输入什么>。
  输出:<屏幕显示什么>。
  交互流程:
  1. <步骤一>
  2. <步骤二>
【约束】数据存 <存储方式>;<代码风格要求>;<其他要求>。

一份填好的完整示例(通讯录,直接可用):

【背景 / 角色】我是 Python 初学者,只学过变量、列表、字典、函数。
【目标】请帮我写一个通讯录程序:能添加联系人、查看全部、按姓名搜索。
【输入输出】
  输入:用户从键盘选择功能并输入姓名、电话。
  输出:屏幕上打印联系人列表或搜索结果。
  交互流程:
  1. 显示菜单:1 添加联系人,2 查看全部,3 按姓名搜索,4 退出
  2. 添加时输入姓名和电话
  3. 搜索时输入姓名,打印匹配的联系人
  4. 退出时程序结束
【约束】数据保存到 contacts.json 文件,程序重启后数据还在;用函数封装每个功能;
代码加中文注释;只用标准库;尽量简单,适合零基础阅读。

这个模板周五做图书管理小程序时直接复用,只改程序名、字段和功能列表。

第一次写不完美没关系,四要素本质是"检查清单",写完对照四个框看有没有漏。模板抄进笔记后不要每次重新发明——复制 → 填空,这才是高手效率。提示词里的中文标点(【】、:)AI 都能看懂,但保持一致,别混用。

发出去之前,花一分钟自查

四要素不是写完就完,发出去之前花 1 分钟过一遍这个清单,每项都能打勾,提示词才合格:

检查项 自问自答 打勾标准
背景/角色 我告诉 AI 自己是初学者了吗? 有"我是初学者/学过什么"这类话
目标 AI 知道程序叫什么、干嘛用吗? 有一句"写一个 XX 程序:能 XX"
输入输出 用户输什么、屏幕显示什么都写了吗? 有"输入:"和"输出:"两句
交互流程 菜单有几项、顺序对不对? 用 1. 2. 3. 逐条列出
约束 存储方式、代码风格、注释要求写了吗? 至少写了存储方式和"加注释"
细节 有没有需要我拍板的选项(如删除按序号)? 所有"AI 会猜"的地方我都给了答案

最后一步:自己当 AI 读一遍。把提示词从头读一遍,凡是"这里 AI 不知道我在想什么"的地方,就是需要补的地方。

还要避开三个最常见的提问误区:

误区 表现 后果 怎么破
挤牙膏 先发一句"帮我写个程序",AI 问一句你答一句 一来一回十几轮,效率极低 一次把四要素全给全,AI 不需要追问
术语轰炸 堆砌"ORM""MVC""异步"自己都不懂的名词 AI 以为你会,生成你完全看不懂的代码 用大白话描述需求,术语交给 AI 翻译
复制粘贴不检查 从别处抄来的模板没改程序名直接发 生成的是别人的需求 发之前把【目标】那句话重读一遍

自查清单练熟了要内化成习惯——以后不列清单,脑子里自动过一遍。四要素里最容易漏的是"约束"和"交互流程",因为你觉得"这还用说?"——但 AI 真的不知道。补信息的原则:只补和这次需求相关的,别把无关的背景(比如"我昨天吃了火锅")写进去,信息噪音同样会干扰 AI。

随堂练习

练习一:用四要素让 AI 写"成绩管理系统"

把下面这段话的括号补全,然后复制给 AI(Cursor 或任意 AI 工具):

【背景 / 角色】我是 ____,只学过 ____。
【目标】请帮我写一个成绩管理系统:____。
【输入输出】输入:____;输出:____。
【约束】数据用 ____ 存;____;加注释;尽量简单。

提示:参考答案方向——背景"Python 初学者";目标"录入 3 个学生成绩并算平均分";输入输出"输入姓名和成绩 → 输出每个学生成绩和平均分";约束"用字典列表存储、用函数封装"。先自己填空,再和同桌的对比。

练习二:把第 1~4 周的需求用四要素重写(今天的核心练习)

  1. 翻出第 1~4 周里所有"让 AI 写的代码"的记录(比如猜数字、计算器、学生信息管理……)。
  2. 挑 2 个程序,用四要素模板重新让 AI 写一遍。
  3. 对比新旧两版:哪个更好读?哪个功能更符合你的预期?把结论写进笔记。

进阶题 ★:同一需求,两种问法,看 AI 表现

  1. 先只发一句"帮我写个通讯录",看 AI 生成什么,记下它的功能点。
  2. 再用上面的完整模板发一遍,对比两版代码的功能差异。
  3. 数一数:第二版比第一版多了哪些功能?把清单写下来,你会直观理解"四要素值多少钱"。

让 AI 当你的提问教练

进阶用法:拿不准自己写得好不好,把提示词交给 AI 检查。

我是零基础初学者。下面是我准备发给 AI 的提示词:
<粘贴你的提示词>
请用"需求描述四要素"(背景/角色、目标、输入输出、约束)帮我检查:
1. 哪一项信息缺失或模糊
2. 缺了它会有什么后果
3. 帮我补全成一段完整提示词
请用大白话回答,尽量简短。

报错速查

这里的"报错"不是代码报错,而是"AI 写出来的东西不对劲",多半都能在四要素里找到原因:

遇到的问题 什么意思 怎么办
AI 生成的代码用了你没学过的写法(lambda、推导式) 背景里没说"我是初学者" 补上【背景/角色】要素,加"只用基础语法"约束
AI 写的功能和你要的不一样 目标/输入输出没写清,AI 在猜 用四要素检查清单逐条对照,缺哪补哪
程序关掉后数据就没了 没写存储约束,AI 默认存内存 加约束"数据保存到 xxx.json 文件,重启后还在"
AI 用了一个你没见过的第三方库,装不上 没加"只用标准库"约束 加约束"只允许使用 Python 标准库,不要第三方库"
代码没有注释,读不懂 没写"加中文注释"要求 加约束"每行关键代码加中文注释"

明天的第二板斧

今天这节课,信息量不大,含金量不低。四要素——背景/角色、目标、输入输出、约束——从今天起就是你写提示词的默认格式。一句话总结今天的观念:AI 编程的核心不是 AI 多强,而是你会不会问;没写 = 不知道。

明天学第二板斧:报错三步法 + 追问修改。今天解决的是"怎么让 AI 一次写对",明天解决"写错了怎么修、想改怎么改"。四要素管前 80%,三步法和追问补后 20%,两节课合起来才是完整闭环。周五的图书管理小程序,会把这两天的本事全部用上。