如何最大限度地利用ChatGPT?OpenAI的官方GPT最佳实践揭秘!

点击上面卡片关注公众号

免费获取《玩转ChatGPT指南》

免费使用GPT共享账号和体验网站

这是一篇来着OpenAI官方发布的GPT最佳实践指南文档。

这个指南分享了从GPT模型中获取更好结果的策略和战术。这里描述的方法有时可以结合使用以获得更大的效果。我们鼓励尝试不同方法,找到最适合您的方法。

这里演示的一些示例目前仅适用于我们最强大的模型,gpt-4。如果您尚未获得gpt-4 API的访问权限,请考虑加入等待列表(申请链接:https://openai.com/waitlist/gpt-4-api)。

通常情况下,如果您发现一个GPT模型在某个任务上失败了,而另一个更强大的模型可用,再次尝试使用更强大的模型通常是值得的。

获取更好结果的六个策略:

1、写清晰的指示:

GPT无法读取您的思维。如果输出太长,请要求简短回答。如果输出太简单,请要求专家级写作。如果您不喜欢的格式,请演示您希望看到的格式。GPT越少猜测您的需求,您获得所需结果的可能性就越大。

策略:

  • 在您的查询中包含详细信息以获得更相关的答案。

  • 要求模型采用特定角色。

  • 使用定界符清晰地指示输入的不同部分。

  • 指定完成任务所需的步骤。

  • 提供示例。

  • 指定所需输出的长度。


2、提供参考文本

GPT模型能够自信地编造虚假答案,尤其是当被问及深奥的话题、引文或URL时。就像一张笔记纸可以帮助学生在考试中表现更好一样,为GPT模型提供参考文本可以帮助其在回答时减少虚构内容。

策略:

  • 指示模型使用参考文本回答问题

  • 指示模型使用参考文本中的引文回答问题


3、将复杂任务分解为简单的子任务

就像在软件工程中将复杂系统分解为一组模块化组件一样,将任务提交给GPT时也是如此。复杂任务往往比简单任务具有更高的错误率。此外,复杂任务通常可以重新定义为一系列简单任务的工作流程,其中早期任务的输出被用来构建后续任务的输入。

策略:

  • 使用意图分类来识别用户查询的最相关指令

  • 对于需要非常长对话的对话应用程序,对先前对话进行摘要或过滤

  • 逐段概括长文档并递归构建完整摘要


4、给GPT一些时间来“思考”

如果要求你计算17乘以28,你可能不能立即知道答案,但是经过一段时间你仍然可以计算出来。同样地,GPT在试图立即回答问题时会产生更多的推理错误,而不是花时间来计算出答案。在回答之前要求一个推理过程的链条可以帮助GPT更可靠地推理出正确答案。

策略:

  • 指导模型在匆忙得出结论之前自行解决问题

  • 使用内心独白或一系列问题来隐藏模型的推理过程

  • 问模型是否在之前的计算中漏掉了什么


5、使用外部工具

通过向GPT提供其他工具的输出来弥补GPT的弱点。例如,文本检索系统可以向GPT提供相关文档的信息。代码执行引擎可以帮助GPT进行数学计算和运行代码。如果一个任务可以通过工具而不是GPT更可靠或更高效地完成,那么将其卸载以获得最佳效果。

策略:

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

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


6、测试变化系统化

如果能够进行测量,改进性能就更容易。在某些情况下,对提示进行修改可能会在一些个别示例上取得更好的性能,但在更具代表性的一组示例上导致整体性能变差。因此,为确保变化对性能的净影响是积极的,可能需要定义一个全面的测试套件(也称为“评估”)。

策略:

  • 将模型输出与标准答案进行评估。


策略

上述列出的每个策略都可以通过具体的战术来实施。这些战术旨在提供尝试的思路。它们并不是完全详尽无遗的,您可以随意尝试不在此处列出的创意。

1、策略:编写清晰的指导说明

策略:在你的问题中包含细节以获得更相关的答案

为了获得高度相关的回复,请确保请求中提供任何重要的细节或背景。否则,您将让模型去猜测您的意思。

策略:要求模型扮演特定角色

系统消息可用于指定模型在回复中所使用的角色。

策略:使用分隔符清楚地指示输入的不同部分

三引号、XML标记、节标题等分隔符可以帮助划分文本的不同部分,以便进行不同处理。

于像这样的直接任务,使用分隔符可能不会对输出质量产生影响。然而,任务越复杂,澄清任务细节就越重要。不要让GPT(生成式预训练模型)费力去理解你具体要求它做什么。

策略:明确规定完成任务所需的步骤

有些任务最好被规定为一系列步骤。将这些步骤明确地写出来可以使模型更容易按照它们执行。

策略:提供示例

通常情况下,提供适用于所有示例的一般指导比通过示例展示所有任务的各种变化更有效,但在某些情况下,提供示例可能更容易。例如,如果您打算让模型复制一种难以明确描述的用户查询回应风格。这被称为“少样本”提示。

策略:指定输出的期望长度

您可以要求模型生成特定目标长度的输出。目标输出长度可以按照字数、句子数、段落数、项目符号等方式进行指定。但请注意,要求模型生成特定字数的输出可能无法精确实现。模型更可靠地生成具有特定段落或项目符号数量的输出。

2、策略:提供参考文本

策略:指示模型使用参考文本回答

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

鉴于GPT模型具有有限的上下文窗口,在应用此策略时,我们需要一种动态查找与所提出问题相关信息的方法。嵌入可以用于实现高效的知识检索。有关如何实现此方法的详细信息,请参见策略“使用基于嵌入的搜索实现高效的知识检索”。

策略:指导模型使用参考文本中的引文回答问题

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

3、策略:将复杂任务分解为简单子任务

策略:使用意图分类来识别用户查询的最相关指令

对于需要处理不同情况下的大量独立指令集的任务,首先对查询类型进行分类,并使用该分类确定所需的指令可以带来好处。这可以通过定义固定类别并编码与处理给定类别任务相关的指令来实现。此过程也可以递归应用于将任务分解为一系列阶段。这种方法的优势在于,每个查询仅包含执行任务下一个阶段所需的指令,与使用单个查询执行整个任务相比,可以降低错误率。这也可以降低成本,因为更大的提示会增加运行成本(有关定价信息,请参阅定价信息)。

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

根据客户查询的分类,可以为GPT模型提供一组更具体的指令来处理下一步操作。例如,假设客户需要有关“故障排除”的帮助。

请注意,模型已被指示发出特殊字符串以指示对话状态的变化。这使我们能够将系统转变为一个状态机,其中状态决定注入哪些指示。通过跟踪状态、确定在该状态下哪些指示是相关的,以及可选地确定从该状态允许进行的状态转换,我们可以为用户体验设置防护措施,这是使用较少结构化方法很难实现的。

策略:对于需要非常长对话的对话应用,可以对先前的对话进行概括或过滤。

由于GPT模型有固定的上下文长度,用户与助手之间的对话如果整个对话都包含在上下文窗口中,就无法无限制地继续下去。

有多种解决此问题的方法之一是对先前的对话进行概括。一旦输入的大小达到预定的阈值长度,可以触发一个查询来概括部分对话,之后的对话概括可以作为系统消息的一部分包含进来。或者,可以在整个对话过程中异步地对先前的对话进行概括。

另一种替代方案是动态选择与当前查询最相关的先前对话部分。请参阅策略"使用基于嵌入的搜索来实现高效的知识检索"。

策略:逐段概括长篇文档并递归构建完整摘要

由于GPT模型有固定的上下文长度,无法在单个查询中用于概括超过上下文长度减去生成摘要长度的长文本。

为了概括一本非常长的文档,比如一本书,我们可以使用一系列查询来概括文档的每个部分。将各个部分的摘要串联起来并进行概括,从而生成摘要的摘要。这个过程可以递归地进行,直到整个文档被概括完毕。如果需要利用之前的部分信息来理解后面的部分,那么一个有用的技巧是在概括某一点的内容时,同时包括书中在该点之前的文字概述。OpenAI之前的研究使用GPT-3的变体研究了这种概括书籍的方法的有效性。

4、策略:给予GPT足够的时间来“思考”

策略:在匆忙得出结论之前,指导模型自己找出解决方案

有时候,当我们明确指导模型在得出结论之前从首要原理进行推理时,我们能够获得更好的结果。举个例子,假设我们想要让模型评估学生对数学问题的解决方案。最直接的方法是简单地询问模型学生的解决方案是否正确。

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

策略:使用内心独白或一系列问题来隐藏模型的推理过程

前述策略表明,对于模型在回答特定问题之前,对问题进行详细推理有时非常重要。对于某些应用场景,模型推理过程中所使用的推理过程可能不适合与用户共享。例如,在辅导应用中,我们可能希望鼓励学生独立解答问题,但模型对学生解答的推理过程可能会揭示答案。

内心独白是一种可用于缓解这个问题的策略。内心独白的想法是指导模型将希望对用户隐藏的部分输出放入一个结构化的格式中,使其易于解析。然后,在向用户呈现输出之前,对输出进行解析,并只显示其中的一部分输出。

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

首先,我们可以要求模型自行解决问题。由于这个初始查询不需要学生的解决方案,可以省略。这还具有额外的优点,即模型的解决方案不会受到学生尝试的解决方案的偏见影响。

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

最后,我们可以让模型使用自己的分析能力以一个乐于助人的导师的角色来构建回复。

策略:询问模型是否在之前的遍历中遗漏了任何内容

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

5、策略:使用外部工具

策略:使用基于嵌入式搜索的方法来实现高效的知识检索

如果模型的输入中包含外部信息,那么该模型可以利用这些信息。这可以帮助模型生成更加明智和及时的回答。例如,如果用户询问一个特定电影的问题,将有关该电影的高质量信息(如演员、导演等)添加到模型的输入中可能会很有用。嵌入式可以用来实现高效的知识检索,以便在运行时动态地将相关信息添加到模型输入中。

文本嵌入是一种可以衡量文本字符串相关性的向量。相似或相关的字符串会比不相关的字符串更接近。这一事实以及快速向量搜索算法的存在意味着可以使用嵌入来实现高效的知识检索。具体而言,可以将文本语料库分成多个块,并对每个块进行嵌入和存储。然后可以对给定的查询进行嵌入,并进行向量搜索,以找到与查询最相关的文本块(即在嵌入空间中最接近的文本块)。

在OpenAI Cookbook中可以找到示例实现。请参阅“指示模型使用检索到的知识回答查询”的战术,了解如何使用知识检索来最大程度地减少模型捏造不正确事实的可能性。

策略:使用代码执行进行更准确的计算或调用外部 API

GPT 无法单独准确执行算术或长时间计算。在需要这样做的情况下,可以指示模型编写并运行代码,而不是进行自己的计算。特别是,可以指示模型将要运行的代码放入指定格式,例如三个反引号。产生输出后,可以提取并运行代码。最后,如有必要,可以将代码执行引擎(即 Python 解释器)的输出作为下一个查询的输入提供给模型。

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

警告:执行模型生成的代码本身并不安全,任何试图这样做的应用程序都应采取预防措施。特别是需要一个沙盒式的代码执行环境,以限制不可信代码可能造成的危害。


6、策略:系统地测试变化

有时候很难确定一个变化——例如,新的指令或新的设计——是让你的系统变得更好还是更差。观察一些示例可能会暗示哪个更好,但是由于样本量较小,很难区分是真正的改进还是随机运气。也许这个变化在某些输入上有助于性能,但对其他输入却有害。

评估程序(或"evals")对于优化系统设计很有用。好的评估应具备以下特点:

  • 代表实际世界的使用情况(至少是多样化的)

  • 包含许多测试用例以提高统计能力(请参考下表中的指南)

  • 易于自动化或重复执行

计算机、人类或混合都可以对输出进行评估。计算机可以使用客观标准(例如,具有单一正确答案的问题)自动化评估,还可以使用一些主观或模糊标准,其中模型输出由其他模型查询进行评估。OpenAI Evals是一个开源软件框架,提供了创建自动化评估的工具。

基于模型的评估在存在一系列可能被视为同等高质量的输出时(例如,对于长答案的问题),可以发挥作用。使用基于模型的评估与需要人工评估之间的边界是模糊的,并且随着模型变得更加强大,边界不断变化。我们鼓励进行实验,以确定基于模型的评估在您的用例中能够发挥多大作用。

策略:以黄金标准答案为参考评估模型输出

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

例如,使用以下系统消息:

这里是一个满足两个条件的示例输入:

这是一个只满足一个条件的示例输入。

这是一个示例输入,其中没有一个被满足:

这种基于模型的评估方法有许多可能的变体。考虑以下变体,它跟踪候选答案与黄金标准答案之间的重叠程度,并且还跟踪候选答案是否与黄金标准答案的任何部分相矛盾。

这是一个示例输入,其中包含一个次标准的答案,尽管它与专家答案并不矛盾。

以下是一个例子输入和答案,与专家答案直接相矛盾:

这是一个示例输入,带有一个正确答案,同时提供了比必要的更多细节。

其他资源

如需更多灵感,请访问OpenAI Cookbook,其中包含示例代码和指向第三方资源的链接,例如:

  • 提示库和工具

  • 提示指南

  • 视频课程

  • 有关改进推理的高级提示的论文



与其自己辛苦摸索一整年,不如跟着专业人士实操一个月。为此,我们成立了AIGC研习社,专为小白赋能AI,实操落地提升效率

如果你认可且愿意进入这个圈子,欢迎添加技能君微信AIGC05,更多社群权益详见《一个强大的AI时代即将来临,AI小白又该如何逆袭?》。

本文来自AI研习站