图片

前文介绍了通过LangChain大模型开发框架进行了简单的模型调用开发,也了解了PromptTemplate也是模型调用的关键一环。因此如何有效的调用大语言模型的能力也是需要了解的。本文将通过提示工程的六大原则帮您了解如何建立有效的Prompt模板,以便于最大化调动模型能力。

图片
策略一

写下清晰明确的指令或说明

图片
图片
图片
方法
01

在查询中包含详细信息和预期以获得更相关的答案

为了让模型获得高度相关的响应,请确保请求提供任何重要的详细信息或上下文。否则,你将让模型来猜测你的意思。

图片

图片
方法
02

在查询中要求模特采用角色以获得更相关的答案

通过设定系统的Prompt内容,用于指定模型在其回复中使用的角色。

图片

图片
方法
03

在查询中使用分隔符来清楚地指示输入的不同部分

三引号、XML标签、章节标题等分隔符可以帮助划定文本部分,以区别对待。

图片

图片
方法
04

在查询中使用指定完成任务所需的步骤

一些任务最好指定为一系列步骤。明确地编写步骤可以使模型更容易遵循它们。

图片

图片
方法
05

在查询中使用可以帮助模型理解的示例

提供适用于所有示例的一般说明通常比通过示例演示任务的所有排列更有效,但在某些情况下,提供示例可能更容易。例如,如果您打算让模型复制响应用户查询的特定样式,这很难明确描述。这被称为“少弹”提示。

图片

结果如下:

图片

可见模型按照了相同的模式输出了内容。

图片
方法
06

在查询模型时详细描述,增加限定词

您可以要求模型生成给定目标长度的输出。目标输出长度可以通过单词、句子、段落、项目符号等的计数来指定。然而,请注意,指示模型生成特定数量的单词并不能高精度地工作。该模型可以更可靠地生成具有特定数量的段落或要点的输出。

图片
图片
图片

图片
策略二

提供完整的参考文本

图片
图片
图片
方法
01

指导模型使用参考清晰明确的文本进行回答

如果我们能够提供与当前查询相关的可信信息的模型,那么我们可以指示模型使用提供的信息来编写其答案。

图片

结果如下:

图片

图片
方法
02

指示模型用参考文本的引文来回答

如果输入已辅以相关知识,则直接要求模型通过引用所提供文档中的段落来在其答案中添加引文。请注意,然后可以通过提供文档中的字符串匹配以编程方式验证输出中的引文。

图片

结果如下:

图片
图片
图片

图片
策略三

拆分为简单的子任务

图片
图片
图片
方法
01

使用意图分类来识别用户查询最相关的说明

对于需要大量独立指令集来处理不同情况的任务,首先对查询类型进行分类,并使用该分类来确定需要哪些指令是有益的。这可以通过定义与处理给定类别中任务相关的固定类别和硬编码指令来实现。这个过程也可以递归地应用于将任务分解成一系列阶段。这种方法的优点是,与使用单个查询执行整个任务相比,每个查询将仅包含执行任务下一阶段所需的指令,这可能会导致更低的错误率。这也可能导致成本降低,因为较大的提示运行成本更高。

例如,假设对于客户服务应用程序,查询可以有效地分类如下:

图片

根据客户查询的分类,可以向模型提供一组更具体的说明,以处理后续步骤。例如,假设客户需要“故障排除”方面的帮助。

图片

请注意,模型已被指示发出特殊的字符串来指示对话状态何时发生变化。这使我们能够将我们的系统变成一个状态机,其中状态决定注入哪些指令。通过跟踪状态,哪些指令与该状态相关,以及可以选择允许从该状态进行哪些状态过渡,我们可以围绕用户体验设置护栏,而使用结构化程度较低的方法很难实现。

图片
方法
02

多轮对话的对话应用程序,总结或过滤之前的对话

由于模型具有固定的上下文长度,用户和助手之间的对话,其中整个对话包含在上下文窗口中,不能无限期地继续。

这个问题有各种变通方法,其中之一是总结对话中之前的转折。一旦输入的大小达到预定的阈值长度,这可能会触发一个查询,该查询总结了部分对话,并且之前对话的摘要可以作为系统消息的一部分。或者,在整个对话过程中,可以在后台异步总结之前的对话。

