跳转至

Prompt设计基础

1. Prompt工程概述

Prompt工程是设计和优化输入文本以引导大语言模型(LLM)产生期望输出的系统方法。好的Prompt设计可以显著提升模型性能,无需修改模型参数。

1.1 为什么Prompt工程重要

  • 零成本优化: 无需训练或微调,仅通过修改输入即可改善输出
  • 快速迭代: 秒级反馈,快速验证想法
  • 通用性: 适用于所有LLM,技能可迁移
  • 第一道防线: 在考虑微调之前,先穷尽Prompt优化

1.2 Prompt的基本结构

[System Prompt]     ← 角色定义、行为约束
[Context/Examples]  ← 背景信息、示例
[User Input]        ← 用户实际请求
[Output Format]     ← 期望输出格式

2. 基础Prompt模式

2.1 Zero-Shot Prompting

直接给出任务描述,不提供任何示例:

将以下文本分类为"正面"、"负面"或"中性":
"这家餐厅的菜品味道很好,但服务速度太慢了。"

适用场景:

  • 任务描述清晰明确
  • 模型对该任务有充分的预训练知识
  • 简单分类、翻译、摘要等常见任务

局限性:

  • 复杂任务可能输出不稳定
  • 无法通过示例传达细微的判断标准

2.2 Few-Shot Prompting

提供少量示例来引导模型理解任务模式:

将以下文本分类为情感类别。

文本:"今天天气真好!" → 正面
文本:"这个产品完全不能用。" → 负面
文本:"会议改到了下午三点。" → 中性

文本:"虽然价格贵了点,但质量确实不错。" →

最佳实践:

  • 示例数量: 3-5个通常足够
  • 示例多样性: 覆盖不同类别和边界情况
  • 示例顺序: 最相关的示例放在最后(近因效应)
  • 格式一致: 所有示例保持相同格式

注意事项:

  • 避免示例中的偏差(如类别分布不均)
  • 示例质量比数量更重要
  • 过多示例可能超出上下文窗口

2.3 Chain-of-Thought (CoT) Prompting

引导模型展示推理过程,逐步得出答案:

Q: 一个商店有32个苹果。如果每箱装8个苹果,需要多少箱?
请一步步思考。

A: 让我一步步来解决:
1. 商店总共有32个苹果
2. 每个箱子可以装8个苹果
3. 需要的箱子数 = 总苹果数 ÷ 每箱苹果数
4. 32 ÷ 8 = 4
所以需要4个箱子。

触发方式:

  • 简单触发: "让我们一步步思考" / "Let's think step by step"
  • 结构化触发: "请按以下步骤分析:1. 理解问题 2. 分析条件 3. 推导答案"
  • Few-shot CoT: 提供带推理过程的示例

适用场景:

  • 数学推理
  • 逻辑推理
  • 多步骤问题分析
  • 需要解释决策过程

3. System Prompt设计

3.1 角色定义

你是一位资深的Python开发者,专注于代码审查和最佳实践。
你的回答应该:
- 简洁准确
- 包含代码示例
- 指出潜在问题和改进建议
- 遵循PEP 8规范

3.2 行为约束

规则:
1. 只回答与编程相关的问题
2. 如果不确定,明确说明而不是猜测
3. 不要生成有害或不安全的代码
4. 使用中文回答

3.3 System Prompt最佳实践

  • 明确角色: 定义专家身份和专业领域
  • 设定边界: 明确什么该做、什么不该做
  • 指定格式: 定义输出风格和结构
  • 优先级: 当规则冲突时,明确优先级
  • 保持简洁: 避免过长的System Prompt

4. 模板工程

4.1 模板设计原则

# Python示例:使用模板引擎
from string import Template

prompt_template = Template("""
你是一位$role专家。

背景信息:
$context

用户问题:
$question

请按以下格式回答:
1. 简要回答
2. 详细解释
3. 示例(如果适用)
""")

prompt = prompt_template.substitute(
    role="机器学习",
    context="用户正在学习深度学习基础",
    question="什么是反向传播?"
)

4.2 变量管理

# 使用Jinja2模板
from jinja2 import Template

template = Template("""
分析以下{{ items | length }}条数据:
{% for item in items %}
- {{ item.name }}: {{ item.value }}
{% endfor %}

请提供:
{% if include_summary %}
1. 总结摘要
{% endif %}
2. 关键发现
3. 建议行动
""")

