提示词工程最佳实践
提示词工程是什么?
提示词工程(Prompt Engineering)是设计和优化输入指令(提示词)以引导 AI 模型生成高质量输出的技术。好的提示词能显著提升 AI 的响应质量、准确性和可控性。
核心价值:
- 提高 AI 响应的准确性和相关性。
- 减少迭代次数,提升工作效率。
- 实现复杂任务的自动化。
- 降低成本(减少 Token 消耗)。
🎯 提示词设计原则
1. 明确性(Clarity)
原则:提示词应清晰明确,避免歧义。
| 反例 | 正例 | 改进点 |
|---|---|---|
| "写一个函数" | "用 Python 写一个函数,计算斐波那契数列的第 n 项,使用递归实现。" | 明确语言、功能、实现方式 |
| "优化这段代码" | "优化这段 Python 代码的性能,减少时间复杂度,并解释优化原因。" | 明确优化目标和输出要求 |
2. 具体性(Specificity)
原则:提供具体的上下文和限制条件。
| 反例 | 正例 | 改进点 |
|---|---|---|
| "生成一个 API" | "生成一个 RESTful API,使用 FastAPI 框架,包含用户认证(JWT)、数据库集成(SQLAlchemy)、和 OpenAPI 文档。" | 明确框架、功能模块、技术栈 |
| "写测试用例" | "为以下 Python 函数生成单元测试用例,使用 pytest 框架,覆盖边界条件和异常情况: |
python
def divide(a, b):
return a / b
```" | 提供代码片段、测试框架、覆盖要求 |
### 3. 上下文提供(Context)
**原则**:提供足够的上下文信息,帮助 AI 理解任务背景。
```markdown
# 好的上下文示例
**任务**:重构以下 Vue.js 组件,提高可读性和性能。
**要求**:
1. 使用 Composition API 重写。
2. 提取重复逻辑为可复用函数。
3. 优化响应式依赖。
4. 添加 TypeScript 支持。
**代码**:
```vue
<template>
<div>
<button @click="increment">Count: {{ count }}</button>
<button @click="decrement">Decrement</button>
</div>
</template>
<script>
export default {
data() {
return { count: 0 }
},
methods: {
increment() {
this.count++
},
decrement() {
this.count--
}
}
}
</script>
### 4. 结构化(Structure)
**原则**:使用结构化格式组织提示词,提高可读性。
**推荐结构**:
```markdown
### 任务
[简洁描述任务目标]
### 要求
1. [具体要求 1]
2. [具体要求 2]
3. [限制条件]
### 上下文
[相关代码/文档/背景信息]
### 输出格式
[期望的输出格式,如代码、Markdown、JSON]
### 示例
[可选:提供输入输出示例]🛠️ 提示词技巧
1. 少样本学习(Few-Shot Learning)
技巧:提供少量输入-输出示例,引导 AI 理解任务模式。
示例:代码注释生成
markdown
**任务**:为以下 Python 函数生成 JSDoc 风格的注释。
**示例**:
```python
# 输入
def add(a, b):
return a + b
# 输出
def add(a, b):
"""
计算两个数的和。
Args:
a (int/float): 第一个加数
b (int/float): 第二个加数
Returns:
int/float: 两数之和
"""
return a + b
```
**待注释函数**:
```python
def multiply(a, b):
return a * b
```2. 思维链(Chain-of-Thought)
技巧:引导 AI 分步思考,提高复杂任务的准确性。
示例:代码优化
markdown
**任务**:优化以下算法的时间复杂度。
**步骤**:
1. 分析当前算法的时间复杂度。
2. 找出性能瓶颈。
3. 提出优化方案。
4. 实现优化后的代码。
5. 验证优化效果。
**代码**:
```python
def find_duplicates(nums):
duplicates = []
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] == nums[j] and nums[i] not in duplicates:
duplicates.append(nums[i])
return duplicates
### 3. 角色扮演(Role Prompting)
**技巧**:为 AI 分配特定角色,提高响应的专业性和针对性。
#### 示例:代码审查
```markdown
**角色**:你是一位资深的软件工程师,擅长代码审查和安全分析。
**任务**:审查以下代码,找出潜在的安全漏洞和性能问题。
**要求**:
1. 检查 SQL 注入风险。
2. 分析内存泄漏可能性。
3. 评估并发安全性。
4. 提出改进建议。
**代码**:
```python
import sqlite3
def get_user(username):
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
user = cursor.fetchone()
conn.close()
return user
### 4. 任务分解(Task Decomposition)
**技巧**:将复杂任务分解为多个子任务,逐步完成。
#### 示例:全栈应用开发
```markdown
**任务**:开发一个任务管理应用。
**步骤 1**:设计数据库模型
- 设计 User 和 Task 表结构。
- 定义表关系(一对多)。
- 生成 SQL 创建脚本。
**步骤 2**:实现后端 API
- 使用 FastAPI 实现 RESTful API。
- 包含用户认证(JWT)。
- 实现 CRUD 操作。
**步骤 3**:实现前端界面
- 使用 Vue 3 + TypeScript。
- 实现任务列表、创建、编辑功能。
- 集成 API 调用。
**步骤 4**:编写测试
- 后端:单元测试和集成测试。
- 前端:组件测试和 E2E 测试。
**步骤 5**:部署配置
- 使用 Docker 容器化。
- 配置 CI/CD 流程。5. 约束条件(Constraints)
技巧:明确限制条件,避免 AI 生成不符合要求的内容。
示例:代码生成
markdown
**任务**:用 Python 实现一个 HTTP 服务器。
**要求**:
1. 使用内置 `http.server` 模块。
2. 不使用第三方库(如 Flask/Django)。
3. 支持 GET 和 POST 请求。
4. 实现路由功能(至少 2 个路由)。
5. 添加请求日志记录。
**限制**:
- 代码行数不超过 50 行。
- 不使用全局变量。
- 使用面向对象设计。🔧 提示词优化工具
1. OpenCode 提示词助手
bash
# 启动提示词助手
opencode prompt assistant
# 优化提示词
opencode prompt optimize --file prompt.txt --output optimized-prompt.txt
# 生成提示词模板
opencode prompt template --type "code-review" --output template.md2. 提示词库
| 工具 | 描述 | 链接 |
|---|---|---|
| PromptHub | 开源提示词库,涵盖多种场景。 | GitHub |
| Awesome Prompts | 提示词集合,包含代码、写作、分析等。 | GitHub |
| PromptBase | 提示词市场,可购买/出售提示词。 | Website |
3. 提示词分析
bash
# 分析提示词质量
opencode prompt analyze --file prompt.txt
# 比较多个提示词
opencode prompt compare --files prompt1.txt prompt2.txt
# 生成提示词报告
opencode prompt report --file prompt.txt --format html --output report.html4. 自动优化
bash
# 自动优化提示词
opencode prompt auto-optimize --file prompt.txt --iterations 3
# 基于反馈优化
opencode prompt feedback-optimize --file prompt.txt --feedback "响应不够具体"🎯 提示词示例库
1. 代码生成
函数实现
markdown
**任务**:用 TypeScript 实现一个函数,将字符串转换为驼峰命名。
**要求**:
1. 处理多种分隔符(空格、下划线、连字符)。
2. 支持首字母大写选项。
3. 添加输入验证。
4. 包含单元测试。
**示例**:
```typescript
// 输入
stringToCamelCase("hello_world", false) // 输出: "helloWorld"
stringToCamelCase("Hello World", true) // 输出: "HelloWorld"
```项目模板
markdown
**任务**:生成一个 Vue 3 + TypeScript + Vite 的项目模板。
**要求**:
1. 包含路由(Vue Router)。
2. 状态管理(Pinia)。
3. 代码格式化(ESLint + Prettier)。
4. 测试配置(Vitest)。
5. Dockerfile 和 docker-compose.yml。
**输出格式**:
- 项目结构树。
- 关键文件内容(package.json、vite.config.ts、main.ts)。
- 构建和运行命令。2. 代码审查
安全审查
markdown
**角色**:你是一位专注于安全的高级开发者。
**任务**:审查以下代码,找出安全漏洞。
**要求**:
1. 检查常见 Web 安全问题(OWASP Top 10)。
2. 分析潜在的注入攻击。
3. 评估身份验证和授权机制。
4. 提出修复建议。
**代码**:
```javascript
const express = require('express');
const app = express();
app.get('/user', (req, res) => {
const userId = req.query.id;
const query = `SELECT * FROM users WHERE id = ${userId}`;
// ... 执行查询
});
### 3. 代码重构
#### 重构建议
```markdown
**任务**:重构以下 React 组件,提高可维护性和性能。
**要求**:
1. 使用 TypeScript 重写。
2. 拆分为更小的组件。
3. 优化状态管理。
4. 添加 PropTypes 或类型定义。
5. 优化渲染性能。
**代码**:
```jsx
import React, { useState } from 'react';
function UserDashboard() {
const [users, setUsers] = useState([]);
const [filter, setFilter] = useState('');
const [sort, setSort] = useState('name');
// ... 复杂的渲染逻辑
return (
<div>
<input onChange={(e) => setFilter(e.target.value)} />
<select onChange={(e) => setSort(e.target.value)}>
<option value="name">Name</option>
<option value="email">Email</option>
</select>
<ul>
{users.filter(u => u.name.includes(filter)).sort((a, b) => a[sort] > b[sort] ? 1 : -1).map(user => (
<li key={user.id}>{user.name} - {user.email}</li>
))}
</ul>
</div>
);
}
### 4. 文档生成
#### API 文档
```markdown
**任务**:为以下 FastAPI 路由生成 OpenAPI 文档。
**要求**:
1. 描述每个端点的功能。
2. 定义请求参数和响应格式。
3. 添加示例请求和响应。
4. 说明错误码和错误信息。
**代码**:
```python
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.post("/users/")
async def create_user(username: str, email: str):
"""Create a new user."""
if not username:
raise HTTPException(status_code=400, detail="Username is required")
return {"username": username, "email": email}
### 5. 测试生成
#### 单元测试
```markdown
**任务**:为以下 Python 类生成单元测试,使用 pytest。
**要求**:
1. 覆盖所有公共方法。
2. 包含边界条件测试。
3. 测试异常情况。
4. 使用参数化测试。
5. 添加测试文档。
**代码**:
```python
class Calculator:
def add(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
---
## 🚀 提示词优化流程
### 1. 提示词优化步骤
```mermaid
graph TD
A[明确任务目标] --> B[设计初始提示词]
B --> C[测试提示词]
C --> D{响应质量满意?}
D -->|是| E[完成]
D -->|否| F[分析问题]
F --> G[优化提示词]
G --> C2. 优化技巧
| 问题 | 优化方案 | 示例 |
|---|---|---|
| 响应不准确 | 添加具体示例 | 提供输入-输出示例 |
| 响应过于简略 | 明确输出要求 | "详细解释每个步骤" |
| 响应偏离主题 | 添加约束条件 | "不要讨论无关内容" |
| 响应重复 | 调整参数 | 增加 frequency_penalty |
| 响应过于创造 | 降低温度 | 设置 temperature=0.3 |
3. 自动化优化
bash
# 使用 OpenCode 优化提示词
opencode prompt optimize --file prompt.txt --iterations 3 --output optimized-prompt.txt
# 基于用户反馈优化
opencode prompt feedback-optimize --file prompt.txt --feedback "缺少边界条件测试"🎯 最佳实践总结
1. 提示词设计清单
- [ ] 任务目标是否明确?
- [ ] 是否提供了足够的上下文?
- [ ] 是否明确了输出格式?
- [ ] 是否包含示例(少样本学习)?
- [ ] 是否设置了约束条件?
- [ ] 是否分配了角色(角色扮演)?
- [ ] 是否分解了复杂任务?
- [ ] 是否考虑了边界情况?
2. 常见错误与避免方法
| 错误 | 影响 | 避免方法 |
|---|---|---|
| 提示词过于简略 | 响应质量差 | 添加具体要求和示例 |
| 缺乏上下文 | 响应偏离主题 | 提供背景信息和代码片段 |
| 约束条件不明确 | 响应不符合要求 | 明确限制条件(如「不使用第三方库」) |
| 示例不匹配 | 误导 AI | 提供与任务相关的示例 |
| 任务过于复杂 | 响应不完整 | 分解为多个子任务 |
3. 高级技巧
动态提示词:根据上下文动态调整提示词。
bashopencode prompt dynamic --file prompt.txt --context "用户输入: {user_input}"提示词模板:使用预定义模板提高效率。
bashopencode prompt template --type "code-review" --output review-prompt.md提示词版本控制:管理提示词的迭代和变更。
bashopencode prompt version --file prompt.txt --message "添加边界条件测试"提示词共享:与团队共享优化后的提示词。
bashopencode prompt share --file prompt.txt --team "dev-team"

