AI 编程的 Prompt 工程:如何写出高质量指令


一、为什么 Prompt 工程如此重要?

AI 编程工具本质上是"对话式编程"。你说的每一句话,都是 AI 的输入信号。输入质量决定输出质量。

常见的低质量 Prompt:

复制代码
帮我写个登录功能

结果: AI 给你一个 50 行的 demo,没有验证、没有安全处理、没有错误提示。

高质量 Prompt:

复制代码
用 Next.js 14 App Router 实现用户登录功能:
1. 使用 bcrypt 加密密码
2. JWT token 存储在 httpOnly cookie
3. 表单验证:邮箱格式、密码至少8位含大小写数字
4. 错误处理:数据库连接失败、用户不存在、密码错误
5. 登录成功后跳转到 /dashboard
6. 参考 src/lib/auth.ts 的现有代码风格

结果: AI 给你一个完整、安全、可维护的登录模块。


二、高质量 Prompt 的五个要素

1. 明确技术栈和框架

❌ "写个 API"

✅ "用 FastAPI + SQLAlchemy + Pydantic 写一个 RESTful API"

2. 具体需求和边界条件

❌ "处理用户输入"

✅ "验证用户输入:XSS 过滤、SQL 注入防护、最大长度 1000 字符"

3. 代码风格和约束

❌ "写个工具函数"

✅ "写一个纯函数,无副作用,有完整的 TypeScript 类型定义,参考项目中 utils/format.ts 的风格"

4. 错误处理和边界情况

❌ "读取配置文件"

✅ "读取 config.json,处理:文件不存在、JSON 格式错误、缺少必需字段、权限不足等情况"

5. 上下文和参考

❌ "优化这段代码"

✅ "优化 src/services/userService.ts 的 getUserById 方法,保持接口不变,参考 src/services/productService.ts 的缓存实现方式"


三、实战案例对比

案例 1:生成数据模型

❌ 低质量:

复制代码
帮我写个用户模型

✅ 高质量:

复制代码
用 Prisma Schema 定义用户模型:
- id: 自增主键
- email: 唯一索引,带验证
- password: 加密存储,不返回给前端
- name: 可选
- avatar: URL 格式,可选
- role: 枚举 (USER, ADMIN, MODERATOR),默认 USER
- createdAt, updatedAt: 自动时间戳
- 关联: 一对多 posts, comments;多对多 likedPosts

参考项目中其他模型的命名风格

案例 2:实现业务逻辑

❌ 低质量:

复制代码
写个购物车功能

✅ 高质量:

复制代码
实现购物车核心逻辑(TypeScript + 纯函数):

功能:
1. addCartItem(cart, product, quantity) - 添加商品,已存在则累加数量
2. removeCartItem(cart, productId) - 移除商品
3. updateQuantity(cart, productId, quantity) - 更新数量,0 则移除
4. calculateTotal(cart) - 计算总价,考虑商品折扣
5. validateCart(cart, inventory) - 验证库存,返回不可购买商品

约束:
- 不可变数据,返回新对象
- 数量上限 99
- 价格精度用 decimal.js 处理
- 完整类型定义,导出所有类型

案例 3:重构代码

❌ 低质量:

复制代码
优化这个函数

✅ 高质量:

复制代码
重构 src/utils/dataParser.ts 的 parseUserData 函数:

当前问题:
- 200 行单函数,难以测试
- 多个 try-catch 嵌套
- 硬编码的魔法数字

重构目标:
1. 拆分为 5-7 个单一职责的小函数
2. 用 Result<T, E> 模式处理错误
3. 提取常量到顶部
4. 添加单元测试用例(在 __tests__/dataParser.test.ts)

保持:
- 公开 API 不变
- 处理逻辑不变
- 性能不下降

四、Cursor 专属技巧

1. @符号精准定位

复制代码
@src/services/auth.ts 帮我添加 OAuth 登录支持
@docs/api.md 参考 API 文档实现这个接口
@src/types/index.ts 补充缺失的类型定义

2. Chat 模式深度讨论

复制代码
/chat
我在设计一个权限系统,需要支持:
- 角色继承(admin > moderator > user)
- 资源级别权限
- 动态权限分配

帮我分析设计方案,给出数据模型和核心接口

3. Composer 多文件协作