4.3 模板版本化

  • 使用Git管理Prompt模板
  • 记录每次修改的原因和效果
  • 关联评估结果和版本号
  • 支持A/B测试不同版本

5. 输出格式控制

5.1 JSON模式

请以JSON格式输出分析结果:
{
  "sentiment": "正面/负面/中性",
  "confidence": 0.0-1.0,
  "keywords": ["关键词1", "关键词2"],
  "summary": "一句话总结"
}

注意:只输出JSON,不要添加任何其他文本。

技巧:

  • 提供完整的JSON schema示例
  • 明确字段类型和取值范围
  • 使用"只输出JSON"等约束指令
  • 利用API的JSON mode(如OpenAI的response_format

5.2 结构化输出

请按以下格式输出:

## 标题
[一行简要标题]

## 关键发现
- 发现1
- 发现2
- 发现3

## 详细分析
[2-3段分析文字]

## 建议
1. 建议1
2. 建议2

5.3 表格输出

请以Markdown表格格式比较以下框架:

| 框架 | 优势 | 劣势 | 适用场景 |
|------|------|------|---------|

6. 温度与采样参数

6.1 Temperature

控制输出的随机性:

Temperature 效果 适用场景
0.0 确定性最高,总是选择最可能的token 分类、提取、数学计算
0.3-0.5 低随机性,略有变化 摘要、翻译
0.7-0.9 中等随机性 创意写作、对话
1.0+ 高随机性 头脑风暴、诗歌创作

6.2 Top-p (Nucleus Sampling)

top_p = 0.9  # 从累积概率90%的token池中采样
  • top_p = 0.1: 只考虑最可能的少数token → 更确定
  • top_p = 0.9: 考虑大部分token → 更多样
  • 通常调节temperature或top_p之一即可,不建议同时调节

6.3 其他参数

  • max_tokens: 控制输出长度上限
  • frequency_penalty: 减少重复(0-2)
  • presence_penalty: 鼓励话题多样性(0-2)
  • stop sequences: 定义输出终止条件

7. 不同任务的Prompt示例

7.1 文本分类

System: 你是一个文本分类专家。

请将用户的文本分类为以下类别之一:
- 技术问题
- 产品反馈
- 账号问题
- 一般咨询

只输出类别名称,不要添加任何解释。

User: 我的密码忘记了,怎么重置?

7.2 信息提取

从以下文本中提取所有提到的实体,以JSON格式输出:

文本:"{text}"

输出格式:
{
  "people": ["姓名列表"],
  "organizations": ["组织列表"],
  "locations": ["地点列表"],
  "dates": ["日期列表"]
}

7.3 代码生成

System: 你是一位高级Python开发者。生成的代码应该:
- 包含类型注解
- 包含docstring
- 处理边界情况
- 遵循PEP 8

请为以下需求编写代码:
{requirement}

输出格式:
1. 代码实现
2. 使用示例
3. 注意事项

7.4 摘要生成

请对以下文章生成摘要:

文章:
{article}

要求:
- 长度:100-150字
- 保留关键数据和结论
- 使用客观的第三人称
- 不要添加原文没有的信息

8. 最佳实践总结

8.1 设计原则

  1. 明确性: 指令越具体,输出越可控
  2. 分步骤: 复杂任务拆分为多个步骤
  3. 给示例: 示例比描述更直观
  4. 设约束: 明确输出格式、长度、风格
  5. 迭代优化: Prompt设计是迭代过程

8.2 常见陷阱

  • 过于模糊: "写点关于AI的东西" → 输出不可控
  • 过于冗长: 指令过多导致模型忽略部分内容
  • 矛盾指令: 不同约束之间冲突
  • 缺乏格式: 未指定输出格式导致不一致
  • 忽略边界: 未考虑异常输入情况

8.3 调试技巧

  • 逐步添加/删除指令,观察影响
  • 使用多个测试用例验证稳定性
  • 记录每次修改及其效果
  • 对比不同Temperature设置的输出
  • 使用评估框架量化Prompt质量

参考资料

  • OpenAI Prompt Engineering Guide
  • Anthropic Prompt Engineering Guide
  • 高级Prompt技术 — 更高级的Prompt优化方法
  • Prompt安全 — Prompt安全与防护

评论 #