另一种解决方案是动态选择与当前查询最相关的对话的前几个部分。如“使用基于嵌入的搜索来实现高效的知识检索”的策略

图片
方法
03

总结长文档,并递归构建完整摘要

由于模型具有固定的上下文长度,因此它们不能用于在单个查询中总结长度超过上下文长度减去生成摘要长度的文本。

要总结一个非常长的文档,如一本书,我们可以使用一系列查询来总结文档的每个部分。章节摘要可以连接和总结,产生摘要摘要。这个过程可以递归进行,直到总结整个文档。如果有必要使用有关早期章节的信息来理解后续章节,那么另一个有用的技巧是包括书中任何给定点之前的文本的运行摘要,同时在该点总结内容。

图片
图片

图片
策略四

给模型时间“思考”

图片
图片
图片
方法
01

指导模型在匆忙得出结论之前制定自己的解决方案

有时,当我们明确指示模型在得出结论之前从第一原则进行推理时,我们会得到更好的结果。假设例如,我们想要一个模型来评估学生对数学问题的解决方案。解决这个问题最明显的方法是简单地询问模型学生的解决方案是否正确。

图片

但学生的解决方案实际上是不正确的!我们可以通过提示模型首先生成自己的解决方案来让模型成功注意到这一点。

图片

图片
方法
02

使用内部独白或一系列查询来隐藏模型的推理过程

前面的策略表明,模型在回答特定问题之前,有时对问题进行详细推理很重要。对于某些应用程序,模型用于得出最终答案的推理过程不适合与用户共享。例如,在辅导申请中,我们可能希望鼓励学生制定自己的答案,但模型对学生解决方案的推理过程可以向学生揭示答案。

内心独白是一种可以用来缓解这种情况的策略。内部独白的想法是指导模型将旨在向用户隐藏的部分输出转换为结构化格式,使解析它们变得容易。然后,在向用户显示输出之前,对输出进行解析,并且只显示部分输出。

图片

或者,这可以通过一系列查询来实现,其中除最后一个查询外,所有查询的输出都向最终用户隐藏。

首先,我们可以要求模型自己解决问题。由于这个初始查询不需要学生的解决方案,因此可以省略。这提供了额外的优势,即模型的解决方案不太可能因学生尝试的解决方案而产生偏差。

图片

接下来,我们可以让模型使用所有可用信息来评估学生解决方案的正确性。

图片

最后,我们可以让模型使用自己的分析,以有用的导师的身份构建回复。

图片

图片
方法
03

通过提示模型遗漏的内容以提示模型

假设我们正在使用一个模型来列出与特定问题相关的来源摘录。在列出每个摘录后,模型需要确定它是否应该开始编写另一个或是否应该停止。如果源文档很大,模型通常会过早停止,无法列出所有相关摘录。在这种情况下,通常可以通过提示模型进行后续查询来找到它在之前的通道中遗漏的任何摘录来获得更好的性能。

图片
图片
图片

图片
策略五

使用外部工具

图片
图片
图片
方法
01

使用基于嵌入的搜索来实现高效的知识检索

如果作为其输入的一部分提供,模型可以利用外部信息来源。这可以帮助模型产生更知情和最新的响应。例如,如果用户询问有关特定电影的问题,将有关电影的高质量信息(例如演员、导演等)添加到模型的输入中可能会有用。嵌入可用于实现高效的知识检索,以便在运行时动态地将相关信息添加到模型输入中。

文本嵌入是一个可以测量文本字符串之间相关性的向量。相似或相关的字符串将比不相关的字符串更接近。这一事实以及快速向量搜索算法的存在意味着嵌入可用于实现高效的知识检索。特别是,文本语料库可以拆分为块,每个块都可以嵌入和存储。然后可以嵌入给定的查询,并执行矢量搜索,以从语料库中找到与查询最相关的嵌入文本块(即在嵌入空间中最接近)。

图片
方法
02

使用代码执行来执行更准确的计算或调用外部API