复制代码
@src/services/*.ts @src/models/*.ts
帮我实现用户关注功能:
- 关注/取消关注
- 获取关注列表
- 获取粉丝列表
- 互关检测

需要修改所有相关文件,保持类型一致

五、Claude Code 专属技巧

1. 项目级理解

bash 复制代码
# 让 Claude 理解整个项目结构
claude "分析这个项目的架构,列出核心模块和依赖关系"

# 针对性提问
claude "src/services/payment.ts 使用了哪些外部依赖?有什么潜在风险?"

2. 渐进式开发

bash 复制代码
# 第一步:设计
claude "设计一个缓存装饰器,支持 TTL、LRU、分布式锁"

# 第二步:实现
claude "根据刚才的设计,实现 src/decorators/cache.ts"

# 第三步:测试
claude "为 cache.ts 编写完整的单元测试"

3. 调试助手

bash 复制代码
claude "这个错误怎么解决?[粘贴完整错误信息]

相关代码:
[粘贴相关代码片段]

运行环境:Node.js 20, macOS 14"

六、Prompt 模板库

模板 1:新功能开发

markdown 复制代码
实现 [功能名称]:

技术栈:[框架/库]
入口文件:[文件路径]

需求:
1. [具体需求1]
2. [具体需求2]
3. [具体需求3]

约束:
- [性能要求]
- [安全要求]
- [兼容性要求]

参考:
- [现有代码路径] 的风格
- [文档链接] 的规范

输出:
- [期望的文件结构]
- [需要更新的文件]

模板 2:Bug 修复

markdown 复制代码
修复 Bug:[Bug 描述]

复现步骤:
1. [步骤1]
2. [步骤2]

期望行为:[正确行为]
实际行为:[错误行为]

相关代码:@src/path/to/file.ts

分析可能原因,给出修复方案,并添加回归测试

模板 3:代码审查

markdown 复制代码
审查 @src/path/to/file.ts:

检查项:
- 安全漏洞(XSS、注入、敏感信息泄露)
- 性能问题(N+1 查询、内存泄漏)
- 代码质量(命名、注释、重复代码)
- 错误处理(边界情况、异常捕获)
- 类型安全(TypeScript)

输出格式:
- 问题列表(严重程度:高/中/低)
- 修复建议
- 重构建议

七、常见错误与纠正

错误 问题 纠正
"写个功能" 太模糊 明确技术栈、需求、约束
"像 XXX 一样" AI 不知道 XXX 粘贴代码或描述具体特征
"优化一下" 没说优化什么 明确性能指标或代码质量目标
"帮我看看" 没说看什么 明确检查项和期望输出
"简单写个" AI 会真的简单写 即使简单也要说完整需求

八、进阶技巧

1. 思维链引导

复制代码
实现用户注册功能,请按以下步骤思考:

1. 分析需求:需要哪些字段、哪些验证
2. 设计数据模型:字段类型、约束、索引
3. 设计 API 接口:请求/响应格式、错误码
4. 实现核心逻辑:验证、加密、存储
5. 添加测试用例:正常流程、边界情况、错误处理

每步完成后请说明,再继续下一步

2. 示例驱动

复制代码
参考以下代码风格,实现订单取消功能:

示例代码:
```typescript
// src/services/refundService.ts
export async function processRefund(
  orderId: string,
  reason: RefundReason
): Promise<Result<Refund, RefundError>> {
  // ...
}

要求:

  • 同样的错误处理模式

  • 同样的返回类型风格

  • 同样的日志记录方式

    3. 约束驱动

实现文件上传功能,必须满足:

性能约束:

  • 单文件最大 10MB
  • 支持断点续传
  • 上传进度实时反馈

安全约束:

  • 文件类型白名单
  • 文件名 XSS 过滤
  • 路径穿越防护

兼容约束:

  • 支持 Chrome、Firefox、Safari

  • 移动端适配


    九、总结

    Prompt 工程不是玄学,是一套可学习、可复用的方法论。

    核心原则:

    1. 具体 > 模糊:告诉 AI 你想要什么,而不是让 AI 猜
    2. 上下文 > 隔离:给 AI 足够的背景信息
    3. 约束 > 自由:限制 AI 的发挥空间,避免"创意过度"
    4. 迭代 > 一次:不满意就继续对话,逐步逼近目标

    记住: AI 编程工具是你的副驾驶,你才是机长。Prompt 就是指令,指令越清晰,执行越精准。

相关推荐
盘古开天16662 小时前
Gemma 4开源革命:看图听音频+强推理,31B小参数模型比肩GPT-5-high,完全免费可商用(手机可部署)
人工智能·开源·gemma4·开源本地部署
Learn Beyond Limits2 小时前
神经机器翻译|Neural Machine Translation(NMT)
人工智能·神经网络·机器学习·ai·自然语言处理·nlp·机器翻译
泰迪智能科技012 小时前
分享|大数据挖掘建模平台赋能企业智能决策与数字化转型
人工智能·数据挖掘
Fleshy数模2 小时前
基于 Dlib+OpenCV 实现人脸关键点检测与表情识别
人工智能·opencv·计算机视觉
永霖光电_UVLED2 小时前
康奈尔大学 AlScN/GaN 异质结构研究“单通道和多通道 AlScN 势垒”
人工智能·神经网络·生成对抗网络
花千树-0102 小时前
IndexTTS2 在 macOS 性能最佳设置(M1/M2/M3/M4 全适用)
人工智能·深度学习·macos·ai·语音识别·ai编程
DS随心转插件2 小时前
手机怎么把豆包全部对话导出
人工智能·ai·智能手机·deepseek·ai导出鸭
电磁脑机2 小时前
论AI幻觉的本质:人类符号幻觉的镜像映射与认知破局 ——基于三场正交统一场论的底层阐释
人工智能·神经网络·机器学习·重构·架构
AI袋鼠帝2 小时前
Solo独立端来了!Trae想让普通人也能拥有顶级Agent(附免费邀请码)
人工智能