ChatGPT 问世的这半年,我们目睹了许多由它掀起的变革和争议,见证了越来越多大模型的崛起,同时推测着未来的发展趋势……但万万没想到,这股名为 ChatGPT 的风,还能吹到30年前的操作系统中!
(资料图片仅供参考)
近来,一位开发者 @dialupdotnet 掏出了他30年前——即1993年入手的“古董电脑” Gateway4DX2-66,并表示:“我不想javascript让我1993年的 Gateway4DX2-66被排除在 AI 革命之外,所以我基于 OpenAI API,为 Windows3.1建立了一个 AI 助手,名为 WinGPT。”
也就是说,WinGPT 能让30年前推出的 Windows3.1也用上 ChatGPT!
这是怎么做到的?
诞生于1992年的 Windows3.1,是微软在31年前发布的操作系统,如今早已被时代淘汰并遗忘,因而想要让 Windows3.1接入 ChatGPT,在30年前的电脑上实现和 AI 聊天的功能,听起来就像是“天方夜谭”——所以,@dialupdotnet 究竟是如何做到的?
根据 @dialupdotnet 介绍,WinGPT 是用 C 语言编写的,使用标准的 Windows API,此外:“我用 Open Watcom v2作为编译器(Open Watcom v2可以在从 Windows3.1开始的javascript任何16位或32位版本的 Windows 上运行),非常方便,因为它甚至支持从 Windows11交叉编译到16位 Windows。”
值得一提的是,WinGPT 还使用2018年发布的加密标准 TLS1.3来原生连接到 OpenAI API 服务器,因此不需要用具有现代操作系统的代理机器来建立和维护通信。不过 @dialupdotnet 也坦诚道:“这种实现方法并不安全。”
“艰难”地构建 UI
作为一名如今生活在2023年的开发者,@dialupdotnet 早已习惯用 Delphi 来构建像 Windle 这样的 Windows 应用程序,因此猛然间只能用内置的 Windows API 时,他深感不便:“我很惊讶 Windows3.1的 UI 构建功能竟会如此原始。”
为此,@dialupdotnet 直接用 C 语言构建了大部分 UI,即每个 UI 组件都必须用代码手动构建,更要手动调整逻辑大小,以确保每个组件在窗口被调整时都能保持其适当的大小。
这还不是最难的。当 @dialupdotnet 试图弄清如何在 WinGPT 中添加状态栏时,他发现 Windows3.1上可供程序使用的标准控件集也非常之有限:“除了按钮、复选框、单选按钮、编辑框,另外一些你可能需要的其他控件,包括那些在操作系统本身中使用的控件,都是不可用的。”
例如,明明状态栏在 Windows3.1中随处出现,文件管理器和控制面板中都有,但微软并未将其作为可用控件提供给开发者。直到 Windows95,微软才将这些控件与进度条、工具条和树形视图等其他一些有用控件,广泛地提供给应用开发人员。
对于这个问题,@dialupdotnet 问了 ChatGPT 如何在 Windows3.1程序中添加状态栏,但它的回答是一个只存在于 Windows 后期版本中的头文件。就算 @dialupdotnet 继续追问,ChatGPT 也只是“编造”出了一个不存在的 UI 库的名字。
好在最后状态栏的问题,@dialupdotnet 还是自己想办法解决了:Philip J. Erdelsky 有一个1997年的状态栏实现,并且代码是开源的,@dialupdotnet 对其进行了修改,使其看起来更贴近 Windows3.1应用中的状态栏。
在构建 WinGPT 的 UI 过程中,还有一个有趣的点:在 Borland 图像编辑器中设计图标,它实际上是微编程客栈软 Paint 的一个克隆,只不过恰好可以制作 ICO 文件。通过 Borland 图像编辑器,@dialupdotnet 共设计了两种规格的图标:32x32的,该规格图标才能在 Windows3.1的程序管理器和任务切换器中显示;16x16的,用于在后来的 Windows 版本上显示。
WinGPT 有一定限制
一些准备就绪后,WinGPT 就创建完成了。不过毕竟 @dialupdotnet 的“古董电脑” Gateway4DX2-66购于30年前,尽管 WinGPT 能在 Windows3.1上运行,电脑内存也相当有限。
“我试图减少 WinGPT 所需的内存,特别是在发送和接收 OpenAI API 的查询和响应时。”但 @dialupdotnet 指出现代 API 的 jsON 响应在大小编程客栈上并没有特别优化,OpenAI API 也不例外:“我已经要求模型尽量简短,以使响应尽可能的少,我还选择在 API调用中不发送前一轮的文本。但这也就意味着,聊天机器人无法使用先前的对话背景。”
简单来说:由于内存支持有限,WinGPT 只能接收简短的回复,聊天内容也无法联系上下文。
尽管如此,对此感兴趣的网友也可以像 @dialupdotnet 一样,翻出家中蒙尘已久的 Windows3.1电脑,前往 https://www.dialup.net/ 网站下载 WinGPT,尝试一场跨越30年的 AI 对话。
需要注意的是,虽然 WinGPT 可以在 Windows3.1之后的任何16位或32位版本的 Windows 上运行,但它需要通过 Winsock 实现,也不支持64位版本的 Windows。此外,用php户还需要输入自己的 OpenAI API 密钥才能运行 WinGPT。
参考链接:
https://www.dialup.net/wingpt/
https://www.theregister.com/2023/06/27/retro_chatgpt_for_windows/