ChatGPT 出身以来,凭借划时期的创新,被无数人一举送上天生式 AI 的神坛,

我们总是期望它能准确理解我们的意图,却时常创造其回答或创作并非百分之百贴合我们的期待。
这种落差可能源于我们对付模型性能的过高期望,亦或者我们在利用时未能找到最有效的沟通路子。

正如探险者须要韶光适应新的地形,我们与 ChatGPT 的互动也须要耐心和技巧,此前 OpenAI 官方发布了 GPT-4 利用指南 Prompt engineering,这里面记载了驾驭 GPT-4 的六大策略。

相信有了它,未来你和 ChatGPT 的沟通将会更加顺畅。

最全攻略OpenAI 宣告 GPT4 运用指南所有干货全在这

大略总结一下这六大策略:

写出清晰的指令供应参考文本将繁芜的任务拆分为更大略的子任务给模型韶光「思考」利用外部工具系统地测试变更写出清晰的指令描述详细的信息

ChatGPT 无法判断我们隐含的想法,以是我们该当尽可能明确奉告你的哀求,如回答的是非、写作的水平、输出的格式等。

越少让 ChatGPT 去预测和推断我们的意图,输出结果知足我们哀求的可能性越大。
例如,当我们让他写一篇生理学的论文,给出的提示词该当长这样

请帮助我撰写一篇有关「烦闷症的成因及治疗方法」的生理学论文,哀求:须要查询干系文献,不能抄袭或剽窃;须要遵照学术论文格式,包括择要、弁言、正文、结论等部分;字数 2000 字以上。

让模型扮演某个角色

术业有专攻,指定模型扮演专门的角色,它输出的内容会显得更加专业。

例如:请你扮演一名警探小说家,用柯南式推理描述一起离奇命案。
哀求:需匿名处理,字数 1000 字以上,剧情跌宕起伏。

利用分隔符清楚地划分不同部分

三引号、XML 标签、节标题平分隔符可以帮助划分须要差异对待的文本节,帮助模型更好地肃清歧义。

指定完成任务所需的步骤

将部分任务拆成一系列条例清晰的步骤,这样更有利于模型实行这些步骤。

供应示例

供应适用于所有示例的一样平常性解释常日比通过示例演示更有效,但在某些情形下供应示例可能更随意马虎。

举个例子,如果我见告模型要学会拍浮,只须要踢腿和摆动手臂,这便是一个一样平常性的解释。
而如果我给模型展示一个拍浮的视频,展示踢腿和摆动手臂的详细动作,那便是通过示例来解释。

指定输出长度

我们可以见告模型,希望它天生的输出有多长,这个长度可以以单词、句子、段落、要点等办法进行计数。

受限于模型内部机制和措辞繁芜性的影响,最好还是按照段落、要点来划分,这样效果才会比较好。

供应参考文本让模型利用参考文本回答

如果我们手头上有更多参考信息,那我们可以「喂」给模型,并让模型利用供应的信息来回答。

让模型引用参考文本来回答

如果输入中已经包含了干系的知识文档,用户可以直接哀求模型通过引用文档中的段落来为其答案添加引用,尽可能减少模型胡说八道的可能性。

在这种情形下,输出中的引用还可以通过编程办法验证,即通过对所供应文档中的字符串进行匹配来确认引用的准确性。

将繁芜的任务拆分为更大略的子任务利用意图分类来识别与用户查询最干系的指令

处理那些须要很多不同操作的任务时,我们可以采取一个比较聪明的方法。
首先,把问题分身分歧的类型,看看每一种类型须要什么操作。
这就彷佛我们在整理东西时,先把相似的东西放到一起。

接着,我们可以给每个类型定义一些标准的操作,就像给每类东西贴上标签一样,这样一来,就可以事先规定好一些常用的步骤,比如查找、比较、理解等。

而这个处理方法可以一层层地递进,如果我们想提出更详细的问题,就可以根据之前的操作再进一步细化。

这么做的好处是,每次回答用户问题时,只须要实行当前步骤须要的操作,而不是一下子把全体任务都做了。
这不仅可以减少出错的可能性,还能更省事,由于一次性完玉成部任务的代价可能比较大。

对付须要处理很长对话的运用处景,总结或过滤之前的对话

