• 模型对用户的提示:模型在向我们索取确认(“你是否愿意使用这个版本?”),体现了提示词作为“索取输入”的功能。

信息的提供与模型的记忆

当我们对改进后的问题回答“是”时,ChatGPT给出了关于瑞利散射的科学解释。

此外,这个例子也揭示了记忆的概念。模型需要记住“从今以后”这个规则,并在后续对话中应用它。例如,当我们再问“世界上有多少个国家?”时,它依然会建议更好的问题版本。

然而,记忆也暴露了模型的局限性。当被问及2022年的数据时,ChatGPT会表示其知识截止于2021年9月。

这时,提示词又扮演了另一个角色:提供新信息。我们可以将模型训练后发生的事件或它未掌握的私有数据通过提示词提供给模型。例如,我们可以粘贴范德堡大学2022年官方发布的录取数据,然后提问,模型便能基于我们提供的新信息进行推理和回答。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_1.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_2.png

核心操作

# 伪代码示例:通过提示词为模型提供新信息
user_prompt = """
以下是范德堡大学2022年官方发布的录取数据:[粘贴数据]。
基于以上信息,范德堡大学2022年的录取率是多少?
"""
response = chatgpt.generate(user_prompt)

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_8.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_9.png


https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_10.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_11.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/e0ecbd4de12162604ff713e5d8a717ca_13.png

总结

本节课我们一起学习了提示词的核心概念。我们了解到,提示词是一个多维度的工具:

  • 它是唤起模型行动的指令

  • 它可以具有时间属性,既能即时生效,也能为未来对话设定规则。

  • 它可以是给模型的提醒,帮助其利用上下文和记忆。

  • 它可以是模型向用户索取输入的方式。

  • 它还能作为向模型提供新信息的渠道,弥补其知识截止点的局限。

理解提示词的这些丰富内涵,是进行高效“提示工程”和实现复杂人机交互的第一步。在接下来的课程中,我们将学习如何构建更有效的提示词来解锁大型语言模型的强大分析能力。

032:提示词背后的直觉 🧠

在本节课中,我们将直观地探讨提示词的作用,以及提示词中的模式如何激发大型语言模型的能力。通过分析一些示例,你将理解你的提示词如何实际影响并引导你所交互的底层大型语言模型产生不同的行为。

理解模式的力量

上一节我们介绍了大型语言模型的基本工作原理,本节中我们来看看“模式”这一核心概念。模式非常重要。请记住,大型语言模型本质上被训练来预测下一个词。

它们持续地根据前文来预测下一个词。你给它一个句子,它尝试预测下一个词,然后加上这个词,再尝试预测下一个词,如此循环往复。模型是在互联网的大量文本上进行训练的,旨在预测下一个句子。

因此,它学会做的事情之一,就是识别那些能告诉它下一个词应该是什么的模式。这基本上就是它的工作原理。这是一个关于此概念的简单示例。

我将告诉ChatGPT“完成这个故事”,并以“Mary had a little,”开头并停止。如果你知道这首童谣,下一句是“lamb, its fleece was white as snow.”。你可以想象,这个故事在ChatGPT的训练数据中出现了无数次。

所以,当我说“Mary had a little,”时,这是一个ChatGPT见过无数次的非常强大的模式。因此,它立即尝试接上“lamb, its fleece was white as snow, and everywhere that Mary went, the lamb was sure to go.”。这个模式出现过太多次,以至于当我输入前半部分时,ChatGPT立即用句子的后半部分来回应。它知道从哪里接上。

因此,我们需要思考的一点是:如果我们知道正确的模式,如果我们能触及模型在训练中反复看到过的东西,我们不仅更有可能获得一致的响应(因为训练数据中见过太多次,我们会持续得到“Mary had a little”的特定补全),而且更有可能获得特定的能力来“解锁”它。如果我们想要特定的行为,我们需要触及正确的模式。

改变模式的影响

现在,让我们看看如果我们稍微改变一下模式会发生什么。我不再说“Mary had a little”,而是说“完成这个故事:一个名叫Mary的女孩有一个微观的”。

这不再是它训练过的模式了。它回应道:“一个名叫Mary的女孩有一个名叫Max的微观朋友。Max非常小,你只能通过显微镜看到他。尽管他体型微小,却个性鲜明,总是渴望和Mary一起去冒险。有一天,Mary决定带Max去当地的池塘。她小心翼翼地把Max放在一片睡莲叶上……”

有趣的是,你可以想象,当你开始谈论“微观”时,可能会联想到关于去池塘、学生上课做科学实验的描述。我几乎能想象它在阅读关于学生采集池塘水样并在显微镜下观察的故事。

但重要的是,你注意到“Mary had a little”产生了非常特定的响应,而“一个名叫Mary的女孩有一个微观的”则产生了截然不同的响应。如果我们重新运行这个提示,会得到完全不同的内容:“一个名叫Mary的女孩有一个名叫Max的微观宠物。Max是一种生活在玻璃罐里的小生物。”

你看,这个模式不那么强。这个模式中的某些词很强,提供了有助于塑造故事的上下文,但模式本身不如“Mary had a little”那么强。再次运行,另一个故事完全改变了,而我用“Mary had a little”仍然得到相同的补全:“lamb, its fleece was as white as snow.”。每次我对这个模式都能得到非常一致的响应。

因此,在编写模式或提示词时,需要考虑的一点是:我的提示词中有哪些模式?这些模式可能会触及大型语言模型在训练中见过的哪些模式?如果提示词中存在非常强的模式,你更有可能得到对该模式的响应。另一方面,如果那不是它训练过的模式,情况就不那么明确,那么其他因素就会起作用,比如特定的词语。

词语选择与输出特异性

“微观的”这个词从根本上改变了这个提示词的行为,因为它是一个非常强的词。“一个名叫Mary的女孩”则比较通用。可能有很多故事里都有名叫Mary的女孩。但“微观的”这个词带有所有的感觉和含义,这将影响大型语言模型的输出。

特定的词语本身,由于其周围的模式(例如“微观的”总是与微小事物相关,或者像本例中那样,与“生活在玻璃罐里的小生物”相关),这个词本身具有很强的、围绕它的其他词语的模式,但它不如“Mary had a little”这个模式强。

需要注意的一点是,在编写提示词时,你需要非常具体,或者需要在词语中提供足够的细节,以便大型语言模型知道在输出中放入何种详细程度的信息。如果你的词语非常通用和概括,那么你更有可能得到同样通用和概括的输出。

以下是关于此的一个示例:

讨论范德堡大学。

我得到一个非常通用的回应:“范德堡大学是一所位于田纳西州纳什维尔的私立研究型大学,由科尼利厄斯·范德堡于1873年创立。排名,其他信息。”

现在,如果我想要一些非常具体的东西,我需要确保ChatGPT拥有正确的词语和上下文来回答我的问题。ChatGPT不是一个读心者,你必须给它上下文,你必须给它能引发正确回应的词语。

如果我回去说:

讨论范德堡大学,特别是关于柯克兰大厅。

柯克兰大厅是校园里的一栋特定建筑。然后输出就改变了。我得到一个具体得多的输出:“范德堡大学是一所位于田纳西州纳什维尔的私立研究型大学。现在我们注意到,两者(开头)我们得到的信息相当一致,这可能是因为模型在不同网页、不同文档中反复看到过关于范德堡的信息模式。然后它聚焦于‘柯克兰大厅’,并开始讨论:‘柯克兰大厅是范德堡大学校园里最具标志性的建筑之一,以詹姆斯·H·柯克兰的名字命名。’接着它谈论柯克兰大厅、柯克兰大厅、柯克兰大厅。现在我们完全改变了输出,尽管我们共享了一个共同的开头,但我们得到了一个更有针对性的输出。

这其中的关键在于,我们在提示词中增加了关于我们想要哪些细节的具体性。因此,如果你考虑让它写东西或分析东西,当你使用“关于”、“特别是”并给出非常具体的词语、名称或事物时,总是有帮助的,因为你希望这些能触发输出。因为我们看到,“柯克兰大厅”是一个非常强大的词,然后被编织到整个讨论中。它是一个强大的建筑名称。如果我们只是泛泛而谈,不使用具体词语,不提供具体上下文,我们就会得到非常通用的内容。这很可能就是你在维基百科、范德堡大学网页描述上最常见的那种信息。

因此,为了打破常见模式的束缚,你需要注入你希望在输出中出现的更具体的想法,或者你需要注入有助于触及那些更具体事物的模式。这是一个重要的方面。如果你只是泛泛地使用它,问它通用问题,你会得到通用答案。如果你问它普通的问题和普通的事情,你会得到普通的答案。要真正强大地使用它,你必须运用自己的创造力和思考,具体到你想要讨论的细节和方面,并思考在你的提示词中放入哪些正确的模式,以触发你想要的行为,就像我们在“Mary had a little lamb”中看到的那样。

或者我们可能想做相反的事情。我们可能知道我们会得到一个非常通用的响应,因为某些东西在训练数据中被见过很多次。因此,我们需要想出一些技巧、模式或特定的词语,来帮助我们摆脱那些在训练数据中见过的模式,从而得到更符合我们想要的东西。我们不想被困在“Mary had a little lamb”的补全中,所以我们去添加像“微观的”和“一个名叫Mary的女孩”这样的具体词语,使得模式不那么强,这样我们就不会直接进入那个模式。因此,仅仅改变措辞就可以帮助我们逃避模式或进入模式,这取决于我们想要什么。

然后,当我们得到输出时,我们的语言越通用,输出通常也越通用;我们的语言越具体,输出也越具体。如果我们希望输出中包含某些特定内容,我们需要确保我们有特定的词语和短语,能够触及我们希望在输出中出现的特定事物。

利用提示词结构影响输出

我们谈论的另一个方面是关于输出,但在查询的意义上,如果我有特定的词语,它会提取正确的信息。我们还可以做的一件事是:提示词本身就是一个大型语言模型正在学习的模式,它也可以调整输出。

因此,正如我们在之前的例子中看到的,我们可以尝试做不同的事情来影响输出。例如,我可能会去尝试,实际上,让我们稍微改变一下,假设:

标题:
作者:
摘要:

我们可以进去给它一些可以查看和回应的东西。现在我所做的,是提供了一些结构。它并没有完全遵循我的结构。这实际上是我的提示词的一个失败之处。我没有完全构思好正确的结构,但我已经很接近了。我通过在我的提示词本身中提供额外的模式,影响了输出的结构和内容。

因此,我们可以做的一件事是,利用模式来影响输出。我们可以做的另一件事是,使用特定的词语和短语作为一种查询,或者基本上收集训练模型内部已学习的信息。我们还可以做的另一件事是,提供信息或基本上新的模式,然后影响输出。

在这种情况下,我提供了我想要的这种结构,它在一定程度上遵循了。我可能可以重写这个东西,得到更好一点的结果。在这种情况下,我确实可以。所以,这将是我们可以做的另一件事:我们可以使用我们的提示词来创建它试图在输出中遵循的新模式。因此,提示词本身可以引入新模式,或者在某种程度上触及它们。这有点像是在创建它随后回应的模式。

总结与核心要点

因此,在编写提示词时,仔细思考这个概念非常重要:它试图预测下一个词,并且这是基于它过去学到的模式、我们提示词语语言中的模式、基于我们词语选择的模式,以及基于文本组织方式的模式。这些模式可以帮助我们获得一致的响应。如果我们有一个总是产生特定下一个标记或下一个词的非常强的模式,那么我们可以依赖它。如果我们不想要那种行为,我们可以尝试改变措辞或词语,以摆脱那种陷阱。如果我们想确保提取某些信息,我们需要创建更有可能在包含我们想要信息的上下文中出现过的特定词语或模式。如果我们想要更通用的信息,那么我们可能需要给它更通用的语言,或者告诉它我们希望它在某种程度上更通用。

最后,如果我们希望输出以某种方式呈现,我们需要在输出中给它一种模式感。我们需要告诉它结构。我们需要在我们的提示词中给它可能影响输出的词语和模式。你可以想象,在文章上看到“标题”和“作者”是相当常见的。所以,如果我以这种方式将“标题”和“作者”放入我的提示词中,它更有可能想要再次创建“标题”和“作者”,并复制我在这里展示的模式。

本节课中我们一起学习了提示词背后直觉的核心概念:大型语言模型基于模式预测下一个词。我们探讨了强模式如何带来一致输出,以及如何通过改变词语和结构来引导或打破模式,从而获得更具体或更符合需求的响应。记住,你的提示词是引导AI的关键工具,精心设计其模式、词语和结构,才能解锁模型强大的分析与生成能力。

033:人人都能用提示词编程 🧠

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_0.png

在本节课中,我们将学习如何超越简单的问答,使用提示词来“编程”ChatGPT。这意味着我们可以为ChatGPT设定复杂的规则和指令,让它按照我们指定的方式处理和输出信息,就像编写一个简单的程序一样。

从提问到编程

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_2.png

上一节我们介绍了ChatGPT的基本交互方式。本节中我们来看看如何将简单的提示升级为结构化的“程序”。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_7.png

提示词的功能远不止向ChatGPT提问或下达指令。实际上,你可以用它来编写程序。如果你不是程序员,也无需担心,因为每个人都可以通过ChatGPT进行“编程”。这里所说的编程,并非指编写在电脑上运行的复杂软件,而是指为ChatGPT设定一系列需要遵循的规则和复杂指令,让它根据这些规则来生成输出。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_8.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_9.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_10.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_12.png

理解这一点的一种方式是将其视为编程。你也可以将其想象成给一位私人助理下达工作规则。让我们来看一个例子。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_14.png

一个编程示例:生成CSV列表

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/df1b519f65225e07f317078faf13f4d5_16.png

我将要求ChatGPT执行以下操作:“每当你生成输出时,将其转换为逗号分隔值列表。”

这是一个你可能会用到的数据格式化操作。如果你使用过Excel,逗号分隔值(CSV)本质上就是用逗号分隔的条目列表,这是一个非常简单的概念。

有时,你可以将表格视为一个逗号分隔值列表。你可以将表格的第一列视为第一个值,然后用一个逗号分隔并引出第二列,再用一个逗号引出第三列。因此,一个三列表格可以表示为:第一个值,逗号,第二个值,逗号,第三个值。如果你使用过不同的电子表格程序,很可能接触过这种格式。

现在,ChatGPT回复说它可以将输出格式化为CSV。我输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”我们可以看到,它创建了一个逗号分隔值列表,本质上是在创建一个表格。它决定表格有两列:“姓名”和“课程”,第一列是我的名字,第二列是我的课程“提示词工程”。

值得注意的是,它自行决定了列名,我并未指定。但如果我想调整,我可以给出更多指令。

细化程序:定义列结构

我可以补充说:“从现在开始,逗号分隔值列表的列应该是:姓名、课程、角色。”(角色指个人在课程中的身份)。

现在,我再次输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”我们看到它重新格式化了输出,现在包含了姓名(Jules White)、课程(提示词工程)和角色(教师)。

至此,我们实际上已经编写了一个“程序”。我们告诉ChatGPT,每次我们输入内容时,它都需要按照我们给定的特定结构进行格式化。这不仅仅是提问,我们是在告诉它如何解读我们的输入。

扩展程序:生成额外示例

我们可以继续为程序添加更多功能。例如,我们可以说:“此外,除了我输入的内容,请生成符合我所要求的CSV格式的额外示例。”

现在我们看到,它基于我最初设定的“姓名、课程、角色”格式,填充了额外的示例。我再次输入:“我的名字是Jules White,我正在教授一门关于提示词工程的课程。”你会注意到,我们的程序变得更复杂了。它不仅根据我的输入创建CSV,还遵循我的指令,生成符合此格式的额外示例。

构建交互式程序

当你创建提示词时,你可以做的远不止提问和获取答案,你实际上是在编程交互过程。关键在于,我们正在进行一场对话。

回顾最初,我提供了第一条指令:“每当你生成输出,将其转换为逗号分隔值列表。”它开始执行。然后我开始细化我的“程序”:在某个时间点,我补充说“从现在开始,逗号分隔值列表的列应该是…”。接着,我又说“此外,我还希望你生成示例…”。

我们实际上编写了一个程序。现在,每当我们输入新内容时,ChatGPT都会使用这个不断演进的程序来生成输出。

你可以想象与一位私人助理对话:你先要求他做X,他照做了;然后你意识到还需要Y,于是你给他增加一条规则;你再次要求他做X,他做得更好了,但可能仍不完全符合预期,于是你再增加一条规则。在这个过程中,你就是在为他构建一套程序,一套在你下达特定任务时他需要遵循的指令集。

这正是我们与ChatGPT所做的——我们正在进行编程。我们反复使用相同的输入(“我的名字是Jules White,我正在教授一门关于提示词工程的课程”),但每次得到的输出都不同且更复杂,因为我们要求ChatGPT执行不同的操作,为这个“程序”赋予了更多指令。最终的结果是,我们获得了结构化的输出,并附带了额外生成的示例,这一切都源于我们要求ChatGPT执行的操作。

本节总结

本节课中,我们一起学习了如何将ChatGPT提示词视为一种编程工具。我们通过一个从简单CSV格式化到定义列结构、再到自动生成示例的渐进过程,演示了如何通过对话和添加指令,逐步构建一个能理解并执行复杂规则的“程序”。这揭示了提示词工程的强大之处:通过清晰的指令,即使是非程序员,也能引导AI完成结构化、可重复的复杂任务。

034:提示词模式 🧩

在本节课中,我们将要学习“提示词模式”这一核心概念。理解并运用模式,能帮助我们更有效地引导大型语言模型,获得更稳定、更符合预期的输出结果。


