ChatGPT人工智能:聊天程序改进(难度:3级)
-
介绍
在上一篇教程,大家学习了如何用ChatGPT制作简单的聊天程序。
在这篇教程,大家将学习如何改进那个聊天程序,有几个技巧。
第1步 - 项目起点
我们从上一篇教程的项目作为起点。如果你没有那个程序,就根据那篇教程制作一个,或者改编如下这个项目:
https://play.creaticode.com/projects/1ca634e4193e2b27500be13e
第2步 - 测试“角色穿帮”
在目前的程序中,我们指定ChatGPT扮演某个角色。不过,我们的用户容易摆脱这一限制,导致ChatGPT“角色穿帮”。
如下所示,当我们质疑它的时候,ChatGPT就会承认自己是人工智能模型,装扮的爱因斯坦。
这么回答并没有什么错,因为ChatGPT想要解释清楚怎么回事。然而,在很多程序中,我们需要强制ChatGPT扮演其角色。举个例子,比如我们让ChatGPT在一个冒险游戏中扮演一位万能的巫师。如果巫师突然承认自己是一个“人工智能语言模型”,那就破坏氛围和乐趣了,对吧?
再举个例子,比如我们让ChatGPT向学生提问问题。如果学生以某种方式使ChatGPT角色穿帮,ChatGPT就会开始说出答案。
第3步 - 利用“系统请求”强制保持角色
为了确保ChatGPT一直扮演指定的角色,我们可以用“系统请求”。ChatGPT会严肃对待所有的系统请求,将会竭尽全力履行系统请求。
将原来的积木“请求”替换为“系统请求”,并明确指示ChatGPT在所有回答中保持指定的角色。另外,刚开始ChatGPT没有回答,我们只需要发一条消息“你好”。
现在当我们再次以用户身份质疑ChatGPT,它就会始终扮演指定的角色:
第4步 - 强化系统请求
尽管我们用系统请求迫使角色不穿帮,但这个方法并不完美。
首先,真的爱因斯坦并不知道什么是ChatGPT,所以不应当说“我不是ChatGPT”、“我不是聊天机器人”。
另外,聪明的用户仍然能轻而易举让ChatGPT穿帮,如下所示:
如果我们真的要让聊天机器人“栩栩如生”,我们就要强化系统请求,来应对像这样的用户质疑。这常常被称为“提示语工程”(prompt engineering),为了改善ChatGPT的回答,我们争取找到最好的提示语。
比如,我们可以在系统请求后面再加一句:“你从来没听说过人工智能模型和ChatGPT”。改进的回答如下:
第5步 - 切换至“持续更新”模式
目前,ChatGPT的回答速度还不是太快。如果回复内容较长,用户要等好几秒才能看到回复。
为了解决这个问题,大部分ChatGPT系统使用“持续更新”模式,当ChatGPT开始生成回答内容后,就会显示一部分回答内容,然后不断增加回答内容。这样可以使用户早点看到回复。
注意,在“持续更新”模式中,积木“请求”会立即结束,但变量“回复”的内容此时还依然是空的。
第6步 - 不断重复刷新回复
在“持续更新”模式中,随着ChatGPT生成回复内容,变量“回复”的值将自动更新。因此,为了显示回复内容,我们要用如下方法:
- 聊天窗口中添加一个符号“…” 告诉用户ChatGPT正在思考。
- 不断用变量“回复”更新消息。
现在一旦收到回复内容,就会立即在聊天窗口显示:
第7步 - 检测回复是否结束
我们需要稍稍改进这个重复执行循环。我们不能用无限循环,因为会导致程序卡在这个循环中。
为了确定ChatGPT是否已经回复完,我们可以看是否有这个对号。大家可以到这个网页去复制https://emojiterra.com/white-heavy-check-mark/
第8步 - 整理最终的消息内容
回复内容中出现对号以后,我们将退出循环“重复执行直到( )”。在这个时间点上,我们仍然需要再更新一次聊天消息,因为变量“回复”可能包含一些尚未显示的内容。我们还应当去除对号。
第9步 - 优雅地处理聊天长度限制
目前,聊天的长度是有限制的。如果聊天太长,回复内容就会包含“CHAT LIMIT REACHED”(超过聊天限制长度)。出现这种情况时,聊天就不能再继续了,所以我们要告诉用户。在这种情况下,用户不能继续聊天了,但可以点击绿旗开启新的对话窗口。
创意扩展
现在请尝试将这个聊天程序进一步扩展。大家可尝试用“系统请求”强化提示语,使聊天内容更加逼真。例如,可以假装今年是1945年,爱因斯坦并不知道这一年之后发生的所有事情。