Skip to content

提示工程

提示词(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. 通顺自然
# 
# 原文:
# [原文内容]

提示词优化技巧

迭代优化流程

  1. 初版提示:根据任务需求编写基础提示
  2. 测试验证:用多个输入测试效果
  3. 问题诊断:分析输出问题(格式错误、内容偏差等)
  4. 提示修改:针对问题调整提示
  5. 再次测试:验证修改效果

常见问题及解决

问题原因解决方案
输出格式错误格式要求不明确添加具体格式示例
内容偏离主题任务描述模糊细化任务描述
答案不准确缺少上下文补充背景信息
重复啰嗦未限制长度添加字数限制
拒绝回答安全限制过严调整角色设定

高级技巧

  1. 角色扮演:让模型扮演特定角色,激活相关知识
  2. 链式提示:将复杂任务拆分为多个简单步骤
  3. 自我反思:让模型检查和修正自己的输出
  4. 对抗提示:通过反例帮助模型理解边界情况