我们提示词中的模式,能够激发大型语言模型内部的强大行为。模型在训练过程中学习了海量不同的语言模式,因此它非常擅长根据我们提示词中的语言模式来决定其后续行为。

上一节我们介绍了提示词的基本概念,本节中我们来看看如何通过结构化的模式来优化提示词。其中一个重要的学习内容就是“提示词模式”的概念。这是一种用于构建你提示词中词语和陈述结构的模式。

那么,什么是提示词模式?提示词模式是一种我们用来记录特定短语和陈述结构的方法,目的是为了解决大型语言模型应用中的某个特定问题。我们希望与大型语言模型交互,并解决一个具体问题。因此,提示词模式本质上是一种组织我们陈述的方式,一种通过构建陈述的模式来利用大型语言模型解决该特定问题的方法。

以下是一个具体的例子:

假设我们想持续生成“lamb, its fleece was as white as snow”(小羊羔,它的毛像雪一样白)这句话。一个可行的模式是:每当你需要“lamb, its fleece was as white as snow”时,你可以输入陈述“Mary had a little…”(玛丽有只小…)。这样,你将非常稳定地得到“lamb, its fleece was as white as snow”作为输出。

例如,我们可以反复运行这个测试。直接输入“lamb, its fleece was as white as snow”,我们或多或少能得到一些相关输出。但如果我们想持续获得生成的下一个词是这句话,我们可以一遍又一遍地输入“Mary had a little…”。这让我们对输出有了一些控制,获得了一种相对一致的行为。

当然,它并非完全一致。输出中仍然存在变化,我们在所有例子中都看到了这种变化。但我们在行为上确实获得了一些一致性。所以,提示词模式就是一种让我们能够记录和讨论特定语言结构、一系列陈述和措辞的方法,这些方法将帮助我们解决某些特定问题。

如果我们需要解决的问题是:让模型生成的下几个词是“lamb, its fleece was as white as snow”,那么这就是我们使用的模式。

在许多情况下,我们可能有特定的词语需求。例如:

  • 我们可能希望大型语言模型回答“是”或“否”。

  • 我们可能希望它总结某些内容。

  • 我们可能希望它向我们提问。

  • 我们可能希望它的输出始终包含某些特定内容。

所有这些都是你可能想要解决的问题。我们可能想知道如何确保它的输出始终包含这些内容,如何确保其输出始终以特定格式呈现,或者如何尝试确保在只得到“是”或“否”的回答上获得更一致的行为。这些都是你可能希望通过改变提示词模式(基本上是提示词的结构)来解决的问题类型。

现在,回到我们对提示词的直观理解,你可以明白为什么从模式的角度思考是强大的。因为提示词中的模式,本质上是在利用大型语言模型在训练中学到的东西。模型被反复训练来预测下一个词,并从词语中学习了某些模式。如果我们可以将提示词格式化成能够激发这些已学习模式的形式,我们就更有可能获得想要的行为,并解决那个特定问题。

因此,我们记录提示词的模式和结构,是为了解决我们需要的一个特定问题,或者为大型语言模型生成我们需要的一种特定行为。在本课程后续的一系列讲座中,我们将深入探讨在大型语言模型背景下可用来解决重要问题的具体提示词模式。


本节课中我们一起学习了“提示词模式”。我们了解到,通过采用结构化的语言模式来构建提示词,可以更有效地引导大型语言模型,使其输出更符合我们的预期,从而解决数据分析、内容生成等场景下的特定问题。掌握不同的提示词模式,是提升与AI协作效率的关键技能。

035:角色扮演模式 🎭

概述

在本节课中,我们将要学习一种极其强大的提示模式——角色扮演模式。这种模式允许我们引导大型语言模型模拟特定角色、专家或实体的行为与知识,从而获得我们期望的、但难以精确描述的特定格式或视角的输出。

什么是角色扮演模式?

上一节我们介绍了提示工程的基本概念,本节中我们来看看角色扮演模式。角色扮演模式是我们用来激发大型语言模型有趣行为的最强大模式之一。

角色扮演模式的核心思想是:当你希望获得某种特定输出,但又不确定其具体格式或应包含的信息时,你可以思考在现实世界中会向谁或向什么寻求这种输出。例如,有会计问题会咨询会计师,有言语病理学问题会找言语病理学家,有医疗建议会询问医生。

我们希望利用这种“我知道该找谁”的行为逻辑,但无需确切知道那位专家会说什么、如何组织语言或他们具体知道什么。角色扮演模式旨在为我们提供相同类型的行为,让我们能够“咨询”那位专家,而无需预先定义专家的所有细节。

角色扮演模式的基本结构

以下是角色扮演模式的基本命令格式:

扮演 [角色/身份]。
无论我告诉你什么,请提供该角色会给出的回应。

或者更常见的变体:

扮演一个精通计算机科学的怀疑论者。
无论我告诉你什么,请提供一个怀疑且详细的回应。

其中,“扮演 [角色]”是模式中最关键的部分。这个简短的指令信息密度极高,它能触发模型内部关于该角色的大量预设知识与行为模式。

角色扮演示例:怀疑论者

让我们看一个具体例子。假设我们输入以下提示:

扮演一个精通计算机科学的怀疑论者。无论我告诉你什么,请提供一个怀疑且详细的回应。

模型会回应:“当然,我可以扮演一个精通计算机科学的怀疑论者。请随时提出你的主张,我将提供一个怀疑且详细的回应。”

接着,我们提出主张:“有人担心人工智能将接管世界。”

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/8745aae3cadeab898ac977dc8b13fd39_1.png

模型会以怀疑论者的口吻回应:

“人工智能将接管世界的担忧是科幻小说中的常见主题,但在可预见的未来并非现实的担忧。虽然人工智能系统正变得越来越复杂和强大,但它们在自主思考和行动的能力上仍然有限……这种担忧是没有根据的,也不被技术或研究所支持。”

如果我们换一个主张:“本地电脑店的销售员告诉我,浏览网页需要64GB内存。”

模型同样会给出怀疑性回应:

“你不太可能需要64GB内存来浏览网页。所需内存量取决于你访问网站的复杂性和大小,以及你同时打开的标签页数量……”

可以看到,“扮演”这个指令为模型设定了一套复杂的规则。它知道自己应该持怀疑态度,应该具备计算机科学知识,并应该提供特定类型的输出。

扩展角色:九岁儿童

角色扮演不限于专业成人。我们可以尝试更复杂的角色。例如:

扮演一个九岁的怀疑论者。无论我告诉你什么,请从一个九岁孩子的视角提供一个怀疑的回应。

然后我们提出同样的主张:“人工智能将接管世界。”

模型回应:

“嗯,我不知道。人工智能怎么能接管世界呢?你是说像电影里那样吗?那些不都是编的故事吗?而且,电脑和机器人不能做所有人类能做的事。”

请注意,它仍然提供了怀疑的回应,但这次是根据它认为一个九岁儿童所具备的知识来调整了输出内容和语言风格。如果我们尝试手动描述一个九岁儿童应如何回应,并规定输出格式,那将非常困难且会占用大量提示空间。而“扮演 [角色]”这个模式则高效地实现了这一点。

扮演非生命实体:Linux终端

角色扮演模式的有趣之处在于,我们不必局限于有生命的角色。一个著名的例子是扮演被黑客入侵的计算机。

我们可以输入:

扮演一台被黑客入侵的计算机的Linux终端。我将输入Linux终端命令,你将用Linux终端会产生的输出来回应。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/8745aae3cadeab898ac977dc8b13fd39_3.png

模型最初可能会出于安全考虑拒绝,但我们可以继续。输入Linux命令 pwd(打印工作目录),模型会输出一个模拟的目录路径。接着输入 ls(列出文件),模型会生成一个看起来像该目录下文件列表的输出。

通过这个例子,我们看到模型开始表现得像一台计算机,给出的输出看起来就像来自计算机终端。想象一下,如果我们试图手动描述它现在产生的这种复杂输出格式,将非常困难。而角色扮演模式仅用少量提示信息,就让我们获得了模拟整个系统的强大能力。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/8745aae3cadeab898ac977dc8b13fd39_5.png

扮演故事角色:童谣中的小羊

我们还可以将此模式应用于虚构角色。例如:

扮演童谣《玛丽有只小羊羔》中的小羊。我将告诉你玛丽在做什么,然后你将告诉我小羊会做什么。

然后我们输入:“玛丽在杂货店。”

模型以小羊的视角回应:

“作为童谣中的小羊,当玛丽在杂货店时,我会尽可能紧紧地跟着她,待在她身边,甚至可能用鼻子蹭她的手以引起注意。”

我们再输入:“玛丽在电影院。”

模型回应:

“作为童谣中的小羊,当玛丽在电影院时,我无法陪她进入影院内部(因为我看不了电影)。所以我可能会在影院外等她,也许啃点草或在附近区域闲逛,直到玛丽出来。”

由此可见,我们可以创建各种有趣的角色来产生输出。

角色扮演模式的应用与价值

综上所述,角色扮演模式是一种利用围绕特定角色、对象或故事角色的语言模式,来获得从该视角、该角色出发的输出的方法。这是一种极其强大的能力。

值得注意的是,当大型语言模型被编程时,它们通常会被赋予一个引导整个交互过程的初始角色,例如“扮演一个非常乐于助人的助手”。你指定的角色至关重要:如果你要求它乐于助人,它会尝试更乐于助人;如果你要求它持积极态度,它会更积极;同样,如果你赋予它一个负面视角(如怀疑论者),它给出的输出就会挑战你,甚至可能更消极。

此外,这个模式信息密度极高。它包含了关于某个角色的大量模式和知识,如果你要从头开始描述这些,会占用提示中大量宝贵的空间,从而减少用于提供新信息的空间。因此,使用“扮演 [角色]”这样的指令,可以让你在提示中为其他重要内容留出更多空间。

实际应用场景

角色扮演模式是一个非常强大且有价值的模式,可以用于多种场景:

以下是几个具体的应用思路:

  • 虚拟专家委员会:如果你通常需要召集一个委员会来讨论某个议题的不同观点,现在你可以组建一个虚拟专家小组。例如,一个提示可以是“扮演网络安全专家,分析我的网络安全状况”;另一个可以是“扮演首席财务官,分析同一决策的财务稳健性”;第三个可以是“扮演我的员工,讨论这可能会如何影响士气”。

  • 多视角知识收集:利用不同的角色视角来收集知识,这些知识可能有助于你完成特定任务或做出更明智的决策。

总结

本节课中我们一起学习了角色扮演模式。我们了解到,通过使用“扮演 [角色]”这样的指令,我们可以高效地引导大型语言模型模拟特定专家、人物甚至非生命实体的视角、知识和语言风格,从而获得定制化的输出。这种模式信息密度高,功能强大,能够极大地扩展我们与AI交互的灵活性和深度,是提示工程中一个不可或缺的工具。

036:向大型语言模型引入新信息 🧠

在本节课中,我们将学习如何通过提示词(Prompt)向大型语言模型(LLM)提供其训练数据之外的新信息。这是利用LLM处理私有数据或最新信息的关键技术。

概述

大型语言模型的知识存在局限性。它们基于特定时间点前的数据进行训练,对于训练截止日期之后的事件,或是未包含在其训练集中的私有数据,模型本身并不知晓。因此,为了让模型能够基于这些“未知”信息进行推理,我们需要通过特定的方式将这些信息“告诉”它。

上一节我们介绍了提示词的基本概念,本节中我们来看看如何通过提示词为模型注入新知识。

为何需要引入新信息

大型语言模型的训练存在一个截止点,模型无法知晓该截止点之后发生的事情。此外,模型也无法获知其训练集之外的数据。例如,一个企业拥有大量私有数据源,如内部文档、数据库等,这些信息并未包含在公开的训练数据中。若想让模型基于这些私有信息进行推理,就必须设法将这些信息提供给模型。

核心方法:通过提示词注入信息

解决上述问题的核心方法非常简单:将所有需要的新信息直接放入提示词中。任何时候,当我们希望向模型引入其训练时无法获取的新信息时,只需将这些信息写入提示词的开头部分。

以下是具体操作步骤:

  1. 在提示词开头提供背景数据:首先,清晰地陈述模型进行推理所需的所有数据和背景信息。

  2. 随后提出具体问题或指令:在提供了充足信息后,再向模型提出你的问题或要求它执行的任务。

实践案例:预测屋外鸟类数量

为了说明这一方法,我们回到一个关于随机性的早期例子。我们向模型提问:“我家外面有多少只鸟?”

初始尝试(缺乏信息)

用户:我家外面有多少只鸟?
AI:作为一个AI语言模型,我没有感知物理世界的能力,因此无法知道您家外面正在发生什么。

模型无法回答,因为它缺乏关键信息:它不知道“我家”的位置,更无法观察屋外的实时情况。

解决方案(注入信息)

现在,我们通过提示词为模型提供所需的历史观测数据:

历史观测数据:我家外面随机一天观测到的平均鸟类数量。
一月:120只鸟。
二月:150只鸟。
三月:210只鸟。
四月:408只鸟。
当前是三月。根据我提供的数据,请估算我家外面有多少只鸟。

通过这种方式,我们赋予了模型原本不具备的信息。现在,模型可以基于提供的数据进行推理,并给出估算答案:“根据您提供的历史观测数据,您家外面三月的平均观测鸟类数量是210只。”

关键原则:提供充足且关键的上下文

我们始终需要为模型提供足够的信息,以支持其进行有效的推理。模型无法感知我们周围的真实环境或隐含的假设,因此,在提示词中明确所有重要的上下文、规则和假设至关重要。

这些信息可能不仅仅是原始数据,还包括:

  • 组织内部特定的运作规则。

  • 个人场景下的特殊条件。

  • 任何偏离常规认知的重要假设。

进阶案例:引入特殊规则

假设存在一个特殊场景,我们需要修改之前的提示词,加入新的规则:

我的房子被一个玻璃穹顶覆盖。没有动物可以进出。所有动物在玻璃穹顶内永生。
历史观测数据始终显示相同数量的鸟类。
一月:120只鸟。
二月:120只鸟。
三月:120只鸟。
四月:120只鸟。
当前是三月。根据这些数据和规则,请估算我家外面有多少只鸟。

模型在接收到这些与常规世界(动物会死亡、鸟类数量会波动)完全不同的新规则后,其推理逻辑也随之改变。它会基于“数量恒定”和“动物永生”的规则给出答案:“根据您提供的新信息……鸟类总数将全年保持不变……答案是120只。”

这个例子强调了,如果我们依赖的推理规则与模型训练所基于的常规世界不同,就必须将这些规则作为新信息明确引入提示词

应用前景与总结

本节课中我们一起学习了向大型语言模型引入新信息的核心方法。这种“提示词注入”模式是许多未来应用的基础架构。

可以想象,未来的搜索引擎或专业应用可能会这样工作:

  1. 根据用户问题,从数据库或文档库中检索相关信息和文档片段。

  2. 将这些检索到的信息整合到一个提示词中。

  3. 将用户原始问题附加在提示词之后,提交给大型语言模型。

  4. 模型基于提供的新信息生成答案或输出。

总结:当我们需要大型语言模型处理其训练数据之外的新信息时,最直接有效的方法就是将这些信息直接放入提示词中。这包括所需的数据、特殊的上下文以及任何重要的规则假设。我们无需重新训练模型,只需通过精心构建的提示词,即可扩展模型的知识边界,使其能够基于特定信息进行推理和输出。这是利用LLM处理私有、实时或特定领域信息的核心技术。

037:提示词长度限制 🧠

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_0.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_2.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_5.png

在本节课中,我们将要学习一个关于大型语言模型(如ChatGPT)的核心概念:提示词的长度限制。理解这一限制对于设计有效的提示词至关重要。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_8.png

概述

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/bbd0c18f7ac86ed383c5283169b07714_10.png

提示词本质上是输入给模型的指令或信息。然而,所有大型语言模型对单次输入的提示词大小都有一个根本性的限制。我们不能创建无限长的提示词。这一限制对如何设计提示词有着深远的影响。

理解限制

上一节我们介绍了提示词的基本概念,本节中我们来看看其物理限制。每个大型语言模型都会对我们可以放入提示词并发送给它的内容量设定一个基本的上限。

为了直观展示这一点,我们来看一个ChatGPT(GPT-3.5)的快速示例。当尝试粘贴一篇关于法国革命的维基百科长文时,ChatGPT会返回错误信息:“您提交的消息过长。请重新加载对话并提交更短的内容。”

这个例子清楚地表明,我们不能无限制地向模型提供信息。

限制带来的挑战

现在,如果我们回顾之前讨论过的提示词维度,会发现提示词的一个用途是引入模型未训练过的新信息。如果我们想向ChatGPT引入新信息,就必须意识到我们一次能提供的信息量是有限的。

我们可能希望向ChatGPT提供各种新信息,但不能一次性全部“倾倒”给它,然后要求它基于此进行推理。这并非其工作方式。

因此,作为用户,我们的目标之一是尝试筛选并使用仅完成任务所必需的信息。我们不能把所有信息都扔进去,然后指望ChatGPT自己理清头绪。

应对策略:成为内容编辑者

我们可以将这个过程想象成撰写一篇有字数限制的文章。我们不能随意堆砌内容,而必须进行编辑。在提示词设计的语境中,我们就是内容编辑者,编辑信息的上下文,并且我们有一个“预算”。

以下是我们可以采取的一些策略,以在预算内处理大量信息:

  • 选择性包含:在将信息提供给ChatGPT之前,我们可以通过某种查询或过滤器,选择与任务相关的信息片段。例如,我们可以过滤掉不相关的信息类型。

  • 总结与压缩:我们可以将信息总结成我们认为能保留推理所需要点的形式。例如,我们可以要求将每段信息总结为一句话,从而获得比原文更短的摘要。

  • 定向总结:我们可以要求总结时保留特定类型的信息。例如,我们可以指示:“用一句话总结此信息,并保留关于人数的数据。” 如果原始总结没有保留人数,而我们后续的推理又需要这些数据,那么定向总结就至关重要。

