Prompt 提示词
Prompt(提示词)是与 AI 沟通的关键,好的 Prompt 可以让 AI 产出更好的结果。本文将详细介绍 Prompt 的概念、设计原则、编写技巧、优化方法、常见误区以及高级技巧。
通过掌握 Prompt 设计技巧,您可以大幅提升与 OpenCode 等 AI 工具的交互效果,获得更满意的结果。
什么是 Prompt
Prompt 是提供给 LLM 的输入文本,用于引导模型生成特定的输出。
Prompt 的作用
- 明确意图:告诉模型你想要什么
- 提供上下文:给模型相关的背景信息
- 引导输出:影响模型输出的风格和内容
- 控制行为:约束模型的行为和输出格式
Prompt 的组成
角色设定(可选)
+ 上下文信息
+ 任务描述
+ 输出格式要求
+ 约束条件
示例:
你是一个资深的前端工程师,精通 React 和 TypeScript。
我现在正在开发一个用户管理模块,使用 React + TypeScript。
请帮我创建一个用户列表组件,要求支持分页和搜索功能。
代码需要包含完整的 TypeScript 类型定义,并使用 Tailwind CSS 样式。
Prompt 设计原则
1. 清晰明确
原则:避免模糊的描述
❌ 不清晰:
帮我优化一下代码
✅ 清晰:
请帮我优化这个 React 组件的性能,目标是减少不必要的重新渲染,提升列表渲染速度。这是当前的组件代码:
2. 提供上下文
原则:提供相关的背景信息
❌ 缺少上下文:
如何实现登录功能?
✅ 有上下文:
我正在开发一个电商网站,技术栈是 Next.js + Prisma + PostgreSQL。数据库中已有 User 表,包含 id、email、passwordHash、createdAt 字段。请问如何实现安全的用户登录功能?需要包括密码验证和 JWT 生成。
3. 明确输出格式
原则:说明期望的输出格式
❌ 不明确:
解释一下 TypeScript 的泛型
✅ 明确:
请解释 TypeScript 的泛型,按照以下格式输出:
1. 定义
2. 语法说明
3. 代码示例(至少3个)
4. 使用场景
5. 注意事项
6. 与其他特性的对比
4. 提供示例
原则:通过示例说明需求
❌ 无示例:
帮我写一个验证邮箱格式的函数
✅ 有示例:
帮我写一个验证邮箱格式的 JavaScript 函数。
期望的行为:
- 输入 "user@example.com" → 返回 true
- 输入 "user" → 返回 false
- 输入 "user@" → 返回 false
- 输入 "user@example" → 返回 false
要求使用正则表达式实现。
5. 逐步引导
原则:对于复杂任务,分步骤
❌ 一次性要求太多:
帮我创建一个完整的博客系统,包括用户认证、文章管理、评论功能、标签系统、搜索功能...
✅ 分步骤:
第 1 步:请帮我设计博客系统的数据库模型,包括用户、文章、评论、标签表。
第 2 步:基于这个模型,创建用户认证相关的 API。
第 3 步:然后创建文章管理的 CRUD API。
常见 Prompt 模式
模式 1:角色扮演
你是一个[角色],具有[能力/特点]。
请帮我[任务]。
示例:
你是一个有 10 年经验的 React 架构师,精通性能优化和最佳实践。
请帮我审查这个组件的代码,指出潜在的性能问题并提供优化建议。
模式 2:少样本学习(Few-Shot)
[示例 1]
输入:[输入]
输出:[期望输出]
[示例 2]
输入:[输入]
输出:[期望输出]
现在请处理:
输入:[新输入]
输出:
示例:
示例 1:
输入:convert temperature from Celsius to Fahrenheit: 0
输出:32
示例 2:
输入:convert temperature from Celsius to Fahrenheit: 100
输出:212
现在请处理:
输入:convert temperature from Celsius to Fahrenheit: 25
输出:
模式 3:思维链(Chain-of-Thought)
请按照以下步骤思考和回答:
1. 理解问题
2. 分析关键信息
3. 逐步推理
4. 得出结论
5. 验证结果
问题:[你的问题]
示例:
请按照以下步骤思考和回答:
1. 理解问题
2. 分析关键信息
3. 逐步推理
4. 得出结论
5. 验证结果
问题:一个班有 30 个学生,其中 20 个男生,10 个女生。如果随机选择 3 个学生,至少有一个女生的概率是多少?
模式 4:约束条件
请[任务],要求:
1. [约束 1]
2. [约束 2]
3. [约束 3]
不要:
- [禁止 1]
- [禁止 2]
示例:
请帮我写一个 Python 脚本处理 CSV 文件,要求:
1. 使用 csv 模块
2. 处理大文件时使用生成器
3. 添加异常处理
4. 添加进度显示
不要:
- 使用 pandas
- 一次性读取整个文件到内存
模式 5:迭代优化
请帮我[任务]。
如果你有任何不清楚的地方,或者需要更多信息,请直接问我。
后续迭代:
这是第 2 版代码,基于你之前的反馈进行了优化。请继续[任务]。
高级技巧
1. 使用分隔符
用特殊符号分隔不同部分:
=== 任务描述 ===
帮我创建...
=== 上下文 ===
项目使用...
=== 约束条件 ===
必须满足...
=== 期望输出 ===
先说明思路,然后提供代码
2. 结构化指令
使用结构化语言:
请按照以下 JSON 格式返回结果:
{
"summary": "简短总结",
"steps": [
"步骤 1",
"步骤 2"
],
"code": "完整代码",
"notes": ["注意 1", "注意 2"]
}
3. 引导性提问
对于不确定的部分,让模型提问:
在开始之前,如果你对需求有任何疑问,请先提出来,我会补充说明。
4. 反向约束
明确说明不要做什么:
请生成这段代码的单元测试,但不要使用 pytest,使用 unittest。
针对 OpenCode 的 Prompt 技巧
1. 代码生成
你是一个资深的前端工程师。
技术栈:React 18 + TypeScript + Tailwind CSS
需求:创建一个用户资料卡片组件
具体要求:
1. 包含头像(圆形)、用户名、简介
2. 点击头像查看大图
3. 点击用户名跳转到用户详情页
4. 使用 TypeScript 定义 Props 类型
5. 响应式设计(移动端友好)
请按照以下格式输出:
1. 组件设计思路
2. 完整的 TypeScript 代码
3. 样式说明
4. 使用示例
2. 代码审查
你是一个资深代码审查专家。
请审查以下代码,重点关注:
1. 代码规范和风格
2. 潜在的性能问题
3. 安全性问题
4. 可维护性
5. 最佳实践
代码:
```typescript
// 你的代码
请以以下格式输出审查结果:
{
"overall_score": "分数",
"issues": [
{
"type": "问题类型",
"severity": "严重程度",
"description": "问题描述",
"line": "行号",
"suggestion": "改进建议"
}
],
"summary": "总结"
}
### 3. 调试
我遇到了一个错误,请帮我诊断和解决。
错误信息:
完整的错误堆栈
相关代码:
相关的代码片段
环境信息:
- Node.js 版本:v18.16.0
- 操作系统:macOS 14.0
- 包管理器:npm
请按照以下步骤分析:
- 分析错误原因
- 提供可能的解决方案(至少 2 种)
- 说明如何预防类似错误
### 4. 学习解释
请用通俗易懂的语言解释 [复杂概念]。
要求:
- 使用生活化的比喻
- 分步骤说明原理
- 提供实际应用场景
- 与其他相关概念对比
目标读者:刚入门 [相关技术] 的开发者
## Prompt 优化
### 1. 迭代优化
如果第一次效果不理想,继续优化:
第 1 版:你的 Prompt 观察效果,发现问题 第 2 版:根据反馈优化 ... 第 N 版:达到满意效果
### 2. A/B 测试
对比不同的 Prompt 效果:
版本 A:... 版本 B:...
对比标准:
- 输出质量
- 准确性
- 完整性
- 符合预期程度
### 3. 收集模板
建立自己的 Prompt 模板库:
代码生成模板
你是一个[角色],精通[技术]。 技术栈:[技术列表] 需求:[具体需求] 输出格式:[格式]
代码审查模板
请审查以下代码,关注[审查重点]...
### 4. 参考最佳实践
学习优秀的 Prompt:
- 查看 OpenCode 官方文档中的示例
- 学习其他人的 Prompt
- 参考社区讨论
## 常见问题
### Q1: 为什么我的 Prompt 效果不好?
**A:** 常见原因和解决方法:
- **不清晰**:明确需求和约束
- **缺少上下文**:提供相关信息
- **太复杂**:分步骤或使用示例
- **缺少示例**:通过示例说明
### Q2: 如何控制输出长度?
**A:** 控制长度的方法:
- **明确要求**:"简要回答,不超过 100 字"
- **分段输出**:"分 3 部分输出"
- **使用结构化格式**:JSON 格式更容易控制
- **设置 max_tokens**:在 API 调用时限制
### Q3: 如何减少模型的幻觉?
**A:** 减少幻觉的方法:
- **提供准确上下文**:给模型正确的参考信息
- **要求验证**:"不确定时请说明"
- **使用 RAG**:从可靠来源检索信息
- **明确约束**:"不要编造信息"
### Q4: Prompt 应该多长?
**A:** 长度建议:
- **简单任务**:50-100 词
- **中等任务**:200-500 词
- **复杂任务**:500-1000 词
关键是包含必要的信息,避免冗余。
## 最佳实践
### 1. 模块化设计
将复杂 Prompt 分解为模块:
模块 1:角色设定
你是一个...
模块 2:上下文
项目背景...
模块 3:任务
具体需求...
模块 4:输出要求
按照格式...
### 2. 持续优化
将 Prompt 作为可优化的资源:
- 记录有效的 Prompt
- 分析失败的原因
- 持续改进模板
### 3. 测试验证
验证 Prompt 效果:
- 在不同场景测试
- 与其他 Prompt 对比
- 收集反馈意见
### 4. 文档化
文档化 Prompt:
- 说明设计意图
- 记录适用场景
- 标注使用限制
## 下一步
掌握 Prompt 后,您可以:
1. **学习 RAG**:查看 [RAG](./rag)
2. **学习函数调用**:查看 [Function Calling](./function-calling)
3. **学习 Agent**:查看 [Agent](./agent)
4. **学习最佳实践**:查看 [最佳实践](../04-best-practices/prompt-tips)
---
**🎉 现在你已经掌握了 Prompt 设计技巧!**
开始优化你的 Prompt 吧!🚀