不能依靠语言模型来自己准确执行算术或长计算。在需要这样做的情况下,可以指示模型编写和运行代码,而不是进行自己的计算。特别是,可以指示模型将旨在运行到指定格式(如三重回勾)的代码。产生输出后,可以提取代码并运行。最后,如有必要,代码执行引擎的输出(即Python解释器)可以作为下一个查询的模型输入。

图片

代码执行的另一个好用例是调用外部API。如果一个模型被指示正确使用API,它可以编写使用它的代码。可以通过向模型提供说明如何使用API的文档和/或代码示例来指导如何使用API。

图片

警告:执行模型生成的代码本质上是不安全的,任何寻求这样做的应用程序都应采取预防措施。尤其是,需要一个沙盒代码执行环境来限制不受信任的代码可能造成的伤害。

图片
方法
03

通过模型API的回调实现特殊的功能函数的方式

API允许在请求中传递功能描述列表。这样,模型就能根据提供的模式生成函数参数。这些生成的函数参数会以JSON格式由API返回,可用于执行函数调用。接着,函数调用的输出可以作为下一个请求的一部分反馈给模型,形成一个闭环。这是使用OpenAI模型调用外部函数的首选方式。

图片
图片

图片
策略六

系统地测试Prompt结果

图片
图片
图片
方法
01

建立有效的评估方法以进行Prompt评价

有时难以判断更改——比如新指令或新设计——是使系统变好还是变坏。通过查看几个例子可能会给出一定的暗示,但由于样本量较小,很难判断这是真正的改进还是随机运气的结果。有可能这种变化提高了某些输入的性能,却降低了其他输入的性能。

评估程序对于优化系统设计很有用。好的评估有如下几个特征:

1.代表现实世界的用法(或至少是多样化)

2.包含许多测试用例,以获得更大的统计能力(指南见下表)

3.易于自动化或重复

图片

输出评估可以由计算机、人类或两者的组合来完成。计算机可以利用客观标准(例如,针对那些只有一个正确答案的问题)进行自动评估,同时也能处理一些主观或模糊的标准,通过使用其他模型来评估模型的输出。

当存在多个质量相当高的潜在输出时(例如,对于需要详细解释的复杂问题),基于模型的评估可能非常有用。实际需要人类评估与可以由模型评估之间的界限是模糊的,且随着模型能力的增强而不断演变。因此,我们建议您进行实验,以确定基于模型的评估在您的特定用例中的效果如何。

图片
方法
02

模型输出评价的黄金法则有哪些标准

假设众所周知,一个问题的正确答案应该参考一组特定的已知事实。然后,我们可以使用模型查询来计算答案中包含多少所需事实。

例如:

图片

以下是两个点都满意的示例输入:

图片

以下是一个只满足一个点的示例输入:

图片

以下是一个没有人满意的输入示例:

图片

可以看出给模型以一个模糊的输入,很难有准确的回答。这种Prompt对于模型的应用来说是有害的。

这种类型的基于模型的评估有许多可能的变体。考虑以下的系统对话设置变化,它跟踪候选答案和黄金标准答案之间的重叠类型,并跟踪候选答案是否与黄金标准答案的任何部分相矛盾。

图片

这里有一个不符合标准答案的示例输入,尽管如此,它与专家的答案并不矛盾:

图片

以下是一个包含答案的示例输入,与专家的答案直接矛盾:

图片

这里有一个带有正确答案的输入示例,它还提供了比必要更多的细节:

图片

本段主要介绍了一些评测Prompt的方法和示例,希望帮助大家对于如何写出对模型提升效率的Pompt有所帮助。

图片
图片

图片
图片

赛博詹特曼

图片
图片

Q&A

图片

如何获取这份OpenAI的中文Prompt构建原则和方法文档?

文档已经整理好放到公众号后台:回复“prompt”即可获取下载链接

图片

图片

精彩推荐

图片
图片

X揭秘:OpenAI的AGI秘密Q*计划!

图片

超越直接关系:大语言模型的隐式推理能力研究

图片

利用大型语言模型,精准预测公共活动下人员流动

图片
图片
图片

END

图片
图片

点个 在看 你最好看

图片

作者 52AI

52人工智能社区管理员