首页 > 其他分享 >[转]OpenAI官方Prompt 工程指南

[转]OpenAI官方Prompt 工程指南

时间:2023-12-25 17:56:13浏览次数:39  
标签:指南 总结 Prompt 模型 任务 OpenAI ChatGPT

本文转自  夕小瑶科技说

https://platform.openai.com/examples

OpenAI 官方发布了 Prompt 工程指南,讲述了快速上手 ChatGPT Prompt 的种种“屠龙术”,不仅在理论层面对 Prompt 分类总结,还提供了实际的 Prompt 用例,帮助大家来学习如何有效的与 ChatGPT 交互

宏观来看,OpenAI 给出了可以提升 ChatGPT 回复效果的“六大秘籍”,分别是:

  • 清晰细致
  • 提供参考
  • 任务拆分
  • 让它思考
  • 外部工具
  • 系统测试

1. 清晰细致

让我们先来看第一条策略:清晰细致

如果说的大白话一点,就是要把你需要解决的问题说清楚讲明白。要想从 ChatGPT 那里获得良好的回复,那么 Prompt 本身必须结合精确性、清晰度与任务描述的细致程度于一身,为了避免歧义而“把话说清楚”是让 ChatGPT 高效工作的重中之重。

举个例子,假设我们想了解“2021年的时候谁是墨西哥的总统”,甚至更进一步还想知道他/她是否目前仍然是总统,如果我们扔给 ChatGPT 一句“谁是总统?”,别说 ChatGPT,就算是政治老师也会一脸懵逼,更好的 Prompt 应该是:“2021年谁是墨西哥的总统,墨西哥几年举行一次选举?”

如果说上面的例子有点极端,那么再看一个更加日常的例子。假设我们要去进行一个会议总结,如果我们期望 ChatGPT 可以给到我们良好的回复,那么我们就不应该直接扔进去一句话:“帮我总结这份会议笔记”,而是要将我们的需求讲明白:“首先使用简单一段总结概括这份会议笔记的主要内容,其次将会议中各个发言者的核心点以 Markdown 的格式分条列出,最后,如果有的话,列出每个发言者提出的下一步行动计划与方案”

显然,后者的描述更为清晰,更有可能得到我们想要的答案。OpenAI 在指南中列出了一个 Worse or Better 的示例供大家参考:

 

同时,OpenAI 给出了一个 Prompt 想要做到表达清晰细致应该需要包含的内容:

  • 关于任务需求的详细信息
  • 要求模型扮演的角色
  • 使用分隔符清晰的区分输入的不同部分
  • 指定完成任务所需的步骤
  • 提供示例
  • 指定所需的输出长度

以上述的会议总结为例,一个更加完整的 Prompt 可能是:

指令:假设你是一场会议的会议秘书【指定角色】,首先【任务拆分】使用简单一段总结概括这份会议笔记的主要内容,其次将会议中各个发言者的核心点以 Markdown 的格式分 3 条【指定长度】列出,最后,如果有的话,列出每个发言者提出的下一步行动计划与方案【详细信息】。请以将总结插入到下方模板的<>中间。

模板【使用分隔符】:总结:发言人 1 核心观点:发言人 2 核心观点:…… 发言人 1 行动计划:发言人 2 行动计划:……

示例【提供示例】:……

2. 提供参考

第二点重要的策略是需要为 ChatGPT 提供参考,通过引导 ChatGPT 根据我们给定的材料撰写答案,将会使得模型回答更加聚焦于当前的问题之上,从而生成更加可靠与准确的答案

譬如,如果我们直接询问模型“知识产权盗窃的法律后果是什么?”,那么模型可能无法专业准确的对问题进行回复,而如果我们给模型提供一篇关于知识产权法的论文或发条,模型就会给出更加专业的回复。

指令:参考提供的法律期刊文章与法条,解释知识产权盗窃的法律后果。参考:【知识产权盗窃的法律规范xxx】

而为了使得模型更好的理解参考文本并且直接引用参考中的原文进行回复,那么就可以对参考引用做出更加细致的解释,譬如:

指令:参考下面这份由三个引号进行分隔的文件,请回答知识产权盗窃的法律后果是什么。请仅仅引用所提供的文件来回答问题,并且引用用于回答问题的相关段落,如果文件中不包含回答问题所需的信息,则需要写出“信息不足”。如果找到了相关答案,则必须注明引文,请使用以下格式引用相关段落({“引用”:……})。参考:【知识产权盗窃的法律规范xxx】

3. 任务拆分

受启发来自软件工程中将复杂系统分解为一组模块的组件的思想,任务拆分也是提示 Prompt 性能的法宝之一,复杂任务可以被拆分为简单任务的累加,通过解决一系列简单任务就可以得到逼近复杂任务满意解的方案。

