提示和提示工程无疑是 2023 年最需要的技能。大型语言模型法学硕士的快速增长只见证了称为提示工程的人工智能新学科的出现。在本文中,让我们简要了解一下什么是提示、提示工程师做什么以及提示工程师使用的提示的不同元素。
提示只是您提供给“经过训练的”模型的输入。当我说训练模型时,模型的权重是固定或冻结的,并且在提示过程中不会改变。您现在可能会问它与推理有何不同,因为我们一直在训练模型、在机器学习模型上部署和运行推理。要点是,通过推理,输入是固定的。我们永远不会改变它,无论模型给出什么输出,我们都会接受它作为结果。将图像分类视为一个示例任务。
然而,有了提示,您就不再局限于单一输入。您可以根据需要调整输入以改进模型的行为。您更多的是指导模型,旨在引导它找到正确的答案。当您在推理方面接受给定的模型时,在提示下,您正在研究该模型的功能和局限性。
设计或工程这些输入以适应手头的问题以便为您提供最好的服务的艺术催生了一门相当新的学科,称为即时工程。
在深入研究提示设计之前,让我们通过示例了解设计提示的动机或需求。假设我想总结给定的一段话。所以我给出了维基百科上的一大段文字作为输入,最后说“总结一下上面的段落”。这种在提示中提供简单说明以获取法学硕士答案的方式被称为指令提示。
让我们转向一个稍微复杂的数学案例,并要求法学硕士将两个数字相乘。让我们尝试一下提示“ 2343*1232 是什么”。我们得到的答案是“ 23431232 ”,这显然不是两个数字的乘法,而是两个数字的总和。
现在让我修改提示并在提示中添加额外的一行以更具体,“ 2343 乘以 1232 是多少。乘法后给我确切的答案”。现在我们从法学硕士那里得到了正确的答案“ 2886576 ”。
因此,显然模型输出的质量是由提示的质量决定的。这就是即时工程发挥作用的地方。提示工程师的目标是评估模型的输出质量并确定提示中需要改进的领域以获得更好的输出。因此,提示工程是一门高度实验性的学科,通过反复试验来研究法学硕士的能力和局限性,目的是既理解法学硕士,又设计出好的提示。
为了设计或设计提示,我们必须了解提示的不同元素。提示可以包含以下任意一个或多个元素。
提示可以是要求模型执行某些操作的说明。在我们的示例中,我们提供了大量文本并要求模型对其进行总结。
提示可以选择包含模型的上下文,以便更好地为您服务。例如,如果我对英国遗产地有疑问,我可以首先提供这样的上下文:“英国遗产关心 400 多个历史古迹、建筑和地点——从世界著名的史前遗址到宏伟的中世纪城堡,从罗马堡垒……”然后问我的问题,“哪个是最大的英国遗产地? ”
作为提示的一部分,您还可以指示您希望查看输出的格式。因此提示可以选择有一个输出指示器。例如,您可以问“我想要一份英格兰所有英国遗产地的清单、它们的位置和特色” 。我想要表格格式的结果。”
或者,如果您想要更好的响应,您可以使用以下语法输入所需的格式,以表明您希望在输出中看到列和行:
Desired format:
Company names: <comma_separated_list_of_sites>
Sites: -||-Location: -||-Speciality: -||-
提示可以包含一个或多个输入数据,我们在其中提供模型期望的示例输入。在情感分类的情况下,请看一下此提示,我们开始提供示例来表明我们的意图,并指定我们不希望在响应中进行任何解释:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment:
这种在提示中举例的方式类似于我们通过举例向人类解释的方式。在提示领域,这被称为“少发提示” 。我们提供具有任务输入和输出的高质量示例。这样,模型就能理解您的需求,从而做出更好的响应。
扩展我们的示例,如果我想知道一段话的情感,而不是仅仅问“这段话的情感是什么”,我可以提供一些涵盖输出中可能的类别的示例。在这种情况下,积极和消极:
Text: Today I saw a movie. It was amazing.
sentiment: Positive
Text: I don't very good after seeing that incident.
sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.
sentiment: Positive
Text: Walking in that neighbourhood is quite dangerous.sentiment: Negative
Text: I love watching tennis all day long
sentiment:
然后我可以让模型响应我输入的最后一个文本。通常,5 到 8 个示例对于少量提示来说就足够了。您现在可以猜到,这种方法的缺点是提示中会有太多标记。如果您希望从简单的开始,则无需提供任何示例,而是直接跳到问题,如下提示:
Text: I love watching tennis all day long
sentimet:
这是零样本提示,您不提供任何示例,但仍然期望模型能够正确回答您。通常,在进行快速工程时,您会从零次射击开始,因为它更简单,并且根据响应,您可以通过提供示例来获得更好的响应,然后继续进行几次射击。
如果你想通过LLM跳到一个专业主题,你可以通过给它分配一个角色来直接引导它成为某个领域的专家,这就是所谓的角色提示。
您通常会以法学硕士必须扮演的专家角色开始提示。然后按照说明进行操作。举一个简单的例子,该角色可能要求法学硕士成为一名诗人,而指令可能是写一首关于 AI Bites 的诗。
或者要求法学硕士充当Linux终端,情况可能会稍微复杂一些。并提供将文件的前 10 行复制到另一个文件并保存的具体说明。您甚至可以通过明确提及不给出任何解释来阻止它在输出中包含任何其他文本。
You are a poet.
Write a poem about AI Bites
Act as a linux terminalI want you to provide the shell command to read the contents of a file named "input.txt".Copy the first 10 lines to a different file with the name "new.txt" and save it.Do not give any explanations.
我们可以输入 LLM 的提示的不同可能元素
话虽如此,如果您希望我将提示的结构形式化,我会这样做。如果您的提示是关于专门主题的,则提示通常以模型必须扮演的角色开始。然后它可以包含您想要向法学硕士提供的任何说明。最重要的是,如果您想向法学硕士提供更多信息,也可以按照说明进行。
不久之后,如果您正在进行几次提示,您就可以提供高质量的示例。这些示例后面可以是您希望提供给模型的任何上下文。如果您想提出问题并执行 aq 和 A 任务,您可以将您的问题放在最后
现在我们已经了解了提示的构成,如果我们知道如何格式化这些提示就更好了。例如,最好明确提及所需的格式,然后实际提供该格式。
Extract locations from the below textDesired format:Cities: <comma_separated_list_of_cities>Countries: <comma_separated_list_of_countries>Input: Although the exact age of Aleppo in Syria is unknown,an ancient temple discovered in the city dates to around 3,000 BC Excavations in the1990s unearthed evidence of 5,000 years of civilization,dating Beirut, which is now Lebanon's capital, to around 3,000 BC
同样,对于输入或上下文,最好先说输入,后跟冒号,然后提供您的输入。
在提供示例时,最好用几个哈希值将它们分开,如本例所示。
Text: Today I saw a movie. It was amazing.sentiment: Positive
Text: I don't very good after seeing that incident.sentiment: Negative
Text: Lets party this weekend to celebrate your anniversary.sentiment: PositiveText: Walking in that neighbourhood is quite dangerous.sentiment: Negative
如果您提供输入,您可以将其用引号引起来,如下例所示:
Text: """{text input here}"""
然后有一个称为停止序列的东西,它提示模型停止生成文本,因为它已完成输出。您可以选择带有您选择的任何符号的停止序列。但新线路似乎是这里的常见选择。
Text: "Banana",
Output: "yellow \\n"
Text: "Tomato",
Output: "red \\n"
Text: "Apple",
Output: "red \\n"
如果您正在使用代码生成,最好根据您希望查看生成的输出代码的语言提供注释。
/*
Get the name of the use as input and print it
*/
# get the name of the user as input and print it
如果您已经读到这里,我想您要么喜欢这篇文章,要么对人工智能感到好奇。不管怎样,您为什么不在观看我们关于 Prompt Engineering 的视频呢?这是有关提示的视频系列中的第一个视频。那么为什么不订阅并继续关注呢!
通过所有关于提示、提示工程及其类型的介绍,我们在这里只触及了表面。例如,我们如何要求法学硕士对给定情况进行推理?还有更高级的提示方式,如思路链、自洽、常识等。让我们看看接下来的帖子和视频中的内容。敬请期待!