本文为「AI 辅助编程实战指南」第3篇,完整系列持续更新中。


前言

Prompt 工程是 AI 辅助编程最底层的技能。不管用 Copilot、Cursor 还是 Claude Code,Prompt 的质量直接决定了 AI 输出的上限。本篇用大量实战案例,拆解 5 大核心 Prompt 方法,帮你从”能用 AI”升级到”用好 AI”。

本篇学完你将掌握

  • 5 大核心 Prompt 方法的原理、实战案例和使用时机
  • 如何组合使用多种方法,写出高质量的生产级 Prompt
  • 3 套可直接复用的 Prompt 模板

一、角色设定——给 AI 一个专业身份

大多数人用 AI 写代码时,直接甩一句”帮我写一个 XXX 接口”。问题是,AI 不知道你是谁、项目是什么级别、代码该用什么风格——它只能猜。

角色设定的核心思路:给 AI 一个明确的专业身份,让它以该身份的视角来生成代码。

1.1 基础版:单角色设定

1
2
请扮演拥有 10 年经验的 Spring Boot 架构师,帮我设计一个用户认证服务,
要求支持 OAuth2.0 和 JWT,使用 Redis 做令牌存储。

效果对比

维度 不设角色 设定角色后
代码风格 通用模板风 符合企业级架构规范
依赖选择 随机推荐 优先选择成熟稳定的库
安全考虑 基本不考虑 自动加入安全最佳实践

1.2 进阶版:角色 + 项目上下文

1
2
3
4
5
6
请扮演资深 Python 后端工程师,当前项目背景:
- 技术栈:FastAPI 0.100+、Python 3.11、PostgreSQL 15、SQLAlchemy 2.0
- 项目阶段:生产环境,已有 20+ API 接口
- 团队规范:PEP8、异步优先、所有接口必须有类型注解

帮我新增一个商品库存扣减接口,需要支持并发安全。

💡 建议:角色设定越具体,AI 输出越贴合需求。”资深工程师”不如”10 年经验的 Spring Boot 架构师”,后者能让 AI 生成更符合该身份水准的代码。

1.3 在 IDE 工具中固化角色

大部分 AI 编程工具支持通过项目规则文件自动加载角色设定,不用每次手动输入:

工具 配置文件 示例
Cursor .cursorrules 写入角色描述和项目规范
Claude Code CLAUDE.md 项目根目录放置,每次对话自动加载
Qoder AGENTS.md 团队共享的项目角色和规范
Copilot .github/copilot-instructions.md GitHub 仓库级指令

二、少样本示例(Few-shot)——让 AI 模仿你的风格

AI 最擅长”照葫芦画瓢”。给它 2-3 个输入输出示例,它就能模仿你的代码风格、注释格式、文档结构,大幅减少返工。

2.1 代码风格模仿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
请按照以下格式为函数生成 JSDoc 文档:

示例1:
/**
* 根据用户ID查询用户信息
* @param {string} id - 用户唯一标识
* @returns {Promise<User>} 用户对象
* @throws {NotFoundError} 用户不存在时抛出
*/
async function getUserById(id: string): Promise<User> { ... }

示例2:
/**
* 创建新订单并扣减库存
* @param {CreateOrderDTO} dto - 订单创建参数
* @returns {Promise<Order>} 创建的订单对象
* @throws {StockInsufficientError} 库存不足时抛出
*/
async function createOrder(dto: CreateOrderDTO): Promise<Order> { ... }

现在为函数 cancelOrder 生成同样格式的文档。

2.2 API 响应格式模仿

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
我们项目的 API 统一响应格式如下:

成功响应:
{
"code": 200,
"message": "success",
"data": { "userId": 123, "name": "张三" }
}

失败响应:
{
"code": 400,
"message": "参数错误:邮箱格式不正确",
"data": null
}

请按照这个格式,生成"修改用户密码"接口的完整实现代码。

💡 提示:Few-shot 最适合统一团队代码风格的场景。把你团队的代码规范写成 2-3 个示例,AI 生成的代码就能直接符合团队标准,省掉大量格式调整。


三、思维链(Chain-of-Thought)——让 AI 一步步思考

