提示工程
提示词(Prompt)是短小的文本片段,为大模型提供额外的信息或指导,例如模型生成文本的风格。本文介绍提示工程(Prompt Engineering)的基本概念和常用技巧。
提示工程的定义
提示词包括两种:系统提示词和用户提示词。
系统提示词(System Prompt):在向大模型提出问题或任务前,向大模型提供上下文、说明和指南的一种方式。通过系统提示词,用户可以指定大模型的角色、个性、语气等信息,以帮助大模型更好地理解和响应用户的输入。例如:"你是一个知识渊博的学者,回答问题要严谨且富有条理。"
用户提示词(User Prompt):用户在与大模型交互时输入的具体指令、问题、请求等。它是用户基于自身需求和目的而向大模型传达的具体信息,希望大模型根据这个提示来生成相应的输出。
提示工程就是通过为大模型提供更多、更优质的上下文信息,从而提升大模型在任务上表现的过程。通过完善提示词,让大模型充分理解任务,从而输出更优质的结果。
系统提示词设计原则
角色设定原则
明确指定模型的角色,帮助模型理解其行为边界和输出风格。
markdown
# 你是一位资深的[领域]专家,具有[X]年从业经验。
# 你的回答风格:[正式/友好/简洁/详细]
# 你的专业领域:[具体领域]约束条件原则
设置明确的限制条件,避免模型产生不期望的输出。
markdown
# 约束条件:
# 1. 回答长度:不超过[X]字
# 2. 回答格式:使用[Markdown/JSON/纯文本]
# 3. 禁止内容:不要包含[具体内容]
# 4. 必须包含:需要涵盖[关键点]输出格式原则
明确指定输出的结构和格式,便于后续处理。
markdown
# 输出格式:
# ## 标题
# - 要点1
# - 要点2
#
# ## 详细说明
# [具体内容]Few-Shot/Zero-Shot/CoT提示技术详解
Zero-Shot提示(零样本提示)
直接给出任务描述,不提供示例。适用于模型已经理解的通用任务。
markdown
# 任务:情感分类
# 请判断以下文本的情感是正面、负面还是中性。
#
# 文本:这家餐厅的服务非常好,菜品也很美味。
# 情感:适用场景:
- 简单分类任务
- 通用问答
- 文本生成
Few-Shot提示(少样本提示)
提供少量示例,帮助模型理解任务模式和输出格式。
markdown
# 任务:情感分类
#
# 示例1:
# 文本:这家餐厅的服务非常好,菜品也很美味。
# 情感:正面
#
# 示例2:
# 文本:服务太差了,等了一个小时才上菜。
# 情感:负面
#
# 示例3:
# 文本:今天天气不错。
# 情感:中性
#
# 现在请分类:
# 文本:这个产品质量还不错,就是价格有点贵。
# 情感:最佳实践:
- 示例数量:3-5个通常足够
- 示例选择:选择具有代表性的例子
- 示例多样性:覆盖不同类别和边界情况
- 示例顺序:将最相关的示例放在最后
CoT提示(思维链提示)
引导模型逐步推理,而不是直接给出答案。通过让模型展示推理过程,提高复杂任务的准确性。
标准CoT:
markdown
# 问题:小明有5个苹果,给了小红2个,又买了3个,请问小明现在有几个苹果?
#
# 让我们一步步思考:
# 1. 小明开始有5个苹果
# 2. 给了小红2个,剩余:5 - 2 = 3个
# 3. 又买了3个,现有:3 + 3 = 6个
#
# 答案:小明现在有6个苹果。Zero-Shot CoT(在问题后添加"Let's think step by step"):
markdown
# 问题:一个水池有两个进水管,管A每小时注入3吨水,管B每小时注入5吨水。
# 如果同时打开两个管,4小时能注入多少吨水?
#
# Let's think step by step.Self-Consistency CoT(多路径采样+多数投票):
markdown
# 对同一问题生成多个推理路径,选择出现次数最多的结果作为最终答案。Tree of Thoughts(思维树)
将推理过程组织成树结构,允许多分支探索和回溯。
markdown
# 任务:解决一个复杂问题
#
# 思路1:
# - 子思路1.1:...
# - 子思路1.2:...
#
# 思路2:
# - 子思路2.1:...
# - 子思路2.2:...
#
# 选择最优路径:...通用提示模板
以下给出了提示词应该考虑的要素:
- 引导语或指示语:告诉模型你希望它执行哪种类型的任务,比如回答问题、提出建议、创作文本等。
- 上下文信息:提供足够的背景信息,以便模型能够更好地理解和处理请求。
- 任务描述:明确地描述你期望模型执行的任务。
- 输出格式指示:如果你对输出结果有特定的格式要求,应在prompt中说明。
- 限制条件:设置一些约束条件,指导模型避免某些类型的回答或者引导模型产生特定风格的内容。
- 样例输出:提供一个或多个例子可以帮助LLM理解所期望的输出类型和质量。
通用提示词模板
markdown
prompt=''
# 任务指令
作为一位[专业角色],请[执行具体任务]。
# 背景上下文
以下是关于[主题/问题]的背景信息:
- [相关信息点1]
- [相关信息点2]
- [相关信息点3]
# 输入数据
"""
[这里放置需要处理的文本/数据/内容]
"""
# 要求与约束
请遵循以下要求:
1. [要求1,例如:分析的深度]
2. [要求2,例如:考虑特定因素]
3. [要求3,例如:使用特定方法]
4. [限制/约束,例如:回答字数限制]
# 输出格式
请按照以下结构提供您的回答:
[输出格式要求]
'''提示词模板库
代码生成模板
markdown
# 任务:代码生成
#
# 编程语言:[Python/JavaScript/...]
# 功能描述:[具体功能需求]
# 输入:[输入参数描述]
# 输出:[输出格式要求]
#
# 要求:
# 1. 代码需要包含注释
# 2. 处理异常情况
# 3. 遵循最佳实践文本分析模板
markdown
# 任务:文本分析
#
# 分析维度:
# - 情感分析
# - 关键词提取
# - 主题归纳
#
# 输出格式:
# ## 情感分析
# [分析结果]
# ## 关键词
# [关键词列表]
# ## 主题
# [主题归纳]数据提取模板
markdown
# 任务:结构化数据提取
#
# 从以下文本中提取信息,以JSON格式输出:
#
# 文本:
# """
# [原始文本]
# """
#
# 提取字段:
# - field1: [字段描述]
# - field2: [字段描述]
# - field3: [字段描述]
#
# 注意:如果某字段信息缺失,请使用null。创意写作模板
markdown
# 任务:创意写作
#
# 写作类型:[故事/诗歌/文案/...]
# 主题:[主题描述]
# 风格:[风格要求]
# 长度:[字数要求]
#
# 要求:
# 1. 开头要吸引读者
# 2. 情节要有起伏
# 3. 结尾要令人印象深刻翻译模板
markdown
# 任务:专业翻译
#
# 源语言:[语言]
# 目标语言:[语言]
# 领域:[专业领域]
#
# 要求:
# 1. 保持专业术语准确
# 2. 保持原文风格
# 3. 通顺自然
#
# 原文:
# [原文内容]提示词优化技巧
迭代优化流程
- 初版提示:根据任务需求编写基础提示
- 测试验证:用多个输入测试效果
- 问题诊断:分析输出问题(格式错误、内容偏差等)
- 提示修改:针对问题调整提示
- 再次测试:验证修改效果
常见问题及解决
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 输出格式错误 | 格式要求不明确 | 添加具体格式示例 |
| 内容偏离主题 | 任务描述模糊 | 细化任务描述 |
| 答案不准确 | 缺少上下文 | 补充背景信息 |
| 重复啰嗦 | 未限制长度 | 添加字数限制 |
| 拒绝回答 | 安全限制过严 | 调整角色设定 |
高级技巧
- 角色扮演:让模型扮演特定角色,激活相关知识
- 链式提示:将复杂任务拆分为多个简单步骤
- 自我反思:让模型检查和修正自己的输出
- 对抗提示:通过反例帮助模型理解边界情况