Skip to content
清晨的一缕阳光
返回

Prompt 工程基础与方法论

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)

问题:

  1. 指出安全风险
  2. 提供修复方案
  3. 解释原因 """

## 三、设计模式

### 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 工程是技能而非魔法,通过系统的方法和持续的实践,任何人都能掌握。


分享这篇文章到:

上一篇文章
Spring Boot RocketMQ 消息队列集成
下一篇文章
Seata 核心概念