对于复杂的逻辑推理类任务(算法设计、架构决策、Bug 排查),直接让 AI 给答案容易出错。要求它”一步步思考”,准确率能提升 40% 以上。

3.1 算法类任务

1
2
3
4
5
6
7
8
9
请解决这个算法问题:给定一个整数数组和一个目标值,找出数组中所有
和为目标值的不重复数对。

请按以下步骤思考:
1. 分析问题的时间复杂度要求(数组长度可能达到 10^5)
2. 设计至少两种解决方案,分析各自的时间/空间复杂度
3. 选择最优方案并说明理由
4. 用 Python 实现,处理边界情况(空数组、无解、重复元素)
5. 编写 3 个测试用例验证

3.2 架构决策类任务

1
2
3
4
5
6
7
8
9
我们的电商系统需要引入缓存层,目前日均请求量 500 万,
热点商品约 1000 个,数据一致性要求较高(库存不能超卖)。

请一步步分析:
1. 当前场景的缓存需求特点(读多写少?写多读少?一致性要求?)
2. Redis vs Memcached vs 本地缓存的对比
3. 缓存策略选择(Cache-Aside / Write-Through / Write-Behind)
4. 缓存穿透、击穿、雪崩的应对方案
5. 给出最终方案和理由

3.3 Bug 排查类任务

1
2
3
4
5
6
7
8
9
我的 FastAPI 接口在高并发下偶尔返回 500 错误,错误日志如下:
[ERROR] sqlalchemy.exc.OperationalError: (psycopg2.OperationalError)
server closed the connection unexpectedly

请按以下思路排查:
1. 分析错误类型(连接池耗尽?超时?死锁?)
2. 列出可能的根因(至少 3 个)
3. 给出每个根因的验证方法
4. 提供修复方案和代码示例

💡 提示:思维链的关键是”把思考过程外显化”。你不需要 AI 直接给答案,而是让它展示推理过程,这样你能检查它的逻辑是否正确,及时纠偏。


四、明确约束条件——给 AI 画好边界

AI 最大的问题是”太有创意”——你让它写个接口,它可能给你加了你不需要的功能、用了你不熟悉的库、写了你不需要的注释。明确约束条件,就是给 AI 画好”不能越界”的边界。

4.1 技术约束

1
2
3
4
5
6
7
请用 Python 3.11+ 和 FastAPI 0.100+ 实现一个商品查询接口,要求:
- 响应时间 < 100ms
- 支持分页(每页 10 条,默认第 1 页)
- 使用 SQLAlchemy 2.0 异步连接 PostgreSQL 15
- 必须包含 Pydantic v2 的输入输出模型
- 必须包含 3 个 pytest 单元测试
- 不要引入额外的第三方库

4.2 输出约束

1
2
3
4
请分析以下三个 Web 框架的优缺点,用 Markdown 表格输出:
- 框架:FastAPI、Flask、Django
- 对比维度:性能、学习曲线、生态丰富度、适用场景、部署难度
- 表格最后加一行"推荐",给出你的选型建议

4.3 约束的反面案例

反面 Prompt 问题 改进后
“帮我写一个登录接口” 没指定语言、框架、安全要求 “用 FastAPI 实现 JWT 登录接口,密码用 bcrypt 加密,限制每分钟 5 次请求”
“优化这段代码” 没说优化什么(速度?内存?可读性?) “优化这段代码的查询性能,目标是响应时间从 500ms 降到 100ms 以内”
“帮我重构” 没说重构目标、范围 “将 UserController 中的 5 个方法拆分为 UserService + UserController,遵循单一职责原则”

五、结构化输出——让 AI 的输出直接用

AI 的输出如果是一坨混乱的文字,你还得花时间整理。要求结构化输出,让结果拿来就能用。

5.1 代码块输出

1
2
3
4
5
请实现一个 Redis 分布式锁工具类,要求:
- 输出完整的 Python 代码(包含 import)
- 代码放在一个代码块中
- 每个方法加中文注释
- 包含使用示例

5.2 JSON 输出

1
2
3
4
请为我们的用户管理系统生成 API 接口定义,用 JSON Schema 格式输出:
- 包含 5 个核心接口(注册、登录、查询、修改、删除)
- 每个接口定义请求方法、路径、请求参数、响应格式
- 只输出 JSON,不要其他解释

