ChatGPT和Colossal Cave Adventure
像许多人一样,麦克卢尔学院的教员和MITS的校友布鲁斯·唐(Bruce Tong)一直在尝试ChatGPT,并希望获得ChatGPT Python应用程序编程接口(API)的一点经验。Bruce希望使用Python程序与ChatGPT进行交互。为此,他需要一个Python程序需要预测文本的理由。
这便是《Colossal Cave Adventure》进入游戏画面的地方。这是一款可以追溯到1976年的基于文本的游戏,通常出现在Unix系统上。它在Linux上是免费的,Bruce知道他可以使用另一种经典的Unix服务“xinetd”将其作为网络服务提供。xinetd的特性之一是能够将从标准输入读取并写入标准输出文件的程序转换为网络服务。几乎所有命令行应用程序都这样做。通过将《Colossal Cave Adventure》与《xinetd》结合在一起,这款经典的冒险游戏便能够通过网络甚至互联网进行访问。
下一步是编写一个可以连接到《Colossal Cave Adventure》并与之交换文本的Python脚本。实际上,需要的是一个用Python编写的telnet客户端。这听起来像是很多工作,但它主要只是读取和写入文本到“套接字”,这有点像读取和写入文件,但它是一个网络连接。Bruce提示ChatGPT编写这个脚本,他说:“编写一个Python脚本来打开TCP套接字并发送和接收文本。”生成的脚本会这样做,但只针对一个事务。需要进一步提示:“修改脚本,以便在输入Control-C之前在循环中完成数据的发送和接收。”进一步的提示让ChatGPT修改脚本的结构,将更多的东西分解成孤立的函数,并将硬编码的值移动到变量中。《Colossal Cave Adventure》的复杂之处就在于,每个数据包发送一封信,所以脚本需要执行自己的缓冲,而不是依赖于操作系统或运行时环境。
所有这些修改都是通过ChatGPT提示应用的,但我们正在为下一步做准备,即要求ChatGPT添加ChatGPT API,以便脚本可以充当游戏和ChatGPT之间的中间人。下一步是当脚本的工作是从游戏中获取文本并将其发送到ChatGPT,然后接受ChatGPT的响应并将其发送到游戏时。这样,ChatGPT就可以玩这个游戏了。ChatGPT交付了,将必要的调用插入到它自己的API。
此时,脚本变得足够大,继续要求ChatGPT进行更改变得很麻烦。该脚本需要进行大量的微调和调试,才能解决两个系统之间的接口问题。例如,ChatGPT喜欢使用完整的句子,但游戏希望使用两个单词的命令。ChatGPT使用混合大小写和标点符号;但游戏却没有。而且,作为即将出现的问题的标志,ChatGPT版本3.5喜欢忘记其最初的指令,并将开始为发出未知命令向游戏道歉。当然,这些道歉也会是未知的命令,导致无休止的礼貌但无效的沟通循环。
这就把我们带到了Bruce所发现的最有趣的方面。脚本必须管理对话的历史记录。各种版本的ChatGPT都有一个有限的缓冲区大小。后期版本比早期版本具有更大的缓冲区。这意味着它们可以处理更长的对话历史,但它们都有限制。而且,处理更大的会话消耗更多的“令牌”,成本更高。在规模上,这些成本可能会变得很大。
在Python中,对话是一个字典列表。考虑以下几点:
对话= [
{“角色”:“系统”,“内容”:“你正在玩游戏冒险。”},
{"role": "system", "content": “ command是一两个字。”},
{"role": "user", "content": “WELCOME TO ADVENTURE…”},
{"role": "assistant", "content": "go north"}
]
“system”角色用于向ChatGPT提供指令。“user”角色是用户想要发送给ChatGPT的内容。在这种情况下,游戏就是用户。ChatGPT回复的是“助理”角色。随着对话的进行,您的程序可能会不断向这个列表中添加内容,因此该列表最终会比ChatGPT的缓冲区还要大。然后,ChatGPT开始忽略部分对话。您的脚本必须包含管理对话的内容。例如,您可能将列表视为队列或先进先出(FIFO)数据结构,但这最终意味着您对ChatGPT的指令将从会话中删除。管理列表的增长可能涉及不在会话中留下错误条件,因为它们可能对ChatGPT没有帮助。您可能必须为每个事务重新组合会话,以便能够将对ChatGPT的指令保留为会话的一部分。
那么ChatGPT 3.5玩《Colossal Cave Adventure》的最终效果是什么呢?ChatGPT大部分时间只是在树林里闲逛,捡起和扔东西。记住,这是一个预测性文本系统,并不会制定策略,甚至不会识别游戏中的目标。这与“无限猴子定理”非常相似。“无限猴子定理”表明,一只猴子在键盘上敲击键盘无限长时间,最终会打出莎士比亚的全部作品。
至于使用ChatGPT编写Python脚本,它是一个方便的工具。ChatGPT无法编写具有许多需求的大型程序。它将更好地编写有针对性的函数来满足编写良好的提示符。像程序员一样沟通得越好,ChatGPT就越有可能交付您想要的东西。你如何学会像程序员一样交流?你学习编程。术语是可以教的。如何从ChatGPT函数中组装更大的程序?体验。您需要自己编写程序,并了解如何最好地设计和集成相关逻辑。这是你必须自学的东西,但它可以被指导。
麦克卢尔新兴通信技术学院致力于在IT(信息技术)、网络安全、游戏开发和虚拟现实/增强现实(VR/AR)行业提供最好的学术课程。我们的课程和证书涵盖了快速变化的信息网络、网络安全、数据隐私、游戏开发、数字动画和电子竞技学术方面的许多方面。