[prompt]提示词工程学习笔记

290 阅读14分钟

提示词要素

提示词可以包含以下任意要素:

指令:想要模型执行的特定任务或指令。

上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。

输入数据:用户输入的内容或问题。

输出指示:指定输出的类型或格式。

可以将上方的元素整合成为一条完整的提示词。

通用技巧

当你有一个涉及许多不同子任务的大任务时,可以尝试将任务分解为更简单的子任务,并随着结果的改善逐步构建。这避免了在提示设计过程中一开始就添加过多的复杂性。

指令

使用指令性质的语言来指定,如 “写入”,“分类”,“排序”等。。。 有些人建议将指令放在提示的开头。另有人则建议是使用像“###”这样的清晰分隔符来分隔指令和上下文。

### 指令 ###
将以下文本翻译成西班牙语:
文本:“hello!”

具体性

提示越具描述性和详细,结果越好。重要的是要有一个具有良好格式和描述性的提示词。当对生成结果或者格式有要求的时候,给予一个回复格式的例子可以大幅帮助模型的输出符合要求。

提取以下文本中的地名。
所需格式:
地点:<逗号分隔的公司名称列表>
输入:“虽然这些发展对研究人员来说是令人鼓舞的,但仍有许多谜团。里斯本未知的香帕利莫德中心的神经免疫学家 Henrique Veiga-Fernandes 说:“我们经常在大脑和我们在周围看到的效果之间有一个黑匣子。”“如果我们想在治疗背景下使用它,我们实际上需要了解机制。””
地点:里斯本,香帕利莫德中心

避免不明确

提示词应该具体和直接,下达明确的指令更有利于模型理解。如:用几句话概括xxx。正确应该是: 用2-3句话概括xxx。

做啥不做啥

设计提示时的另一个常见技巧是避免说不要做什么,而应该说要做什么。不能只是指定不做啥。先说要做什么,在说不要做什么。 例如:以下是向客户推荐电影的代理程序,不要询问个人信息,更好的提示词应该是:以下是向客户推荐电影的代理程序,负责从全球热门电影中推荐电影。它应该避免询问用户的偏好并避免询问个人信息。如果代理没有电影推荐,它应该回答“抱歉,今天找不到电影推荐。

角色提示

指导大语言模型系统如何表现,指定它的行为意图和身份。比如提前指定你是什么角色,你擅长什么,针对什么回答什么等。

推理

当设计一些需要推理的任务的时候,直接询问的效果不一定会好,优化的方式可以将推理的步骤也告诉模型,比如: 我有如下的xxxxx,将问题分解为如下步骤来解决,先将xxx,在xxx,判断xxx后给出答案。

提示词技术

零样本提示

Q: <问题>?
A: 

即你直接提示模型给出一个回答,而没有提供任何关于你希望它完成的任务的示例或示范。当零样本不起作用时,建议在提示中提供演示或示例,这就引出了少样本提示。

少样本提示

Q: <问题>? 高兴,开心,快乐,这可太棒了。
A: <答案>  情绪为:正面的。

Q: <问题>? 难过,愤怒,生气,这太失败了。
A: <答案>  情绪为:负面的。

Q: <问题>?
A:

分析话的情绪?结果会大概率输出为 “正面的”或“负面的”。从而达到规范输出等目的。

在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能。

限制

不适合推理类的任务。当答案是需要计算的方式 通过推理得到的时候,直接给予答案不给推理的步骤过程,使用少样本提示其实意义不大。这种任务更适合 思维链提示

不适合的例子
这组数字中的奇数加起来是一个偶数:489151221A:答案是False。
这组数字中的奇数加起来是一个偶数:171019481224A:答案是True。
这组数字中的奇数加起来是一个偶数:161114481324A:答案是True。
这组数字中的奇数加起来是一个偶数:17910121342A:答案是False。
这组数字中的奇数加起来是一个偶数:15325138271A

链式思考(CoT)提示

足够大的语言模型才会出现的新兴能力

结合少样本提示的例子