5.3 对比表格输出

1
2
3
4
5
6
7
8
请对比 Redis、Memcached、本地缓存三种方案,用表格输出:

| 维度 | Redis | Memcached | 本地缓存 |
|------|-------|-----------|---------|
| 性能 | ... | ... | ... |
| 一致性 | ... | ... | ... |
| 部署复杂度 | ... | ... | ... |
| 适用场景 | ... | ... | ... |

六、组合实战:5 大方法的黄金搭配

实际使用中,5 大方法很少单独使用,通常是组合搭配。下面给出 3 套经过验证的 Prompt 模板。

6.1 模板一:新功能开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
【角色设定】请扮演资深 Java 后端工程师,熟悉 Spring Boot 3.0 和 DDD 架构。

【项目上下文】
- 技术栈:Spring Boot 3.0、MySQL 8.0、Redis 7.0、MyBatis-Plus
- 项目阶段:生产环境,日活 10 万
- 代码规范:RESTful 风格、统一响应体、全局异常处理

【明确约束】
帮我新增"优惠券发放"功能,要求:
1. 支持按用户等级自动发放和手动发放两种模式
2. 使用 Redis 做库存预扣减,防止超发
3. 接口响应时间 < 200ms
4. 包含完整的 Service + Controller + 单元测试

【结构化输出】
请按以下结构输出:
1. 数据表设计(SQL)
2. Service 层代码
3. Controller 层代码
4. 单元测试代码

6.2 模板二:代码审查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
【角色设定】请扮演拥有 10 年经验的安全审计专家,熟悉 OWASP Top 10。

【思维链】
请审查以下代码,按以下步骤分析:
1. 检查是否有 SQL 注入风险
2. 检查认证和授权是否完善
3. 检查是否有硬编码密钥或敏感信息
4. 检查错误处理是否泄露系统信息
5. 给出每个问题的具体修复代码

【明确约束】
- 不要改动业务逻辑,只修复安全问题
- 修复代码必须兼容 Python 3.11
- 每个修复点标注严重程度(高/中/低)

6.3 模板三:技术文档生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
【角色设定】请扮演技术文档工程师,擅长将复杂技术概念用简洁的语言表达。

【少样本示例】
参考以下文档风格:
---
## 接口名称
`POST /api/v1/users`
- 功能:创建新用户
- 认证:需要 Bearer Token
- 请求体:{ "email": "string", "password": "string" }
- 响应:201 Created + 用户对象
- 错误码:400(参数错误)、409(邮箱已存在)
---

请按上述格式,为以下 5 个接口生成文档:
1. 用户登录
2. 获取用户列表
3. 获取单个用户详情
4. 修改用户信息
5. 删除用户

七、踩坑记录:Prompt 写得模糊,AI 给你”创意发挥”

现象
让 AI “帮我写一个用户管理模块”,结果它生成了一个包含 15 个接口、引入了 3 个你没听说过的第三方库、还加了你不需要的 WebSocket 实时通知功能的”超大模块”。

原因
Prompt 太模糊,AI 会按照自己的理解”自由发挥”。没有约束条件时,AI 倾向于生成”尽可能多的功能”而非”你真正需要的功能”。

解决方案
给 Prompt 加三层约束:

  1. 技术约束:指定语言、框架版本、不允许引入额外依赖
  2. 范围约束:明确”只需要 XX 功能,不要 YY”
  3. 输出约束:指定代码结构和文件数量

避坑建议
写完 Prompt 后,问自己一个问题:”如果把这个 Prompt 给另一个人类开发者,他能准确理解我要什么吗?”如果人都看不懂,AI 更看不懂。


总结与回顾

核心方法 一句话总结 最佳使用时机
角色设定 给 AI 专业身份,提升输出质量 所有场景(基础中的基础)
少样本示例 提供范例让 AI 模仿 统一代码风格、文档格式
思维链 要求 AI 一步步思考 算法、架构、Bug 排查
明确约束 给 AI 画好边界 避免 AI 自由发挥
结构化输出 让输出拿来就能用 代码、JSON、表格

延伸阅读


本文为「AI 辅助编程实战指南」第3篇,完整系列持续更新中。