谷动谷力

标题: 30 岁“古董”电脑,因 ChatGPT 被迫“复工”:在 Windows 3.1 ... [打印本页]

作者: sunsili    时间: 2023-6-30 14:24
标题: 30 岁“古董”电脑,因 ChatGPT 被迫“复工”:在 Windows 3.1 ...
30 岁“古董”电脑,因 ChatGPT 被迫“复工”:在 Windows 3.1 里用上 ChatGPT!

[color=rgba(0, 0, 0, 0.9)]
ChatGPT 问世的这半年,我们目睹了许多由它掀起的变革和争议,见证了越来越多大模型的崛起,同时推测着未来的发展趋势……但万万没想到,这股名为 ChatGPT 的风,还能吹到 30 年前的操作系统中!
近来,一位开发者 @dialupdotnet 掏出了他 30 年前——即 1993 年入手的“古董电脑” Gateway 4DX2-66,并表示:“我不想让我 1993 年的 Gateway 4DX2-66 被排除在 AI 革命之外,所以我基于 OpenAI API,为 Windows 3.1 建立了一个 AI 助手,名为 WinGPT。”
也就是说,WinGPT 能让 30 年前推出的 Windows 3.1 也用上 ChatGPT!

这是怎么做到的?

诞生于 1992 年的 Windows 3.1,是微软在 31 年前发布的操作系统,如今早已被时代淘汰并遗忘,因而想要让 Windows 3.1 接入 ChatGPT,在 30 年前的电脑上实现和 AI 聊天的功能,听起来就像是“天方夜谭”——所以,@dialupdotnet 究竟是如何做到的?
根据 @dialupdotnet 介绍,WinGPT 是用 C 语言编写的,使用标准的 Windows API,此外:“我用 Open Watcom v2 作为编译器(Open Watcom v2 可以在从 Windows 3.1 开始的任何 16 位或 32 位版本的 Windows 上运行),非常方便,因为它甚至支持从 Windows 11 交叉编译到 16 位 Windows。”
值得一提的是,WinGPT 还使用 2018 年发布的加密标准 TLS 1.3 来原生连接到 OpenAI API 服务器,因此不需要用具有现代操作系统的代理机器来建立和维护通信。不过 @dialupdotnet 也坦诚道:“这种实现方法并不安全。”

“艰难”地构建 UI
作为一名如今生活在 2023 年的开发者,@dialupdotnet 早已习惯用 Delphi 来构建像 Windle 这样的 Windows 应用程序,因此猛然间只能用内置的 Windows API 时,他深感不便:“我很惊讶 Windows 3.1 的 UI 构建功能竟会如此原始。”
为此,@dialupdotnet 直接用 C 语言构建了大部分 UI,即每个 UI 组件都必须用代码手动构建,更要手动调整逻辑大小,以确保每个组件在窗口被调整时都能保持其适当的大小。
这还不是最难的。当 @dialupdotnet 试图弄清如何在 WinGPT 中添加状态栏时,他发现 Windows 3.1 上可供程序使用的标准控件集也非常之有限:“除了按钮、复选框、单选按钮、编辑框,另外一些你可能需要的其他控件,包括那些在操作系统本身中使用的控件,都是不可用的。”
例如,明明状态栏在 Windows 3.1 中随处出现,文件管理器和控制面板中都有,但微软并未将其作为可用控件提供给开发者。直到 Windows 95,微软才将这些控件与进度条、工具条和树形视图等其他一些有用控件,广泛地提供给应用开发人员。
对于这个问题,@dialupdotnet 问了 ChatGPT 如何在 Windows 3.1 程序中添加状态栏,但它的回答是一个只存在于 Windows 后期版本中的头文件。就算 @dialupdotnet 继续追问,ChatGPT 也只是“编造”出了一个不存在的 UI 库的名字。
好在最后状态栏的问题,@dialupdotnet 还是自己想办法解决了:Philip J. Erdelsky 有一个 1997 年的状态栏实现,并且代码是开源的,@dialupdotnet 对其进行了修改,使其看起来更贴近 Windows 3.1 应用中的状态栏。
在构建 WinGPT 的 UI 过程中,还有一个有趣的点:在 Borland 图像编辑器中设计图标,它实际上是微软 Paint 的一个克隆,只不过恰好可以制作 ICO 文件。通过 Borland 图像编辑器,@dialupdotnet 共设计了两种规格的图标:32x32 的,该规格图标才能在 Windows 3.1 的程序管理器和任务切换器中显示;16x16 的,用于在后来的 Windows 版本上显示。

WinGPT 有一定限制
一些准备就绪后,WinGPT 就创建完成了。不过毕竟 @dialupdotnet 的“古董电脑” Gateway 4DX2-66 购于 30 年前,尽管 WinGPT 能在 Windows 3.1 上运行,电脑内存也相当有限。
“我试图减少 WinGPT 所需的内存,特别是在发送和接收 OpenAI API 的查询和响应时。”但 @dialupdotnet 指出现代 API 的 JSON 响应在大小上并没有特别优化,OpenAI API 也不例外:“我已经要求模型尽量简短,以使响应尽可能的少,我还选择在 API 调用中不发送前一轮的文本。但这也就意味着,聊天机器人无法使用先前的对话背景。”
简单来说:由于内存支持有限,WinGPT 只能接收简短的回复,聊天内容也无法联系上下文。
尽管如此,对此感兴趣的网友也可以像 @dialupdotnet 一样,翻出家中蒙尘已久的 Windows 3.1 电脑,前往 https://www.dialup.net/ 网站下载 WinGPT,尝试一场跨越 30 年的 AI 对话。
需要注意的是,虽然 WinGPT 可以在 Windows 3.1 之后的任何 16 位或 32 位版本的 Windows 上运行,但它需要通过 Winsock 实现,也不支持 64 位版本的 Windows。此外,用户还需要输入自己的 OpenAI API 密钥才能运行 WinGPT。
参考链接:
https://www.dialup.net/wingpt/
https://www.theregister.com/2023/06/27/retro_chatgpt_for_windows/







欢迎光临 谷动谷力 (http://bbs.sunsili.com/) Powered by Discuz! X3.2