本节中我们将讨论如何设计提示和回复的结构,来让ChatGPT更好地理解提示并且以适当的格式来生成回复。
ChatGPT核心的GPT模型是文本型大语言模型,因此它目前生成的回复都是文本形式,唯一例外的是,GPT-4模型目前的代码解释器功能可以让ChatGPT的回复中包含各种形式的文件,但是这是通过代码解释器的能力实现的,并非GPT-4模型本身的能力,后面章节将会详细介绍,这里不作赘述。虽然回复只能是文本形式,但是回复文本的格式和结构可以多种多样。它可以是一整个段落,可以是分段标注要点的列表,可以是代码,也可以是几种形式的结合,我们可以在提示中对具体需要的回复文本格式和结构进行限定,下面通过具体实例来进行介绍。
为了提高文本的质量和连贯性,我们可以通过在提示中进行声明来引导ChatGPT生成完整段落。当用户没有特意要求生成完整段落时,ChatGPT则会根据文本内容本身来进行适当的段落划分。下面示例在提示中声明了生成段落,因此ChatGPT的回答是一个完整的段落。
请写一个关于中国年轻人创业的段落。
在中国,越来越多的年轻人正在踏上创业之路,他们的创业活动正在显著地改变着中国的经济形态和社会结构。这些年轻人充满活力和创新,他们运用科技,特别是互联网和人工智能等新兴技术,创建了一系列前沿的产品和服务。不仅如此,他们还积极解决社会问题,满足消费者的多样化需求。尽管创业过程充满了挑战,比如资金短缺、市场竞争激烈等,但是这些年轻的创业者通常都有强烈的毅力和不屈的精神,他们不断学习,适应环境并提高能力,以达到他们的创业目标。政府也推出了一系列创新政策,提供了财政支持和法律保障,以鼓励年轻人的创业活动。总的来说,中国年轻人的创业活动正在对中国的经济发展和社会进步产生积极的影响。
如果对文本内容进行段落划分,信息将会非常清晰。在提示中我们可以让ChatGPT对信息进行分段列举,ChatGPT的回复将会按一段一个要点的形式来列举。
请列出几种年轻人创业的方法。
以下是一些年轻人创业可能采用的方法。
1.科技创业:利用新兴的科技如人工智能、云计算、大数据和区块链等,创办科技公司,提供新颖的产品和服务。
2.网络创业:运用互联网,特别是社交媒体平台,进行线上销售、内容创作、广告营销等。
3.社会企业创业:创建社会企业,解决社会问题,如环境保护、教育公平、社区发展等。
4.创新产品开发:研发和销售创新产品,满足市场上新的需求。
5.提供专业服务:开设咨询公司、设计工作室、法律事务所等,提供专业服务。
6.零售业和餐饮业创业:开设实体店,如书店、咖啡店、餐馆、服装店等。
7.教育和培训创业:创建在线学习平台或线下教育中心,提供教育和培训服务。
每一种创业方式都有其特点和挑战,关键是要找到符合自己兴趣和技能的创业领域,制订出行之有效的商业计划,然后才能成功创业。
ChatGPT还有一个很重要的能力,就是它可以以各种不同的计算机程序语言生成高质量的代码。我们只需要在提示中表明我们希望生成代码所使用的计算机语言类型即可,如下面示例中,我们要求ChatGPT用Python语言来进行代码生成。
请写一个Python函数,该函数接收一个整数列表,并返回其平均值。
以下是一个Python函数,它接收一个整数列表作为输入,然后返回列表中数字的平均值:
在这个函数中,我们首先检查列表的长度是否为0,如果是,则返回None。如果列表中有元素,则计算所有元素的和,然后除以元素的数量,从而得到平均值。
为了清晰呈现与ChatGPT的交互过程,示例中列出的是简化后的代码形式。在实际界面中,ChatGPT是以更加美观的Markdown文本形式显示的,图2.2是实际回复的样式。
图2.2 ChatGPT生成代码的页面样式
Markdown是一种可以使用简单的文本符号来规定文档格式的方式。你可能已经在一些地方无意中使用过类似的格式,比如在使用文本编辑器(如编辑电子邮件)时,使用星号(*)可以将文本变为斜体,或者在文本前使用井号(#)来将其调整为标题格式。
这就是Markdown的核心思想——在输入文本的同时,使用简单易懂的符号来规定格式。这种方式的一大优点在于,我们可以专注于内容的编写,而不用在格式设置上花费太多时间。下面是基本的Markdown语法。
(1)标题:可以使用“#”来创建标题。例如,使用“#”就是最大的标题,使用“##”就是次大的标题,以此类推,最多可以到六级标题。
(2)列表:可以使用“-”或“*”来创建无序列表,或者使用数字来创建有序列表。
(3)链接:可以使用“[文本](网址)”的方式来添加一个链接。
(4)粗体和斜体:可以使用“*”或“_”在单词或句子的前后来设置斜体,使用“**”或“__”来设置粗体。
Markdown文件就是纯文本文件,这意味着可以用任何文本编辑器打开和编辑它们,而不需要特殊的软件。Markdown文本和它在浏览器或Markdown阅读器中的显示效果如图2.3所示。可以看出使用Markdown的另一大优点是有助于清晰地组织和格式化信息,使得文本的结构和重点更加明显,便于阅读理解。本书不对Markdown内容做展开介绍,感兴趣的读者可以阅读相关资料来深入了解。
图2.3 Markdown文本与显示效果对比(左侧为Markdown文本,右侧为显示效果)
ChatGPT可以理解Markdown格式的输入,也可以生成Markdown格式的文本。我们只需在提示中明确指定输出格式为Markdown, ChatGPT便能以更加结构化的Markdown格式来输出文本。
图2.4所示是一个ChatGPT以Markdown形式进行回复的示例。为了展现Markdown回复的样式,本例我们以图片的形式来呈现。本例包含了标题、列表等不同的元素,使用这些元素很好地突出了回复文本的结构和重点。
图2.4 Markdown格式的回复示例
因此,当需要ChatGPT有条理地输出大段文字时,在提示中可以指定ChatGPT使用Markdown形式进行回复,将能获得更加理想的效果。
JSON(JavaScript Object Notation, JS对象简谱)和XML(eXtensible Markup Language,可扩展标记语言)都是比较常用的传输数据的格式。它们都是可以在不同平台和不同语言之间进行数据交换的文本格式。其他比较常见的传输数据的格式还有很多,如CSV(Comma-Separated Values)、Protobuf(Protocol Buffers)、YAML(YAML Ain’t Markup Language)等,ChatGPT都可以用这些格式作为输出,这里以JSON和XML为例子。
JSON是一种轻量级的数据交换格式,方便人们阅读和编写,同时也易于机器解析和生成。JSON最初是在JavaScript语言中为了处理数据而创建的,它的语法来源于JavaScript中创建对象的语法,然而现在它已经成为一种与语言无关的数据格式,几乎所有的编程语言都提供了一种或多种方法来解析JSON格式的数据和生成JSON格式的数据。
JSON数据由两种结构组成:一种是键值对集合(在编程语言中通常称为“对象”),另一种是值的有序列表(在编程语言中通常称为“数组”)。下面是一个简单的JSON示例。
这个例子中有一个对象,它包含三个键值对。每个键("name","age","city")后面都跟着一个值("WangXiang",60,"HuaLin")。
XML也是一种数据存储和交换的格式,但它比JSON更复杂,因为它是一种标记语言,使用如<name>John</name>这样的标签来描述数据。下面是一个简单的XML示例。
<person></person>这样的标签在XML中被称为元素。在这个例子中,有一个名为person的元素,它包含三个子元素:name、age和city。每个元素都有一个开始标签和一个结束标签,并且包含一个值。person元素代表一个人,它的子元素表示这个人的属性。name元素的值表示这个人的名字是WangXiang, age元素的值表示这个人的年龄是60岁,city元素的值表示这个人所在的城市是HuaLin。直观可见XML具有树形结构,这让它非常适合表示嵌套的或具有层次性的数据。标签内还可以包含其他标签,这使得数据可以有多层的复杂结构,能清晰地表述复杂的关系。XML还允许用户自定义标签,这为构造复杂的文档结构提供了极大的灵活性。用户可以根据需要创建特定于应用的标签,因此XML很适合用于表示元数据
。XML还有许多有趣的特性,本书中无法完全覆盖,读者可以自行搜索学习。
前面简单介绍了JSON和XML这两种常用的传输数据的格式,接下来介绍它们在ChatGPT回复中的优势。
(1)结构化数据:JSON和XML可以更好地表示复杂的数据结构,如列表、嵌套的对象等。这使得ChatGPT能够处理更复杂的对话场景,比如需要理解和操作复杂数据结构的任务。很多复杂任务使用文本很难呈现很好的回复效果,但是在ChatGPT的提示中使用JSON和XML这样的结构化数据格式,可以使回复的表达很清晰。
(2)良好的可读性:与其他的一些数据格式相比,JSON和XML都具有良好的可读性。使用它们作为输出,可以让用户更直观地阅读有复杂结构的数据。
(3)跨平台交互:JSON和XML都是与语言无关的数据格式,它们在不同的编程语言和平台之间都能被很好地支持和解析。这意味着无论ChatGPT的用户使用什么样的技术栈
,都可以方便地与ChatGPT进行交互,并且作为输出,可以直接将它们使用到各种不同的程序中,不再需要专门进行数据类型的转换。
下面我们以JSON为例,针对同样的提示,比较ChatGPT回复为纯文本和JSON格式的区别。可以很清晰地看出,使用JSON这样的结构化数据格式之后,我们可以很直观地看出书的出版时间和作者等重要信息。由此可见,ChatGPT在回答有复杂数据结构的内容时,在提示中要求使用结构化数据格式作为回复格式可以使回复更加清晰明确。
在提示中不限制回复的类型,示例如下。
请告诉我一些关于《哈利·波特与魔法石》的信息。
《哈利·波特与魔法石》是J.K.罗琳创作的“哈利·波特”系列的第一部作品。这本书首次出版于1997年,讲述了一个名叫哈利·波特的年轻巫师的冒险经历。这本书在全球范围内受到了广大读者的喜爱,并启动了整个哈利·波特的系列。
在提示中限制回复类型为JSON格式,示例如下。
请以JSON格式给我一些关于《哈利·波特与魔法石》的信息。
在2.2.1节中,我们发现ChatGPT能够灵活地使用各种文本格式进行回复。这自然让我们联想到,在给出提示时是否也可以使用不同的格式?答案是肯定的。根据提示中的不同文本类型使用相应的格式,可以帮助ChatGPT生成更高质量的回复。
然而,并非每次给出提示时都必须使用不同的格式。事实上,在大多数情况下,即使我们仅使用纯文本作为提示,ChatGPT也能够生成满足我们需求的回复。只有当我们处理复杂或涉及多个部分的内容时,使用不同的格式来区分提示中的不同文本部分才显得尤为重要,因为在提示中这可以帮助ChatGPT更有效地组织和分类信息。
下面介绍两种常见的方法,它们通过在提示中使用不同格式,可以有效地帮助我们组织和分类信息:第一种方法是使用列表,第二种方法是标注引用,这两种方法都能有效地结构化我们的提示。
在组织和分类信息时,使用列表是一种非常有效的方式。列表可以清晰地分隔不同的信息点,并且提供一个结构化的方式来组织信息。列表可以是无序的,只是简单地列出信息点;也可以是有序的,为信息点提供特定的顺序。在提示中,使用列表可以帮助ChatGPT更好地理解和处理信息,示例如下。
我想要做红烧肉,有以下这些食材和调料,请帮我判断是否还需要购买其他材料:
——五花肉
——生抽酱油
——老抽酱油
——冰糖
——生姜
根据你提供的食材和调料,制作红烧肉一般还需要以下一些配料:
——大葱:为红烧肉增添香味。
——料酒(或黄酒):可以去腥、提香。
——八角和香叶:常用的香料,可以提升红烧肉的香气和口感。
——清水:用于烧肉。
——盐:用于调味。
因此,你可能需要购买大葱、料酒、八角、香叶和盐。当然,这只是一种常见的做法,具体的材料和调料可能会根据个人口味和地方风味有所不同。
上面是一个无序列表的例子,在这个例子中它清楚地分隔了各种不同食材,使ChatGPT能清楚地知道现在有哪些食材,从而推测出还缺少的食材。在提示中使用无序列表,表明对列举对象的顺序无须关注。
当我们强调的信息与顺序有关时,可以使用有序列表。例如,通过指定制作红烧肉各步骤的顺序,我们可以帮助ChatGPT更好地理解目前已有哪些步骤,从而补全缺失的步骤。
我将以下面流程制作红烧肉,请帮我补全缺少的工序:
1.将五花肉切块;
2.焯水去除血水和杂质;
3.炒糖色,注意防止糖色煳化;
4.加入五花肉翻炒;
5.倒入生抽老抽;
6.倒入水没过五花肉;
7.汤汁浓稠后起锅。
根据您的制作流程,我添加了一些可能缺失的步骤:
1.将五花肉切块;
2.焯水去除血水和杂质;
3.锅中加入冰糖,小火慢慢熬至红色糖色,注意防止糖色煳化;
4.加入五花肉块,翻煎使五花肉块全都裹上糖色;
5.加入切好的生姜翻煎均匀,出香味;
6.倒入生抽和老抽,翻煎均匀,使五花肉块充分吸收酱油的颜色和味道;
7.倒入的水没过五花肉;
8.转小火慢慢炖煮;
9.在汤汁接近浓稠时,调入适量的盐;
10.汤汁浓稠后,炖至五花肉软烂即可关火起锅。
这个流程在你的基础上,添加了生姜以增加香味,调整火候,同时在炖煮过程中调入盐,可以更好地调控口感。
在提示中,当我们需要ChatGPT对一段待输入文本进行处理时,最好对待处理文本进行标注,这里的待处理文本也就是标题中的“引用”。通过标注引用可以比较好地区分提示中不同部分的文本,从而可以达到更好的文本处理效果。下面是一个标注引用的简单示例。
引用:昨天,我跟我的朋友们去了公园。我们在那里度过了一个愉快的下午。我们参加了一些游戏,看了一个音乐表演,并且吃了一些美味的食物。我尤其喜欢那个音乐表演,它非常的精彩。我也喜欢我们吃的那个披萨,它是我吃过的最好吃的披萨。
任务:请从引用中总结,昨天我们做了哪几件事?
昨天你们在公园做了以下几件事:
1.参加了一些游戏。
2.观看了一个音乐表演。
3.吃了一些美味的食物,其中包括一种你认为非常好吃的披萨。
针对标注引用这个技巧,我们将会在2.3节进行详细介绍。
当使用提示工程时,我们可以在提示中设置期望的ChatGPT回复模板,以引导模型生成符合特定要求的回复。使用这种方式可以提高回复的一致性和准确性。
在以下的示例中,我们的任务是写3个关于健康生活的段落。为了便于阅读,我们设计了一个简单的回复模板,使用“段落n:”对每个段落进行标注,并且在输出段落文本之前,使用“标题:<生成的标题n>”这类格式为每个段落创建标题,“<生成的标题n>”是占位符,目的是在模板中预留出生成的标题的位置,这些预留的位置在最终回复中会被模型生成的具体内容替代。ChatGPT的回复是完全按照这个模板输出的,结构清晰便于用户阅读。
请帮我写3个关于健康生活的段落。
回复模板如下:
段落1:
标题:<生成的标题1>
段落2:
标题:<生成的标题2>
段落3:
标题:<生成的标题3>
段落1:
标题:健康饮食的重要性
健康饮食是实现健康生活的关键因素之一。通过合理的饮食选择和均衡的营养摄入,我们可以为身体提供所需的营养物质,维持良好的身体功能。一个健康饮食的核心是多样化的食物组合,包括新鲜蔬菜水果、全谷物、高质量的蛋白质和健康脂肪。此外,应避免过多的加工食品和高糖饮料,这对于维持健康的饮食习惯也至关重要。
段落2:
标题:积极的身体运动
积极的身体运动对于健康生活具有重要影响。适度的运动可以增强心血管健康、改善体力和耐力,提高心理健康。无论是有氧运动、力量训练,还是灵活性练习,都可以为身体带来益处。每周至少进行150分钟的中等强度有氧运动,如快走、游泳或骑自行车,并进行定期的力量训练来增强肌肉和骨骼。
段落3:
标题:良好的睡眠习惯
良好的睡眠习惯是健康生活的基石。充足的睡眠对于身体和大脑的恢复至关重要。成年人每晚应该争取7~9小时的睡眠时间。保持规律的睡眠时间表、创造舒适的睡眠环境、避免过度使用电子设备和限制咖啡因摄入是培养良好睡眠习惯的重要步骤。通过优化睡眠质量,我们可以提高精力、注意力和整体身心健康。
以上是三个关于健康生活的段落,每个段落都包含了生成的标题。请注意,生成的标题是根据您提供的回复模板自动生成的,具体内容可能因模型的创造性而有所不同。您可以根据需要进一步调整和完善每个段落的内容,以满足您的要求和预期。
当然,具体的回复模板设置方式可以根据需要进行灵活调整。通过在提示中设置回复模板,我们可以更好地控制ChatGPT生成的回复内容,使其满足特定的要求和格式,大大提升ChatGPT的适应性。