06 程序员写 Prompt 的黄金法则——别用和人聊天的方式跟AI说话
摘要:本文针对 AI 编程中常见的 Prompt 编写问题,总结了五条立即可用的黄金法则:1)明确角色、任务、约束,让 AI 无需猜测;2)先说指令后给上下文,提高理解效率;3)一次只提一个明确请求,聚焦才能保证质量;4)通过风格范例控制输出,让 AI 按你的偏好生成;5)采用迭代式提问,快速出第一版再逐步打磨。掌握这些法则可大幅提升与 Cursor、Copilot 等 AI 工具的协作效率。
先交代一下背景
我发现一个很有意思的现象。
我带过好几个刚入坑 AI 编程的同事,他们用 Cursor 和 Copilot 的时候,跟 AI 沟通的方式是这样的:
「帮我把这个代码改一下。」
「写一个用户管理功能。」
「这个程序有问题。」
然后就等 AI 回复。AI 回复的速度确实很快,但结果经常一言难尽——要么生成的东西不是他想要的,要么代码质量一团糟。
问题出在哪?
你在用和人聊天的方式跟 AI 说话。
AI 不是你的同事。你同事能在模糊的指令下猜出你的意图,因为他和你在同一个项目里、有共同的知识背景。AI 没有。你给它的每一行指令,都是它唯一的输入源。越模糊,它越靠猜,猜出来的结果就越偏。
今天不说大道理,直接给一套你马上能用的——写 Prompt 的黄金法则。
黄金法则一:角色 + 任务 + 约束
不管问什么,脑子里先过三个要素:你是谁、你想干嘛、有什么限制。
反面例子:
帮我写一个用户注册接口AI 收到这个 Prompt 会陷入选择困难:用 Spring Boot 还是 Flask?要不要 JWT?需不需要邮箱验证?数据库用 MySQL 还是 MongoDB?它没辙,只能猜一个最通用的方案。
正面例子(3要素齐全):
你是一个 Java 后端开发,熟悉 Spring Boot 3.x。 帮我写一个用户注册接口,要求: 1. 接收 username, password, email 三个参数 2. 密码用 BCrypt 加密后存储 3. 邮箱格式校验 4. 注册成功后发送欢迎邮件(异步) 5. 参数校验用 @Valid 注解 数据库用 MySQL + MyBatis Plus看到了吗?AI 收到这个 Prompt,不需要猜任何东西。角色明确了我是 Java 开发者,任务明确了是注册接口,约束明确到了用什么框架、怎么校验、怎么存储。
结果就是:一次生成的代码可用率从 30% 飙升到 90%。
黄金法则二:先说指令,后给上下文
很多人写 Prompt 喜欢先交代背景,再提要求:
我这边有一个 Spring Boot 项目,用的是 2.7 版本,数据库是 MySQL 8.0,用了 MyBatis Plus 和 Redis。现在有个需求是这样的,需要一个订单导出功能,导出成 Excel 格式……你写得很累,AI 读得也累。而且——如果对话中 AI 的上下文窗口(比如 16K tokens)被前面的背景描述占了 30%,留给实际代码的空间就少了。
最佳实践是:先把指令说清楚,再提供必要的上下文。
帮我写一个订单导出接口,导出为 Excel 格式。 要求:按时间范围筛选,支持 10 万条以上数据分批导出。 技术栈:Spring Boot 2.7 + MySQL 8.0 + MyBatis Plus 接口签名:POST /api/order/exportAI 先收到「写什么」的指令,再看到「用什么写」的上下文,理解效率大幅提升。
黄金法则三:一次只给一个明确的请求
这是最常见的问题:一次问太多。
帮我写一个用户管理模块,包括注册、登录、找回密码、修改个人信息、管理员封号功能。注册的时候要发送邮件验证,登录要加验证码,密码要有强度校验……AI 收到这种请求,通常会给你一个非常完善的目录结构——每个文件都只有一个骨架,没有任何一个实现了完整功能。
正确的做法:拆成多个 Prompt。
Prompt 1:帮我写用户注册接口,这个接口的功能是…… Prompt 2:帮我写用户登录接口,带上 JWT token 生成…… Prompt 3:帮我写找回密码功能,通过邮箱验证码……每个 Prompt 只聚焦一个功能点。AI 会把全部注意力放在你当前的要求上,质量自然高。
这跟你带实习生是一个道理:你跟他说「今天把用户管理模块写完」,他大概率写得很烂。你跟他说「今天先把注册接口搞定,登录明天写」,他就能出活。
黄金法则四:给 AI「说人话」的范例
AI 生成代码默认的风格是偏正式、偏冗余的。如果你不指定,它给你的可能是:
/** * 根据用户ID查询用户信息 * * @param userId 用户ID * @return 用户实体对象 * @throws UserNotFoundException 如果用户不存在 */注释标准、严谨,但你在个人项目里不需要这个。
在 Prompt 里加一句「风格偏好」就能解决:
注释不要太正式,用中文大白话,每段逻辑一句注释就行结果:
// 查用户——返回 null 表示不存在 User user = userMapper.selectById(userId);干净、直接。
这就是所谓的输出控制。你告诉 AI 你想要的输出风格和格式,它就能按你的偏好出活。
黄金法则五:迭代式提问,一次只改进一个点
AI 第一次给的东西很少是完全满意的。这时候别重新写一个 Prompt,也别自己动手改代码——迭代就好。
AI 生成了一个 Excel 导出功能,你看了一眼,发现了两个问题:
1. 文件没有用临时目录,直接写到了项目目录下
2. 导出的 Excel 没有列头
你可以说:
可以了,但有两个小问题: 1. 把生成的文件放到系统临时目录 2. 加上列头AI 会直接在原来的代码基础上改。你不用重新描述整个需求,它还记得上下文。
这就是用 AI 编程最核心的技巧——增量迭代。不要追求一次性完美,快速出第一版,再在基础上逐步打磨。
总结
五条黄金法则,你记住三个就能见效了:
1.角色 + 任务 + 约束→ 让 AI 不用猜
2.先说指令,后给上下文→ 提高 AI 的理解效率
3.一次只给一个请求→ 聚焦才有质量
4.指定输出风格→ AI 按你的喜好来
5.迭代式提问→ 快速出第一版,再打磨
你用这些法则跟 AI 对话一周后,回去看以前写的 Prompt,你会想抽自己。
下一篇预告:AI 写单元测试——一行代码不写给整个模块加测试