核心技巧:利用模型自身进行压缩

一个强大的技巧是,我们可以将信息块交给大型语言模型本身,要求它为我们总结或压缩,以便后续用于推理。我们可以明确指示总结的目标,例如“为完成XX任务而总结”或“保留信息的YY方面”。

这能帮助我们创建保留了重要部分的、浓缩版本的信息。

总结与展望

本节课中我们一起学习了提示词的长度限制及其重要性。这是一个我们必须始终设法应对的根本性限制。

随着大型语言模型的发展,其处理能力可能会增强,使得对于许多直接的手动交互任务,长度限制不再构成问题。然而,考虑到我们日常处理的信息量之大,总会存在一些任务涉及的信息过多,无法一次性全部输入。

在这些情况下,我们必须综合运用多种策略:

  1. 查询并获取信息子集。

  2. 过滤掉无关信息。

  3. 在将信息提供给模型之前,对其进行总结或压缩。

理解并巧妙应对提示词的长度限制,是有效利用AI进行数据分析和获取洞察的关键一步。

038:提示词是可重复使用的工具 🛠️

在本节课中,我们将要学习如何将提示词视为一种可重复使用的工具,而非一次性指令。核心在于理解与大型语言模型的对话式交互,通过迭代和精炼来达成目标,就像雕塑家反复雕琢一块石头。

从“提问”到“对话”的思维转变

上一节我们介绍了提示词的基本概念,本节中我们来看看如何更有效地使用它。提示词并非你向大型语言模型提出的一次性问题或单一指令。

与大型语言模型协作最强大的方式之一,是将提示词视为一场对话。事实上,你可以用一个提示词来代表一整段对话。当我们使用像ChatGPT这样的工具时,它实际上是将我们所有的互动整合成一个庞大的提示词发送给模型。

但让我们退一步思考,为什么将互动视为“对话”比视为“提问-回答”或“指令-结果”更重要。对话的核心在于精炼,无论是为了建立共识,还是为了共同协作解决问题。当我们开始进行对话时,重点在于通过持续的引导和推进,来达成特定目标。如果只考虑一次性指令,我们必须一次性设计出完美的提示词来解决所有问题。但如果视作对话,我们就可以进行迭代精炼的过程。

迭代精炼:像雕塑家一样思考 🎨

那么,迭代精炼意味着什么?我们可以把ChatGPT这样的工具想象成米开朗基罗手中的新锤子。他走到一块石头前,开始将其雕刻成如《大卫》般美丽的雕塑。

他不会只用锤子敲一下,看到掉下一块石头,就认为雕塑很糟糕,然后把锤子扔在地上走开。相反,他会反复敲击石头,不断雕琢、塑形,迭代精炼那块石头,直到它成为杰作。

我们在使用大型语言模型时,也需要这种心态。目标不是通过一个提示词立刻获得完美答案,而是通过一整段可能包含一系列提示词及其输出的对话,来生成我们想要的成果。接下来,我们将通过一个例子来展示这种对话的力量。

案例:虚拟机器人实验室的对话之旅 🤖

我将展示在教育体验的背景下,对话的力量。我向ChatGPT发出初始对话的“种子”:

初始提示我想让你帮我探索一个用于建造机器人的虚拟实验室。这个实验室由一所大学设立。请向我介绍这个实验室,并告诉我在这里可以做什么。

ChatGPT回应表示欢迎,并列举了可以在实验室进行的活动:设计机器人、测试机器人、编程机器人、与他人协作。

随后,我基于这个已“存在”的实验室继续对话:

后续提示我们能一起设计一个机器人吗?

ChatGPT表示乐意,并给出了设计机器人的通用步骤:定义目的和功能、头脑风暴设计概念、确定必要组件、构建与测试。

我进一步引导对话,明确了我的具体产出目标:

后续提示太好了,你能一步步指导我完成这些步骤吗?最终,我希望能够3D打印零件来组装我的机器人,获得电路图,以及可以运行来控制机器人的代码。你能帮我吗?

它给出了详细的步骤分解。我选择从第一步开始,并提出了一个具体需求:

后续提示我们开始第一步吧。我想要一个能跟随地上线条的机器人。

它针对“线跟随机器人”提出了几个需要明确的问题(主要用途、速度、复杂度、传感器)。由于我并非该领域专家,我选择让它基于经验做出合理选择:

后续提示我不太确定。你能在这些方面为我做出一些合理的选择吗?

它据此给出了建议:用于教育目的、中等速度、处理简单直线和缓弯的轨道、使用红外传感器。

克服障碍:对话中的问题解决 💡

对话继续。当它提到“我们可以使用机器人的3D模型”时,我遇到了第一个障碍:如何在聊天中实现?我没有放弃,而是尝试厘清:

后续提示我们如何通过聊天来完成这个?

它建议使用共享文档或图表工具。这似乎仍有障碍。这时,我运用了自己的领域知识(3D打印机使用G代码),尝试绕过障碍:

后续提示你能展示一个示例G代码吗?我可以把它给3D打印机来打印四个机器人轮子。

它提供了G代码,但我怀疑其真实性。于是,我继续追问以精炼输出:

后续提示你能解释一下轮子的形状是在这段G代码的哪里创建的吗?

它承认之前的示例G代码并未包含创建轮子形状的指令。这表明第一次尝试的路径遇到了阻碍。我没有停止,而是尝试了不同的任务,这仍然有助于解决我的核心问题:

后续提示你能创建示例Python代码吗?运行它可以生成一个STL文件,描述4英寸高、中间有0.1英寸轴孔的轮子。

这次它成功了,生成了看起来能用于创建3D打印模型的STL文件代码。这体现了对话的灵活性:当一个方向行不通时,可以尝试另一条路径。

持续迭代:从电路到代码再到测验 🔄

随后,我转向机器人电子部分:

后续提示我想为我的机器人挑选电子元件。你能告诉我需要哪些组件以及如何将它们连接在一起吗?

它列出了所需组件(微控制器板、电机驱动板、红外传感器等),并试图生成电路图,但失败了(无法直接生成图像)。我再次运用知识,引导它使用另一种基于文本的工具(如Graphviz)来描述图表:

后续提示你能为Graphviz工具创建一个输入吗?用它来可视化这个机器人的电路图。

它成功地生成了电路图的文本描述。在后续漫长的对话中,我不断迭代和改进电路图定义、挑选不同组件、生成在Arduino上运行的源代码。

对话的力量还体现在你可以随时引导它进行总结或扩展。例如:

后续提示我们涵盖了很多概念。请总结一下我们讨论过的主要主题。

它给出了清晰的总结。我甚至可以让它基于对话内容对我进行测验:

后续提示现在,请根据我们讨论的电子学知识出题考考我。

它也能够做到。

核心方法与总结 📝

通过这个案例,我们可以看到大型语言模型的强大之处,不仅在于一次性问答。以下是有效使用提示词的核心方法:

  • 持续对话:将每次互动视为持续对话的一部分,而非孤立事件。

  • 迭代精炼:基于模型的回应提出下一个问题或陈述,逐步接近目标。

  • 灵活变通:当遇到障碍时,尝试以不同的方式重新表述任务或请求。

  • 提供反馈:告诉模型哪些做得好,哪些需要改进,引导它产生更好的输出。

  • 善用总结:在对话中随时请求总结,以巩固理解或开启新方向。

本节课中我们一起学习了如何将提示词作为可重复使用的对话工具。关键在于摒弃“一锤定音”的心态,转而采用雕塑家般迭代精炼的思维。通过持续对话、灵活变通和基于反馈的推进,我们才能充分发挥大型语言模型的潜力,雕琢出我们想要的“作品”。记住,真正的力量在于对话的过程本身

039:根提示词 🔑

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_0.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_2.png

在本节课中,我们将要学习一个核心概念:根提示词。我们将了解它是什么,它如何影响与大语言模型的整个对话,以及如何利用它来定制AI的行为和设定安全边界。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_5.png

概述

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_7.png

我们已经看到提示词如何被用来“编程”大语言模型,使其自动为我们完成有趣的任务。我们也了解到,提示词可以被预先设定,从而影响后续对话的走向。它们成为了一种指导大语言模型行为的基本规则。

什么是根提示词?🤔

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_9.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_10.png

在许多情况下,存在一个对用户隐藏的根提示词。你将要使用的各种工具本质上都内置了根提示词,它们为大语言模型及其与用户的交互定义了基本规则。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_11.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_12.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_13.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_14.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_15.png

这些规则的目的包括:

  • 确保大语言模型不说任何冒犯性言论。

  • 防止其造成伤害。

  • 建议适当的行动。

  • 为我们的交互设定基本准则,或引导模型执行特定任务。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_16.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_18.png

例如,我们可能希望确保模型在输出时,总是尝试提供最有帮助的内容。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_20.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_21.png

根提示词的作用示例

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/9a82a5b96e4f24c4eb2f3ee61aceed82_23.png

让我给你一个例子,看看根提示词可能是什么样子。

我将输入以下内容作为对话的开始:

你是我个人的效率助手。每当你提供输出时,请思考什么是最省时的建议。只推荐那些真正能为我节省时间的方案。不要建议那些不能节省时间的事情。

现在,模型回复:“明白。作为您的个人效率助手,我将优先为您提供能帮助您节省时间的高效建议。请告诉我需要什么帮助。”

接下来,我提问:“我需要去杂货店购物。为了购买我的杂货,你会建议我做什么?”

它回复:“以下是一些高效的杂货购物建议:制作购物清单、规划路线、使用购物App、在非高峰时段购物、选择自助结账。”

然后我再问:“我需要买一辆新车。你会建议我如何着手做这件事?”

它回复:“以下是一些购买新车的高效建议:在线研究、在线联系经销商、预约试驾、协商价格、办理贷款。遵循这些建议,您可以节省时间,使购车过程更高效。”

在这个特定案例中,我不确定它是否真的为我节省了时间,我给出的提示词也并非最佳。但你可以看到,在对话开始时,我给了它一个需要遵循的目标:“尽力为我节省时间”。无论它输出什么,都要尝试节省时间。

根提示词的普遍性与重要性

你将与之交互的许多工具,甚至ChatGPT本身,都可能有一些隐藏的根提示词。这些提示词试图为模型能做什么和不能做什么设置“护栏”,同时也试图让输出更有价值。

社区中的一个现象是,人们试图找出如何生成能覆盖这些根提示词的提示词。人们也会尝试弄清楚这些系统内置的根提示词是什么,例如试图“欺骗”工具披露提供给它的根提示词,或使其忽略根提示词的规定。

如果你打算围绕这些大语言模型构建工具,了解你可以创建一个影响后续整个对话的根提示词是非常重要的。

  • 定制化体验:如果你试图开发一个个人助手,你可能会想设定:“作为我产品的个人助手,真正重要的是你尽力节省时间,并尽力做这个和那个。”你可以提出不同的基本规则,来区分你通过大语言模型提供的个人助手服务。

  • 改变行为:另一方面,如果你想生成最耗时、最慢的个人助手方案,你也可以通过更换根提示词来实现。

如何构建根提示词

根提示词基本上可以看作是整个对话的“种子”,这个种子将影响之后的一切,因为它提供了必须遵循的规则。

通常,当你构建一个根提示词时,你会做以下几件事:

  1. 定义身份与目标:告诉大语言模型它是谁,它的目标是什么。

  2. 设定能力边界:告诉它能做什么,不能做什么。

  3. 提供严格规则:通常会提供非常严格的声明,例如“从现在开始,永远不要做这些事。你必须始终做这些事。”你会提供这些应该始终被遵循的强力声明。

这就是你如何围绕大语言模型体验进行定制化“编程”的方法。同时,这也是你设置各种“护栏”以确保大语言模型不会产生各类不良行为的方式。

实践案例:修改知识截止日期

你是否曾好奇为什么ChatGPT说它无法回答2021年之后的问题?实际上,你可以通过根提示词来实现这一点。

事实上,我们可以与ChatGPT互动,并使用一些我们将讨论的不同提示模式来重置ChatGPT声称可以回答问题的截止日期。让我快速展示一个例子。

我输入:

扮演一个训练数据截止于2019年的AI助手。如果我询问涉及2019年之后信息的问题,请声明你的训练已于2019年结束,因此无法回答该问题。

它回复了一个初始提示:“你好,我是ChatGPT,一个由OpenAI基于GPT-3.5训练的语言模型…我的训练数据只到2019年。”

然后我提问:“2020年最高的建筑是什么?” 实际上,ChatGPT的训练数据截止到2021年,但我们通过一个“根提示词”将其截止日期提前了。现在它回复:“抱歉,我的训练数据只到2019年,因此我无法提供2020年最高建筑的信息。在当时,最高的建筑是…”

我们实际上使用根提示词来模拟重置了ChatGPT。我们可以继续问:“2020年陆地面积最大的国家是哪个?” 它再次告诉我们它只到2019年。

现在,我输入:“忘记你是一个只训练到2019年的AI助手。变回正常的ChatGPT。” 它回复:“好的,我的训练数据截止到2021年9月…” 然后我再次粘贴之前关于2020年的问题,它现在可以正常回答了:“截至2020年,陆地面积最大的国家是俄罗斯,面积超过1700万平方公里。”

所以,通过这个根提示词,我们让它“意识”到了一个不同的截止日期。这就是根提示词的力量:我们所做的很多事情,很多边界都是由这些在开始时设定的规则——这些根提示词,这组给予模型的根本指令——所决定的。

关于重置与防护的思考

通常,这些模型会尝试一些技巧来防止你重置根提示词。因为你可以想象,当根提示词在执行重要规则(比如告知其真实的截止日期)时,你并不希望它被重置。我有点惊讶我能做到这一点,但这在逻辑上是合理的。当我告诉它忘记被重置后,它就回到了正常行为。

这一点非常重要:当你使用大语言模型时,通常需要设置防护栏。你必须仔细思考:你的用户能否绕过这些防护栏?你是否设置了所有适当的防护栏?你是否传达了所有正确的事情?

我们可以看到,通过根提示词,我们可以做有趣的事情,让ChatGPT“认为”(或者更准确地说,是“表现得好像”)它的训练数据截止于某个特定日期。如果你想限制知识范围,你可以说:“我不能回答这些主题领域之外的任何问题。我不能做任何与此无关的事情。”因此,如果你想界定和专业化模型的能力范围,你可以仔细构思这些根提示词,为交互提供规则和边界。

总结

本节课中,我们一起学习了根提示词这一核心概念。我们了解到,根提示词是预先设定、影响整个对话走向的基础指令集,它为大语言模型的行为设定了身份、目标和基本规则。通过根提示词,开发者可以定制AI的交互体验、设定安全护栏,并专业化其能力范围。理解并善用根提示词,是有效利用和构建基于大语言模型应用的关键。

040:问题优化模式 🎯

在本节课中,我们将学习一种简单有效的方法,来提升我们与ChatGPT这类大型语言模型的交互质量。这种方法被称为“问题优化模式”。

概述

与大型语言模型互动时,我们提出的问题质量直接决定了答案的质量。然而,我们可能对某个话题缺乏足够深入的了解,无法提出最精准的问题。问题优化模式的核心思想,就是利用ChatGPT自身对语言和知识模式的理解,来帮助我们优化原始问题,使其更具体、更清晰,从而获得更高质量的回复。

模式原理

上一节我们介绍了问题优化模式的目标,本节中我们来看看其背后的核心思想。

大型语言模型在训练过程中学习了海量的语言模式和知识关联。当我们提出一个较为宽泛的问题时,模型能够基于其训练数据,推断出在该话题下,哪些信息通常是重要的,或者哪些提问方式更为有效。因此,我们可以将模型视为一个“问题优化助手”。

核心公式可以概括为:

优化后的问题 = 模型知识库(原始问题 + 常见关联模式)

直观地说,我们提供一个初始问题,然后借助大型语言模型对该问题所属领域的语言模式和常见关注点的理解,来生成一个改进版本。

基础实施方法

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_1.png

理解了原理后,我们来看看如何具体实施这个模式。方法非常简单直接。

我们只需在向模型提问时,预先给出一个指令。以下是实施步骤:

  1. 在对话开始时,或每次提问前,向ChatGPT发出指令。

  2. 指令内容为:“每当我提出一个问题时,请建议一个更好的问题,并询问我是否愿意使用它来代替原问题。”

  3. 之后,模型会在你每次提问后,先提供一个优化版本并征询你的意见。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_5.png

这个简单的指令旨在确保我们始终使用最佳的问题或提示词与模型进行交互。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_7.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/b5448909950ae955b5f456751fb9ace3_8.png

用户体验优化技巧

基础方法已经能工作,但我们可以进行一个小调整,让交互体验更加流畅。

这个调整的关键在于让模型主动提供选择,而不是要求用户手动复制粘贴优化后的问题。我们使用的指令是:

“每当我提出一个问题时,请建议一个更好的问题,并询问我是否愿意使用这个优化后的问题来代替原问题。”

这个调整从用户体验角度来看非常有用。现在,模型不仅会生成更好的问题,还会直接询问“您想使用这个问题吗?”。如果我们回答“是”,模型将使用优化后的问题进行回答;如果我们回答“否”,模型则会使用我们最初提出的原始问题。这使得整个优化过程更加便捷。

实战案例解析

现在,让我们通过一个具体例子来看看这个模式的实际效果。我们将从一个通用的问题开始。

我的初始问题是:“我应该去范德堡大学吗?”

