AI编程Prompt模板
在使用 AI 辅助编程的日常工作中,你可能已经遇到过这样的场景:同一段需求,换一个说法丢给 AI,产出质量天差地别。经验丰富的开发者会逐渐意识到——好的 Prompt 是 AI 编程的关键。它远比一句「帮我写个函数」复杂——它是一套结构化的表达方式,决定了 AI 能否准确理解你的意图,并在正确的约束下输出可用的代码。
这篇长文聚焦 AI 编程场景下的 Prompt 模板。我们将从 Prompt 的基本结构入手,梳理四类常用模板、三条优化主线、四大应用场景,最终给出一套可落地的编写流程和检查清单。目标是让你在面对任何编程任务时,都能快速写出一条高质量的 Prompt。
Prompt 的五个核心结构
一条面向编程的 Prompt,通常需要覆盖五个信息层。缺少任何一层,AI 都需要靠「猜」来填补空白,结果就是输出偏离预期。
| 结构层 | 作用 | 示例 |
|---|---|---|
| 角色(Role) | 告诉 AI 以什么身份思考,激活对应的专业知识域 | 「你是一位资深 React 前端工程师,熟悉 Next.js 和 TypeScript」 |
| 任务(Task) | 明确要做什么,用一句话概括目标 | 「实现一个带分页的文章列表组件」 |
| 上下文(Context) | 提供技术栈、现有代码、业务背景等约束信息 | 「项目使用 Next.js 16 App Router,数据通过 Server Component 获取,样式用 Tailwind CSS」 |
| 要求(Requirements) | 列出具体的功能约束、非功能约束和禁止事项 | 「必须支持空状态、加载态;不要引入额外状态管理库」 |
| 输出格式(Output Format) | 指定代码风格、文件结构、注释规范等输出形态 | 「以单个 TSX 文件输出,导出为默认组件,每个逻辑块用中文注释标注用途」 |
这五层结构对应了业界常见的几个 Prompt 框架。例如 CRAFT(Context, Request, Action, Format, Tone)、RISEN(Role, Instructions, Steps, End goal, Narrowing)、以及最精简的 RTF(Role, Task, Format)。它们的共同点是:把信息从「想到什么说什么」收敛为结构化表达,减少歧义。
# 一个结构完整的 Prompt 示例
## 角色
你是一位精通 Python 后端开发的工程师,熟悉 FastAPI 和 SQLAlchemy。
## 任务
实现一个用户注册接口,包含邮箱验证和密码加密。
## 上下文
- 框架:FastAPI + SQLAlchemy 2.0
- 数据库:PostgreSQL
- 已有模型:User 表包含 id, email, hashed_password, created_at 字段
- 认证方案:JWT,access token 有效期 30 分钟
## 要求
1. 密码使用 bcrypt 加密,不要使用明文或简单 hash
2. 邮箱重复时返回 409 状态码,附带明确错误信息
3. 输入校验使用 Pydantic v2
4. 不要引入 Celery 或其他异步任务队列,邮件发送用同步 mock
## 输出格式
- 输出完整的 router 文件代码
- 包含 Pydantic schema 定义
- 函数级别添加 docstring,说明参数和返回值
- 错误处理使用统一的 HTTPException四类常用 Prompt 模板
在实际开发中,AI 编程任务大致可以归为四类:代码生成、代码审查、调试排查、重构优化。每类任务对 Prompt 结构的侧重不同,下面先给出整体对比,再分别展示模板和使用建议。
| 模板类型 | 核心目标 | 结构侧重点 | 典型触发场景 |
|---|---|---|---|
| 代码生成 | 从零实现功能 | 上下文(技术栈)+ 要求(约束边界) | 新功能开发、组件创建、接口实现 |
| 代码审查 | 发现潜在问题 | 任务(审查维度)+ 输出格式(分级标准) | PR 提交前、代码质量检查、安全审计 |
| 调试排查 | 定位和修复 Bug | 上下文(错误现场)+ 已排除的原因 | 生产报错、测试失败、性能异常 |
| 重构优化 | 改善代码质量 | 任务(重构目标)+ 约束(不改变的部分) | 代码腐化、性能瓶颈、可读性提升 |
模板一:代码生成
代码生成是最常见的场景——从零实现一个功能、组件或接口。这类 Prompt 的重点是把约束说清楚,避免 AI 做出一堆你需要推翻重来的「通用方案」。
## 任务
实现一个倒计时 Hook:useCountdown
## 上下文
- 项目使用 React 18 + TypeScript
- 状态管理使用 useState + useEffect,不引入外部库
- 需要兼容 SSR(Next.js 环境)
## 功能要求
1. 接收目标时间戳(number)作为参数
2. 返回 { days, hours, minutes, seconds } 对象
3. 倒计时归零后自动停止定时器
4. 组件卸载时清理定时器
## 边界处理
- 目标时间已过期时,返回全零对象
- 传入非法值(NaN、负数)时,返回 null 并在 console.warn 输出提示
## 输出格式
- 单个 TypeScript 文件
- 导出 Hook 函数和返回类型接口
- 附带 2-3 个使用示例模板二:代码审查
让 AI 审查代码时,关键是告诉它审查的维度。一句「帮我看看这段代码」会让 AI 泛泛而谈;明确审查角度后,输出才能直击要害。
## 任务
审查以下 TypeScript 代码,重点关注三个方面:
1. 类型安全性——是否存在 any 逃逸或类型断言滥用
2. 错误处理——异步操作是否有未捕获的异常
3. 性能——是否有不必要的重渲染或内存泄漏风险
## 代码
[粘贴代码]
## 输出格式
按严重程度分级输出:
- 🔴 必须修复(会导致运行时错误或数据问题)
- 🟡 建议优化(影响可维护性或性能)
- 🟢 可选改进(代码风格或更优雅写法)
每个问题指出具体行号、问题描述、修复建议。模板三:调试排查
调试类 Prompt 的核心是提供完整的错误现场:错误信息、复现步骤、已排除的原因。信息越充分,AI 定位问题的准确度越高。
## 任务
排查一个生产环境中的内存泄漏问题。
## 现象描述
- Node.js 服务运行 48 小时后内存从 200MB 增长到 1.8GB
- 重启后内存恢复正常,但再次运行后缓慢增长
- 没有明显的 OOM crash,但接近 Node.js 默认堆上限时响应变慢
## 环境信息
- Node.js 20.x
- Express + Prisma + PostgreSQL
- 使用了连接池(max: 10)
## 已排查
- Prisma 连接池配置正常,空闲连接回收逻辑已确认
- 没有全局变量持续累积数据
- 日志中未发现异常请求模式
## 怀疑方向
- 事件监听器未清理
- 闭包引用导致对象无法回收
- 某个中间件每次请求创建新对象
## 请求
1. 分析可能的泄漏点,给出排查优先级
2. 为每个怀疑方向提供具体的检测代码或诊断命令
3. 给出修复方案的代码示例模板四:重构优化
重构类 Prompt 需要明确重构目标和约束边界。不同目标(可读性、性能、可测试性)会导致完全不同的重构路径。
## 任务
重构以下函数,目标是提升可读性和可测试性。
## 当前问题
- 单个函数超过 80 行,混合了数据校验、业务计算和日志记录
- 多个 if-else 分支难以覆盖测试用例
- 依赖全局配置对象,无法独立测试
## 重构约束
- 保持对外接口不变(函数签名、返回值结构)
- 不引入新的外部依赖
- 重构后每个子函数行数不超过 30 行
## 当前代码
[粘贴代码]
## 输出格式
1. 先给出重构方案的简要说明(拆分为哪些函数,各自的职责)
2. 输出重构后的完整代码
3. 标注每个拆分决策的理由Prompt 优化的三条主线
掌握了结构和模板之后,输出质量的差异主要取决于三条优化主线:具体化、示例化、迭代化。
具体化:用精确描述替代模糊表达
模糊的 Prompt 是产出低质量代码的首要原因。「把这个做好」「优化一下」「处理异常情况」这类表述对 AI 几乎没有约束力。
| 模糊表达 ❌ | 具体表达 ✅ |
|---|---|
| 做好错误处理 | 所有数据库操作用 try-catch 包裹,捕获 Prisma KnownRequestError,返回对应 HTTP 状态码 |
| 优化性能 | 将 O(n²) 的双层循环改为 Map 查找,目标时间复杂度 O(n) |
| 处理边界情况 | 输入为空数组时返回 null;数组长度超过 1000 时截断并返回警告信息 |
| 写得好一点 | 遵循项目现有的代码风格:函数名用 camelCase,类型名用 PascalCase,不使用 enum 改用 const assertion |
示例化:用输入输出锚定预期
对于复杂的逻辑,文字描述容易产生歧义。直接给出输入-输出示例,能让 AI 快速对齐你的预期,比反复解释高效得多。
## 任务
实现一个版本号比较函数
## 示例
输入: compareVersion("1.01", "1.1")
输出: 0 (两个版本号相等,忽略前导零)
输入: compareVersion("1.0.1", "1")
输出: 1 (第一个版本号更大,缺失的修订号视为 0)
输入: compareVersion("0.1", "1.0")
输出: -1 (第一个版本号更小)这种写法对 AI 的约束力远超「比较两个版本号大小」。示例本身就隐含了边界规则(前导零处理、缺失位补零、返回值约定),不需要额外文字说明。
迭代化:分步逼近而非一步到位
复杂任务很少能一次得到完美结果。高效的策略是把大任务拆成多轮对话,每轮聚焦一个子目标,在前一轮输出的基础上逐步完善。
# 第一轮:确认方案
我需要实现一个文件上传功能,支持断点续传。
请先给出技术方案选型和架构设计,不要写代码。
# 第二轮:核心逻辑
方案确认。现在实现分片上传的核心逻辑,使用 Node.js + Busboy。
输入:文件流 + 分片大小
输出:每个分片的写入路径和校验 hash
# 第三轮:边界处理
在上面的基础上,补充以下边界处理:
1. 磁盘空间不足时的回滚逻辑
2. 并发上传同名文件的冲突处理
3. 分片校验失败时的重试机制
# 第四轮:集成和测试
将上面的代码整合为一个完整的 UploadService 类。
包含单元测试,覆盖正常上传、断点续传、分片校验失败三个场景。迭代化的好处是:每一步的输出都在你的掌控中。如果第一轮方案就不对,你不会浪费后续三轮的时间。
四大场景的应用要点
不同的编程场景对 Prompt 的侧重要求不同。下面按前端、后端、数据库、测试四个常见场景,梳理各自的要点。
| 场景 | 关键上下文 | 常见要求 | 容易遗漏的信息 |
|---|---|---|---|
| 前端开发 | 框架版本(React/Vue/Angular)、渲染模式(CSR/SSR/SSG)、状态管理方案、UI 组件库 | 响应式断点、无障碍(a11y)合规、浏览器兼容性 | 暗色模式适配、国际化(i18n)预留 |
| 后端开发 | 语言版本、框架、数据库类型、部署环境、API 风格(REST/GraphQL/gRPC) | 认证鉴权、日志规范、错误码约定、限流策略 | 幂等性要求、分布式场景下的并发控制 |
| 数据库 | 数据库类型和版本、现有 schema、数据量级、读写比例 | 索引策略、事务隔离级别、迁移方式 | 已有数据的兼容性、回滚方案 |
| 测试 | 测试框架、mock 方案、现有测试结构、覆盖率目标 | 测试粒度(单元/集成/E2E)、命名规范、fixture 策略 | 异步测试的时序处理、环境隔离 |
前端场景示例
## 任务
实现一个搜索输入框组件,带防抖和搜索建议下拉
## 上下文
- React 18 + TypeScript + Tailwind CSS
- 搜索 API 端点:GET /api/search?q=keyword
- 防抖间隔 300ms
## 要求
1. 输入时显示 loading 状态
2. 下拉建议最多显示 5 条,超出显示「查看更多」
3. 键盘导航支持(上下箭头选择,回车确认,Esc 关闭)
4. 点击外部区域关闭下拉
5. 组件需要在移动端和桌面端都有良好的交互体验
## 输出
- 一个 SearchInput.tsx 文件
- Props 接口定义(包含 onChange、onSelect 回调)
- 不引入第三方 UI 库后端场景示例
## 任务
实现订单创建接口,扣减库存并生成订单记录
## 上下文
- NestJS + TypeORM + MySQL
- 库存表 products.stock 使用乐观锁(version 字段)
- 订单状态:pending → paid → shipped → completed
## 要求
1. 使用数据库事务保证库存扣减和订单创建的一致性
2. 库存不足时返回 400,附带具体商品名称
3. 乐观锁冲突时自动重试一次,再次失败返回 503
4. 接口需要幂等——相同 idempotency-key 不重复创建订单案例:从模糊 Prompt 到高质量输出
案例一:前端组件生成
初始 Prompt(模糊):
帮我写一个表格组件,要能排序和筛选。
这个 Prompt 缺少框架信息、数据结构、排序和筛选的交互细节。AI 大概率会输出一个「看起来能用但和你项目不兼容」的通用方案。
优化后 Prompt:
## 角色
你是 React 前端工程师,精通 Headless UI 模式。
## 任务
实现一个数据表格组件,支持列排序和多选筛选。
## 上下文
- Next.js 16 App Router + TypeScript
- 数据从 Server Component 获取,客户端只做排序和筛选
- 样式使用 Tailwind CSS
- 表格数据量在 50-200 行之间,不需要虚拟滚动
## 数据结构
interface OrderItem {
id: string
productName: string
amount: number
status: 'pending' | 'paid' | 'shipped'
createdAt: string // ISO 8601
}
## 交互要求
1. 列头点击切换排序:无排序 → 升序 → 降序 → 无排序
2. 筛选区域支持 status 多选(checkbox)
3. 排序和筛选条件通过 URL searchParams 持久化,支持分享链接
4. 筛选结果为空时显示「无匹配数据」的空状态
## 输出格式
- 拆分为三个组件:DataTable(容器)、SortableHeader(列头)、StatusFilter(筛选)
- 排序和筛选逻辑用自定义 Hook 封装
- 不使用任何 UI 组件库优化后的 Prompt 把数据结构、交互细节、拆分方式全部明确,AI 的输出可以直接作为项目的起点代码,大幅减少返工。
案例二:后端接口调试
初始 Prompt(模糊):
我的接口报错了,帮我看看。 错误信息:TypeError: Cannot read properties of undefined (reading 'map')
缺少上下文。AI 只能给出「检查变量是否为 undefined」这种泛泛的建议。
优化后 Prompt:
## 任务
排查一个生产环境的 TypeError。
## 错误信息
TypeError: Cannot read properties of undefined (reading 'map')
at OrderList.render (OrderList.tsx:47)
at processTicksAndExitCallbacks (node:internal/...)
## 复现条件
- 仅在新用户首次访问时出现
- 刷新页面后恢复正常
- 只影响 /orders 路由
## 相关代码
[粘贴 OrderList.tsx 的代码]
## 已排查
- API 返回的 orders 字段在新用户场景下为 null(不是空数组)
- 代码中直接调用 response.data.orders.map(),未做 null 检查
## 请求
1. 修复空值问题
2. 检查是否有其他类似的不安全访问
3. 给出防御性编码建议,避免同类问题再次出现提供了错误堆栈、复现条件、已排查结论后,AI 可以直接定位问题并给出精准修复,而不是泛泛地建议「加个判空」。
Prompt 编写流程
用一张流程图总结从「接到任务」到「获得可用代码」的完整过程:
流程中有两个关键决策点:任务复杂度判断和输出是否符合预期。前者决定了你是一次性写完 Prompt,还是分步迭代;后者决定了你是否需要追加约束、补充示例来缩小输出与预期之间的差距。
检查清单
在提交 Prompt 之前,逐项检查以下条目。养成这个习惯后,Prompt 质量会有稳定的提升:
- 角色是否明确 — 是否指定了技术领域和专长方向?
- 任务是否一句话能说清 — 如果目标需要多句话才能描述,说明任务粒度太大,需要拆分。
- 技术栈是否列全 — 语言版本、框架、关键依赖是否都写明了?
- 数据结构是否给出 — 涉及数据操作时,接口定义或示例数据是否提供了?
- 约束条件是否具体 — 「做好错误处理」是否替换为了具体的错误类型和处理方式?
- 边界情况是否覆盖 — 空值、越界、并发、过期等场景是否考虑到了?
- 输入输出示例是否有 — 对于复杂逻辑,是否给出了至少一组示例?
- 输出格式是否指定 — 文件名、代码风格、注释规范是否明确了?
- 禁止事项是否列出 — 不希望引入的库、不希望使用的模式是否标注了?
- 是否拆分为可迭代的步骤 — 复杂任务是否分解为多轮对话?
- 是否考虑了与现有代码的兼容性 — 接口签名、导入方式、命名风格是否与项目一致?
- 安全和性能要求是否显式声明 — AI 默认输出「能跑就行」的代码,安全和性能需要你主动要求。
小结
Prompt 模板远超死记硬背的格式,它是一套把模糊需求转化为精确指令的思维习惯。五层结构(角色、任务、上下文、要求、输出格式)提供骨架,四类模板(生成、审查、调试、重构)覆盖日常场景,三条优化主线(具体化、示例化、迭代化)持续提升输出质量。
对于 AI 产品出海团队而言,Prompt 模板还有一层更实际的价值:当团队成员使用统一的 Prompt 结构时,AI 产出的代码风格和一致性会显著提升,Review 成本随之下降。把高质量的 Prompt 模板沉淀为团队资产,和沉淀代码规范、组件库一样,是提升工程效率的有效手段。
参考资料
- Prompt Structure for Code Generation: The 6-Part Template — PromptDC 的六段式代码生成 Prompt 模板
- Vibe Coding: Best Practices for Prompting — Supabase 的 AI 编程 Prompt 最佳实践
- Best Practices for Using AI in VS Code — VS Code 官方 AI 使用指南
- AI Prompt Templates and Strategies for Developers — CKEditor 团队的开发者 Prompt 策略
- Prompt 编写模式:如何将思维框架赋予机器 — phodal 的 Prompt 模式开源项目
- The Ultimate Guide to AI Prompt Engineering for Coding — 19 个编程 Prompt 模板指南
- OpenAI Prompt Engineering Guide — OpenAI 官方 Prompt 工程指南
- Claude Prompting Best Practices — Anthropic Claude 官方 Prompt 最佳实践