Prompt工程完全指南
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. 预训练模型
模型规模
模型参数规模越大,上下文学习能力越强
💡 更大的模型通常具有更强的泛化能力
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 茯茶养生人的博客!