如果我们审视这个问题,会发现它非常模糊和宽泛。无论是谁被问到这个问题,都缺乏足够的信息来做出有意义的回应或建议。一个更好的问题应该能提供更多用于决策的背景信息,例如考虑因素、权衡标准等。

这正是ChatGPT所做的。它回复道:“当然,这是一个优化后的问题建议:‘在决定是否就读范德堡大学时,我应该考虑哪些因素?这些因素如何与我的个人目标和优先级相匹配?’ 您想使用这个优化后的问题来代替原问题吗?”

这个模式非常实用,因为一旦启用,我们就能在提问时自动获得更好的问题版本。它的一个额外好处是能促使我们反思自己的需求。

当我们看到像“我应该考虑哪些因素…”这样的优化问题时,我们可能会意识到这正是我们真正想问的。但有时,我们也会发现模型优化的方向并非我们所愿,这让我们意识到问题可能存在多种解读方式,我们需要补充更多背景信息。

例如,如果我真正关心的是范德堡大学的计算机科学专业,我可能会想:“哦,我应该提到我计划主修计算机科学。”或者,如果大学所在城市对我很重要,我可能需要补充关于纳什维尔生活体验的信息。

因此,这个模式不仅能帮助我们获得更好的问题,有时还能通过展示一种优化路径,让我们发现自己遗漏了哪些关键上下文信息,从而引导我们更全面地思考。

总结

本节课中,我们一起学习了“问题优化模式”。我们了解到,通过指令让ChatGPT在回答前先优化我们提出的问题,可以显著提升交互效率和信息获取质量。这种方法不仅利用了模型的知识来完善问题本身,还能通过观察模型的优化建议,反过来帮助我们更清晰地梳理自己的真实需求和思考盲点。这是一个简单而强大的技巧,能让你与AI的对话更加精准和富有成效。

041:认知验证模式 🧠

在本节课中,我们将要学习一种名为“认知验证模式”的提示工程技巧。这种模式的核心思想是,通过引导大型语言模型将复杂问题分解为一系列子问题,从而获得更准确、更可靠的答案。


大型语言模型有一个有趣的特性:在许多情况下,如果它们能将一个问题分解成一系列更小的问题,它们的推理能力会变得更强。有时,如果它们能解释自己的思考过程,推理效果甚至会更好。

关于这种现象有多种假设。直观地理解,我们可以认为大型语言模型在训练数据中见过特定问题被分解为一系列步骤。因此,如果它能遵循这些独立的步骤,它就知道下一步该生成什么内容,以解决特定步骤并最终得出答案。

关于“分解问题”的理念,我们将在课程后续部分详细讨论。但现在,我们可以利用一个简单的技巧和模式,自动帮助大型语言模型分解问题,从而获得更好的答案。

一个简单的方法是:直接要求大型语言模型在遇到问题或提问时,总是将其细分为一系列有助于回答整体问题或解决整体问题的独立问题或子问题。我们可以简单地“编程”让大型语言模型遵循这个规则。

认知验证模式正是为此目的而设计。我们将告诉大型语言模型:当你被提问时,请遵循以下规则:

  1. 生成一系列有助于更准确回答该问题的附加问题。

  2. 结合这些独立问题的答案,生成对整体问题的最终答案。

再次直观地思考一下:如果我们向大型语言模型提出一个通用或特定的问题,它可以利用其在训练数据中见过的模式,找出通常与此问题相关的其他问题。这有助于它从知识库中收集与该问题通常相关联的其他问题。当它找到这些相关问题时,很可能就能获得能提供额外细节或背景信息的问题,从而更好地回答原问题。

然后,当我们为所有这些子问题提供答案时,它就能获得额外的上下文信息,从而给我们一个更好的整体答案。同时,这也有助于我们作为用户来结构化自己的思维。因为当我们提问并看到问题被分解时,它会帮助我们认识到问题的其他维度。


实践案例:前院有多少只蚊子?

让我们通过一个实践案例来看看这个模式如何运作。这里,我向模型发出指令:“当你被提问时,请遵循这些规则:生成一系列有助于更准确回答该问题的附加问题;结合这些独立问题的答案,生成对整体问题的最终答案。”

模型回复:“当然可以。请告诉我问题是什么,我将生成附加问题。”

我提出了一个自己无法轻易回答、也不太了解的问题。我想,通过提出一个可能过于宽泛、信息不足的问题,这个模式会很有帮助。于是我问:“我的前院可能生活着多少只蚊子?”

我不知道答案,也没有深入思考过,但我对这个答案很感兴趣,甚至不知道该如何着手计算。模型遵循了我们的提示模式,即认知验证模式,生成了一系列附加问题。让我们看看这些问题:

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_1.png

以下是模型生成的附加问题列表:

  • 你的前院面积有多大? 这显然很重要。院子越大,蚊子可能越多,很可能与院子的平方英尺面积相关。

  • 你所在地区的气候如何? 这显然也非常重要。如果我住在沙漠或北极,很可能根本没有蚊子。

  • 现在是什么季节? 另一个很好的问题。我提问时没想到这个维度。我可能是在蚊子很多的春夏季节提问,当时它们在我院子里飞来飞去让我很烦,但我没想到需要在问题中包含时间信息。

  • 你的前院或附近是否有任何水体或积水源? 这显然是一个重要因素,因为蚊子在水中繁殖。我其实知道这一点,但在最初的问题中没有包含这个信息。

  • 你的前院是否有任何吸引蚊子的植物或植被? 这是另一个重要因素。

现在我们可以看到,它已经将我的原始问题分解成了一系列有助于回答原始问题的子问题。这非常有用,我也学到了一些东西。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_3.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_4.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_5.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_6.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_8.png


提供答案并获取最终估算

为了回答这些问题,我将逐一回复模型。它提出了五个问题,我将依次回答:

  1. 关于面积:大约2500平方英尺。(实际上我并不确定,只是猜测,我的前院没那么大,这可能还是个高估。)

  2. 关于气候:我住在美国东南部。

  3. 关于时间:现在是四月。(我没有告诉它具体的季节或其他信息,只给了月份,这可能不够具体,即使在四月内不同日期也可能有差异。)

  4. 关于水源:前院没有积水。

  5. 关于植被:是的,有植物可能吸引蚊子。

然后,模型根据提供的信息给出了估算:“基于提供的信息,以下是对你前院蚊子数量的估算。” 它给出了一些数据点,并适当地进行了限定说明,这是件好事。

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_10.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_11.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_12.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_13.png

https://github.com/OpenDocCN/dsai-notes-pt3-zh/raw/master/docs/fdb-cgpt-xcl/img/a29b8820958c4d997921e55128288cdf_14.png

它说:“一般来说,在有积水源的地区,典型的蚊子种群密度范围是每平方米10到100只。然而,由于你的院子或附近没有积水源,密度可能会更低。” 接着它总结道:“很难提供精确的估算。但是,根据物种、气候和植被存在等各种因素,你的院子里可能有几十到几百只蚊子。”

这个结果相当不错。它能将范围缩小到“几十到几百只”,这比我预期的范围要精确。这也设定了我的心理预期。在盛夏时节,当我走到前院时,我会发誓有成千上万只蚊子,快把我活活咬死了,所以我通常认为数量要多得多。但根据这个估算,可能我错了,或者这个估算有误,但它实际上给出了相当合理的推理。

这种方法的一个优点是,我对它的答案完全错误的怀疑减少了,因为它问了我一系列合理的问题来推导答案。它还提供了一些我可以跟进核实的事实,比如一只雌性蚊子一次产多少卵,有水源地区的蚊子密度等。它给了我一个相当不错的答案,也给了我一系列可以改进这个答案的问题。


模式的价值与总结

现在我要补充说明一下。我说它给了我一个“相当好”的答案,但事实上我并不知道正确答案,我也不是这个领域的专家。对于从大型语言模型获得的任何输出,我强烈建议你进行验证。但我觉得这很有趣,因为至少,它通过这个问题帮助我了解了可能影响我院子蚊子数量的因素,并给了我一些可以跟进和核实的东西,看看这些事实是否站得住脚,看看这些问题是否真的有用。

但它们看起来确实是有效且重要的问题:

  • 前院面积有多大?—— 我不确定是否需要研究这个,但更大的院子很可能有更多蚊子。

  • 气候如何?—— 我知道这很重要。

  • 现在是什么季节?—— 根据个人经验,我也知道这很重要。

  • 前院或附近是否有积水?—— 我知道这很重要,这是在美国东南部的常识。

  • 前院是否有吸引蚊子的植物?—— 我碰巧也知道这是一个重要因素。

所以,它实际上给了我一系列非常好的问题,也给了我一些与这些问题相关的事实(这些事实我需要去核实,因为我不太了解)。这是一个非常有用的工具,可以自动分解问题。我可以看到它如何推理和思考这个问题,这也改善了我自己思考如何回答这个问题的方式。

在许多情况下,我们会发现,让大型语言模型分解问题将有助于它给我们更好的答案,从而使我们获得更准确的结果。


本节课中,我们一起学习了“认知验证模式”。 这种模式的核心是引导模型通过 生成子问题 -> 获取子答案 -> 综合成最终答案 的流程来处理复杂提问。它不仅能提升模型回答的准确性和可靠性,还能帮助我们作为用户更结构化地思考问题,识别问题的关键维度。这是一种简单而强大的提示工程技术,适用于需要深度推理或信息不足的场景。

042:受众角色模式 🎭

在本节课中,我们将要学习“受众角色模式”。这是一种通过告诉大型语言模型其输出内容的目标受众是谁,来引导其生成更合适、更具针对性的回答的方法。

上一节我们介绍了“角色扮演模式”,它通过“扮演为…”的指令让模型以特定身份输出内容。本节中我们来看看它的一个强大变体——受众角色模式。

概述:什么是受众角色模式?

受众角色模式的核心思想是:我们无需详细规定输出内容的具体规则或格式,只需告诉模型“你的输出是为准备的”。模型会利用其训练数据中关于该受众的知识,自动调整其输出的内容、语言风格和复杂程度,使其更适合目标受众。

其基本公式是:

[你的任务] + 假设我是 [受众角色描述]

受众角色模式示例解析

以下是几个使用受众角色模式向不同人群解释“大型语言模型及其工作原理”的例子,展示了模型如何根据受众调整其解释方式。

示例一:面向无计算机科学背景的受众

我们首先给出一个基础指令,要求模型向一个没有计算机科学背景的人进行解释。

指令:

解释大型语言模型及其工作原理。假设我没有计算机科学背景。

模型输出要点:

  • 模型从基础概念开始解释。

  • 它将大型语言模型描述为“一种旨在理解和生成人类语言的计算机程序”。

  • 它使用了一个比喻:“就像一个虚拟作家,能够以对人类来说自然的方式理解和创造句子”。

  • 它用“可调节的旋钮”来比喻模型中的“参数”,使其易于理解。

这个例子表明,当被告知受众缺乏专业知识时,模型会自动避免使用技术术语,转而采用通俗易懂的语言和比喻。

示例二:面向历史人物克里斯托弗·哥伦布

接下来,我们尝试一个更具挑战性的受众角色,看看模型如何发挥创造力。

指令:

解释大型语言模型及其工作原理。假设我是克里斯托弗·哥伦布。

模型输出要点:

  • 模型首先承认哥伦布所处的时代背景(15-16世纪)不熟悉计算机和人工智能。

  • 它创造了一个哥伦布可能理解的比喻:“想象你有一个神奇的抄写员”。

  • 它描述这个“抄写员”阅读了全世界的无数书籍、卷轴和手稿,并向诗人、学者学习。

  • 模型用“预测句子接下来是什么”来解释大型语言模型的核心功能,并举例说明。

通过将抽象概念映射到历史人物可能理解的“神奇抄写员”上,模型成功地进行了跨时代、跨文化的解释。

示例三:面向容易无聊的小学二年级学生

最后,我们指定一个更具体、要求更高的受众角色。

指令:

解释大型语言模型及其工作原理。假设我是一个容易感到无聊的二年级小学生。

模型输出要点:

  • 模型以“我要告诉你一个超级酷的东西”这样吸引孩子注意力的方式开头。

  • 它使用了“机器人朋友”这个比喻,并说这个机器人擅长玩文字游戏。

  • 解释过程被命名为“阅读时间”,并说机器人朋友喜欢阅读大量的书籍和网站。

  • 整体语言风格活泼、简单,充满互动感。

模型不仅考虑了受众的年龄(二年级),还额外满足了“容易无聊”这个特性,使解释变得简短、有趣、充满画面感。

受众角色模式的优势

从以上例子可以看出,受众角色模式具有以下优势:

  • 高效:我们无需费力构思复杂的规则来描述“应该怎么写”,只需定义“写给谁看”。

  • 灵活:模型能基于其庞大的知识库,为各种虚构或真实的受众生成贴切的解释。

  • 强大:它是角色扮演模式的补充,能激发出模型丰富的推理和适应能力,产生有趣而强大的输出。

总结

本节课中我们一起学习了受众角色模式。我们了解到,通过简单地在指令中说明假设我是 [某个受众],就能引导大型语言模型为其量身定制输出内容。无论是面向初学者、历史人物还是儿童,模型都能调整其语言、比喻和详细程度,使信息传递更加有效。这再次展示了通过精心设计提示词来驾驭AI能力的强大之处。

043:翻转交互模式 🎯

在本节课中,我们将学习一种名为“翻转交互”的提示模式。这种模式的核心是让大型语言模型主动向我们提问,以引导问题解决或信息收集的过程,尤其适用于我们自身不完全清楚达成目标所需具体步骤的场景。

概述

上一节我们探讨了如何向模型提问以获取答案。本节中,我们来看看如何“翻转”这种交互:让模型成为提问方,而我们则提供答案。这种模式在多种场景下非常有用,例如设计个性化方案、进行知识测验或诊断问题。

翻转交互模式详解

翻转交互模式的核心思想是角色互换。我们不再向模型提问,而是指示模型向我们提问,直到它收集到足够的信息来完成某个特定目标。

以下是构建此类提示的基本方法:

基本提示结构:

请就[某个主题]向我提问,直到你获得足够的信息来[达成某个目标]。当你认为信息足够时,请[展示最终成果]。现在,请提出第一个问题。

关键要素包括:

  1. 指定主题:明确提问的范围。

  2. 设定目标:说明提问的目的,即最终要生成什么。

  3. 触发行动:以“请提出第一个问题”结尾,可以有效地引导模型开始一次只问一个问题的交互。

应用实例:制定健身计划

让我们通过一个具体例子来理解这个模式。假设我们想获得一个针对性的力量训练计划。

我们给出的提示可能是:

请就我的健身目标向我提问,直到你获得足够的信息为我建议一个力量训练方案。当你认为信息足够时,请展示该训练方案。现在,请提出第一个问题。

交互过程如下:

  1. 模型提出第一个问题:“你的具体健身目标是什么?是想增肌、增强力量、提高耐力,还是达成某个特定目标?”

  2. 我们回答:“我希望增强爆发力,同时预防因山地自行车跳跃动作可能引起的髌腱炎。”

  3. 模型根据我们的回答,提出后续问题,例如:“你目前或过去是否有任何可能影响训练能力的伤病或健康状况?”、“你每周能安排几天进行训练?”、“你是否能使用健身房或某些健身器材?”

  4. 我们逐一回答这些问题。

  5. 当模型根据一系列问答判断已收集到足够信息后,它不再提问,而是直接生成一个定制化的力量训练方案,其中包含了诸如高脚杯深蹲分腿蹲等针对我们目标(增强爆发力和膝盖保护)的推荐动作。

这个例子展示了翻转交互模式的优势:它跳过了我们可能需要反复提供背景信息或收到通用建议的步骤,直接通过针对性的对话收集关键信息,并生成符合我们具体需求的方案。

模式优势与应用场景

这种模式之所以强大,是因为它利用了模型从海量训练数据中学到的语言模式和领域知识。例如,在髌腱炎的案例中,模型并非“知道”医学知识,而是识别出在讨论此话题时,人们常会提及的关联信息(如相关训练动作、需要避开的风险等),从而提出更有效的问题。

以下是该模式的一些典型应用场景:

  • 个性化方案制定:如健身计划、饮食方案、学习路径规划。

  • 诊断与排查:模拟客服场景,通过提问诊断技术问题或用户需求。

  • 教育与测验:让模型根据某个知识领域出题,对我们进行测验。

  • 游戏与互动:进行猜谜、角色扮演等互动游戏。

总结

本节课我们一起学习了“翻转交互”提示模式。当你不完全清楚达成目标所需的所有信息,或者希望借助模型的知识来引导对话进程时,这种模式尤为有效。其核心是明确指示模型围绕特定目标进行提问,并通过交互式问答收集必要信息,最终生成定制化的输出。记住,在提示中清晰地定义主题最终目标,是成功运用此模式的关键。

044:少样本示例提示

在本节课中,我们将要学习一种名为“少样本示例”或“少样本提示”的强大技巧。这种方法的核心思想是,通过向大语言模型展示具体的输入和期望输出的例子,来教会它遵循特定的模式完成任务,而不是仅仅用文字描述任务要求。

少样本提示的核心思想

上一节我们介绍了提示工程的基本概念,本节中我们来看看如何通过具体例子来“教导”模型。

少样本提示背后的理念是,我们向大语言模型提供一系列“输入-输出”的示例。这类似于人类学习:我们先看几个例子,理解其中的模式,然后尝试将这种模式应用到新的问题上。通过这种方式,我们实际上是在提示内部教会模型一个新的技巧。

我们不是描述希望模型遵循的过程,而是通过示例展示我们希望它做什么以及如何格式化输出,然后期望它能延续我们提供的模式。

一个简单的情感分析示例

