查看原文
其他

纯干货!Prompt链式方法总结,灵活驾驭各种大模型!

ShuYini AINLPer 2024-04-23

点击上方AINLPer,设为星标

更多干货,第一时间送达

引言

 之前,写了一篇关于大型语言模型Prompt应用的文章[纯干货!最全Prompt工程方法总结,与ChatGPT、GPT-4等LLMs的交互更高效!],其中主要是让大家能够更加全面的了解Prompt工程,以及如何应用Prompt来引导大型语言模型LLMs完成任务。但是之前的文章主要介绍应用单个Prompt来完成特定的任务。然而,当面对复杂任务的时,单一的Prompt是不够的,我们需要将Prompt链接在一起才能完成。今天这篇文章主要集中在Prompt链式方法介绍用于实现复杂任务生成,其中主要包括:顺序Prompt链、并行Prompt链、抽样Prompt链、树状Prompt链、循环Prompt链。

顺序Prompt方法

 按顺序的方法是链接Prompt最常见的方法。其关键思想是:当单个提示中提供的任务变得太长或太复杂并且包含许多不同的指令,则响应可能无法捕获所需的细节和粒度。在这种情况下,可以将该任务分解为多个子任务。一个子任务的响应会成为另外一个子任务的Prompt,按照顺序走下去直到任务完成。如下图所示: 下面是一个关于故事生成的示例。在这里想要生成一个长故事,其中包含由一组信息(人物、故事节奏和地点)引导的对话。现在,可以将所有这些信息填充到一个提示中,但这可能会淡化我们希望对话框包含的关键细节。

 此外,一开始的时候我们不想编写所有的细节,而是希望模型替我们生成。我们想要提供的只是我们想要的故事内容的简短摘要,这也是我们唯一的Prompt。下图总结了生成最终对话框所涉及的链。首先,人类输入故事摘要,该摘要将成为生成角色列表的提示,然后该列表将成为生成故事节拍的提示,依此类推,直到我们进入对话生成阶段。 相比单个Prompt,按照顺序进行链接Prompt的另外一个好处是:可以对各个链接Prompt节点进行人工检查。当响应结果不满足设想的标准,可以让模型重新生成。通过节点阶段分析,使得对复杂的生成人工智能任务进行评估和质量控制变得容易。

并行Prompt方法

 当子任务相互依赖时,需要顺序Prompt链。但是当它们独立时,我们可以并行运行它们,然后将结果进行组合。如下图所示: 假设我们正在构建一个应用程序,该应用程序可以生成一周的创意食谱,然后生成供用户购买的食材购物清单。在这种情况下,给定用户输入,例如进餐次数或天数,我们可以并行运行食谱生成步骤。提示可能类似于以下内容:

Prompt={“帮我生成一份快捷简单的7天菜谱,并以Json的形式输出,其中key为“食材成分”和“制作说明””}

 接下来,将在所有菜谱中重复生成食谱。一旦完成,我们可以将每顿饭的食材合并成一个用户可以立即使用的购物清单。

Prompt={“根据“食材成分”将食材合并成一个单一的购物清单,不要重复。”}