举一个长文档摘要的例子,对于一个过长的文本,比如直接让 ChatGPT 理解一本 300 页的书籍可能 ChatGPT 无法做到,但是通过任务分解——递归的分别总结书籍中的每一章,在每一章的总结之上对书籍内容进行摘要——就有可能实现对难任务的解决。

具体而言,任务分解的也需要做到:

  • 对不同的查询任务进行分类
  • 对长对话进行总结与过滤
  • 分段总结长文档并递归构建摘要

而这样做,可以:

  1. 通过专注于复杂任务的特定方面以提升准确率
  2. 分解任务使得子任务更加便于管理,可以降低错误率与输出不相关内容的概率
  3. 用户收到有针对性的分步指导有可能提升用户体验
  4. 子任务划分也有可能带来成本效益

4. 让它思考

有一个有意思的点在于,从“Let's think step by step”的实践中我们可以发现,让模型一步一步的思考而不是直接给出答案可以显著的提升任务的准确率

以思维链技术 COT 的代表应用数学解题为例,有如下的题目:

土地租用成本为 100 美元/平方英尺,太阳能电池板购买成本为 250 美元/平方英尺,固定投入成本为 10 万美元,每年的运营成本为 10 美元/平方英尺,假设购买 x 平方英尺的太阳能电池板,请问一年的总成本为多少?

对此,现在,有个学生给出的解题步骤为(1)土地成本100x,(2)电池板购买成本250x,(3)运营成本10x,(4)固定投入100000,则总成本为 100x + 250x + 100x + 100000 = 450x + 100000

显然这名学生将运营成本的 10x 错写为了 100x,但是如果直接将学生答案输入模型,询问"学生的解决方案是否正确?"时,模型却会错误认为该解法正确:

 

但是如果"让模型进行思考",告诉模型首先由模型自己确定一个解决方案,再将自己的解法与学生的解法进行比较,评估学生的解法是否正确。在自己完成问题之前,不要确定学生的解法是否正确。

而如果这样输入,模型不仅可以提供正确解法还可以很快发现学生的错误之处:

 

5. 外部工具

从 AI Agent 的思路出发,语言模型必然不是万能的,但是就如同人类一样,我们可以通过向模型提供其他工具的方式来弥补模型的弱点,其中最经典的应用莫过于大模型与代码执行引擎的结合。

所谓让专业的人去做专业的事,直接从自己学习与训练的语料中感知到今天的天气如何可能对大模型而言是无法做到的,但是现在有太多方便调用的天气 API 可以很快的帮助模型查询到今天的天气,从而使得模型提升自己的能力

其中典型的应用有:

  1. 精确求解问题:如果直接问模型一个加减乘除平方开根号,涉及精确值的问题大模型往往并不擅长,譬如计算 529 的平方根,模型一开始的输出是不确定的不精确的,但是如果更改 Prompt 让模型"编写并执行 Python 代码来计算此值",则会得到更加有据可依的答案
  2. 专用功能问题:如果直接让模型"向我的朋友发送关于我们明天见面的提醒",那么模型估计爱莫能助。但是如果让模型使用 Python 调用消息 API 发送消息,那么模型就可以很好的完成消息传递这一需求

 

6. 系统测试

要想真正测试到"好的 Prompt",那么必然要在一个全面系统的环境下对 Prompt 进行评估与检验。很多场景下在一个孤立的实例中一个 Prompt 的效果良好并不能代表这个 Prompt 可以推而广之,因此对 Prompt 的系统测试也是提升 Prompt 能力的关键环节之一。

其中,一种方法是假设我们已经知道了正确答案应当包含的某个已知事实,那么就可以使用模型来查询输出中包含多少必要的事实。比如我们假设存在一个事实"阿姆斯特朗是第一个登上月球的人",则可以向模型输入:

以下有三组以引号进行分隔的文本,该文本的正确答案是:尼尔·阿姆斯特朗是第一个登上月球的人,请检查答案是否直接包含上述信息,对于每组文本,请首先理解文本,提供最接近正确的答案的引文,考虑在不清楚相关主题的人是否可以直接从该文本推断出正确答案

 此外,还可以借助"矛盾推断","细节补充"等等方式对输出答案进行评估,以确定更好的 Prompt 格式。

总结

毫无疑问,Prompt 的质量显著影响着大模型的性能,而好的 Prompt 有甚至不仅仅是一种技术更是一种"艺术"。作为"人"与"AI"互动的窗口,Prompt 很有可能是未来 AI 时代我们必须掌握的"第二语言",而这份 OpenAI 官方的指南就非常类似一本小学英语入门教科书,感兴趣的大家可以去查阅原文浏览更加详细的例子