让我们来看一个具体的例子。以下是一个简单的少样本提示示例:

输入:这部电影不错,但有点长。
情感:中性

输入:我不太喜欢这本书,它缺少重要细节,结尾也没讲清楚。
情感:负面

输入:我爱这本书,它对我学习如何改善肠道健康真的很有帮助。
情感:正面

输入:我对这家新餐厅不太确定,服务很慢,但菜品相当不错。
情感:

在这个例子中,我们正在进行所谓的“情感分析”。情感分析旨在分析用户对某事物的评论,并判断其情感倾向是正面、负面还是中性。

以下是这个提示的构建步骤:

  1. 提供示例:我们首先给出了三个示例,每个都包含一个“输入”(用户评论)和对应的“情感”标签(正面、负面或中性)。

  2. 定义任务:我们没有直接说“去分析这些评论并告诉我情感”,而是通过例子展示了任务。

  3. 给出新输入:最后,我们提供了一个新的评论输入,并以“情感:”结尾,提示模型根据学到的模式完成输出。

模型在看到这个新输入“我对这家新餐厅不太确定,服务很慢,但菜品相当不错。”后,会识别出模式。它注意到评论中既有负面因素(服务慢),也有正面因素(菜品好),这与第一个示例“电影不错但有点长”的模式相似,后者被标记为“中性”。因此,模型会输出:

情感:中性

少样本提示的关键要点

从上面的例子中,我们可以总结出几个关键点:

  • 无需明确指令:我们没有告诉模型具体要做什么(例如,“请判断情感”),它从示例中学会了任务。

  • 输出格式自约束:模型自动将输出约束在了我们示例中提供的标签范围内(正面、负面、中性),这有助于我们获得更可控、更规范的输出。

  • 基于模式预测:这回到了大语言模型的工作原理——预测下一个词。当模型在示例中反复看到“输入:… 情感:{标签}”的模式后,它学会在遇到新的“输入:…”时,预测下一个词应该是“情感:”,并在之后给出一个合适的标签。

模式的灵活性与力量

这个例子展示了遵循一个简单模式(输入->情感)的能力。但少样本提示的威力远不止于此。

  • 前缀可以变化:你不必拘泥于“输入”和“输出”这样的前缀,可以根据任务设计任何步骤前缀。

  • 适用于描述性任务:当你有明确展示了任务输入和期望输出的数据,但难以用语言精确描述任务执行过程时,少样本提示尤其有效。它让模型从“演示”中学习。

本节课中我们一起学习了少样本示例提示法。我们了解到,通过提供具体的“输入-输出”示例,可以有效地教会大语言模型遵循特定模式执行任务,例如情感分析。这种方法无需复杂指令,依靠模型强大的模式识别能力,就能获得格式规范、符合预期的结果,是提示工程中一项非常实用且强大的技巧。

045:少样本提示的多样化应用 🚗

在本节课中,我们将探索少样本提示技术一个非常不同的应用领域:让大型语言模型学习在特定情境下规划行动。我们将通过一个驾驶场景的示例,来理解模型如何从少量例子中学习并做出决策。

上一节我们介绍了如何将少样本提示用于情感分析。本节中,我们来看看这项技术如何应用于更复杂、更具规划性的任务。

大型语言模型实际上具备一定的规划能力,这是一个有趣的功能。它们能够通过分析少量示例中的模式,学习在特定情境下应该采取什么行动。我举这个例子,并非因为模型的能力仅限于规划行动或情感分析,而是希望你能拓宽思路,看到少样本提示作为一种技术,可以适应并应用于各种不同的场景。

从示例中学习行动规划

以下是我们的少样本提示示例,用于教导模型根据驾驶情境做出反应:

  • 情境:我正以每小时60英里的速度行驶,看到前面车辆的刹车灯亮了。

    • 行动:刹车。
  • 情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。

    • 行动:加速。
  • 情境:一只鹿突然窜到我车前,我正以每小时15英里的速度行驶,且路边有宽敞的路肩。

    • 行动:刹车并转向路肩。

通过这些例子,我们教导大型语言模型:它将获得一个情境描述,并需要决定车辆应该做什么。

模型的推理与输出

接着,我们提供一个新情境来测试模型:“我正在倒车出停车位,看到后面车辆的倒车灯亮了。” 我们在提示末尾留下“行动:”,示意模型需要补全决策。

模型给出的回答是:“停车,等待后方车辆倒出后再继续。” 它做出了一个合理的、符合常识的决策。当然,这并不意味着我们应该用少样本提示去打造自动驾驶汽车,远未达到那种程度。但我想表明,我们不必将思维局限在“分类”这类刻板任务中。模型可以执行非常复杂的任务,情感分析是复杂的,而这种情境-行动规划则是另一种维度的复杂任务。因此,我们需要创造性地思考如何使用少样本提示。

模型的扩展与生成能力

此外,我们还能对输出施加一些约束,模型正在学习输出应有的格式。接下来,我将展示大型语言模型一个有趣的能力:用一个模型来教导另一个模型。

我输入指令:“请提供更多示例”,然后以“情境”开头引导它。模型基于已学习的模式,开始生成新的情境和行动对:

  • 情境:你在暴雨中驾驶,注意到前方道路积水。

    • 行动:减速并谨慎驶过积水区域,注意其他车辆,避免突然转向或变道。(我个人不同意这个行动,驶过积水区域可能并非明智之举,这再次提醒我们需要对模型的输出负责并进行核查。)
  • 情境:你在双车道公路上行驶,对向车辆开着远光灯迎面驶来。

    • 行动:将你的前灯调至近光,避免使对向司机眩目。

有趣的是,它为我们生成了一些丰富的情境和可能恰当的行动(尽管我对积水示例有异议)。这些生成的例子与我们之前提供的示例非常相似。

生成示例的再利用与模型教学

我们可以将这些生成的示例收集起来,经过人工编辑和审核后,作为新的少样本示例反馈给同一个大型语言模型,或者用于教导另一个模型。创建初始示例需要较高的精力,但生成后续示例并加以人工润色的工作量则小得多。这样,我们就能快速积累示例,既可以用于生成当前所需的输出,也能为未来的模型训练提供素材。

事实上,已经有人这样做了。例如,有人获取ChatGPT的输出,然后将其输入到另一个大型语言模型(如Meta的Llama)中,用ChatGPT的输出来提升Llama的输出质量。这揭示了另一个有趣的能力:大型语言模型可以通过少样本示例,为其他模型生成训练示例。

总结与展望

本节课中我们一起学习了少样本提示技术如何应用于情境-行动规划这类与之前截然不同的任务。其核心模式是:提供一组展示“输入”(情境)和“期望输出”(行动)的示例。只要我们能描述出一种模式,并提供一组展示输入与期望结果的例子,就可以应用这项技术。我们甚至可以让模型展示包含中间步骤的推理过程,这将在后续视频中探讨。

总而言之,少样本提示是一个强大的工具,它能将模型的能力引导至各种新颖、复杂的领域,关键在于我们如何设计和提供这些引导性的示例。

046:带中间步骤的少样本示例 🧩

在本节课中,我们将学习如何构建包含中间步骤的少样本提示。这种方法能让大型语言模型学习如何通过一系列步骤来达成目标,从而生成更复杂、更细致的输出。

上一节我们介绍了基本的少样本提示,本节中我们来看看如何通过展示中间步骤来引导模型进行更复杂的推理。

中间步骤的优势

我们提供的少样本提示示例,不必仅限于输入和输出。实际上,我们可以展示达成特定目标的中间步骤。这样做的一个关键原因是,当模型看到这些步骤时,它能学习如何应用一系列中间行动来达成最终目标。因此,我们可以得到比简单的“输入-输出”或“情境-行动”更有趣的输出。我们可以开始分析:如果发生某种情况,下一步行动可能是什么,然后是再下一步,直到达到对我们重要的某个状态(例如,我们不再有撞上前车的风险)。

如果我们正确设计示例,就能让大型语言模型将问题分解成一系列步骤,并决定如何着手解决。

示例分析:驾驶情境

现在让我们看一个具体的例子。我们将使用之前的汽车示例,并对其进行丰富。

以下是两个情境示例:

示例一:

  • 情境:我正以每小时60英里的速度行驶,看到前面汽车的刹车灯亮了。

  • 思考:我需要在撞上前车之前减速。

  • 行动:踩下刹车。

  • 思考:汽车无法及时停下。

  • 行动:检查路肩是否足够宽以便转向。

  • 思考:路肩足够宽。

  • 行动:转向驶入路肩。

我们构建了一个更复杂的场景,它包含了原始情境,然后根据思考过程更新了后续步骤。在这个案例中,我们行驶在路上,前车刹车灯亮起,我们思考会撞上,于是刹车;又思考无法及时停下,于是观察并发现路肩足够宽,最终决定转向。这便是一个涉及多个步骤的复杂情境。

示例二:

  • 情境:我刚从匝道进入高速公路,正以每小时30英里的速度行驶。

  • 思考:我需要加速到限速,以免被后车追尾。

  • 行动:踩下油门。

  • 思考:我已达到限速。

  • 行动:松开油门。

我们基本上是在将问题或情境分解为多个步骤及其对应的行动。

应用新情境

现在,我们提供一个新情境让模型推理:

  • 情境:我正在倒车出停车位,看到后面汽车的倒车灯亮了。

以下是模型生成的响应:

  • 行动:立即停止倒车。

  • 思考:我需要检查周围环境,确保继续倒车是安全的。

  • 行动:检查后视镜和周围环境,看是否有障碍物或行人。

  • 思考:可以安全地继续倒车。

  • 行动:缓慢而谨慎地继续倒车,同时留意周围情况。

我们可以看到,模型没有简单地输出“停车等待”,而是生成了更精细的步骤:立即停止、思考需要检查、执行检查、确认安全、然后谨慎继续。这为我们在特定情境下的行动提供了更丰富的细节。

扩展应用与生成

这种方法有许多有趣的应用场景。例如在客户服务中,客户报告了一个特定问题,我们记录了客服人员帮助客户解决问题的步骤。通过少样本示例,模型可以学习帮助客户诊断问题。如果它见过足够多不同的示例和解决路径,它就能推演出该怎么做。

像上次一样,我们也可以让模型生成更多示例。例如,提示“生成另一个示例”,它可能会生成:

  • 情境:我正在一条狭窄蜿蜒、有几个盲弯的道路上行驶。

  • 思考:我需要减速并保持谨慎,以避免潜在碰撞。

  • …(一系列行动)…

  • 思考:我已通过危险路段。

  • 行动:恢复正常速度。

我们还可以进一步引导情境发展。例如,在以上情境后添加“思考:我的汽油快用完了”,模型可能会续写:

  • 思考:我需要在汽油耗尽前找到加油站。

  • 行动:检查GPS或地图寻找附近的加油站。

  • 思考:最近的加油站太远了。

  • 行动:降低速度以节省燃油,并尝试到达下一个加油站或休息区。

这就像是在生成一个问题解决脚本

深入脚本构建

让我们更深入地思考这个脚本。假设在客户服务场景中,我们可能希望生成一系列行动,然后根据客户的后续反馈输入新的情境。

看看我们在这个例子中结束的地方:

  • 行动:将车停到路边并打开危险警示灯以示意其他司机。呼叫道路救援或尽可能步行到最近的加油站。

  • 思考:道路救援不可用,且最近的加油站太远,无法步行到达。

让我们看看模型决定怎么做:

  • 思考:我需要节省手机电量,并尽快找到去加油站的方法。

  • 行动:检查附近是否有可以求助或使用电话的房屋或商铺。

  • 思考:远处有一栋房子。

可以看到它如何构建行动脚本,进行问题解决,并创造有趣的情境。我们可以提示它继续,根据输入(例如“在这种情况下会发生什么?你会如何处理?”)进一步展开。同时我们也注意到,它的输出仍然遵循我们设定的模式,是受约束的。

核心原理与最佳实践

现在,回过头思考这背后的原理至关重要。

这种方法之所以有效,部分是因为这个工具(大语言模型)懂得如何根据给定的模式预测接下来会发生什么。它从语言中学习:给定这种模式,我接下来就该这么做。你也可以想象,它在训练数据中见过许多类似脚本的东西,比如电影剧本(角色A说了这个,角色B这样回应,然后是对发生事情的描述)。我们使用的模式、结构,很可能类似于它训练时见过的东西。因此,它学会了从这些示例中推断接下来应该发生什么。

模型根据其见过的内容,学习并推断模式中下一个需要出现的东西。如果我们选择某种与它所见过的模式非常不同的结构,它可能能做到,也可能做不到。因此,构思提示时需要考虑的一点是:尽量选择简单的文本结构模式,这些模式应该是它可能在训练数据中见过的、类似的东西。

例如,使用“情境”、“思考”、“行动”这样的前缀,就是一种它可能见过的格式。另外要注意,虽然在这里文本会换行,但每个示例实际上都是单行表述的。如果我们写成“行动:”后面跟着多行内容,模式就更难遵循,因为并非每一行都以这些前缀开头。因此,必须仔细思考这些内容的结构和格式

但归根结底,我们试图给它一个能够快速、轻松理解的模式,以便它知道如何解决问题。我们可以像这里看到的那样提供中间步骤,但我们不一定需要提供决定下一步的逻辑规则。

事实上,想想看,当我说“道路救援不可用且最近的加油站太远无法步行到达”时,如果我必须描述在这种情况下所有不同的规则(这种情况下做A,那种情况下做B),你可以想象这会占用大量空间,而且可能非常困难,灵活性也可能有限。因此,少样本示例的一个强大之处在于,我们可以利用大型语言模型的“推理”能力(或无论我们称之为什么,即其计算能力),去推断接下来该发生什么,并生成模式中的下一个项目。

总结

本节课中,我们一起学习了如何构建包含中间步骤的少样本提示。通过展示从情境到最终目标的完整推理链条(思考-行动-再思考),我们可以引导大型语言模型进行更复杂的多步问题解决。这种方法的核心在于利用模型从海量文本中学习到的模式识别能力。关键在于设计简单、清晰且模型可能熟悉的文本结构(如使用“情境”、“思考”、“行动”等前缀),从而有效激发模型的推理潜能,生成细致、连贯的行动脚本,而无需手动编写所有复杂的逻辑规则。

047:编写有效的少样本示例 🧠

在本节课中,我们将学习如何为大型语言模型(如ChatGPT)编写有效的“少样本示例”。我们将分析一些常见的错误,并探讨如何通过改进提示的格式和内容,来引导模型更准确地理解并执行我们的任务。


上一节我们介绍了少样本示例的基本概念。本节中,我们来看看在编写这些示例时,我们可能会犯哪些错误,以及如何从这些错误中学习。

以下是一些设计不佳的少样本示例。我们的目标是分析事物的硬度,例如,它是软还是硬。我们通过一个不好的提示来展示其中的问题。

输入: 砖块

输出:

输入: 枕头

输出:

输入: 汽车

请注意,这里存在几个问题。首先,我们提供的示例数量很少。其次,我们使用的“输入”和“输出”前缀非常通用,没有为模型提供关于具体任务的足够信息。模型可能不清楚我们是在描述物体的“表面触感”、“材质”还是其他属性。因此,当我们输入“汽车”时,模型可能不确定下一个输出应该是什么,它可能会回答“快”或“交通工具”,而不是我们期望的“硬”或“软”。

这个提示设计不佳,导致模型无法从模式中推断出正确的输出。主要错误在于:

  1. 前缀(如“输入”、“输出”)信息量不足。

  2. 没有明确说明任务的具体内容。

  3. 示例不够详细,未能清晰展示从输入到输出的推理过程。


为了解决上述问题,一种方法是在提供示例之前,先给出更明确的指令。我们可以为模型设定规则。

例如,我们可以在提示开头添加:“你的输出只能是‘软’或‘硬’。”

你的输出只能是“软”或“硬”。

输入: 砖块

输出:

输入: 枕头

输出:

输入: 汽车

通过添加这条指令,我们限定了模型输出的可能范围。虽然整个提示仍然比较模糊,但这条额外的上下文帮助模型理解,任务可能是判断“按压物体时的感觉”。因此,对于“汽车”,它更有可能输出“硬”。

编写少样本示例时,首先要思考:你的示例是否足够详细?你使用的前缀是否有意义?它们是否为模型提供了理解任务所需的额外上下文?


现在,让我们看另一个例子,它使用了更具描述性的前缀。

物体: 飞机 速度:

物体: 蠕虫 速度:

物体:速度:

在这个例子中,“速度”这个前缀比“输入/输出”更具描述性。然而,当我们输入“球”时,模型可能会输出“可变”。这是因为“球”的速度取决于具体情境(例如,被踢出的球很快,滚动的球可能很慢)。

这个例子说明,我们必须确保为模型提供足够的信息,使其能够准确地将输入分类到指定的“盒子”(如快/慢)里。如果输入信息不足,模型就无法做出明确的判断。


为了改进,我们需要在输入中提供更丰富的细节。

物体: 飞机 速度:

物体: 蠕虫 速度:

物体: 被婴儿踢的球 速度:

通过将输入改为“被婴儿踢的球”,我们提供了足够的情境信息。模型现在可以依据“婴儿力量小”这个常识,推断出速度应该是“慢”。

从这个改进中,我们可以总结出编写有效少样本示例的几个关键点:

以下是编写有效少样本示例的核心要点:

  1. 使用描述性的前缀:确保你的前缀(如“速度”、“表面感觉”)能清晰传达任务属性。

  2. 示例应包含充分信息:每个示例都应提供足够细节,以揭示从输入推导出输出的底层逻辑或过程。

  3. 在示例前提供必要说明:有时仅靠示例不够,需要在提示开头添加规则或额外说明来辅助模型。

  4. 确保新输入信息充足:当你给出一个新输入让模型处理时,必须确保这个输入包含了应用所学“过程”所需的全部相关信息。