模型在处理对话时,受制于固定的高下文长度,不能记住所有的对话历史。

想要办理这个问题,个中一种方法是对之前的对话进行总结,当输入的对话长度达到一定的限定时,系统可以自动总结之前的谈天内容,将一部分信息作为择要显示,或者,可以在对话进行的同时,在后台悄悄地总结之前的谈天内容。

另一种办理方法是在处理当前问题时,动态地选择与当前问题最干系的部分对话。
这个方法涉及到一种叫做「利用基于嵌入的搜索来实现高效的知识检索」的策略。

大略来说,便是根据当前问题的内容,找到之前对话中与之干系的部分。
这样可以更有效地利用之前的信息,让对话变得更有针对性。

分段总结长文档并递归构建完全择要

由于模型只能记住有限的信息,以是不能直接用来总结很长的文本,为了总结长篇文档,我们可以采取一种逐步总结的方法。

就像我们阅读一本书时,可以通过一章又一章地提问来总结每个部分。
每个部分的择要可以串联起来,形成对全体文档的概括。
这个过程可以一层一层地递归,一贯到总结全体文档为止。

如果须要理解后面的内容,可能会用到前面的信息。
在这种情形下,另一个有用的技巧是在阅读到某一点之前,先看一下择要,并理解这一点的内容。

给模型韶光「思考」

指示模型在急于得出结论之前想出自己的办理方案

以往我们可能直接让模型看学生的答案,然后问模型这个答案对不对,但是有时候学生的答案是错的,如果直接让模型判断学生的答案,它可能判断不准确。

为了让模型更准确,我们可以先让模型自己做一下这个数学题,先算出模型自己的答案来。
然后再让模型比拟一放学生的答案和模型自己的答案。

先让模型自己算一遍,它就更随意马虎判断出学生的答案对不对,如果学生的答案和模型自己的答案不一样,它就知道学生答错了。
这样让模型从最基本的第一步开始思考,而不是直接判断学生的答案,可以提高模型的判断准确度。

利用内心独白来隐蔽模型的推理过程

有时候在回答特定问题时,模型详细地推理问题是很主要的。
但对付一些运用处景,模型的推理过程可能不适宜与用户共享。

为理解决这个问题,有一种策略叫做内心独白。
这个策略的思路是见告模型把原来不想让用户看到的部分输出整理成构造化的形式,然后在呈现给用户时,只显示个中的一部分,而不是全部。

例如,假设我们在教某个学科,要回答学生的问题,如果直接把模型的所有推理思路都见告学生,学生就不用自己琢磨了,

以是我们可以用「内心独白」这个策略:先让模型自己完全地思考问题,把办理思路都想清楚,然后只选择模型思路中的一小部分,用大略的措辞见告学生。

或者我们可以设计一系列的问题:先只让模型自己想全体办理方案,不让学生回答,然后根据模型的思路,给学生出一个大略的类似问题,学生回答后,让模型评判学生的答案对不对。

末了模型用普通易懂的措辞,给学生阐明精确的办理思路,这样就既演习了模型的推理能力,也让学生自己思考,不会把所有答案直接见告学生。

讯问模型在之前的过程中是否遗漏了任何内容

假设我们让模型从一个很大的文件里,找出跟某个问题干系的句子,模型会一个一个句子见告我们。

但有时候模型判断失落误,在本来该当连续找干系句子的时候就停下来了,导致后面还有干系的句子被漏掉没有见告我们。

这个时候,我们就可以提醒模型「还有其他干系的句子吗」,接着它就会连续查询干系句子,这样模型就能找到更完全的信息。

利用外部工具利用基于嵌入的搜索实现高效的知识检索

如果我们在模型的输入中添加一些外部信息,模型就能更聪明地回答问题了。
比如,如果用户问有关某部电影的问题,我们可以把电影的一些主要信息(比如演员、导演等)输入到模型里,这样模型就能给出更聪明的回答。

文本嵌入是一种能够度量文本之间关系的向量。
相似或干系的文本向量更靠近,而不干系的文本向量则相对较远,这意味着我们可以利用嵌入来高效地进行知识检索。

详细来说,我们可以把文本语料库切成块,对每个块进行嵌入和存储。
然后,我们可以对给定的查询进行嵌入,并通过矢量搜索找到在语料库中最干系的嵌入文本块(即在嵌入空间中最靠近查询的文本块)。

