Skip to content

提示词工程最佳实践

提示词工程是什么?

提示词工程(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.md

2. 提示词库

工具描述链接
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.html

4. 自动优化

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 --> C

2. 优化技巧

问题优化方案示例
响应不准确添加具体示例提供输入-输出示例
响应过于简略明确输出要求"详细解释每个步骤"
响应偏离主题添加约束条件"不要讨论无关内容"
响应重复调整参数增加 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. 高级技巧

  1. 动态提示词:根据上下文动态调整提示词。

    bash
    opencode prompt dynamic --file prompt.txt --context "用户输入: {user_input}"
  2. 提示词模板:使用预定义模板提高效率。

    bash
    opencode prompt template --type "code-review" --output review-prompt.md
  3. 提示词版本控制:管理提示词的迭代和变更。

    bash
    opencode prompt version --file prompt.txt --message "添加边界条件测试"
  4. 提示词共享:与团队共享优化后的提示词。

    bash
    opencode prompt share --file prompt.txt --team "dev-team"

🚀 下一步

  1. 提示词优化工具详解
  2. 复杂任务提示词设计
  3. 提示词与模型选择
  4. 加入社区讨论