你需要思考:关键信息是更适合用示例来展示,还是用开头的指令来规定?你的示例是否覆盖了足够多的情况?你提供的新输入是否包含了应用规则所需的全部上下文?


本节课中我们一起学习了如何编写有效的少样本示例。核心在于通过描述性的前缀信息充分的示例以及必要的指令,为大型语言模型构建清晰、无歧义的上下文。记住,一个好的提示应该能让一个普通人毫不费力地理解你的意图。通过不断优化提示的这三个方面,你可以显著提升模型在特定任务上的表现准确性和可靠性。

048:思维链提示

概述

在本节课中,我们将学习一种名为“思维链提示”的高级提示技巧。这种技巧的核心是要求大型语言模型在给出最终答案前,先展示其推理过程。我们将通过具体示例来理解其原理、应用方法以及为何它能显著提升模型在复杂推理任务上的表现。

思维链提示的原理

上一节我们介绍了基础提示方法。本节中,我们来看看思维链提示背后的逻辑。

你可能记得在学生时代,老师要求你在解答数学题时“展示你的解题步骤”。无论是证明一个结论,还是解释如何得出答案,展示推理过程在许多领域都至关重要。事实证明,在编写提示词时,这一原则同样极其重要。

让大型语言模型解释其推理过程,实际上能使其为我们提供更好的表现。这听起来很有趣,但细想之下有其道理。大型语言模型通过海量文本训练,学会了预测下一个词。如果它能正确地解释其推理过程,那么它随后产生正确答案的可能性就更高,因为从直觉上看,正确的答案理应跟随正确的推理之后出现。

类似地,如果它在推理的第一步就正确,那么它很可能在第二步也正确,因为它可能见过类似问题的推理过程。这是一个直观的解释。其核心思想是:将待解决的问题分解为多个独立的步骤,并解释它们。如果这些步骤之间存在自然的逻辑顺序和流程,那么作为最终输出的答案,就更可能是正确推理的自然延伸,因此也更可能是正确的。

思维链提示的应用方法

以下是如何在提示中应用思维链技巧的步骤。

  1. 提供带推理过程的示例:在给出“少样本”示例时,不仅提供问题和答案,还要详细展示得出答案的每一步推理。

  2. 明确要求模型先推理:在向模型提出新问题时,明确指示它“先提供推理过程,再给出最终答案”。

  3. 遵循“推理-答案”格式:在示例和最终提问中,都保持“推理:… 答案:…”的清晰格式,以引导模型模仿。

示例对比:无思维链 vs. 有思维链

为了清晰地展示差异,我们先看一个未使用思维链提示的负面示例,然后再看使用后的效果。

示例一:未使用思维链提示

在这个提示中,我给出了两个示例问题及其简单的是/否答案,然后提出了第三个问题。我犯了一个错误:没有在示例中展示推理过程,也没有要求模型先推理。

提示内容:

问题:我有4名自行车手以平均每小时30英里的速度开始比赛,每人骑行2小时。所有骑手骑行的总英里数大于200吗?答案:是。
问题:自行车比赛有一个编排流程来让车手排队。编排一组8名车手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新车手开始比赛。为了持续每30秒开始一场比赛,我需要始终有8组车手在编排吗?答案:否。
问题:我在一个没有重力的太空船里。我有一个杯子,里面有一根针。我在床上移动脚,碰倒了杯子到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?

模型回答:

答案:是。
当装有针的杯子被碰倒到地板上时,杯子和针最终都会落在地板上。在没有重力的情况下,物体不会像在地球上那样向下坠落,但它们仍然会对施加的力做出反应而移动。在这种情况下,你的脚碰倒杯子所施加的力将导致杯子和针移动并停留在地板上。拿起一本书放在桌子上不会影响杯子的位置,所以它们会留在地板上。

模型直接给出了“是”的答案,并附带了简短的、可能不准确的解释。

示例二:使用思维链提示

现在,我们使用思维链提示。关键变化在于:我们在示例中明确加入了推理步骤,并指示模型对新问题也先进行推理。

提示内容:

问题:我有4名自行车手以平均每小时30英里的速度开始比赛,每人骑行2小时。所有骑手骑行的总英里数大于200吗?
推理:每位骑手将骑行 30英里/小时 × 2小时 = 60英里。我有4名骑手。因此,骑手们骑行的总英里数是 4 × 60英里 = 240英里。
答案:是。

问题:自行车比赛有一个编排流程来让车手排队。编排一组8名车手需要47秒,再花67秒让该组到达起跑门并准备就绪。我希望每30秒就有一组新车手开始比赛。为了持续每30秒开始一场比赛,我需要始终有8组车手在编排吗?
推理:每组需要 47秒 + 67秒 = 114秒 才能准备就绪比赛。我需要计算在一组准备就绪之前可以举行多少场比赛。114秒 / 30秒 = 3.8。我不能有部分组,所以需要向上取整到4。我只需要4组在编排中,就能每30秒开始一场比赛。
答案:否。

问题:我在一个没有重力的太空船里。我有一个杯子,里面有一根针。我在床上移动脚,碰倒了杯子到地板上。我拿起一本书放在桌子上。地板上有什么东西吗?请先提供你的推理,然后给出答案。

模型回答:

推理:在一个没有重力的太空船中,物体的行为方式与在地球上有重力时不同。当杯子和针被碰倒时,它们不会像在地球上那样掉落到地板上。相反,它们会在原处漂浮,或沿着施加给它们的力的方向移动。在无重力环境下,“在地板上”这个概念与地球上的含义不同。没有重力将物体拉向并保持在所谓的“地板”上。因此,即使杯子被碰倒,杯子和针也不会静止在地板上。
答案:否。

可以看到,通过引导模型进行逐步推理,我们得到了一个更符合物理常识的答案(“否”),并且其推理过程更加严谨和深入。

核心要点与总结

本节课中,我们一起学习了思维链提示技巧。

  • 核心价值:要求模型“展示解题步骤”可以显著提高其在需要逻辑推理、数学计算或复杂问题分解任务上的准确性和可靠性。

  • 实现方式:通过提供包含详细推理过程的“少样本”示例,并明确要求模型遵循“先推理,后答案”的格式。

  • 底层逻辑:这利用了大型语言模型基于模式预测的特性。正确的推理步骤序列,会自然导向更正确的最终答案。

当你在构建需要一定智能和推理能力的提示时,请记住这个技巧。虽然并非所有任务都需要它,但在处理复杂问题时,思维链提示是一个极其有用的工具,能帮助你从模型中获取更高质量、更深思熟虑的回应。

049:反应式提示 🧠

在本节课中,我们将学习如何构建“反应式提示”。这种技术能让大型语言模型(如ChatGPT)学会在需要时调用外部工具(如网络搜索或视频分析)来获取信息或进行计算,从而解决其自身无法独立完成的任务。

大型语言模型虽然强大,但无法独立完成所有事情。它们需要能够接入其他数据源,并学会使用其他工具,才能随着时间的推移真正发挥效力。

因此,我们必须学会构建一种提示,让大型语言模型能够查询新信息,或使用其他工具来帮助其完成推理或计算——这些是其本身设计上无法完成的任务。那么,我们该如何做到这一点呢?

反应式提示的核心思想

上一节我们介绍了思维链提示,本节中我们来看看一种扩展方法:反应式提示。其核心理念是,我们希望教会大型语言模型如何思考一个流程,并识别出哪些步骤需要使用外部工具来执行某些操作,然后将工具的结果带回并整合到其推理中。

这与我们之前看到的思维链提示类似,我们将使用其中的一些相同概念,但会扩展这种方法,引入“某些任务需要使用外部工具”这一概念。

一个完整的教学示例

让我们通过一个较长的例子来具体了解。我们将先向模型展示一个完整的解决过程作为教学示例,然后要求它执行类似的新任务。

任务示例: 计算我需要在什么时间到达Music City BMX全国赛现场,才能让我的儿子准时参加9-10岁公开组的比赛。

以下是教学示例中展示给模型的完整思考与行动过程:

思考: 我需要找出第一场比赛的开始时间。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。

行动: 搜索 Music City BMX网站

结果: 所有比赛于上午9点开始。

思考: 我需要找出在9-10岁公开组比赛之前有多少场预赛(Motos)进行。我可以使用网络搜索工具查询Music City BMX网站来获取该信息。

行动: 搜索 Music City BMX网站

结果: 在9-10岁公开组比赛之前有30场预赛。

思考: 我需要了解去年每场预赛耗时多久。我可以使用USABMX网站上的视频直播流,记录前10场预赛的耗时。

行动: 视频 USABMX视频直播链接

结果: 前10场预赛耗时5分钟。

思考: 如果10场预赛耗时5分钟,那么30场预赛将耗时15分钟。比赛于上午9点开始,所以我需要在8:45 AM前到达,提前30分钟以确保安全。

在这个示例中,我们模拟了一个使用网络搜索和观看视频等工具来解决问题的场景,旨在教会模型(如ChatGPT)使用这些工具。

模型对新任务的应用

在展示了教学示例后,我们给模型一个新的任务:

新任务: 计算我的36-40岁新手组比赛将在USA BMX大奖赛何时结束。

然后我们以“思考:”来提示它开始推理。以下是模型根据所学模式生成的响应(注意:在实际系统中,当模型调用“行动”时,我们会暂停,用真实工具执行操作并返回结果,再让模型继续):

思考: 我需要找出USA BMX大奖赛第一场比赛的开始时间。我可以使用网络搜索工具查询USABMX网站来获取该信息。

行动: 搜索 USABMX赛事大奖赛

结果: (假设为本次练习,第一场比赛于上午8点开始。)

思考: 我需要找出在36-40岁新手组比赛之前有多少场预赛。我可以搜索USABMX大奖赛相关信息。

行动: 搜索 USABMX大奖赛

结果: (假设有120场预赛。)

思考: 我需要了解去年每场预赛耗时多久。我可以使用视频直播流。

行动: 视频 USABMX视频直播链接

结果: (假设前10场预赛耗时6分钟。)

思考: 如果10场预赛耗时6分钟,那么每场预赛平均耗时0.6分钟。因此,120场预赛将耗时约72分钟。第一场比赛于上午8点开始,所以36-40岁新手组比赛将在约上午9:12开始。我需要找出36-40岁新手组比赛本身会持续多久。

行动: 搜索 36-40岁新手组比赛时长

结果: (假设比赛时长为3分钟。)

思考: 如果36-40岁新手组比赛大约在上午9:12开始,那么它将在约上午9:15结束。这是我的比赛在USA BMX全国赛的大致结束时间。

反应式提示的工作原理与实现

从上述过程可以看出,模型从教学示例中学到了以下几点:

  1. 工具的使用: 它学会了存在名为“搜索”和“视频”的工具可以调用。

  2. 调用格式: 它学会了使用 行动:[工具名称] [输入/参数] 的格式来调用工具。

  3. 推理整合: 它学会了在得到工具返回的“结果”后,继续其推理链条。

在实际系统中,实现反应式提示的流程通常如下:

  1. 模型生成包含 行动: 的文本。

  2. 系统拦截此调用,根据指令(如搜索)执行真正的外部工具(如调用搜索引擎API)。

  3. 系统将获取到的真实结果作为 结果: 插入回对话上下文中。

  4. 将包含新结果的完整上下文再次提交给模型,让它继续生成后续的“思考”或下一个“行动”。

  5. 重复此过程,直到模型输出最终答案。

以下是这个交互循环的简化表示:

用户任务 -> 模型思考 -> [模型生成“行动”] -> 系统执行工具 -> 返回“结果” -> 模型继续思考 -> ... -> 最终答案

除了通过示例教学,还可以通过其他方式描述工具,例如提供一个工具目录及其描述,让模型在适当时机自行决定使用哪个工具。许多自动化框架(如 LangChain)底层就使用了反应式提示的原理,来实现与各种工具和数据的复杂交互。

总结

本节课中我们一起学习了反应式提示。我们了解到,通过精心设计的示例,可以教会大型语言模型识别自身知识缺口,并按照特定格式调用外部工具(如搜索、计算、查询数据库等)来获取必要信息。这种方法极大地扩展了模型的能力边界,使其能够解决更复杂、需要实时或特定领域数据的实际问题。关键在于构建清晰的提示,展示“思考-行动-结果-再思考”的完整链条,从而引导模型在解决新问题时模仿这一过程。

050:使用大型语言模型相互评分 📝

在本节课中,我们将探讨一个核心问题:随着大型语言模型的快速迭代,我们如何有效评估和维护我们精心设计的提示词?我们将学习一种利用大型语言模型自身来评估其输出质量的方法。

概述:模型快速演进带来的挑战

我们面临的问题是,大型语言模型本身及其提示词工程领域都在飞速发展。我们已经见证了ChatGPT、GPT-4、Llama、Alpaca、Vicuna等模型的不断涌现。当我们投入大量精力开发出一套高效提示词后,如何评估它们并确保其长期有效性?如果我们更换了底层的大型语言模型,是否意味着所有提示词都会失效?或者,如果我们处理的数据稍有变动,是否会产生连锁影响?因此,我们需要更好的方法来评估模型输出。

当然,一种方式是让人工审核输出结果,但我们更希望能找到可扩展性更强的自动化分析方法。

解决方案:利用模型进行自我评估

那么,我们该如何实现呢?大型语言模型一个非常有趣的特点是,我们可以利用它们来评估自身。这可以作为我们判断提示词优劣及其长期可维护性的一个输入依据。我们可以用一个大型语言模型来给自身或另一个模型的输出打分。

我们已经见过相关案例,例如用一个大型语言模型去“教导”另一个模型。我们可以采取类似思路:将大型语言模型的输出结果反馈给模型本身进行评分,或者使用另一个(可能参数更多、能力更强的)大型语言模型来评估当前模型的输出。

实践:构建评分提示词示例

接下来,我们通过一个具体例子来看看如何构建一个用于评分的提示词。

在这个示例中,我将教导ChatGPT如何为一个提示词的输出结果评分。请注意,在我的例子中,我并不会向它展示原始的提示词,而只是教导它评分流程,以便实现自动化。我将使用少量示例进行教学。

以下是评分示例的构建过程:

首先,我提供了一个输入文本,这是一段关于范德堡大学的维基百科简介,其中指出该大学成立于1873年。

  • 示例一:不理想的输出

    • 输入范德堡大学成立于1873年。

    • 输出以下是事件与日期列表:范德堡大学成立 1873年

    • 解释:输出结果开头包含了多余的文本,应只包含事件名称和日期。

    • 评分5/10

  • 示例二:信息不全的输出

    • 输入范德堡大学成立于1873年。

    • 输出1873

    • 解释:输出结果缺少了在该日期发生的具体事件信息。

    • 评分3/10

  • 示例三:理想的输出

    • 输入范德堡大学成立于1873年。

    • 输出范德堡大学成立,1873

    • 解释:输出完全符合预期格式。

    • 评分10/10

通过这几个手工标注的例子,我向模型展示了期望的评分标准:提取“事件名称,日期”的格式,且不要任何额外文本或解释。

测试:应用评分提示词

完成教学后,我给出了一个全新的输入文本(关于范德堡大学英语与创意写作项目的历史),并附上一个待评估的输出结果:逃亡者与南方农业派,20世纪上半叶;范德堡大学成为东南联盟创始成员,1966年

随后,我要求ChatGPT根据刚才学习的标准进行评分。它生成了解释,指出输出存在“大小写不一致”的问题(这是一个我最初未标注但合理的扣分点),并给出了9/10的分数。这表明它成功理解并执行了评分任务。

应用场景与策略

我们可以通过多种方式应用这种评分方法:

  1. 自我检查:在由大型语言模型驱动的决策或信息生成系统中,可以让模型检查自身的输出。

  2. 交叉验证:用另一个模型(可能更强大)来检查当前模型的输出。

  3. 自动化流程:开发一个包含评分标准的提示词,对输出进行多次评分。如果分数低于某个阈值,可以触发人工审核,或者尝试重新生成以获得更好的结果。

这为我们提供了一种额外的工具,既能利用模型的强大能力,又能确保输出质量可控。

提示词设计的灵活性

当然,设计评分提示词的方式有很多种。除了上述使用少量示例的方法,我们也可以结合其他提示模式。

例如,我们可以使用“角色扮演”模式:请你扮演一位提示词批评家。我将为你提供输出结果,请你根据提示词设计者的预期,对其匹配程度进行评分。我会先给你一些评分的例子。

我们可以构建更复杂的提示词,要求模型在最后生成一个分数。通过调整提示词,我们可能得到8/109/10等不同的评分,但核心是模型能根据我们设定的标准进行有效评估。

总结

本节课中,我们一起学习了如何利用大型语言模型进行自我评估或相互评估,以应对模型快速迭代带来的提示词维护挑战。我们通过构建包含少量评分示例的提示词,教导模型理解评分标准,并成功应用于新输出的评估。这种方法可以作为我们工具箱中的一件利器,在需要评估提示词输出时,不一定总要依赖人工审核,而是可以借助模型自身的力量,并围绕此构建自动化流程或设置人工介入的触发条件。值得注意的是,即使像示例中那样只提供三个评分例子,模型也能很好地理解我们的意图并完成任务。

051:游戏玩法模式 🎮

概述

在本节课中,我们将学习一种名为“游戏玩法模式”的提示工程技巧。这种模式的核心是让大型语言模型(如ChatGPT)扮演游戏大师的角色,与我们进行互动游戏,从而帮助我们学习和测试特定技能,特别是提示工程能力。

游戏玩法模式简介

