北京白癜风哪家最好 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/
在使用生成式AI的时候,你是否经常遇到AI答非所问,或者回答不尽满意的情况?你是否总是尝试很多次都没有得到满意的回答,只能大骂一句“智障”?
其实很多时候是使用的提示词不够准确,没有准确表达出意图。
12月15日,OpenAI终于在官方文档中发布了名为《提示词工程(Promptengineering)》,一个关于提示词工程的指南,现在终于有了一个官方认可且实用的Prompt工程的标准参考。
这个指南分享了从大型语言模型,如GPT-4获得更好结果的策略和方法。这里描述的方法有时可以结合使用以产生更大的效果。
虽然指南表示,展示的示例目前只适用于GPT-4,但实际上,里面的大部分建议对所有的大语言模型都适用。
获得更好结果的六项策略写下清晰的指示
提供参考文本
将复杂的任务拆分为更简单的子任务
给模型时间“思考”
使用外部工具
系统地测试变更
写下清晰的指示模型无法读懂你的想法。如果输出太长,请要求简短答复。如果输出太简单,请要求专家级别的写作。如果您不喜欢这种格式,请演示您希望看到的格式。模型猜测你想要什么的次数越少,你得到它的可能性就越大。
在您的查询中包含详细信息以获得更相关的答案:为了获得高度相关的回复,请确保请求提供任何重要的详细信息或上下文。否则,你将让模型来猜测你的意思。
要求模型代入角色:系统消息可用于指定模型在其回复中代入的角色。
比如“当我请求帮助写一些东西时,你会回复一份文档,其中每个段落至少包含一个笑话或有趣的评论。”
使用分隔符清楚地指示输入的不同部分:用三引号、XML标签、小节标题等分隔符可以帮助划分要区别对待的文本节。
比如“用俳句总结由三引号分隔的文本。”,“你将获得两篇关于同一主题的文章(用分隔)。首先总结每篇文章的论点。然后指出哪一个提出了更好的论点并解释原因。”或“你将获得论文摘要和建议的标题。论文标题应该让读者清楚地了解论文的主题,但也应该引人注目。如果标题不符合这些标准,请提出5个替代方案。”
对于这类的简单任务,使用分隔符可能不会对输出质量产生影响。然而,任务越复杂,消除任务细节的歧义就越重要。不要让模型去尝试准确地理解你对他们的要求,而是直接告诉它。
指定完成任务所需的步骤:有些任务最好指定为一系列步骤。明确地写出这些步骤可以使模型更容易遵循它们。
比如“使用以下分步说明来响应用户输入。
第1步-用户将提供三引号中的文本。用一个句子总结这篇文章,并加上前缀“摘要:”。
第2步-将第1步中的摘要翻译成西班牙语,并添加前缀“翻译:”。”
提供例子:提供适用于所有示例的一般说明通常比通过示例演示任务的所有排列更有效,但在某些情况下提供示例可能更容易。例如,如果您打算让模型复制响应用户查询的特定风格,而这种风格很难明确描述。这被称为“几个例子”。提示。
比如“以一致的风格回答我的问题。比如我说:教我什么是耐心。你回答:河流冲刷出最深的山谷,发源于温和的泉水;最伟大的交响乐源自一个音符;最复杂的挂毯都是从一根单独的线开始的。”
指定所需的输出长度:您可以要求模型生成给定目标长度的输出。目标输出长度可以根据单词、句子、段落、要点等的计数来指定。但请注意,指示模型生成特定数量的单词并不能高精度工作。该模型可以更可靠地生成具有特定数量的段落或要点的输出。
比如“将三引号分隔的文本概括至大约50个字/总结成两段/总结为3个要点。”
提供参考文本语言模型可以自信地创造假答案,特别是当被问及深奥的主题或引用时。就像一张笔记可以帮助学生在考试中取得更好的成绩一样,为这些模型提供参考文本可以帮助减少模型幻觉。
指示模型使用参考文本回答:如果可以为模型提供与当前查询相关的可信信息,那么可以指示模型使用提供的信息来组成其答案。
比如“使用提供的由三重引号引用的文章来回答问题。如果在文章中找不到答案,请写“我找不到答案”。”
指示模型通过引用参考文本来回答:如果输入已补充相关知识,则可以直接要求模型通过引用所提供文档中的段落来为其答案添加引用。
比如“你将获得一份由三重引号引用的文档和一个问题。您的任务是仅使用提供的文档回答问题,并引用用于回答问题的文档段落。如果文档不包含回答该问题所需的信息,则只需写:“信息不足”。如果提供了问题的答案,则必须附有引文注释。使用以下格式引用相关段落({“引用”:...})。”
将复杂的任务拆分为更简单的子任务
正如软件工程中将复杂系统分解为一组模块化组件是良好实践一样,提交给语言模型的任务也是如此。复杂的任务往往比简单的任务具有更高的错误率。此外,复杂的任务通常可以被重新定义为更简单任务的工作流程,其中早期任务的输出用于构造后续任务的输入。
使用意图分类来识别与用户查询最相关的指令:对于需要大量独立指令集来处理不同情况的任务,首先对查询类型进行分类并使用该分类来确定需要哪些指令可能会很有帮助。这可以通过定义与处理给定类别中的任务相关的固定类别和硬编码指令来实现。该过程还可以递归地应用以将任务分解为一系列阶段。这种方法的优点是每个查询仅包含执行任务下一阶段所需的指令,与使用单个查询执行整个任务相比,这可以降低错误率。这还可以降低成本,因为较大的提示运行成本更高。
比如,第一个聊天机器人只执行这个回答:
当用户输入“故障排除”后,可以指定另一个聊天机器人回答以下内容:
对于需要很长对话的对话应用,总结或过滤以前的对话:由于模型具有固定的上下文长度,因此用户和助手之间的对话(其中整个对话都包含在上下文窗口中)无法无限期地继续。你可以总结先前回合的对话,再继续后面的对话。
分段总结长文档并递归构建完整摘要:由于模型具有固定的上下文长度,因此它们不能用于总结长于上下文长度减去单个查询中生成的摘要长度的文本。要总结一个很长的文档(例如一本书),我们可以使用一系列查询先总结文档的每个章节。再将章节总结连接和总结,生成总结的总结。这个过程可以递归地进行,直到总结整个文档。如果有必要使用前面部分的信息来理解后面的部分,那么另一个有用的技巧是在书中任何给定点之前包含文本的运行摘要,同时总结该点的内容。
给模型时间“思考”如果要求将17乘以28,你可能不会立即知道结果,但你可以慢慢地算出来。同样,模型在尝试立即回答而不是花时间找出答案时会犯更多推理错误。寻求“思维链”可以帮助模型更可靠地推理出正确答案。
指示模型在急于得出结论之前找出自己的解决方案:我们可以通过提示模型首先生成自己的解决方案来让模型成功注意到这一点。
比如,假设我们想要一个模型来评估学生对数学问题的解决方案,你可以问“首先制定自己的问题解决方案。然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。在你自己完成问题之前,不要确定学生的解决方案是否正确。”
使用内心独白或一系列查询来隐藏模型的推理过程:前面的策略表明,模型有时在回答特定问题之前详细推理问题很重要。对于某些应用程序,模型用于得出最终答案的推理过程不适合与用户共享。内心独白是一种可以用来缓解这种情况的策略。内心独白的想法是指示模型将原本对用户隐藏的部分输出放入结构化格式中,以便于解析它们。然后,在向用户呈现输出之前,将解析输出并且仅使部分输出可见。
比如,“
请按照以下步骤回答用户的疑问。
第1步-首先找出你自己的问题解决方案。不要依赖学生的解决方案,因为它可能是不正确的。将此步骤的所有工作用三引号(“””)括起来。
第2步-将您的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。将此步骤的所有工作用三引号(“””)括起来。
第3步-如果学生犯了错误,请确定在不泄露答案的情况下可以给学生什么提示。将此步骤的所有工作用三引号(“””)括起来。
第4步-如果学生犯了错误,请向学生提供上一步的提示(在三重引号之外)。而不是写“步骤4-...”写“提示:”。”
询问模型在之前的过程中是否遗漏了任何内容:假设我们使用一个模型来列出与特定问题相关的来源的摘录。列出每个摘录后,模型需要确定是否应该开始编写另一个摘录或者是否应该停止。如果源文档很大,模型通常会过早停止并且无法列出所有相关摘录。在这种情况下,通过使用后续查询提示模型查找之前传递中错过的任何摘录,通常可以获得更好的性能。
比如,“
您将获得一份由三重引号分隔的文档。您的任务是选择与以下问题相关的摘录:“人工智能历史上发生了哪些重大范式转变。”
确保摘录包含解释它们所需的所有相关上下文-换句话说,不要提取缺少重要上下文的小片段。提供JSON格式的输出。”
使用外部工具通过向模型提供其他工具的输出来弥补模型的弱点。例如,文本检索系统(有时称为RAG或检索增强生成)可以告诉模型相关文档。像OpenAI的代码解释器这样的代码执行引擎可以帮助模型进行数学计算并运行代码。如果一项任务可以通过工具而不是语言模型更可靠或更有效地完成,那么可以卸载它以充分利用两者。
使用基于嵌入的搜索实现高效的知识检索:如果作为输入的一部分提供,模型可以利用外部信息源。这可以帮助模型生成更明智和最新的响应。例如,如果用户询问有关特定电影的问题,则将有关电影的高质量信息(例如演员、导演等)添加到模型的输入中可能会很有用。嵌入可用于实现高效的知识检索,从而可以在运行时动态地将相关信息添加到模型输入中。
文本嵌入是一个可以衡量文本字符串之间相关性的向量。相似或相关的字符串比不相关的字符串更接近。这一事实以及快速向量搜索算法的存在意味着嵌入可以用于实现高效的知识检索。特别地,文本语料库可以被分割成块,并且每个块可以被嵌入和存储。然后可以嵌入给定的查询,并且可以执行矢量搜索以从语料库中查找与查询最相关的嵌入文本块(即在嵌入空间中最接近的文本块)。
使用代码执行来执行更准确的计算或调用外部API:不能依赖语言模型自行准确地执行算术或长时间计算。在需要的情况下,可以指示模型编写和运行代码,而不是进行自己的计算。特别是,可以指示模型将要运行的代码放入指定的格式,例如三重反引号。产生输出后,可以提取代码并运行。最后,如有必要,可以将代码执行引擎(即Python解释器)的输出作为下一个查询的模型的输入。
比如,“您可以通过将Python代码括在三个反引号中来编写和执行,例如```代码放在这里```。用它来执行计算。”
授予模型访问特定功能的权限:聊天完成API允许在请求中传递功能描述列表。这使得模型能够根据提供的模式生成函数参数。生成的函数参数由API以JSON格式返回,可用于执行函数调用。然后,可以将函数调用提供的输出反馈到以下请求中的模型中以关闭循环。这是使用OpenAI模型调用外部函数的推荐方式。
系统地测试变更如果可以衡量性能,那么提高性能就会更容易。在某些情况下,对提示的修改将在一些孤立的示例上实现更好的性能,但会导致在一组更具代表性的示例上整体性能变差。因此,为了确保更改对性能有净积极作用,可能有必要定义全面的测试套件(也称为“评估”)。
参考黄金标准答案评估模型输出:假设已知问题的正确答案应参考一组特定的已知事实。然后我们可以使用模型查询来计算答案中包含多少必需的事实。
比如,“您将获得由三引号分隔的文本,该文本应该是问题的答案。检查答案中是否直接包含以下信息:
-尼尔·阿姆斯特朗是第一个登上月球的人。
-尼尔·阿姆斯特朗首次登上月球的日期是年7月21日。
对于其中的每一点,请执行以下步骤:
1-重申这一点。
2-提供最接近这一点的答案的引文。
3-考虑不知道主题的阅读引文的人是否可以直接推断出该点。在做出决定之前解释一下原因或原因。
4-写“是”如果3的答案是肯定的,否则写“否”。
最后,提供有多少个“是”的计数。答案是有的。将此计数提供为{“count”:在此插入计数}。”
总结坦白讲,Prompt的本质,就是如何把需求表达清楚。
大模型就是你的实习生助手,你给它的指令越清晰、越详细,它给你反馈就越可能是你想要的。这一点上,大模型和人是一样的。甚至还有不少测试说,给予大模型激励承诺、诉苦博取大模型同情、告知大模型回答的重要性都能提升大模型回答的质量,这样的大模型,与人又有何异?
当然,大模型也有一些他自己的特点,反应快、记性差、逻辑能力差。如何利用好优势,规避劣势,就是各位老板要思考的了。
如果你觉得这篇文章对你有所帮助,欢迎点赞、收藏以及转发分享。同时,请