Six strategies for getting better results #
Write clear instructions #
GPT 无法读懂你的心思。如果产出太长,请要求简短回复。如果结果太简单,要求专家级的写作。如果您不喜欢格式,请演示您希望看到的格式。GPT 越少需要猜测你想要什么,你就越有可能得到它。
- 在您的询问中包含详细信息,以获得更多相关答案:为了得到高度相关的回复,请确保请求提供了任何重要的细节或上下文。否则,您就只能让模型来猜测您的意思了。
- 要求模特采用一个角色:系统信息可用于指定模型在回复中使用的角色。
- 使用分隔符清楚标明输入内容的不同部分:三引号、XML 标记、章节标题等分隔符可以帮助划分需要区别对待的文本部分。
- 指定完成任务所需的步骤:有些任务最好以一连串的步骤来指定。明确写出这些步骤可以让模型更容易地遵循它们。
- 举例说明:提供适用于所有示例的一般说明通常比通过示例演示任务的所有排列组合更有效,但在某些情况下,提供示例可能更容易。例如,如果您打算让模型复制一种难以明确描述的回应用户询问的特定风格,这就是所谓的 “少量 “提示。这就是所谓的 “少量 “提示。
- 指定所需的输出长度:您可以要求模型生成具有给定目标长度的输出。可以用字数、句数、段落数、要点数等来指定目标输出长度。但请注意,指示模型生成特定字数的精确度并不高。模型可以更可靠地生成具有特定段落数或要点数的输出结果。
Provide reference text #
GPT 可以自信地编造虚假答案,尤其是在被问及深奥的话题或引用和 URL 时。就像一张笔记能帮助学生在考试中取得更好的成绩一样,为 GPT 提供参考文本也能帮助他们在作答时减少无中生有的情况。
- 指导模型使用参考文本作答:如果我们能为模型提供与当前查询相关的可信信息,那么我们就可以指示模型使用所提供的信息来撰写答案。
- 指导范例引用参考文献回答问题:如果输入内容中已经补充了相关知识,那么就可以直接要求模型通过引用所提供文档中的段落来为其答案添加引文。请注意,输出中的引用可以通过所提供文档中的字符串匹配进行编程验证。
Split complex tasks into simpler subtasks #
在软件工程中,将一个复杂的系统分解成一系列模块化组件是一种很好的做法,提交给 GPT 的任务也是如此。复杂任务的错误率往往高于简单任务。此外,复杂任务通常可以重新定义为较简单任务的工作流程,其中前期任务的输出被用于构建后期任务的输入。
- 使用意图分类来确定与用户查询最相关的指令:对于需要大量独立指令集来处理不同情况的任务,首先对查询类型进行分类,并利用该分类来确定需要哪些指令,可能会有所帮助。这可以通过定义固定类别和硬编码与处理特定类别任务相关的指令来实现。这一过程也可以递归应用,将任务分解为一系列阶段。这种方法的优势在于,每次查询只包含执行任务下一阶段所需的指令,与使用单次查询执行整个任务相比,错误率更低。这还可以降低成本,因为运行较大的提示需要花费更多的成本。
- 对于需要冗长对话的对话应用程序,总结或过滤之前的对话:由于 GPT 的上下文长度是固定的,因此用户和助手之间的对话(整个对话都包含在上下文窗口中)不可能无限期地进行下去。解决这个问题有多种变通方法,其中之一就是总结对话中的前几轮对话。一旦输入的大小达到预定的阈值长度,就会触发一个对部分对话进行总结的查询,而之前对话的总结可以作为系统消息的一部分。或者,也可以在整个对话过程中在后台异步总结之前的对话。
- 对长文档进行分块摘要,并递归构建完整摘要:由于 GPT 有固定的上下文长度,因此在单次查询中,GPT 无法用于摘要长度超过上下文长度减去生成摘要长度的文本。
Give GPTs time to “think” #
如果要求你用 17 乘以 28,你可能不会马上知道,但花点时间还是能算出来的。同样,GPT 学生在试图立即回答而不是花时间推理出答案时,会犯更多的推理错误。在回答问题之前,要求学生进行一连串的推理,可以帮助 GPT 学生更可靠地推理出正确答案。
- 在匆忙得出结论之前,指示模型自己找出解决方案:如果我们明确指示模型在得出结论之前先从第一性原理进行推理,会得到更好的结果。例如,假设我们想要一个模型来评估学生对数学问题的解答。最明显的方法是简单地问模型学生的解法是否正确。
- 使用内心独白或一系列查询来隐藏模型的推理过程:前面的策略表明,在回答具体问题之前,模型有时必须对问题进行详细推理。对于某些应用,模型得出最终答案的推理过程不宜与用户共享。例如,在辅导应用中,我们可能希望鼓励学生自己找出答案,但模型对学生解决方案的推理过程可能会向学生透露答案。内心独白是一种可以用来缓解这种情况的策略。内心独白的原理是指示模型将输出结果中不对用户公开的部分转化为结构化格式,以便于解析。然后,在向用户展示输出结果之前,先对输出结果进行解析,只让部分输出结果可见。
Use external tools #
向 GPT 提供其他工具的输出结果,弥补 GPT 的不足。例如,文本检索系统可以告诉 GPT 相关文档的信息。代码执行引擎可以帮助 GPT 进行数学运算和运行代码。如果某项任务可以通过工具而不是 GPT 更可靠或更高效地完成,那么就将其卸载,以获得两者的最佳效果。
- 利用嵌入式搜索实现高效知识检索:如果将外部信息源作为输入的一部分,模型可以利用外部信息源。这可以帮助模型生成更多信息和最新回复。例如,如果用户询问有关特定电影的问题,那么在模型输入中添加有关电影的高质量信息(如演员、导演等……)可能会很有用。嵌入可用于实现高效的知识检索,以便在运行时将相关信息动态添加到模型输入中。文本嵌入是一个可以衡量文本字符串之间相关性的向量。相似或相关的字符串会比不相关的字符串靠得更近。这一事实以及快速向量搜索算法的存在,意味着嵌入可以用来实现高效的知识检索。特别是,文本语料库可以分割成若干块,每个块都可以嵌入和存储。然后,可以嵌入给定的查询,并执行矢量搜索,从语料库中找到与查询最相关的嵌入文本块(即在嵌入空间中最接近的文本块)。
- 使用代码执行来执行更精确的计算或调用外部应用程序接口:不能依靠 GPT 自行准确执行算术运算或长时间计算。在需要的情况下,可以指示模型编写和运行代码,而不是自己进行计算。特别是,可以指示模型将需要运行的代码放入指定格式(如三重回溯)中。产生输出后,可提取并运行代码。最后,如有必要,可将代码执行引擎(即 Python 解释器)的输出作为下一次查询的模型输入。
- 让模型访问特定功能:聊天完成 API 允许在请求中传递函数描述列表。这样,模型就能根据提供的模式生成函数参数。生成的函数参数由 API 以 JSON 格式返回,可用于执行函数调用。然后,函数调用提供的输出可以在下一个请求中反馈到模型中,以结束循环。这是使用 GPT 模型调用外部函数的推荐方式。
Test changes systematically #
如果能对性能进行测量,提高性能就会变得更容易。在某些情况下,对提示符的修改会在一些孤立的示例上取得更好的性能,但在更具代表性的示例集上却会导致整体性能下降。因此,为了确保修改对性能的净积极影响,可能有必要定义一个综合测试套件(也称为 “评估”)。