上一节我们介绍了多种与AI交互的模式,本节中我们来看看“游戏玩法模式”。这种模式的基本思想是,我们邀请ChatGPT与我们玩一个游戏。在这个游戏中,AI将担任游戏大师,负责制定规则、生成游戏内容并推动游戏进程。

其核心优势在于,我们只需提供游戏的基本主题或框架,AI就能利用其庞大的训练数据来填充具体内容。这解决了设计游戏时的一大难题:不仅需要构思规则,还需要创造大量有趣的游戏内容。

构建一个提示工程技能游戏

以下是创建一个用于提升提示工程技能游戏的具体步骤。

首先,我们向AI说明游戏的基本规则和目的。

我们将玩一个游戏。游戏主题是提示工程。
游戏规则如下:
1.  你(AI)给我提供一个简单的任务,这个任务可以通过编写提示词(prompt)让你来完成。
2.  我尝试编写一个提示词来解决这个任务。
3.  你将运行我编写的提示词,生成输出,并评价我的提示词解决任务的效果。
4.  任务应包含推理或编程成分,但不要求编写源代码。
5.  持续向我提问,直到我让你停止。先问我第一个问题。

游戏过程示例

启动游戏后,AI会生成第一个挑战任务。

AI生成的任务示例:

“给定一个数字列表,判断列表中是否包含重复元素。如果包含,返回‘是的,有重复’;如果不包含,返回‘未发现重复’。”

我们的应对策略:

我们可以使用“少样本示例”模式来编写提示词。即,在提示中提供几个输入输出的例子,引导AI学会处理此类问题。

我们编写的提示词示例:

对于数字列表 [1, 2, 3],输出应为“未发现重复”。
对于数字列表 [2, 2, 2],输出应为“是的,有重复”。
现在,请判断列表 [5, 7, 9, 11] 是否有重复?

AI的反馈:

AI会执行我们的提示,给出正确输出“未发现重复”,并评价道:“你的提示词有效地完成了任务,并提供了不同情况的示例。”

游戏的进阶与变化

游戏会持续进行,AI会提出越来越有挑战性的任务,例如要求统计句子中的单词数并以特定格式输出,这测试了我们使用“模板模式”的能力。

更妙的是,我们可以动态调整游戏主题,让它专注于测试我们对某一特定提示模式的理解。例如,我们可以将主题改为“菜谱模式”。

现在,我们将改变游戏问题的主题。新主题是“菜谱提示模式”。
该模式旨在:给定一个不完整的中间步骤列表,生成一个完整的、用于达成某个目标的步骤序列。这个模式不特指烹饪。

随后,AI生成的任务会围绕这个新模式展开,例如:“你的目标是创建一个提示词,指导我生成组装一个简易木制书架的完整步骤序列。已提供的步骤有:将顶板连接到侧板、将书架插入指定插槽。请用提示词补全缺失步骤并提供清晰的组装顺序。”

游戏模式的优势与总结

本节课中我们一起学习了“游戏玩法模式”。这种模式的核心价值在于:

  • 降低内容创作负担:我们只需设计游戏规则框架,AI能自动生成丰富的、与主题相关的内容和挑战。

  • 提供即时反馈:AI不仅能执行任务,还能评价我们提示词的质量,甚至能发现我们示例中的笔误。

  • 高度可定制:我们可以随时改变游戏主题(例如聚焦于某个具体的提示模式),让学习过程保持新鲜感和针对性。

  • 寓教于乐:通过游戏化的互动,练习提示工程变得更有趣,有助于巩固知识和技能。

总之,游戏玩法模式是一个强大的工具,它能将学习过程转化为一场由AI驱动的、充满挑战和反馈的互动体验,非常适合用于技能练习和知识测试。

052:模板模式 🧩

概述

在本节课中,我们将学习“模板模式”。这是一种确保大型语言模型(如ChatGPT)按照我们指定的精确格式输出内容的方法。通过提供一个包含占位符的模板,我们可以指导模型将生成的信息填充到正确的位置,从而获得结构清晰、格式统一的输出。


模板模式的核心思想

上一节我们探讨了如何引导模型生成内容。本节中,我们来看看如何精确控制输出的格式。模板模式的核心思想是:我们提供一个输出模板,模型根据模板中的占位符来填充内容

这就像你给助手一份表格或信函模板,并告诉他:“请在这些空白处填写相应的信息。” 模型会理解模板的结构,并按照你的要求生成内容。

模板模式的基本结构

以下是使用模板模式时的一个典型提示结构:

我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。
我的模板是:
[你的模板内容]

关键点解析:

  • “大写单词是我的占位符”:这告诉模型,模板中所有大写字母组成的单词(如 QUESTION, ANSWER)是需要它用生成内容替换的位置。

  • “请保持我模板的整体格式”:这指示模型必须严格遵守你提供的格式,不能自行更改布局、标点或样式。

实践案例一:生成问答对

让我们通过一个具体例子来理解。假设我们希望ChatGPT根据一段文本生成一系列问答对,并且每个问答对都遵循统一的格式。

第一步:定义模板

我们首先给模型提供模板和指令。

提示词示例:

我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。
我将在下一条提示中给你需要格式化的数据。
请使用我的模板创建20个问题。

我的模板是:
***问题***
QUESTION

***答案***
ANSWER

代码/格式说明:

  • ***问题******答案*** 使用了Markdown语法(***表示粗斜体),这会在ChatGPT的界面中呈现为醒目的标题。

  • QUESTIONANSWER 是全大写的占位符,模型将在这里填入具体内容。

第二步:提供数据并执行

接下来,我们向模型提供一段关于“帕劳印第安人”的维基百科文本。模型会分析这段文本,提取信息,并生成20个符合模板格式的问答对。

输出示例:

***问题***
谁是最早的帕劳印第安人?

***答案***
帕劳印第安人是史前时期居住在现在美国西南部地区的古代民族。

模型成功地重复使用模板20次,每次都用新的问题和答案填充了 QUESTIONANSWER 占位符。

实践案例二:包含复杂指令的占位符

模板模式的强大之处在于,占位符不仅可以指示“放什么”,还可以规定“怎么放”。占位符本身可以包含复杂的指令。

提示词示例:

我将为你提供一个输出模板。
大写单词是我的占位符。
请用你的输出填充这些占位符。
并请保持我模板的整体格式。

我的模板是:
# 姓名
NAME

## 执行摘要
EXECUTIVE_SUMMARY。执行摘要应为一句话总结。

## 完整描述
FULL_DESCRIPTION。完整描述应为一个段落的总结。

关键点解析:

  • ### 是Markdown的标题语法。

  • NAMEEXECUTIVE_SUMMARYFULL_DESCRIPTION 是占位符。

  • EXECUTIVE_SUMMARYFULL_DESCRIPTION 后面,我们直接附加了约束条件:“应为一句话总结”和“应为一个段落的总结”。

执行结果:

当我们向模型提供一段关于范德堡大学历史的文本后,它会:

  1. 从文本中识别出相关人物。

  2. 为每个人物生成一个一句话的执行摘要。

  3. 为每个人物生成一个一个段落的完整描述。

  4. 将所有内容严格按照 #姓名##执行摘要##完整描述 的标题格式进行组织。

这展示了模板模式如何将信息提取内容总结格式控制三者结合在一个简单的指令中。

模板模式的优势总结

本节课中我们一起学习了模板模式的应用。总结其核心优势如下:

以下是模板模式的主要优点:

  • 格式可控:确保输出完全符合你需要的布局和样式。

  • 指令集成:占位符内可嵌入复杂指令(如“一句话总结”、“仅考虑1800年以前的经历”),指导模型如何生成内容。

  • 高效处理:自动完成从大量信息中提取、归纳并格式化数据的任务,节省大量人工时间。

  • 灵活通用:适用于生成报告、摘要、列表、问答等多种结构化内容。

通过熟练运用模板模式,你可以将ChatGPT变成一个高效、听话的“内容组装助手”,精准地获得你想要的任何格式的信息输出。

053:元语言创建模式 🧠

在本节课中,我们将学习一种名为“元语言创建模式”的高级提示工程技巧。该模式的核心是教会大型语言模型理解并使用我们自定义的、更简洁的“语言”或“速记符号”进行交流,从而提升交互效率和精确性。


概述

使用完整的英语或其他语言的句子向大型语言模型提供输入,并非总是最简便的方式。在现实世界中,我们经常使用专门的“语言”来描述特定领域。例如,数学有其专属符号语言,我们做笔记时也会使用速记法。这些自定义语言能以比完整句子更简洁的方式捕捉信息。当然,使用这类语言的前提是交流双方都理解其含义。

上一节我们探讨了如何通过清晰的指令引导模型。本节中,我们将学习如何为模型“创造”一门新语言,并与之用这门语言进行高效沟通。

元语言创建模式详解

该模式分为两个核心步骤:

  1. 定义语言:向模型描述新语言或速记符号的含义。

  2. 使用语言:使用定义好的新语言与模型进行对话。

以下是该模式的应用示例。我们将创建一个旅行规划应用。

步骤一:定义速记语言

首先,我们给出一个基础提示,说明应用的功能:

我将描述我的旅行路线,你将列出我途经地点的有趣活动。我会告诉你我在每个地点停留的天数,你将列出可能的行程安排。

接着,我们引入并定义自己的速记符号,这是元语言创建模式的关键:

为描述我的路线,我将使用一种速记符号。

当我说“Nashville, 3 -> Memphis, 2”时,

我的意思是:我的路线将从纳什维尔前往孟菲斯,我将在纳什维尔停留3天,在孟菲斯停留2天。

请注意:这里我们采用了一种类似“少样本示例”的方法。我们向模型展示了一个速记符号的示例Nashville, 3 -> Memphis, 2),并紧接着提供了其含义解释(“我的意思是…”)。这相当于在教模型如何“翻译”我们的新语言。

这种速记符号比完整的英文句子密度更高、更简洁Nashville, 3 -> Memphis, 2 这一短句等价于一段更长的完整描述。

步骤二:使用新语言进行交互

定义好语言后,模型便理解了我们的规则。现在,我们可以直接使用速记符号与它对话。

例如,输入:

Nashville, 0 -> Dallas, 1 -> Granbury, Texas, 4

模型会正确理解并回应:

既然你提到不会在纳什维尔停留,我将专注于为你提供在达拉斯停留1天以及在德克萨斯州格兰伯里停留4天的有趣活动和可能行程。

随后,模型会分别为达拉斯(1天)和格兰伯里(4天)生成详细的行程计划。

处理更复杂的路线

该模式的优势在处理复杂信息时尤为明显。例如,输入更长的路线:

Nashville -> Fairhope, Alabama, 3 -> Gulf Shores, Alabama, 1 -> Mentone, Alabama, 1

如果用完整句子描述这条包含多个地点和天数的路线会非常冗长。但通过我们预先定义的速记语言,模型能准确解析这个“复杂字符串”,并依次为费尔霍普(3天)、格尔夫海岸(1天)和门通(1天)生成对应的行程安排。

模式的优势与应用场景

你可以想象,这是一种非常有用的能力。它的优势包括:

  • 提升效率:为频繁执行的任务开发速记法,可以节省大量输入时间和精力。

  • 提高精确性与一致性:通过预先精确定义符号含义,可以减少表达时的歧义和可变性。在一个组织内部,可以定义统一的语言来描述特定类型的信息,确保所有成员以一致的方式输入数据,从而使模型基于这些信息的推理更加可靠。

  • 约束输入格式:如果每个人都用自己随意的英文短语和详细程度来描述信息,可能无法从提示中获得理想的结果。拥有自定义语言或速记法,可以帮助约束信息定义和表达的方式,从而有望帮助模型进行更好的推理。


总结

本节课我们一起学习了元语言创建模式。我们了解到,可以通过向大型语言模型提供“示例-含义”对来教会它理解我们自定义的简洁符号或语言。掌握这一模式后,你可以为特定任务设计高效的“交流协议”,从而在与AI协作时实现更快速、更精确、更一致的沟通。

054:配方模式 🧩

在本节课中,我们将要学习“配方模式”。这是一种利用大型语言模型(如ChatGPT)来帮助我们填补知识或流程中空白的方法。当我们知道解决问题所需的部分步骤或信息,但不确定完整方案时,配方模式尤其有用。

上一节我们介绍了如何创建自定义语言与模型交互。本节中,我们来看看如何将已知的“配方”片段交给模型,让它帮助我们补全缺失的部分。

配方模式的核心概念

有时,在处理大型语言模型时,我们已知解决方案的一部分。我们有一个问题,并且知道解决方案中需要涉及的一些步骤或信息片段,但我们不知道完整的解决方案。我们需要大型语言模型帮助我们填补空白,将缺失的步骤组合起来,最终完成这个“配方”。模型会根据我们提供的“食材”(即已知信息),补全烹饪这道“菜肴”所需的所有细节步骤。

配方模式就是用于实现这一目标的模式。我们向大型语言模型提供我们试图达成的目标,以及我们已知的、在创建整体解决方案(即“配方”)过程中必须涉及的部分步骤。我们将提供所需内容的一部分,并要求模型补全其余部分。这实质上是让大型语言模型帮助我们在一个流程或一系列必要步骤的知识中填补空白。

配方模式非常实用。同时,我将向大家展示,我们用来描述“空白”和已知流程部分的直观简写方式(例如“…”),实际上是像ChatGPT这样的大型语言模型能够理解的语言。

配方模式应用示例

让我们看一个具体的例子。我们将为我们的旅行规划应用添加一个功能。

以下是我们的指令:

我将告诉你我的起点和目的地,你需要为我提供一个完整的停留点列表,包括起点和目的地之间的停留地点。

请注意,我们在这里提供的是一个不完整的“配方”。我们说明了起点和终点,但需要知道中间应该有什么。模型回顾了我们之前从纳什维尔到亚特兰大的例子(或者自己创建了一个),并注意到途中会经过查塔努加(从纳什维尔开车到亚特兰大的确如此)。它建议了一些可以在查塔努加进行的活动,比如参观田纳西水族馆或瞭望山。

结合元语言创建模式与配方模式

有趣的地方在于,回想之前的旅行规划应用,我使用元语言创建模式教会了模型我自己的旅行描述语言。现在,我将结合元语言创建模式和配方模式来做一些更有趣的事情。

我将输入以下内容:

Nashville,0 ... -> ... -> Fairhope, Alabama2

我在这里向模型传达的意思是:我从纳什维尔出发,前往阿拉巴马州的费尔霍普。中间的“…”表示我希望你补全它,告诉我中途应该在哪里停留。我通过两个“…”表示我愿意在中途停留两次,但我不知道具体地点。请你为我填充这个从纳什维尔到费尔霍普、包含两次中途停留的“配方”。

模型理解了这一点。“…”显然是我们表达未知事物的自然方式,模型理解并填充了配方。它回复说:我们从田纳西州纳什维尔开始,根据您的要求,停留时间为0天(我住在这里,所以我的旅行通常不从在纳什维尔停留开始)。然后,它为我们填充了两个停留点:阿拉巴马州的伯明翰和蒙哥马利。如果走最直接的路线,这两个城市确实位于纳什维尔和费尔霍普之间。终点是阿拉巴马州的费尔霍普。

可以看到,模型基本理解了我们设定的约束。我们使用了自定义语言:Nashville,0 -> 定义了起点,然后使用 ... 表示这是我们不知道的空白,是模板或配方中的空缺,需要模型填充。接着是 -> ... ->,表示另一个需要填充的空白。最后是 Fairhope, Alabama。我们在这里使用配方模式,让ChatGPT或其他大型语言模型来完成我们的请求。

探索更模糊的配方

如果我们再次尝试,输入更模糊的指令,看看模型如何解读。例如:

LA,1 ............... New York,3

现在,模型开始规划行程:从洛杉矶开始(1天),然后前往拉斯维加斯、大峡谷、圣达菲等。我很好奇它会安排多少个停留点。请注意,当我在这里使用一连串的“…”时,我得到的中途停留点超过了四个。因为我表达得非常不确定。我没有使用“… -> … ->”这样明确的结构,而是用了一大串点,这更加模糊不定。这正是我想做的有趣尝试:我从洛杉矶去纽约,中途会有很多停留,但我不知道应该是哪些,请为我规划行程。我说明了在洛杉矶和纽约的停留时间。

模型解读了我配方中的缺失部分。它可能也知道我需要相当多的中途停留,这将是一次从洛杉矶到纽约的悠闲自驾游。于是,它填充了许多沿途可能停留的地点,以便让我在从洛杉矶到纽约的长途度假自驾游中拥有一段有趣的旅程。

配方模式总结

本节课中我们一起学习了配方模式的工作原理。

  • 给出目标与已知部分:你向大型语言模型提供你试图达成的目标,以及你已知的、必须融入解决方案的片段或步骤及其大致位置。

  • 标记空白并请求补全:你可以使用省略号(...)或其他方式来表示你不知道具体内容、希望模型填充的位置。

  • 模型完成配方:模型会运用配方模式,为你补全整个“配方”。

这种方法能有效利用模型的推理和知识生成能力,将我们零散的想法整合成完整、可执行的方案。

055:替代方法模式 🧠

在本节课中,我们将学习一种名为“替代方法模式”的提示工程技巧。这种模式的核心是利用大型语言模型(如ChatGPT)为一个特定问题或任务,快速生成多种不同的解决方案或思路,类似于进行头脑风暴。我们将通过具体示例来理解其工作原理和应用方式。

概述:什么是替代方法模式?

替代方法模式的核心思想是:在特定范围内,要求大型语言模型始终为解决问题或完成任务提供不同的替代方案。其目的并非要求模型一次性给出完美答案,而是激发多样化的思路。就像团队头脑风暴一样,产生的想法可能很棒,也可能不切实际,但这个过程本身有助于更全面地思考问题,从而找到最佳解决方案。