这组数中的奇数加起来是偶数:489151221A:将所有奇数相加(9151)得到25。答案为False。
这组数中的奇数加起来是偶数:15325138271A

零样本 COT 提示

给出一个任务,提示模型逐步思考,在没有太多示例的时候很好用。例如:

效果不好的:
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?

效果好的:
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。然后我去买了5个苹果并吃了1个。我还剩下多少苹果?
让我们逐步思考。

自动思维链(Auto-CoT)

即利用 LLMs “让我们一步一步地思考” 提示来生成一个接一个的推理链。

主要由两个阶段组成: 阶段1:问题聚类:将给定问题划分为几个聚类 阶段2:演示抽样:从每组数组中选择一个具有代表性的问题,并使用带有简单启发式的 Zero-Shot-CoT 生成其推理链

自我一致性

自我一致性旨在“替换链式思维提示中使用的天真贪婪解码方法”。其想法是通过少样本 CoT 采样多个不同的推理路径,并使用生成结果选择最一致的答案。这有助于提高 CoT 提示在涉及算术和常识推理的任务中的性能。

具体实现为:把你的问题举一反三出多个相似问题(Q&A)并且给出推理过程和答案。

不好的:
当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?

好的:
Q:林中有15棵树。林业工人今天将在林中种树。完成后,将有21棵树。林业工人今天种了多少棵树?
A:我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此,他们必须种了21-15 = 6棵树。答案是6Q:停车场有3辆汽车,又来了2辆汽车,停车场有多少辆汽车?
A:停车场已经有3辆汽车。又来了2辆。现在有3 + 2 = 5辆汽车。答案是5Q:Leah有32块巧克力,她的姐姐有42块。如果他们吃了35块,他们总共还剩多少块?
A:Leah有32块巧克力,Leah的姐姐有42块。这意味着最初有32 + 42 = 74块巧克力。已经吃了35块。因此,他们总共还剩74-35 = 39块巧克力。答案是39Q:Jason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖?
A:Jason有20个棒棒糖。因为他现在只有12个,所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20-12 = 8个棒棒糖。答案是8Q:Shawn有五个玩具。圣诞节,他从他的父母那里得到了两个玩具。他现在有多少个玩具?
A:他有5个玩具。他从妈妈那里得到了2个,所以在那之后他有5 + 2 = 7个玩具。然后他从爸爸那里得到了2个,所以总共他有7 + 2 = 9个玩具。答案是9Q:服务器房间里有9台计算机。从周一到周四,每天都会安装5台计算机。现在服务器房间里有多少台计算机?
A:从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4 * 5 =
20台计算机。一开始有9台计算机,所以现在有9 + 20 = 29台计算机。答案是29Q:Michael有58个高尔夫球。星期二,他丢失了23个高尔夫球。星期三,他又丢失了2个。星期三结束时他还剩多少个高尔夫球?
A:Michael最初有58个球。星期二他丢失了23个,所以在那之后他有58-23 = 35个球。星期三他又丢失了2个,所以现在他有35-2 = 33个球。答案是33Q:Olivia有23美元。她用每个3美元的价格买了五个百吉饼。她还剩多少钱?
A:她用每个3美元的价格买了5个百吉饼。这意味着她花了15美元。她还剩8美元。

Q:当我6岁时,我的妹妹是我的一半年龄。现在我70岁了,我的妹妹多大?
A

生成知识提示

因为模型大小或者基于通用文本训练等限制。对于一些问题,LLM 在执行需要更多关于世界的知识的任务时的局限性。例如 高尔夫球的一部分是试图获得比其他人更高的得分。是或否?这个问题模型可能会因不知道高尔夫球的规则从而给出错误的答案,这时候需要将高尔夫球的规则同时作为提示词给大模型,这样大模型会分析规则 给出更加可信的答案。

格式可以为: 输入:xxx;知识:xxx;

链式提示

将一个大型任务拆分成多个子任务,将子任务提供给模型,得到结果作为下一个任务的一部分继续。

