向AI提问的艺术:提示工程入门与应用
上QQ阅读APP看书,第一时间看更新

1.3.2 ChatGPT如何回答提示

在了解了什么是提示之后,让我们看看ChatGPT是如何回答用户输入的提示的。虽然直观上似乎只是用户输入文本,ChatGPT通过用户界面将输入文本传入GPT模型,GPT模型经过运算后由ChatGPT将GPT模型的输出结果返回给用户。但实际整个过程要复杂得多,ChatGPT在接收到用户输入后会经过一系列的步骤,然后才会将用户提示输入GPT模型之中。下面我们会分别介绍检查用户提示安全性、构建上下文窗口和设置语言属性这三个重要步骤。

1.检查用户提示安全性

在用户输入提示之后,ChatGPT将首先利用内部的审核功能来对用户提示的安全性进行审核。如果提示包含被禁止内容将会被检测出来,会被ChatGPT提醒并且过滤掉。其中,被禁止内容如表1.1所示。

表1.1 ChatGPT禁止内容

目前根据用户使用情况,ChatGPT禁止的内容还在不断增加。在使用ChatGPT的时候也需要注意,提示中不要包含任何违规内容。如果多次询问违禁问题,用户账号将会被封禁。

不仅用户的输入提示会被ChatGPT内部的审核功能进行审核,而且GPT模型的回答在返回给用户之前也会被审核功能进行审核。如果被检测出包含违规内容,则回复会被过滤掉,ChatGPT会通过提前配置好的模板消息来回复用户。

2.构建上下文窗口

ChatGPT与其他聊天机器人最大的不同,就是它能够结合上下文来进行回复。其他聊天机器人大多只能根据用户当前的问题或指令来提供回答,无法结合之前的对话来回答。如下面例子,在之前的对话中用户提到自己是一个素食主义者,所以在后续用户提示让推荐一些晚餐菜谱时,ChatGPT推荐的都是不包含荤菜的菜谱。

用户:

素食主义者的饮食需要注意什么?


ChatGPT:

素食主义者的饮食需要特别注意蛋白质、铁、钙、维生素B12、维生素D、Omega-3脂肪酸等营养素的摄入,以避免营养不足。以下是一些具体建议:

……


用户:

请推荐几个晚餐菜谱。


ChatGPT:

当然,这里有几个简单易做、健康美味的晚餐菜谱供您参考。

1.墨西哥黑豆玉米饭

食材:黑豆罐头、玉米罐头、米饭、洋葱、辣椒、蒜、番茄酱、香菜、橄榄油、盐、胡椒粉。

做法:将米饭煮熟备用。在热锅中加入橄榄油,加入洋葱、蒜和辣椒煸炒,加入黑豆和玉米,混合翻炒,加入适量番茄酱调味,加盐、胡椒粉调味。将炒好的黑豆和玉米盛入煮好的米饭中,撒上香菜即可。

2.香煎豆腐配彩椒蘑菇炒面

食材:豆腐、彩椒、蘑菇、面条、酱油、蒜、盐、胡椒粉。

做法:将豆腐切成小块,加入蒜、盐、胡椒粉腌制。将彩椒和蘑菇切成小块备用。将面条煮熟备用。在平底锅中加入橄榄油,将腌好的豆腐煎至金黄色备用。在同一锅中加入彩椒和蘑菇,翻炒,加入酱油调味。将煮熟的面条加入菜中煸炒两分钟即可。

3.简易番茄意面

食材:意面、番茄、蒜、橄榄油、盐、胡椒粉、香菜。

做法:将意面煮熟备用。将番茄切成小块,加入蒜、盐、胡椒粉拌匀备用。在平底锅中加入橄榄油,将拌好的番茄翻炒至熟透。将炒好的番茄浇在煮熟的意面上,撒上香菜即可。

因为ChatGPT具备结合上下文的能力,所以我们在写提示时不需要将之前对话中提到过的内容都列举出来,这会让我们与ChatGPT的交流更加自然流畅。那么,如此重要的结合上下文的能力是来自强大的GPT模型吗?其实不然,GPT模型本身虽然有强大的文字理解能力,但是在训练完成之后并不能存储用户之前的输入,或主动根据用户的每一次输入来重新训练调整模型本身。