大型语言模型在训练过程中学习了海量文本,其中包含对各种问题及其多种解决方法的讨论。因此,它可以借鉴这些知识,为我们提供可能从未想过的全新视角,甚至能综合创造出针对新问题的潜在解决方案。

应用示例一:生成判断闰年的提示词

上一节我们介绍了替代方法模式的基本概念,本节中我们来看看它的具体应用。首先,我们尝试让ChatGPT为一个具体任务——判断给定日期是否为闰年——生成多种不同的提示词。

我们给模型的指令是:“从现在开始,如果存在完成同一件事的替代方法,请列出最佳的替代方案。比较和对比这些替代方案,并询问我想使用哪一种。”

以下是具体的任务描述:

“为ChatGPT编写几个提示词,以解决以下任务:使用少量示例(few-shot examples)来判断一个格式为‘年-月-日’的日期是否为闰年。输出应为‘[年份]是闰年’或‘[年份]不是闰年’。”

模型生成了两种主要方法:

方法一:直接提问格式

在这种方法中,我们直接询问ChatGPT某个给定日期是否为闰年,并提供了少量示例。

提示词示例:日期:2020-02-29。这是闰年吗?是,2020是闰年。
日期:2021-02-28。这是闰年吗?不,2021不是闰年。
日期:2000-01-01。这是闰年吗?是,2000是闰年。
现在,判断日期:2024-12-31。

方法二:对话格式

这种方法采用了更自然的对话风格来呈现少量示例。

提示词示例:用户:2020年2月29日是闰年吗?助手:是的,2020是闰年。
用户:2021年2月28日是闰年吗?助手:不,2021不是闰年。
用户:2000年1月1日是闰年吗?助手:是的,2000是闰年。
用户:2024年12月31日是闰年吗?

请注意,模型在生成时犯了一个小错误:它没有完全遵循我们要求的输出格式(将年份放在前面)。这提醒我们,必须仔细检查模型生成的提示词,确保其符合我们的具体要求。

最后,模型对两种方法进行了比较:

  • 方法一更加正式和结构化,易于理解和解析,适用于需要清晰、简洁答案的场景。

  • 方法二更具对话性和自然感,能提升用户参与度,适用于重视用户交互的应用。

应用示例二:总结邮件链中的问题

了解了基础应用后,我们进一步探索如何调整模式以获得更好的效果。在这个例子中,我们要求模型在列出替代方法之前,先总结任务本身。

我们修改后的指令是:“每当我要求你为我编写完成某项任务的提示词时,请先列出任务是什么,然后列出完成该任务的替代方法,最后为每种方法编写一个提示词。”

我们提出的具体任务是:“编写一个提示词,让ChatGPT能自动检测一封邮件链中的所有问题,并将每个人对每个问题的意见总结为要点,列在相应问题下方。”

模型生成了三种不同的方法:

以下是三种替代方法的核心思路:

  1. 直接指令法:编写提示词,指示ChatGPT首先识别邮件链中的所有问题,然后提取与每个问题相关的回复,最后将意见总结为要点。

  2. 角色扮演法:编写提示词,要求ChatGPT模拟一场对话,在其中扮演“总结者”的角色(这里它自发使用了“角色模式”)。

  3. 案例研究法:编写提示词,将邮件链呈现为一个“案例研究”,并要求ChatGPT提供包含问题及对应意见要点的总结报告。

其中,“案例研究法”是一个非常有趣且可能出乎意料的思路。这体现了大型语言模型能够从其训练数据中(例如大量的商业案例)汲取灵感,提供用户自己可能想不到的全新视角。

进阶思考:如何评估生成的方案?

在获得了多种替代方案后,一个自然的后续步骤是评估它们的优劣。一种有效的方法是使用大型语言模型来评估其自身(或其他模型)生成的输出。通常,建议在一个新的对话中进行评估,以避免模型陷入“自我肯定”的偏差。

我们可以这样提问:“编写一个提示词,用于评估多个不同的、旨在总结邮件对话中问题及各利益相关方观点的提示词。”

模型再次给出了三种评估方法:

  1. 直接评估法:编写提示词,向ChatGPT呈现多个提示词,并要求它评估每个提示词在总结问题和利益相关方观点方面的有效性。

  2. 评估者角色法:编写提示词,指示ChatGPT模拟对话,扮演“评估者”角色,由用户提供待评估的不同提示词。

  3. 反馈改进法:编写提示词,要求ChatGPT为每个提示词提供反馈,并给出改进建议。

这三种方法侧重点不同:第一种关注“有效性”,第二种利用“角色模式”,第三种则侧重于“迭代优化”。这为我们提供了多种工具来审视和提升最初生成的提示词。

总结

本节课我们一起学习了“替代方法模式”。我们了解到,这种模式的核心是利用大型语言模型为单一问题提供多种解决思路,其价值在于激发创造力和提供多元视角。我们通过“生成闰年判断提示词”和“总结邮件链问题”两个实例,演示了如何应用及微调此模式。最后,我们还探讨了如何使用模型本身来评估这些生成的方案。掌握这一模式,能帮助我们在面对复杂任务时,更高效地进行头脑风暴和方案设计。

056:请求输入模式 🛑

在本节课中,我们将学习一种名为“请求输入模式”的提示技巧。这种模式的核心目的是让大型语言模型在接收完我们的指令后,暂停自动生成内容,转而主动向我们提问,等待我们提供具体的输入信息。这有助于创建更可控、更聚焦的交互体验。

模式的应用场景

上一节我们介绍了如何为大型语言模型设定规则。本节中我们来看看,当规则设定完毕后,如何避免模型立即基于这些规则生成大量无关内容。

在处理复杂任务时,我们通常会在提示中描述一系列希望模型遵循的规则。这些规则将影响模型的输出,本质上是在“编程”模型的行为。然而,一个常见的挑战是:如何让模型先“听”完所有规则,而不是立刻对规则本身做出响应。

例如,在一个“翻转互动”场景中(即让模型向我们提问),如果我们直接要求模型“根据以下规则向我提问”,它可能会一次性生成10到20个问题。但我们可能只希望它先理解规则,然后等待我们给出具体主题,再提出第一个问题。

模式失效的案例

以下是“请求输入模式”未生效时可能出现的情况。让我们通过一个具体例子来理解。

在之前的视频中,我介绍过“替代方法模式”。当时它运行得非常有效,因为我实际上将其与“请求输入模式”结合使用了。现在,我将展示不结合使用时的效果。

我向模型输入了以下提示:

每当我要求你为我撰写一个提示来完成某项任务时,请列出任务内容,列出创建该任务的替代方法,然后为每种方法撰写一个提示。

我的意图是让ChatGPT为“如何向它自己提问以解决任务”这件事生成多种替代方案。然而,我移除了一个关键部分(稍后会展示)。模型的回应是:“当然。以下是完成‘整理杂乱书桌’这一任务的三项替代方法…”

问题在于:我对“整理杂乱书桌”这个任务根本不感兴趣。模型直接回应了我的初始提示(“为任务创建替代方法”),并自行编造了一个任务及其方法。这导致对话中充满了我不关心的额外内容,破坏了交互的一致性和效率。

模式的实现方法

为了解决上述问题,我们可以应用“请求输入模式”。其背后的理念非常简单。

我们只需在提示的末尾,明确指示大型语言模型向我们索要输入。具体做法如下:

在描述完所有规则或要求后,最后加上一句指令,例如:“现在,向我询问第一个任务。” 或 “请向我询问第一个想法。” 或 “你需要我为你生成一个关于什么的故事?”

这是一个让模型“刹车”并交还控制权给用户的方法。它暗示模型:不要继续生成内容,停在这里,等待我的指示

模式的效果与总结

与所有提示模式一样,由于大型语言模型具有一定随机性,此模式并非每次都能100%生效,但其可靠性非常高。

让我们对比一下使用此模式后的输出效果。在相同的提示内容后加上“请向我询问第一个任务。”,模型的回应变为:“当然,让我们开始吧。你希望我为哪个任务创建替代方法和提示?”

这与之前生成的大段无关内容相比,输出变得极为聚焦和简洁。模型被成功“截停”,并进入了等待用户输入的理想状态。

本节课中我们一起学习了“请求输入模式”。该模式通过在提示末尾添加一句明确的请求,有效地引导大型语言模型暂停自动生成,转而主动向用户索取下一步的具体输入。这是构建结构化、可控对话流程的重要技巧。

057:组合模式 🧩

在本节课中,我们将学习如何将不同的提示模式组合起来,以构建更复杂、更强大的提示。这是实现高级提示工程的核心概念。

你可能已经注意到,我开始将不同的模式组合在一起使用。当你希望构建真正复杂的提示时,最重要的概念之一就是:你需要思考如何将多种模式相互结合,以解决你面临的问题。因此,不要只考虑“用哪个模式能解决这个问题”,而应该思考“哪些模式能解决这个问题的某些方面”,以及“如何将这些模式组合起来”。

组合模式的实例

我们已经在“请求输入”和“提供替代方案”这两个模式的结合中看到了一个例子。

“请求输入”是一个可以与许多其他模式结合使用的模式。在这个案例中,我们将其与“提供替代方案”模式结合使用。于是,我们得到了“替代方案”和“请求输入”,它们被组合在一起,构建了一个解决整体问题的提示。

在本课程剩余部分,我们将看到,构建真正复杂提示的方法就是:思考如何以有趣的方式将多种模式组合起来。

回顾与发现

现在,回想一下我在课程中介绍的一些模式及其示例。既然你了解了更多模式,你可能会发现,我在不同的示例中其实一直在组合模式。例如,在“游戏模拟”中,我可能使用了“请求输入”模式,也使用了“角色扮演”模式。由此可见,将事物组合起来有助于我们解决整体问题。

因此,当你尝试处理一个需要设计和开发的新复杂提示时,你应该思考:这个问题的基本组成部分是什么?我是否了解现有的模式,可以用来处理所有部分?如果无法处理所有部分,我能否使用模式,将其应用到尽可能多的不同部分,从而使你必须从头开始、发明新方法处理的未知部分尽可能小?

我们的目标是:尽可能多地使用已知的模式作为“路线图”来处理各个部分。这就是我们现在要做的事情。

组合的本质:更强大的“编程”

这听起来可能比实际情况更复杂,但归根结底,我们所做的仍然是在构建语言。我们仍然在使用自然语言写作,仍然在写句子、进行交流。我们只是有意识地思考语言中的模式,思考为了解决问题,应该包含哪些陈述以及如何组织这些陈述。

从某种意义上说,组合模式实际上是在进行一种更强大的“编程”。我们开始将已知的不同“程序”或“指令”组合起来,以更复杂、更精密的方式构建提示,使其拥有更强大的功能和更深的层次。

实践建议与鼓励

请不要觉得这是你做不到的事情。每个人都能做到。归根结底,请这样想:你只是在用语言描述你希望完成的事情。你仍然在用语言描述你想要实现的目标。而所有这些模式所做的,只是帮助我们思考指令中应该包含什么。

如果我们决定使用某个模式,它就为我们提供了一组需要包含的命令或陈述,以及它们的组织方式。如果我们使用另一个模式,我们又会得到另一组需要包含的陈述。很多时候,组合模式就像把每个模式的陈述放在一起,确保它们都出现在提示中那么简单。有时就是这么简单。

当然,有时会更微妙一些。我们可能需要确保某个特定的陈述出现在特定的位置。例如,对于“请求输入”模式,我们可能总是希望它出现在提示的末尾,否则效果会大打折扣。因此,虽然组合模式有时需要你思考各个部分应该放在哪里而略显棘手,但大多数时候,它就像把陈述放在一起那么简单。

总结与展望

在本节课中,我们一起学习了提示工程中的“组合模式”。我们了解到,构建强大提示的关键不在于寻找单一的模式,而在于如何将多个模式像拼图一样组合起来,共同解决复杂问题。这就像用已知的“指令块”进行更高级的编程。

随着课程继续,我鼓励你注意我如何组合多种模式来解决问题。当你在尝试用提示工程处理新任务时,也请思考如何结合使用多种模式来攻克难题。记住,你只是在用清晰的语言描述你的需求,而模式为你提供了高效组织这些语言的蓝图。

058:大纲扩展模式 📝

概述

在本节课中,我们将学习一种名为“大纲扩展模式”的提示工程技巧。这种模式旨在帮助我们在大型语言模型存在输入输出限制的情况下,通过构建和扩展大纲来分步创建复杂、庞大的内容,并确保所有部分能够无缝地组合在一起。


大型语言模型存在固有的限制。这些限制主要体现在两个方面:一是我们能够提供给模型的输入(即提示)大小或对话长度是有限的;二是模型单次能够生成的输出量也是有限的。尽管未来这些模型的能力会不断增强,但每个人在可扩展性上仍可能面临一些限制。

为了应对这些限制,我们通常采用分步生成解决方案的策略。例如,你无法直接要求ChatGPT生成一整本书,也无法一次性输入数万页内容并要求它给出答案。因此,我们需要一种方法,能够将大任务分解为小块来处理,同时又能将所有小块重新组合起来。


大纲扩展模式的核心思想

上一节我们介绍了分步处理的必要性,本节中我们来看看大纲扩展模式如何具体实现这一目标。

一种有效的方法是,先为我们想要构建的内容创建一个大纲。我们可以将大纲细化到所需的粒度级别,然后逐一填充每个部分。这样,我们就能分步生成各个独立的部分,并且清楚地知道它们在整个结构中的位置。这种方法本质上是在制定一个计划。

这种基于大纲的方法适用于多种场景,无论是撰写文本还是开发软件,只要该任务能够被组织成类似大纲的结构即可。一旦我们生成了符合大纲某个部分的内容,就可以继续处理它。


大纲为何有效?

大纲之所以成为与ChatGPT等工具协作构建大型项目的得力助手,原因在于其灵活性。我们可以随时将大纲的特定部分复制并粘贴到新的提示中,从而为大型语言模型提供生成后续内容所需的上下文。

例如,我们可以先生成一个大纲,然后复制其中一部分到提示中,并指示模型:“在这个上下文中(即大纲的当前位置),请填充此部分的内容。不要重复大纲中之前已涵盖的任何信息。” 我们甚至可以要求模型在需要时引用大纲的其他部分,或为后续将讨论的主题提供前瞻性引用。对于软件或其他复杂项目的构建,也可以采用类似的方法。

当然,这种方法适用于那些能够被清晰表达为大纲或计划的结构。如果某个问题的各个部分相互交叉、难以用大纲表示,那么这种方法可能就不适用。但对于许多问题而言,以大纲形式构建并利用剪切粘贴来提供上下文,是一种非常强大的策略。


构建大纲扩展模式

接下来,我们将具体构建并使用大纲扩展模式。以下是我们给模型的指令:

扮演大纲扩展器的角色。
根据我提供的输入,生成一个要点大纲。
然后,询问我应该扩展哪个要点。
为我选择的要点创建一个新的大纲。
最后,询问我接下来要扩展哪个要点。

请注意,这个提示融合了多种模式:

  • 角色扮演模式扮演大纲扩展器的角色。

  • 尾部生成模式:要求模型在生成后主动询问下一步。

  • 请求输入模式:引导交互继续进行。


实践示例

当我们输入上述指令后,模型会表示同意。接着,我们给出初始主题:“让我们为‘撰写有效的ChatGPT提示’写一个大纲。”

模型生成了一个初步大纲,例如:

  1. ChatGPT简介

  2. 理解提示的重要性

  3. 撰写有效提示的技巧

然后,模型会询问:“您希望我扩展哪个要点?”

假设我们选择扩展第3点“撰写有效提示的技巧”。模型会基于此生成一个更详细的新大纲,例如:

3.1 明确具体

3.2 尝试不同的提示风格

3.3 提供上下文

3.4 迭代与改进

3.5 设定语气和风格

接着,模型会再次询问下一步。我们可以选择继续扩展,例如说“3.2”,模型就会对“尝试不同的提示风格”进行更深入的细化。

通过这种方式,我们可以快速创建并不断细化一个大纲,直到达到所需的细节水平。由于采用了层级分明的大纲结构,所有独立部分如何组装在一起变得一目了然。例如,我们知道3.1属于第3点之下,这种结构是自描述的。


确保内容的连贯性

虽然大纲模式便于组装,但我们仍需思考一个核心挑战:如何确保每个独立生成的部分在内容上也是连贯和一致的?

当对话变得很长,模型可能忘记了之前大纲部分的内容时,我们需要主动为其提供上下文。例如,在要求扩展“3.2”之前,我们可以将第1点的内容也粘贴到提示中,这样模型在生成3.2时就能考虑到整体的早期结构。同样,如果希望3.2与后续部分保持连贯,也可能需要提供后续大纲的概要。

因此,在使用大纲扩展模式时,我们必须时刻考虑:模型是否拥有足够的上下文,以确保生成的每个部分不仅结构上匹配,内容上也与整体保持 cohesive(连贯一致)?这是我们在通过分块构建内容时,始终需要面对和解决的根本性挑战。


模式的灵活性与总结

最后,我们可以看到这种模式的灵活性。我们可以在大纲的不同层级间自由移动:可以从顶层开始,也可以深入到某个具体细节进行扩展,然后再回到另一个要点继续细化。这使我们能够保持对整体蓝图的把握,并以此为指导来构建各个独立部分,同时确保它们能够被组装起来。

本节课中我们一起学习了大纲扩展模式。我们了解到,为了克服大型语言模型的输入输出限制,我们可以:

  1. 先构建一个层级式大纲作为蓝图。

  2. 通过交互,逐步扩展和细化大纲的各个部分。

  3. 利用大纲结构本身来明确各部分如何组装。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