Prompt工程完全指南

什么是Prompt

用于指导生成式人工智能模型执行特定任务的输入指令。


Prompt的组成要素

一个完整的Prompt通常包含以下四个核心部分:

  • 任务说明 - 具体的任务要求
  • 上下文 - 任务的相关背景,包括知识前提、受众、任务示例或有助于模型理解任务的信息
  • 问题 - 需要解决的具体问题
  • 输出格式 - 期望的输出形式

Prompt的分词与向量化

Token的概念

Token是承载语义的最小单元。将prompt提示词拆分成token,进行向量化表示。

分词颇具挑战性,依赖于分词算法(分词器),常见的分词算法包括:

  • BBPE
  • BPE
  • WordPiece

分词器的作用

每个大语言模型都有自己的分词器,分词器维护一个词表,它的质量对模型的性能有直接的影响。不同的分词粒度导致不同大小的词表。

分词器的核心功能:

  • 识别文本中的关键词和短语
  • 优化压缩文本token,缩短模型处理数据所需的时间
  • 直接影响模型的训练和推理速度

💡 高效的分词器可以显著提升模型性能


Prompt工程

定义

Prompt工程是设计与优化prompt的技术。

核心理念

将新任务通过prompt构建为模型在预训练阶段已经熟悉的形式,利用模型固有的泛化能力来执行新的任务,而无需在额外的特定任务上进行训练。

重要意义

模型无需微调,通过prompt特征工程完成既定任务,使得模型在多个领域发挥出不错的性能。


如何编写规范的Prompt

1. 任务说明

  • 清晰表达动词:判断、分类、生成等
  • 使用具体名词定义任务的输出
  • 简洁直接抓住任务的核心要求
  • 结构化布局,任务说明放置在开头或结尾

2. 上下文

丰富性

内容的多样性与相关性,包括:

  • 背景信息
  • 演示示例
  • 对话的连续性内容

清晰性

  • 避免不必要的信息
  • 直指任务核心

3. 输出格式

结构化格式

支持多种格式:JSON、XML、HTML、Markdown、CSV

最佳实践

  • 在prompt中明确指出希望模型使用的输出格式
  • 在prompt中提供一个输出格式的具体示例

4. 排版

  • 使用合适的分隔符(如 #...
  • 运用格式化技巧(空白或缩进)
  • 添加标题和子标题

Prompt编写技巧

1. 合理归纳提问

将复杂问题拆解为多个简单问题

2. 使用CoT(思维链)

将完备的思考逻辑给到模型,适用于:

  • 算术推理
  • 常识推理
  • 符号推理

3. 角色扮演

在指令中包含具体属性:

  • 职责
  • 知识
  • 技能

4. 情景代入

将模型置于特定情境或环境

5. 迭代优化

不断优化指令的循环流程:

根据思路 → 尝试实践 → 得到结果 → 分析bad case → 循环

6. 避免负向指令

告诉模型应该输出什么,而不是不应该输出什么

⚠️ 正向指令比负向指令更有效


上下文学习(In-Context Learning, ICL)

定义

通过构造特定的prompt,使得语言模型理解并学习下游任务的范式。

分类

Zero-shot

  • 无需提供任何示例

One-shot

  • 提供一个示例

Few-shot

  • 提供几个到十几个示例
  • 多类别样本最好保持1:1:1的比例

⚠️ 示例的增加会显著增加大语言模型推理时的计算成本


影响上下文学习的因素

1. 预训练数据

数据多样性

  • 丰富的跨领域语料库进行预训练,模型具备更稳定的上下文学习能力
  • 多样化任务有助于模型学习技能,增强任务泛化能力

数据分布

  • 训练数据存在突发性分布和罕见类别时,会增强模型的上下文学习能力

2. 预训练模型

模型规模

模型参数规模越大,上下文学习能力越强

💡 更大的模型通常具有更强的泛化能力