Prompt 工程基础与方法论
Prompt 工程是与大模型交互的艺术和科学,好的 Prompt 能让模型发挥最大价值。
一、核心概念
1.1 什么是 Prompt 工程
Prompt 工程 = 设计 + 优化 + 评估
设计:创建有效的输入提示
优化:迭代改进 Prompt 质量
评估:量化 Prompt 效果
1.2 为什么需要 Prompt 工程
同样的任务,不同的 Prompt:
❌ 差 Prompt:
"写点什么关于 AI"
✅ 好 Prompt:
"你是一位 AI 技术专家。请写一篇 800 字的技术文章,
介绍 2024 年 AI 领域的三大趋势。
要求:
1. 每个趋势包含具体案例
2. 使用技术术语但要通俗易懂
3. 结尾给出发展建议"
结果差异:
- 输出质量提升 3-5 倍
- 减少无效输出
- 降低 Token 消耗
二、核心原则
2.1 CLEAR 原则
C - Clear(清晰)
"写一篇文章" → "写一篇 800 字的 Python 入门教程"
L - Logical(逻辑)
按步骤组织:"首先...然后...最后..."
E - Explicit(明确)
"不要太长" → "控制在 500 字以内"
A - Adaptive(适应)
根据模型调整:GPT-4 vs Claude vs 开源模型
R - Refined(精炼)
去除冗余,保留关键信息
2.2 角色设定
# ❌ 无角色
"解释量子计算"
# ✅ 有角色
"你是一位物理学教授,擅长用通俗语言解释复杂概念。
请向高中生解释量子计算的基本原理。"
2.3 上下文提供
# ❌ 缺少上下文
"这个代码有什么问题?"
# ✅ 提供完整上下文
"""
你是一位资深 Python 工程师。请审查以下代码:
```python
def get_user_data(user_id):
query = f"SELECT * FROM users WHERE id = {user_id}"
return db.execute(query)
问题:
- 指出安全风险
- 提供修复方案
- 解释原因 """
## 三、设计模式
### 3.1 基础模板
```python
PROMPT_TEMPLATE = """
# 角色
{role}
# 任务
{task}
# 上下文
{context}
# 约束
{constraints}
# 输出格式
{output_format}
# 示例
{examples}
"""
3.2 任务分解
# 复杂任务分解
prompt = """
请按以下步骤完成任务:
步骤 1:分析需求
- 理解用户想要什么
- 识别关键约束
步骤 2:制定方案
- 列出可能的解决方案
- 评估每个方案的优缺点
步骤 3:实施方案
- 选择最优方案
- 详细执行
步骤 4:验证结果
- 检查是否满足需求
- 提供改进建议
"""
3.3 Few-Shot 示例
# Zero-Shot(无示例)
prompt = "将以下中文翻译成英文:你好"
# One-Shot(一个示例)
prompt = """
示例:
输入:早上好
输出:Good morning
任务:
输入:你好
输出:
"""
# Few-Shot(多个示例)
prompt = """
示例 1:
输入:早上好
输出:Good morning
示例 2:
输入:谢谢
输出:Thank you
示例 3:
输入:再见
输出:Goodbye
任务:
输入:你好
输出:
"""
四、迭代方法
4.1 迭代流程
第 1 版:基础 Prompt
↓ 测试
第 2 版:添加角色和约束
↓ 评估
第 3 版:添加示例
↓ 优化
第 4 版:精炼和格式化
4.2 评估指标
# 评估维度
评估指标 = {
"准确性": "输出是否符合事实",
"完整性": "是否覆盖所有要点",
"一致性": "格式和风格是否统一",
"相关性": "是否切题",
"简洁性": "是否精炼无冗余"
}
# 评分方法(1-5 分)
def evaluate_prompt(response, criteria):
score = 0
for criterion in criteria:
score += rate(response, criterion) # 1-5 分
return score / len(criteria)
4.3 A/B 测试
# 测试两个 Prompt 版本
prompt_a = "写一篇关于 AI 的文章"
prompt_b = """
你是一位科技作家。请写一篇 800 字的 AI 技术文章,
介绍机器学习的基本概念和应用场景。
"""
# 收集反馈
results_a = get_user_feedback(prompt_a)
results_b = get_user_feedback(prompt_b)
# 选择更好的版本
if avg_score(results_b) > avg_score(results_a):
best_prompt = prompt_b
五、常见陷阱
5.1 模糊不清
# ❌ 模糊
"写得好一点"
# ✅ 明确
"使用专业术语,段落清晰,每段不超过 150 字"
5.2 信息过载
# ❌ 信息过载
"""
你是一个助手,你有以下能力:1...2...3...
背景信息:...(2000 字)
任务:...
约束:...(10 条)
格式:...
示例:...(5 个)
"""
# ✅ 精简
"""
角色:专业助手
任务:回答用户问题
约束:简洁、准确
"""
5.3 忽视模型特性
# ❌ 忽视模型差异
# 对 GPT-4 和 GPT-3.5 使用相同 Prompt
# ✅ 适配模型
# GPT-4:复杂任务、长上下文
# GPT-3.5:简单任务、清晰指令
# Claude:长文档、分析任务
六、最佳实践
6.1 Prompt 版本管理
# 使用版本控制
prompts/
├── v1/
│ └── article_writer.txt
├── v2/
│ └── article_writer.txt
└── current/
└── article_writer.txt -> v2/article_writer.txt
6.2 模块化设计
# 可复用的 Prompt 组件
ROLE_EXPERT = "你是一位资深专家,擅长..."
FORMAT_JSON = "请以 JSON 格式输出,包含以下字段..."
CONSTRAINT_BRIEF = "请简洁明了,控制在 200 字以内"
# 组合使用
prompt = f"""
{ROLE_EXPERT}
{CONSTRAINT_BRIEF}
{FORMAT_JSON}
"""
6.3 自动化测试
# Prompt 测试用例
test_cases = [
{
"input": "简单问题",
"expected_length": (50, 100),
"expected_format": "paragraph"
},
{
"input": "复杂问题",
"expected_length": (200, 300),
"expected_format": "structured"
}
]
# 自动化验证
for test in test_cases:
response = call_llm(prompt, test["input"])
assert check_length(response, test["expected_length"])
assert check_format(response, test["expected_format"])
七、总结
Prompt 工程核心要点:
| 原则 | 说明 | 示例 |
|---|---|---|
| CLEAR | 清晰、逻辑、明确、适应、精炼 | 基础指导 |
| 角色设定 | 给模型明确身份 | ”你是一位专家” |
| 任务分解 | 复杂任务分步骤 | ”步骤 1…步骤 2…” |
| Few-Shot | 提供示例 | 1-3 个示例 |
| 迭代优化 | 持续改进 | A/B 测试 |
Prompt 工程是技能而非魔法,通过系统的方法和持续的实践,任何人都能掌握。