除了提高性能,链式提示还有助于提高 LLM 应用的透明度,增加控制性和可靠性。这意味着您可以更容易地定位模型中的问题,分析并改进需要提高的不同阶段的性能。链式提示在构建 LLM 驱动的对话助手和提高应用程序的个性化用户体验方面非常有用。

例如在读取文档的时候,可以先让模型提取引用。然后根据引用来具体提问。

思维树 (ToT)

我们引入了一种新的语言模型推理框架 Tree of Thoughts (ToT) ,它推广了流行的 Chain of Thought 方法来提示语言模型,并支持探索作为解决问题的中间步骤的连贯文本单元(思想)。

ToT 允许 LM 通过考虑多种不同的推理路径和自我评估选择来决定下一步行动,并在必要时向前看或回溯以做出全局选择,从而进行深思熟虑的决策。

我们的实验表明,ToT 显着增强了语言模型在需要非平凡计划或搜索的三个新任务上解决问题的能力:算24游戏、创意写作和迷你填字游戏。

思维树(ToT)提示法,将 ToT 框架的主要概念概括成了一段简短的提示词,指导 LLM 在一次提示中对中间思维做出评估。ToT 提示词的例子如下:

假设三位不同的专家来回答这个问题。
所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。
然后,所有专家都写下他们思考的下一个步骤并分享。
以此类推,直到所有专家写完他们思考的所有步骤。
只要大家发现有专家的步骤出错了,就让这位专家离开。
请问...

检索增强生成 (RAG)

要完成更复杂和知识密集型的任务,可以基于语言模型构建一个系统,访问外部知识源来做到。这样的实现与事实更加一性,生成的答案更可靠,还有助于缓解“幻觉”问题。

检索增强生成(Retrieval Augmented Generation,RAG)的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调,其内部知识的修改方式很高效,不需要对整个模型进行重新训练。

流程为: 提示问题 - 检索文档 - 文档作为上下文和输入的原始提示词组合 - 大模型根据上下文结合问题分析出答案。像是更加方便的生成知识提示

ReAct 框架

生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识库或环境)进行交互并且收集信息。

ReAct 的灵感来自于 “行为” 和 “推理” 之间的协同作用,正是这种协同作用使得人类能够学习新任务并做出决策或推理。

ReAct 提示

第一步是从训练集 (例如 HotPotQA) 中选择案例,并组成 ReAct 格式的轨迹。这些在提示中作为少样本示例。轨迹由多思考-操作-观察步骤组成,如图所示。自由形式的思考用来完成不同的任务,如分解问题、提取信息、执行常识或算术推理、引导搜索公式和合成最终答案。

下面是一个 ReAct 提示的示例(摘自论文,为简单起见缩短为一个示例):

问题 科罗拉多造山带东部区域延伸到的区域的海拔范围是多少?
思考 1 我需要搜索科罗拉多造山带,找到科罗拉多造山带东段延伸的区域,然后找到该区域的海拔范围。
操作 1 搜索 [科罗拉多造山带]
观察 1 科罗拉多造山带是科罗拉多及其周边地区造山运动的一段。
思考 2 它没有提到东部地区。所以我需要查一下东部地区。
操作 2 查找 [东部地区]
观察 2 (结果 1 / 1) 东部区域延伸至高平原,称为中原造山带。
思考 3 科罗拉多造山运动的东部区域延伸到高平原。所以我需要搜索高平原,找到它的海拔范围。
操作 3 搜索 [高平原]
观察 3 高平原指的是两个截然不同的陆地区域之一。
思考 4 我需要搜索高平原(美国)
操作 4 搜索 [高平原(美国)]
观察 4 高平原是大平原的一个分区。从东到西,高平原的海拔从 1800  7000 英尺 (550  2130 米) 不等。[3]
思考 5 高平原海拔高度从 1800  7000 英尺,所以答案是 1800  7000 英尺。
操作 5 结束 [1800  7000 英尺]
...

知识密集型推理任务 和 决策型任务