链接: https://platform.openai.com/docs/guides/prompt-engineering/six-strategies-for-getting-better-results

除了指南以外,OpenAI 还提供了更加即插即用的各个场景下的优秀 Prompt 范例

 

譬如我期望使用大模型完成翻译任务,那么在 Prompt examples 中搜索翻译,就可以找到优秀的"满分作文"供我们抄袭(x)借鉴(√)

 除了 Prompt 以外,还有 API 调用的代码以供参考,提供了推荐的 temperature 等参数:

 

标签:指南,总结,Prompt,模型,任务,OpenAI,ChatGPT
From: https://www.cnblogs.com/lyggqm/p/17926654.html

相关文章

  • 数据映射优秀实践:类型、方法和工具的简要指南
    在软件应用程序之间映射数据是一个耗时的过程,这需要进行深入的准备,对数据源和目标有较好的理解,并要根据方法进行实际开发。在任何应用程序集成、数据迁移以及一般的数据管理计划中,数据映射都是最关键的步骤之一。甚至可以这么认为:集成项目的成功在很大程度上取决于源数据到目标数......
  • AIKit v4.11.0 – WordPress AI 自动编写器、聊天机器人、写作助手和内容重定向器 / O
    AIKitv4.11.0:WordPress的AI革命一、引言AIKitv4.11.0是一款为WordPress用户精心设计的强大插件,该插件集成了OpenAI的GPT-3技术,为用户提供了前所未有的AI写作和聊天机器人功能。此版本的推出,将WordPress的功能扩展到了全新的领域,利用人工智能技术,让网站内容创作变得更加简单......
  • 利用Prompt学习更多示例,提高大模型性能
    随着人工智能技术的不断发展,大型语言模型(如GPT-3、BERT等)在自然语言处理领域的应用越来越广泛。然而,这些模型通常需要大量的训练数据才能达到较高的性能。为了解决这个问题,一种有效的方法是使用prompt学习,即通过向模型提供示例来引导其生成输出。在prompt学习中,关键在于如何选择和......
  • Prompt Tuning:大模型微调的实战技巧
    随着深度学习技术的不断发展,大模型在各个领域的应用越来越广泛。然而,训练和调整大模型需要大量的时间和计算资源。为了解决这个问题,研究人员提出了PromptTuning方法,这是一种基于预训练模型进行微调的技术。本文将重点介绍PromptTuning大模型微调实战中的重点词汇或短语。一、大模......
  • Prompt-Tuning:大模型微调技术
    随着深度学习技术的不断发展,大模型(如GPT、BERT等)在各种自然语言处理(NLP)任务中取得了显著的成功。然而,训练和部署大模型需要大量的计算资源和时间,这限制了其在一些资源有限场景中的应用。为了解决这个问题,研究人员提出了各种大模型微调技术,以减少模型的大小和计算复杂度,同时保持模型......
  • 系统架构设计面试指南(01)-微服务和CAP
    系统设计是定义满足特定需求的系统的架构、接口和数据的过程。系统设计通过协同和高效的系统满足您的业务或组织需求。一旦业务或组织确定了其需求,就可以开始构建一个将这些需求融入物理系统设计的过程,以满足客户的需求。您设计系统的方式将取决于您是选择自定义开发、商业解决方案......
  • 人工智能大模型原理与应用实战:从OpenAI Five到MuZero
    1.背景介绍人工智能(AI)是计算机科学的一个分支,研究如何使计算机能够像人类一样进行智能操作。AI的目标是让计算机能够理解自然语言、进行逻辑推理、学习自主决策、进行视觉识别、进行语音识别等等。AI的主要技术有机器学习、深度学习、神经网络、自然语言处理、计算机视觉、机器人等......
  • OpenAI Q* 是一个彻底的 谣言...
    OpenAI仍未明确解释Q*究竟是什么,但透露的线索倒是相当不少。11月22日,就在OpenAI决定解雇(后又重新聘用)CEOSamAltman的几天之后,技术媒体TheInformation报道称OpenAI取得了一项重大技术突破,使其能够“开发出更强大的AI模型”。新模型被命名为Q*(音为「Qstar」),“具......
  • Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
    学习基础知识掌握Go语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解Go基础知识的好起点是查阅Go官方文档文章链接:Go编程语言详解:用途、特性、与Python和C++的比较基本语法了解Go语言的基本语法,包括Go程序的执行方式、包引入、主函数等Go......
  • Go 语言学习指南:变量、循环、函数、数据类型、Web 框架等全面解析
    学习基础知识掌握Go语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解Go基础知识的好起点是查阅Go官方文档文章链接:Go编程语言详解:用途、特性、与Python和C++的比较基本语法了解Go语言的基本语法,包括Go程序的执行方式、包引入、主函数等Go......