利用代码实行来进行更准确的打算或调用外部 API

措辞模型并不总是能够准确地实行繁芜的数学运算或须要很永劫光的打算。
在这种情形下,我们可以见告模型写一些代码来完成任务,而不是让它自己去做打算。

详细做法是,我们可以辅导模型把须要运行的代码按照一定的格式写下,比如用三重反引号包围起来。
当代码天生了却果后,我们可以提取出来并实行。

末了,如果须要,可以把代码实行引擎(比如 Python 阐明器)的输出当作模型下一个问题的输入。
这样就能更有效地完成一些须要打算的任务。

另一个很好的利用代码实行的例子是利用外部 API(运用程序编程接口)。
如果我们见告模型如何精确利用某个 API,它就可以写出能够调用该 API 的代码。

我们可以给模型供应一些展示如何利用 API 的文档或者代码示例,这样就能勾引模型学会如何利用这个 API。
大略说,通过给模型供应一些关于 API 的辅导,它就能够创建代码,实现更多的功能。

警告:实行由模型天生的代码实质上是不屈安的,任何考试测验实行此操作的运用程序都该当采纳预防方法。
特殊是,须要利用沙盒代码实行环境来限定不受信赖的代码可能引起的潜在危害。

让模型供应特定功能

我们可以通过 API 要求,向它通报一个描述功能的清单。
这样,模型就能够根据供应的模式天生函数参数。
天生的函数参数将以 JSON 格式返回,然后我们再利用它来实行函数调用。

然后,把函数调用的输出反馈到下一个要求中的模型里,就可以实现一个循环,这便是利用 OpenAI 模型调用外部函数的推举办法。

系统地测试变更

当我们对一个别系做修正时,很难判断这些修恰是好是坏。
由于例子太少,很难确定结果是真的改进了还是运气好。
有时候一个修正在某些情形下是好的,在其他情形下是坏的。

那么我们如何评价系统输出的质量呢?如果问题只有一个标准答案,打算机可以自动判断对错。
如果没有标准答案,可以用其他模型来判断质量。

此外,我们也可以让人工来评价主不雅观的质量,又或者打算机和人工结合评价当问题的答案很永劫,不同的答案质量差别不大,这时就可以让模型自己来评价质量。

当然,随着模型变得更前辈,可以自动评价的内容会越来越多,须要人工评价的越来越少,评价系统的改进非常难,结合打算机和人工是最好的方法。

参考黄金标准答案评估模型输出

假设我们面对一个问题,须要给出答案。
我们已经知道这个问题的精确答案,是基于一些事实的。
比如问题是「为什么天空是蓝色的」,精确答案可能是「由于阳光通过大气层的时候,蓝色光波段的光比其他颜色通过得更好」。

这个答案便是基于以下事实:阳光包含不同颜色(光波段)蓝色光波段通过大气层时损耗较小

有了问题和精确答案后,我们可以用模型(比如机器学习模型)来判断,答案中的每一部分事实对付答案精确的主要性。

比如通过模型判断出,答案中「阳光包含不同颜色」这一事实对付答案的精确性非常主要。
而「蓝色光波段损耗较小」这一事实,对付答案也很主要。
这样我们就可以知道,这个问题的答案依赖于哪些关键的已知事实。

在和 ChatGPT 人机互换的过程中,提示词看似大略,却又是最为关键的存在,在数字时期,提示词是拆分需求的出发点,通过设计奥妙的提示词,我们可以将全体任务拆分成一系列简明的步骤。

这样的分解不仅有助于模型更好地理解用户的意图,同时也为用户供应了更为清晰的操作路径,就彷佛给定了一个线索,勾引我们一步步揭开问题的答案。

你我的需求犹如涌动的江河,而提示词就像是调节水流方向的水闸,它扮演着枢纽的角色,连接着用户的思维与机器的理解。
绝不夸年夜地说,一个好的提示词既是对用户深度理解的洞察,也是一种人机沟通的默契。

当然,要想真正节制提示词的利用技巧,仅依赖 Prompt engineering 还远远不足,但 OpenAI 官方的利用指南总归给我们供应了宝贵的入门指引。