2.5 Prompt 工程技巧
掌握高级 Prompt 技巧,让你和 AI 的协作更加高效。就像学习一门新的编程语言,需要理解语法、掌握模式、大量练习。
核心理念:Prompt 工程是「与 AI 沟通的艺术」,目标是让 AI 准确理解你的意图,生成高质量的代码。
Prompt 设计的核心原则
原则 1:明确性(Clarity)
模糊的 Prompt:
帮我做个网站明确的 Prompt:
帮我创建一个在线教育平台的首页,包含:
- 顶部导航栏(logo、课程分类、登录按钮)
- Hero 区域(主标题、副标题、CTA按钮)
- 热门课程展示(4个课程卡片)
- 讲师介绍区域
- 页脚(链接、社交媒体、版权信息)
技术栈:Next.js + TypeScript + Tailwind CSS原则 2:具体性(Specificity)
笼统的要求:
优化性能具体的要求:
优化这个 React 组件的性能:
1. 使用 React.memo 包装组件
2. 将大型函数提取到组件外部
3. 实现虚拟滚动减少 DOM 节点
4. 使用 useMemo 缓存计算结果
5. 添加加载状态和错误边界原则 3:上下文完整性(Context)
缺少上下文:
修复这个 bug提供完整上下文:
我正在开发一个电商平台的购物车功能,使用 React + Redux。
当前的问题是:当用户快速点击"添加到购物车"按钮时,商品数量会被重复计算。
相关代码:
[粘贴组件代码]
错误表现:
- 点击一次按钮,数量增加 2-3
- 控制台没有报错信息
- Redux 状态更新延迟
请帮我分析问题原因并提供解决方案。原则 4:约束条件(Constraints)
无约束的请求:
生成一些 API 接口带约束的请求:
为我生成用户管理相关的 RESTful API 接口:
功能要求:
- 用户注册(邮箱验证)
- 用户登录(JWT 认证)
- 获取用户信息
- 更新用户资料
- 删除用户账户
技术约束:
- 使用 Express.js + TypeScript
- 数据库:MongoDB + Mongoose
- 认证:JWT Token
- 输入验证:Joi
- 错误处理:统一的错误响应格式
性能约束:
- 响应时间 < 200ms
- 支持 1000 QPS
- 数据库查询不超过 2 次
- 必须有适当的缓存策略高级 Prompt 模式
模式 1:Few-Shot Learning(少样本学习)
提供几个示例,让 AI 学习模式并生成类似的内容。
请帮我生成几个 React 组件,参考以下示例:
示例 1 - 按钮组件:
```tsx
interface ButtonProps {
variant: 'primary' | 'secondary';
size: 'sm' | 'md' | 'lg';
children: React.ReactNode;
onClick?: () => void;
}
export const Button: React.FC<ButtonProps> = ({
variant, size, children, onClick
}) => {
const baseClasses = 'font-semibold rounded-lg transition-colors';
const variantClasses = variant === 'primary'
? 'bg-blue-500 text-white hover:bg-blue-600'
: 'bg-gray-200 text-gray-800 hover:bg-gray-300';
const sizeClasses = size === 'sm' ? 'px-3 py-1 text-sm'
: size === 'lg' ? 'px-6 py-3 text-lg'
: 'px-4 py-2';
return (
<button
className={`${baseClasses} ${variantClasses} ${sizeClasses}`}
onClick={onClick}
>
{children}
</button>
);
};现在请按照相同的模式生成:
- 输入框组件(Input)
- 卡片组件(Card)
- 模态框组件(Modal)
要求:
- 使用 TypeScript
- 支持多种变体和尺寸
- 包含完整的 props 类型定义
- 添加适当的样式类
### 模式 2:Chain of Thought(思维链)
引导 AI 逐步思考,展示推理过程。
我需要设计一个用户权限系统,请帮我按以下步骤思考:
步骤 1:分析业务需求
- 系统有哪些用户角色?
- 每个角色需要什么权限?
- 权限之间有什么关系?
步骤 2:设计数据模型
- 如何存储用户、角色、权限的关系?
- 数据库表结构如何设计?
步骤 3:实现权限检查逻辑
- 如何在 API 层检查权限?
- 如何在前端控制组件显示?
步骤 4:提供具体代码实现
请详细说明每一步的思考过程,最终给出完整的代码实现。
### 模式 3:Role-Based Prompting(角色扮演)
为 AI 分配特定角色,获得更专业的回答。
你是一位有 15 年经验的前端性能优化专家,专门处理大型电商网站的性能问题。
现在需要你优化一个产品详情页的性能,该页面有以下问题:
- 首屏加载时间 8 秒
- 图片加载缓慢
- 用户滚动时页面卡顿
- 内存占用持续增长
请从以下几个角度分析和提供解决方案:
- 代码层面优化
- 资源加载优化
- 渲染性能优化
- 内存管理优化
- 监控和测量方案
请给出具体的优化策略和代码实现。
### 模式 4:Template-Based Prompting(模板化)
使用结构化的模板,确保不遗漏重要信息。
代码重构请求
当前代码
[粘贴需要重构的代码]问题描述
- [问题 1]
- [问题 2]
- [问题 3]
重构目标
- [目标 1]
- [目标 2]
- [目标 3]
技术约束
- 框架:React 18 + TypeScript
- 样式:Tailwind CSS
- 状态管理:Zustand
- 不允许使用外部库
输出要求
- 重构后的代码
- 重构说明(为什么这样改)
- 性能改进点
- 向后兼容性分析
请按照以上要求进行代码重构。
## 特定场景的 Prompt 技巧
### 场景 1:复杂算法实现
请帮我实现一个高性能的搜索算法:
需求背景:
- 用户输入:搜索关键词
- 数据源:10万条商品记录
- 搜索要求:支持模糊匹配、拼音搜索、同义词替换
- 性能要求:搜索响应时间 < 100ms
算法要求:
- 构建倒排索引
- 支持多关键词组合搜索
- 结果按相关性排序
- 支持搜索建议和自动完成
请提供:
- 完整的算法实现代码
- 时间复杂度和空间复杂度分析
- 性能优化建议
- 单元测试用例
技术栈:JavaScript/TypeScript
### 场景 2:API 设计和实现
请帮我设计一个完整的微服务 API:
业务场景:在线文档协作平台 服务职责:文档版本管理
功能需求:
- 创建文档版本
- 获取版本历史
- 版本对比
- 版本回滚
- 协作冲突解决
技术要求:
- 语言:Node.js + TypeScript
- 框架:Express.js
- 数据库:PostgreSQL
- 缓存:Redis
- 消息队列:RabbitMQ
非功能性需求:
- 高可用性(99.9%)
- 最终一致性
- 事件溯源架构
- 幂等性保证
请提供:
- API 设计文档
- 数据库设计
- 核心代码实现
- 错误处理和重试机制
- 监控和日志方案
### 场景 3:前端组件库开发
请帮我设计一个企业级 React 组件库:
设计目标:
- 提供统一的 UI 规范
- 支持主题定制
- 良好的 TypeScript 支持
- 详细的文档和示例
核心组件列表:
- Button(按钮)
- Input(输入框)
- Select(选择器)
- Table(表格)
- Modal(模态框)
- Form(表单)
- DatePicker(日期选择器)
- Upload(上传组件)
技术要求:
- React 18 + TypeScript
- 样式方案:CSS-in-JS (Emotion)
- 构建工具:Vite + Rollup
- 测试框架:Jest + Testing Library
- 文档工具:Storybook
设计规范:
- 遵循 WAI-ARIA 无障碍标准
- 支持键盘导航
- 响应式设计
- 暗色主题支持
请提供:
- 组件库架构设计
- 核心组件实现示例
- 主题系统设计
- 构建和发布流程
- 使用文档模板
## Prompt 优化技巧
### 技巧 1:渐进式细化
从一个简单的需求开始,逐步添加细节和约束。
第一轮(基础需求): 帮我创建一个待办事项应用
第二轮(添加技术栈): 使用 React + TypeScript + Tailwind CSS 创建待办事项应用
第三轮(详细功能): 创建待办事项应用,包含增删改查、优先级设置、分类管理
第四轮(高级功能): 添加拖拽排序、搜索过滤、数据持久化、多用户支持
### 技巧 2:负面约束
明确告诉 AI 不要做什么。
请帮我优化这个 React 组件,但是:
- 不要使用 useRef,改用 forwardRef
- 不要使用 useEffect 的依赖数组为空的情况
- 不要忽略 TypeScript 的严格模式警告
- 不要使用内联样式
- 不要忽略可访问性(a11y)要求
### 技巧 3:输出格式控制
明确指定 AI 的输出格式。
请帮我分析这段代码的性能问题,并按以下格式回答:
问题分析
[列出发现的问题]
解决方案
方案1:[方案名称]
- 优点:[优点描述]
- 缺点:[缺点描述]
- 实现难度:[简单/中等/困难]
方案2:[方案名称]
- 优点:[优点描述]
- 缺点:[缺点描述]
- 实现难度:[简单/中等/困难]
推荐方案
我推荐使用方案[X],因为[推荐理由]
代码实现
[提供具体的代码实现]
### 技巧 4:多轮对话优化
在连续对话中保持上下文,逐步完善需求。
用户:帮我创建一个登录页面 AI:[生成基础登录页面]
用户:很好,现在添加记住密码功能 AI:[在现有代码基础上添加记住密码功能]
用户:还需要添加第三方登录(Google、GitHub) AI:[继续扩展现有功能]
用户:最后添加表单验证和错误提示 AI:[完成最终版本]
## 常见 Prompt 错误和修正
### 错误 1:需求过于宽泛
**错误示例**:做一个现代化的网站
**修正方法**:创建一个 SaaS 产品的官网,包含产品介绍、价格方案、客户案例、博客等模块
### 错误 2:缺少技术约束
**错误示例**:实现用户认证
**修正方法**:使用 Next.js + Prisma + PostgreSQL 实现 JWT 认证系统
### 错误 3:期望不明确
**错误示例**:优化这段代码
**修正方法**:优化这段 React 组件,目标是减少渲染次数和提高性能
## Prompt 效果评估
### 评估标准
1. **准确性**:AI 理解需求的准确程度
2. **完整性**:生成代码是否覆盖所有需求点
3. **质量**:代码的可读性、可维护性
4. **效率**:解决问题的方法是否高效
5. **创新性**:是否提供了有价值的建议
### 持续改进
<Callout type="info">
**改进循环**:
1. 分析 Prompt 效果
2. 识别问题所在
3. 调整 Prompt 策略
4. 验证改进效果
</Callout>
**改进清单**:
- [ ] 需求描述是否足够清晰?
- [ ] 上下文信息是否充分?
- [ ] 技术约束是否明确?
- [ ] 输出格式是否指定?
- [ ] 是否考虑了边缘情况?
---
**下一步**:掌握 Prompt 工程技巧后,开始 [实战小项目](/handbook/2-ai-tools/2.6-practice-project),在实践中应用和提升这些技能。