创意项目展示 AI 跨平台运行的可能性;学习价值有限但展示了 AI 应用的灵活性
你在用 Windows 3.1 吗?你的朋友们给你发送 ChatGPT 写的笑话和俳句,让你感到被冷落了吗?你希望拥有所有人类知识的总和在你的指尖吗?或者希望你那台可信赖的 386 电脑上有你自己的 AI 聊天机器人吗?
别再渴望了!介绍 WinGPT,一个 Windows 3.1 的 AI 助手。
做研究:WinGPT 会贴心地回答你关于时事和食谱等任何事物的查询。告别尘封的百科全书和 Encarta 吧!
保持娱乐:WinGPT 给你有益的人生建议,给你讲笑话让你开心到心满意足。在你的桌面上拥抱一个多媒体娱乐的世界,只要它是基于文本的!
掌握你的生产力:WinGPT 是你的数字助手,帮助你满怀信心地起草文档和电子表格。
WinGPT 用 C 语言编写,使用标准的 Windows API。我使用 Open Watcom v2 作为编译器,这非常方便,因为它支持从 Windows 11 甚至交叉编译到 16 位 Windows。
WinGPT 本地连接到 OpenAI API 服务器,使用 TLS 1.3,所以它不需要在现代机器上使用代理来终止 TLS。要了解我是如何做到这一点和遇到的一些挑战,请查看《Modern TLS on 16-bit Windows》。(如你在那个页面上看到的,这不是一个安全的实现)。
以前习惯于用 Delphi 构建像 Windle 这样的 Windows 应用,我惊讶地发现如果只使用内置的 Windows API,Windows 3.1 的 UI 构建能力是多么原始。
我用 C 直接构建了大部分 UI,这意味着每个 UI 组件都必须在代码中手动构造。手动调整大小逻辑确保了每个组件在窗口大小改变时都能保持其适当的大小。
特别是,我惊讶地发现 Windows 3.1 中任何程序可用的标准控件集合极其有限。你有一些你期望的控件——按钮、复选框、单选按钮、编辑框——但任何其他你可能需要的控件,包括操作系统本身使用的那些,都不可用。
我在尝试如何为 WinGPT 添加状态栏时遇到了这个问题。状态栏在 Windows 3.1 中随处可见,包括在文件管理器和控制面板中。不幸的是,Microsoft 直到 Windows 95 才向其他应用程序开发者广泛提供这些控件,还有一堆其他有用的控件,如进度条、工具栏和树形视图[2]。
顺便说一下,我问 ChatGPT 我如何能在我的程序中使用状态栏。它给出了一个只存在于 Windows 后续版本中的头文件,当我要求它澄清时,它提出了一个非常诱人的名字(但我相当确定是不存在的)UI 库。幸运的是,Philip J. Erdelsky 仍然有一个来自 1997 年的状态栏实现,非常友善地处于公共领域,我能够使用它!我修改了那个代码,使其更紧密地代表 Microsoft 程序中的状态栏,逐个像素地匹配。
构建 WinGPT 的另一个有趣的部分是在 Borland 的 Image Editor 中设计图标,它实际上只是 Microsoft Paint 的克隆,碰巧制作 ICO 文件。Windows 3.1 中的程序图标是 32x32,显示在程序管理器以及任务切换器中。我还设计了一个 16x16 版本,显示在 Windows 的后续版本中。
Windows 3.1 机器上的内存非常有限,所以我尽力减少 WinGPT 所需的内存量,特别是在向 OpenAI API 发送和接收查询和响应时。现代 API 的 JSON 响应对大小的优化不是特别好,OpenAI 的 API 也不例外。我要求模型简明扼要,以努力保持响应尽可能小。我也选择不在 API 调用中发送之前对话轮次的文本,尽管这意味着机器人将无法使用以前的对话上下文。
WinGPT 在 GNU 通用公共许可证(GPL)v2 下获得许可。
WinGPT 将在 Windows 3.1 之后的任何 16 位或 32 位版本的 Windows 上工作。它需要 Winsock 的实现(在 Windows 3.11 for Workgroups 和 Windows 2000 的库存版本上测试过使用 Microsoft TCP/IP-32 3.11b)。它在 64 位版本的 Windows 上不会工作(但在 Wine 上确实有效——试试看!)
你还需要一个 OpenAI API 密钥来与 OpenAI 交流。打开 WinGPT 后,转到文件 | 选项...来输入你的密钥。
下载:16 位和 32 位 Windows 的二进制文件
源代码:与修改后的 WolfSSL 源代码捆绑(在 watcom16/wingpt)
[1] 这是讽刺。它无法可靠地执行这些操作中的任何一个。不要依赖它。
[2] Raymond Chen 在他的博客上有一篇关于这些 Shell 控件的有趣文章。