结合上下文的能力其实来自ChatGPT对用户提示的处理,即通过使用对话式提示注入技术来实现这点的。简单来说就是,每当用户输入新提示之后,ChatGPT都会将用户之前全部对话和新提示一起输入GPT模型。可想而知,如果每次都输入之前的完整对话,那么每次对话之后,需要输入GPT模型的整个文本长度都会不断增加,这样很快便会超出GPT模型可以接受的输入长度上限。因此,ChatGPT在每次对话之后,都会提取本次对话的关键词,并将它们跟之前提取的关键词放在一起构造成新的上下文窗口,在下次用户输入提示之后,将提示也提取出关键词加入上下文窗口中,之后再输入GPT模型。

如图1.7所示,在用户第一次输入提示之后,ChatGPT会先提取提示中的关键词构建上下文窗口,再把提示输入GPT模型。在GPT模型输出回答之后,ChatGPT同样先提取回答中的关键词并加入上下文窗口中。用户再次输入提示之后,ChatGPT会将这次的提示加入之前的上下文窗口,然后传入GPT模型进行处理。在GPT模型输出回答之后,再次提取回答中的关键词并且加入上下文窗口,以此类推。

提取关键词虽然大大降低了上下文窗口的总长度,但是如果每次都将之前的关键词添加到上下文窗口中,那么上下文窗口迟早也会超出GPT模型允许的输入长度上限。因此,ChatGPT也对上下文窗口中的关键词个数以词元的形式作了限制。在上下文窗口中当关键词个数达到上限的时候,将以先进先出的形式把最早的关键词从上下文窗口中删除,从而保证上下文窗口在不超过关键词个数限制的情况下不断更新。

这时你可能会想,如果不提取关键词,而是直接在上下文窗口存储完整对话,是否也可以直接运用同样的机制来避免上下文的无限膨胀及保持上下文的更新呢?确实可以,但是因为完整对话占用的空间远大于提取关键词的方式,所以在限制上下文窗口尺寸上限之后,只存储关键词可以保存更多的上下文信息。此外,因为对话篇幅可能很长,所以如果上下文窗口直接存储完整对话,那么对它尺寸的限制就只能是基于字数或词数,这样很有可能在上下文窗口中将单个对话从中间直接截断,导致对话含义发生变化,从而影响上下文窗口的质量。

图1.7 ChatGPT利用对话式提示注入来了解对话的上下文

3.设置语言属性

针对每个输入的提示,ChatGPT还会为它设置回答的语言属性,包括Language(语言)、Tone(语气)及Mood(情绪)等信息。这个语言属性对用户是不可见的。根据用户输入的提示,ChatGPT会分析提示及上下文,从而自动确定这些属性。图1.8所示是一个例子。通过分析第一个提示,ChatGPT自动获取到语言为中文,需要回复语气应该是轻松欢快的。之后根据GPT模型的回复,ChatGPT会根据上下文和当前回复来更新语言属性。根据回复,在语言属性中将情绪设置为愉快。在用户第二次输入提示后,ChatGPT会根据当前提示更新语言属性,之后它会将语言属性附加在用户提示后面再一起输入给GPT模型。之后,根据GPT模型的输出ChatGPT会再更新语言属性,这样不断重复。

图1.8 构造语言属性提示来设置回复的语言、语气和情绪等属性

ChatGPT自动识别和更新语言属性,一方面避免了用户手动设置,大大提升了用户与ChatGPT的交互体验;另一方面实时地根据每一个用户的提示、GPT模型的回复及上下文的变化来调整语言属性,大大提升了对话的流畅度。这让用户感觉不再像是跟冷冰冰的机器对话,而像是在跟有真情实感的人交流。

ChatGPT针对提示的主要处理流程如图1.9所示。从用户界面接收到用户输入的提示之后,ChatGPT首先会对提示进行安全性检查来过滤掉包含违规内容的提示。通过安全性检查之后,ChatGPT会为用户提示构建上下文窗口和设置语言属性,之后将提示输入GPT模型。在GPT模型返回回答之后,同样需要更新上下文和语言属性,以及进行安全性检查,完成这一切之后,最终回复才会被显示给用户。

图1.9 ChatGPT处理提示流程