抽样Prompt方法

 如果一项任务涉及逻辑推理,例如数学问答,则可能有不止一种方法来解决给定问题。在这种情况下,我们希望鼓励模型在探索不同的解决方案时更具创造性。但提高模型创造力(即提高“temperature”)也意味着模型得到错误答案的可能性也会提高。

 解决方案是,可以重复多次向模型Prompt相同的问题,然后选择大多数人的回答。具体如下图所示: 让我们看一下Wang等人的论文中的一个例子。他们引入了自我一致性的概念。Wei等人提出的思想链提示的概念,其中模型的Prompt方法是鼓励模型在给出最终响应之前进行推理步骤(参考论文链接:https://arxiv.org/pdf/2203.11171.pdf)。然而,在这些设置中,通常鼓励模型进行“贪婪解码”,这意味着偏向正确且安全的路径。这可以通过调整“temperature”值等设置来完成。

 凭借自我一致性,我们可以通过从多个路径进行采样来构建思想链方法。我们还通过将设置调整为更具“创意”,再次使用“temperature”等设置,使路径更加多样化,然后我们对所有答案进行多数投票。

 下图说明了自我一致性的概念。它展示了一个比较使用贪婪解码方法的单个解决方案的结果和使用更多样化的解码方法的多代采样解决方案的结果的示例。前者没有得到正确的答案,而后者却得到了正确的答案。

树状Prompt链

 树状Prompt链,其实就时思维树(ToT)。在之前的链式模式的基础上,当问题更加复杂并且需要更细粒度的推理步骤时,将步骤分解成多个部分会很有帮助。在每一步中,我们鼓励模型探索不同的解决方案,投票选出最佳解决方案,然后继续下一步。这在故事写作等创意应用中也很有用。相比将模型限制在单一路径,让模型探索不同的故事想法更有趣,从而提高最终输出的质量。 让我们用Yao等人的一个具体例子来介绍思想树的概念(参考论文链接:https://arxiv.org/pdf/2305.10601.pdf)。下图说明了这个概念与直接输入输出提示、思维链和思维链自我一致性的区别。在每一步,模型都会生成几个不同的解决方案。然后使用单独的提示来评估这些解决方案并投票选出最佳解决方案。重复该过程直到完成最后一步。 这是论文中展示的创意写作任务的示例之一。下图显示了初始输入,其中包含四个看似不相关的句子的列表 - 每个句子都讨论倒立、空间的气味、手语和人们的感知。任务是将它们编织成一个连贯的段落。它必须包含四个短段落,每个段落都以给定的句子结尾。 在此示例中,由于任务相当具有挑战性,因此将任务分为两部分是有意义的:编写计划和根据获胜计划编写实际段落。每一步,模型都会生成一些解决方案,然后使用另一个提示来评估和投票选出最佳解决方案,指导下一步的方向。上面屏幕截图中显示了几个写作计划选项,获胜的选项建议以自助为主题,将句子编织成连贯的段落。

循环Prompt链

 在某些应用程序中,考虑到后续步骤中发生的情况,我们可能需要重新运行生成步骤。一个例子是,后续步骤用于检查生成的响应是否满足特定标准,例如质量和格式。这就是循环模式有用的地方。 让我们以改写任务为例。假设我们有一个应用程序接受粗鲁的用户评论并建议重新措辞以使其更加礼貌。在这里,我们希望LLM的回复是礼貌的,同时保留评论的原始含义。接受要重新表述的用户输入的Prompt可能如下所示:接下来,我们创建另一个提示来检查改写的评论是否与原始评论足够相似。

Prompt链性能考虑

 Prompt链是一个非常强大的概念,当单个Prompt设置不足时,它可以使复杂的用例成为可能。话虽如此,Prompt链只有在真正必要的场景时才应该考虑它的应用,因为它有性能的限制。

 其中一项考虑因素是延迟。链条越长,完成任务从开始到结束所需的时间就越长。如果应用程序对延迟敏感,则尽可能减少链的数量是有意义的。在设计依赖于提示链的应用程序时,成本因素是另一个考虑因素。

总结

 综上,本文介绍了几种Prompt链,其中包括:顺序Prompt链、并行Prompt链、抽样Prompt链、树状Prompt链、循环Prompt链,它们在实际应用中能够很大的发挥出LLMs的能力,为解决复杂问题提供了很大创造空间,尽管在性能方面需要做一定的权衡,但是做好功能和性能的调整也是一项很有意义的挑战。

推荐阅读

[1]最新学术进展!2023年7月份,爆款论文总结!

[2]纯货!最全Prompt工程方法总结(超全)

[3]一项关于Transformer参数设置的深度研究

[4]ACL2023|知识图谱(KG)检索新框架--DiFaR

[5]实验结果表明:代码自修复能力仅存在GPT-4!

[6]Goat-7B干翻GPT-4,超PaLM-540B!24G可训练

点击下方链接🔗关注我们

「资料整理不易,点个再看吧」
继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存