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. 需要强调的点:[重点内容]
请给出改进后的版本。