Skip to content

Prompt工程

Prompt设计原则

核心原则

┌─────────────────────────────────────────────────────────────┐
│                     Prompt 设计四原则                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1️⃣ 清晰明确     │  2️⃣ 结构化        │  3️⃣ 上下文完整      │
│  表达具体需求    │  使用标记分隔      │  提供必要背景      │
│                                                             │
│                    4️⃣ 示例引导                                 │
│                    给出输入输出示例                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Prompt结构

标准Prompt模板

┌─────────────────────────────────────────────────────────────┐
│                    Prompt 组成部分                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  [角色设定] 你是一个专业的XXX,帮助用户解决XXX问题           │
│                                                             │
│  [背景信息]                                                  │
│  - 上下文1                                                   │
│  - 上下文2                                                   │
│                                                             │
│  [任务描述]                                                  │
│  请帮我完成XXX任务,需要注意以下几点:                        │
│  1. 要求1                                                    │
│  2. 要求2                                                    │
│                                                             │
│  [输出格式]                                                  │
│  请按以下JSON格式输出:                                       │
│  { "key1": "value1" }                                       │
│                                                             │
│  [示例]                                                      │
│  输入: xxx                                                   │
│  输出: yyy                                                   │
│                                                             │
│  [用户问题]                                                  │
│  xxx                                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

常用技巧

1. 思维链提示(Chain of Thought)

javascript
// 不使用思维链
const prompt1 = `
  如果一个商店有15个苹果,卖掉了9个,又进货12个,
  现在有多少个苹果?
`;

// 使用思维链
const prompt2 = `
  如果一个商店有15个苹果,卖掉了9个,又进货12个,
  现在有多少个苹果?
  
  请逐步推理:
  1. 原来有15个苹果
  2. 卖掉9个,剩下 15 - 9 = 6 个
  3. 又进货12个,现在有 6 + 12 = 18 个
  所以现在有18个苹果。
`;

2. Few-Shot Learning

javascript
const prompt = `
  将以下中文句子转换为拼音(只输出拼音,不输出其他内容):
  
  示例:
  输入:今天天气真好
  输出:jīn tiān tiān qì zhēn hǎo
  
  输入:他很高
  输出:tā hěn gāo
  
  输入:这个问题很难回答
  输出:
`;

// 输出格式控制
const prompt2 = `
  根据用户评价,判断情感是正面、负面还是中性:
  
  例子:
  "这家餐厅的菜非常好吃" -> 正面
  "服务态度太差了,等了一个小时" -> 负面
  "今天天气不错" -> 中性
  
  "产品还行,就是发货有点慢" ->
`;

3. 角色扮演

javascript
const prompt = `
  你是一个资深的前端架构师,有10年以上的React开发经验。
  你擅长:
  - 设计可扩展的前端架构
  - 性能优化
  - 代码审查
  - 最佳实践建议
  
  现在有一个人问你:React中useEffect的依赖数组为空和不传有什么区别?
`;

4. 分步骤执行

javascript
const prompt = `
  请帮我完成以下任务,分步骤执行:
  
  任务:优化一段React代码的性能
  
  步骤1:先分析这段代码存在哪些性能问题
  步骤2:针对每个问题给出具体的优化方案
  步骤3:提供优化后的完整代码
  
  当前代码:
  \`\`\`jsx
  function UserList({ users }) {
    return (
      <div>
        {users.map(user => (
          <div key={user.id}>{user.name}</div>
        ))}
      </div>
    );
  }
  \`\`\`
`;

高级技巧

1. XML标签分隔

javascript
const prompt = `
  <角色>你是一个技术文档助手</角色>
  
  <要求>
    1. 语言简洁专业
    2. 包含代码示例
    3. 控制在500字以内
  </要求>
  
  <任务>
    解释什么是Promise
  </任务>
  
  <输出格式>
    使用markdown格式输出
  </输出格式>
`;

2. 条件分支

javascript
const prompt = `
  分析以下用户输入:
  
  输入:${userInput}
  
  如果是问题类型,请给出详细解答;
  如果是命令类型,请执行并说明结果;
  如果是闲聊类型,请友好回应。
  
  输入类型判断:
`;

3. 自我反思

javascript
const prompt = `
  请完成以下任务,然后反思你的回答是否合理:
  
  任务:解释什么是依赖注入
  
  要求:
  1. 先给出定义
  2. 举例说明
  3. 说明使用场景
  4. 反思:这个解释是否清晰易懂?有什么可以改进的地方?
`;

常见问题与解决

1. 输出格式不稳定

javascript
// ❌ 问题:JSON可能格式错误
const prompt1 = "返回JSON格式的用户信息";

// ✅ 解决:使用更严格的格式要求
const prompt2 = `
  返回以下格式的JSON,确保严格符合格式:
  {
    "name": "字符串,用户名",
    "age": "数字,年龄",
    "email": "字符串,邮箱"
  }
  
  只输出JSON,不要输出其他内容。
`;

2. 回答过于冗长

javascript
const prompt = `
  回答要求:
  1. 控制在100字以内
  2. 直接给出答案
  3. 不要解释过程
  4. 如需列表,最多3条
  
  问题:什么是闭包?
`;

3. 幻觉问题

javascript
const prompt = `
  回答问题前,请先检查:
  1. 你确定这个信息是正确的吗?
  2. 如果不确定,明确说明不确定
  
  如果被问到你不确定的知识,直接回答"我不确定"或"这个我不清楚"。
  
  问题:Vue3的setup函数是在哪个生命周期执行的?
`;

Prompt模板库

1. 代码审查

你是代码审查专家。请审查以下代码:
1. 找出潜在的bug
2. 指出代码规范问题
3. 提出性能优化建议
4. 给出改进建议

[代码内容]

2. 技术解释

用简洁易懂的语言解释以下概念:
- 目标读者:[受众描述]
- 解释深度:[简单/中等/深入]
- 需要包含:[具体要求]

[概念内容]

3. 写作助手

作为写作助手,请帮我改进以下文本:

原文:[文本内容]

改进要求:
1. 语言风格:[正式/口语化/专业]
2. 目标读者:[读者群体]
3. 需要强调的点:[重点内容]

请给出改进后的版本。

Released under the MIT License.