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. 用 ResultT, 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. 项目级理解# 让 Claude 理解整个项目结构claude分析这个项目的架构列出核心模块和依赖关系# 针对性提问claudesrc/services/payment.ts 使用了哪些外部依赖有什么潜在风险2. 渐进式开发# 第一步设计claude设计一个缓存装饰器支持 TTL、LRU、分布式锁# 第二步实现claude根据刚才的设计实现 src/decorators/cache.ts# 第三步测试claude为 cache.ts 编写完整的单元测试3. 调试助手claude这个错误怎么解决[粘贴完整错误信息] 相关代码 [粘贴相关代码片段] 运行环境Node.js 20, macOS 14六、Prompt 模板库模板 1新功能开发实现 [功能名称] 技术栈[框架/库] 入口文件[文件路径] 需求 1. [具体需求1] 2. [具体需求2] 3. [具体需求3] 约束 - [性能要求] - [安全要求] - [兼容性要求] 参考 - [现有代码路径] 的风格 - [文档链接] 的规范 输出 - [期望的文件结构] - [需要更新的文件]模板 2Bug 修复修复 Bug[Bug 描述] 复现步骤 1. [步骤1] 2. [步骤2] 期望行为[正确行为] 实际行为[错误行为] 相关代码src/path/to/file.ts 分析可能原因给出修复方案并添加回归测试模板 3代码审查审查 src/path/to/file.ts 检查项 - 安全漏洞XSS、注入、敏感信息泄露 - 性能问题N1 查询、内存泄漏 - 代码质量命名、注释、重复代码 - 错误处理边界情况、异常捕获 - 类型安全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 ): PromiseResultRefund, RefundError { // ... }要求同样的错误处理模式同样的返回类型风格同样的日志记录方式### 3. 约束驱动实现文件上传功能必须满足性能约束单文件最大 10MB支持断点续传上传进度实时反馈安全约束文件类型白名单文件名 XSS 过滤路径穿越防护兼容约束支持 Chrome、Firefox、Safari移动端适配--- ## 九、总结 Prompt 工程不是玄学是一套可学习、可复用的方法论。 **核心原则** 1. **具体 模糊**告诉 AI 你想要什么而不是让 AI 猜 2. **上下文 隔离**给 AI 足够的背景信息 3. **约束 自由**限制 AI 的发挥空间避免创意过度 4. **迭代 一次**不满意就继续对话逐步逼近目标 **记住** AI 编程工具是你的副驾驶你才是机长。Prompt 就是指令指令越清晰执行越精准。