程序员再“整活”,在 Dos 上也能玩 ChatGPT 客户端!

a8a46d4c18c6ada260c315778813b023.gif

编译 | 苏宓

出品 | CSDN(ID:CSDNnews)

如果撇开科技大厂的业务线不谈,我们还可以用 ChatGPT、GPT-4 来干什么?除了逗趣、生成代码、聊天之外,这届网友已经尝试雇佣了 GPT-4 当老板,开启从零的创业之旅......当然,还有一些极客、编程爱好者势必不会错过这次机会。

这不,一名新加坡的创客、程序员 Yeo Kheng Meng 再次“整活”,用 ChatGPT 打开时空之门,为 MS-DOS 平台开发了一个 ChatGPT 客户端,让老式的计算机系统也可以运行当前最为先进的大模型,开启一场独特的对话方式。

以下是在 MS-DOS 上运行 ChatGPT 的新体验过程:

同时,作者将相关代码在 GitHub 上开源出来:https://github.com/yeokm1/doschgpt,也希望通过本文为玩转 ChatGPT 的不同方式带来一些借鉴与思考。

de0b4b94e204b4e5fce9f0f8a966832c.png

应用程序的屏幕截图

44b71db0b120a698aeaa264d54ad65fb.png

定目标硬件

Dos 是很多老程序员的青春记忆。之所以选择 Dos 平台开发,Yeo Kheng Meng 表示,“2019 年,我曾为 Windows 3.1 创建了一个 Slack 客户端(https://yeokhengmeng.com/2019/12/building-a-new-win-3-1-app-in-2019-part-1-slack-client/)。这次我想尝试一些不同的东西,也想要开启为更旧的平台开发的挑战。”

值得注意的是,DOS 没有原生联网的能力,而且系统的处理能力也较弱,所以选择它为目标平台,包括编码之类的所有处理任务处理都会有额外的困难和挑战。

在硬件选择上,Yeo Kheng Meng 使用的 MS-DOS 电脑是 1984 年的 IBM 5155 便携式电脑,它拥有 Intel 8088 4.77Mhz CPU、640KB 常规内存(使用升级套件)、CGA ISA 图形、NE2000 兼容的 ISA 以太网适配器、XT-IDE ISA 驱动器控制器和 MS-DOS 6.22 系统等配置。

84ba114ac36a9778d9e6f2c0d238f670.png

“如果我的应用程序可以在这台 IBM 机器上运行,它应该可以在几乎所有其他 DOS 机器上运行”,Yeo Kheng Meng 说道。

daf4c51a6d79692fe0980c4c2f15a511.png

开干

编译器

为了创建客户端,Yeo 使用了 Open Watcom C/C++,这是一种在 Windows 11 上运行的现代编译器,可以应用在 16 位 DOS 平台上。

不过,16 位 DOS 程序的问题是,现代 64 位版本的 Windows 默认不能执行它们。在开发过程中,Yeo 仍然需要一种方法来测试编译后的二进制文件。虽然把二进制文件传送到 IBM DOS PC 上是有可能的,但这会大大增加开发过程中的复杂性。

测试环境搭建

从技术上来讲,已有现成的第三方解决方案,如 winevdm(https://github.com/otya128/winevdm),但它在这种使用情况下是行不通的,后面会解释。

因此,出于测试目的,Yeo 通过搜索,找到了运行 DOS 6.22 的 VirtualBox 虚拟机来简化开发过程,然后将编译后的二进制文件传输到目标 IBM DOS PC 上进行测试。

ffc052a72ae1ad99a2e6c57e3bb1d643.png

完整的 VM 配置信息详见:https://github.com/yeokm1/retro-configs/tree/master/vms/vbox-dos622

Yeo 把它设置成与主机在一个桥接网络上,这样两者之间就可以很容易地进行通信,而且虚拟机可以访问 Yeo 个人的互联网连接。

在带有已编译好的二进制文件的主机上,Yeo 用 Python 启动了一个简单的网络服务器,为二进制文件服务。代码为:

python3 -m http.server 8000

在虚拟机上,Yeo 使用 MTCP 的一个程序来下载二进制文件进行测试:

htget -o doschgpt.exe http://X.X.X.X:8000/doschgpt.exe

ea09b3e262b24a7f6cd53427cd0f8db2.png

编码

正如文章伊始所述,与现代 Windows/Mac/Linux 相比,MS-DOS 平台的编码提出了一些额外的挑战。最大的问题是网络 API,因为 DOS 本身并不附带这些 API。

然而,具有 TCP/IP 网络功能的 DOS 程序以前已经编写过,所以这绝对是可能的。

应用架构

为了在 IBM PC 上处理网络问题,Yeo 也穿梭于多个层级之间。在做了一些研究之后,Yeo 使用了 1983 年发明的“ Packet Driver API ”标准。

如果要使用低级别的 Packet Driver API,网卡制造商通常会发布一个实现该 API 的驱动程序。然后,应用程序开发人员使用该 API 与网卡通信。

最初,Yeo 认为要掌握这个低级别的 API 是一个巨大的挑战,但幸运的是,有一个现有的开源网络库可以帮助完成这个任务。这个库是由 Michael B. Brutman 编写的 MTCP(http://brutmanlabs.org/mTCP/)。

544606dd4456e0d385f36169761932ce.png

MTCP 库必须被集成到应用程序中。然后,它将与制造商提供的数据包驱动程序进行通信,该驱动程序作为一个常驻程序(TSR)运行。TSR 在后台保持休眠状态,直到被一个应用程序调用。然后,数据包驱动程序直接与网卡进行通信。

不过,Yeo 没有找到可以安装在现代 64 位 Windows 操作系统上的数据包驱动程序。因此,即使 16 位 DOS 二进制文件可以使用 winevdm 等工具执行,它也不会连接到网络,所以这也是为什么不直接用第三方解决方案的原因。

另一方面,对于较旧的网卡,比如在 IBM5155 中使用的 NE2000 兼容网卡,数据包驱动程序相对常见。

开始联网

在尝试开始联网的过程中,要注意在 DOS 中没有多线程的概念,所以没有任何东西在后台运行来为服务于网络堆栈,所以,网络堆栈主要由应用程序控制,因此这种服务也必须在内部完成。

为驱动较低的网络层,这组函数必须定期被调用:

PACKET_PROCESS_SINGLE;
Arp::driveArp();
Tcp::drivePackets();

MTCP 提供的原始套接字 API,具有基本的 send() 和 recv() 函数,足以让人使用。

ChatGPT API

不久之前,OpenAI 宣布开放 API。在这里,Yeo 只选择了 Chat Completion API(https://platform.openai.com/docs/api-reference/making-requests)。

官方也提供了一个很好的使用示例供参考:

curl https://api.openai.com/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer sk-XXX" -d '{ "model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": "What is MS-DOS?"}], "temperature": 0.7 }'

使用这个 API,Yeo 将需要构建整个 POST 请求。与现代开发平台不同,这里没有可以使用的辅助函数,所以 Yeo 选择用 C 语言手动构建整个 POST 请求,如下所示:

#define API_CHAT_COMPLETION "POST /v1/chat/completions HTTP/1.1\r\nContent-Type: application/json\r\nAuthorization: Bearer %s\r\nHost: api.openai.com\r\nContent-Length: %d\r\nConnection: close\r\n\r\n%s"
#define API_BODY "{ \"model\": \"%s\", \"messages\": [{\"role\": \"user\", \"content\": \"%s\"}], \"temperature\": %.1f }"

JSON 解析

ChatGPT API 将返回以下 JSON 输出:

{"id":"chatcmpl-XXXXX","object":"chat.completion","created":1679326062,"model":"gpt-3.5-turbo-0301","usage":{"prompt_tokens":13,"completion_tokens":114,"total_tokens":127},"choices":[{"message":{"role":"assistant","content":"\n\nMS-DOS (Microsoft Disk Operating System) is a command-line operating system....."},"finish_reason":"stop","index":0}]}

在这个过程中,Yeo 遇到了一个重大障碍:ChatGPT API 需要加密的 HTTPS 连接。由于 MS-DOS 没有本地 HTTPS 库,Yeo 创建了一个 HTTP-to-HTTPS  代理(https://github.com/yeokm1/http-to-https-proxy),可以在现代计算机上运行,并在 MS-DOS 客户端和 ChatGPT 的安全 API 之间转换请求和响应,充当透明的中间人在沟通过程中。

808bd3e39ecbbb16c9380238a0f7b1a0.png

Yeo 表示,由于 DOS 应用程序的单线程特性,向控制台读取和写入输入带来了另一个挑战。为此,他使用 MTCP 页面(http://brutmanlabs.org/Adventures_In_Code/Adventures_In_Code.html)和在线示例(https://jmagic.tistory.com/982)作为参考,设计了一种无需暂停程序即可检查和接收按键的方法:

int currentMessagePos = 0;
char * messageToSend = (char *) calloc (SIZE_MESSAGE_TO_SEND, sizeof(char));while(true){if ( _bios_keybrd(_KEYBRD_READY) ) {char character = _bios_keybrd(_KEYBRD_READ);...messageToSend[currentMessagePos] = character;currentMessagePos++;printf("%c", character);fflush(stdout);}
}

_bios_keybrd 是一个通向 INT 16h BIOS 键盘中断的通道。

如果检测到一个按键,该按键将被存储到一个本地缓冲区并打印到控制台。现在 Yeo 可以在不暂停程序的情况下检查和接收按键。

c583e6bcc50bc67ac81dd582f4005ad8.png

最后

最终,这款程序的运行的效果,远超 Yeo 的预期。他表示,“编写这个聊天客户端是一种有趣的体验。让编译器能够在现代 Windows 操作系统上运行肯定会让事情变得更容易。事实上,这一次比我以前做的 Windows 3.1 Slack 应用程序更容易。考虑到这是我第一次在 DOS 平台上编写代码,我对这样的旧机器的性能印象深刻。经历了这一切,我以后肯定会写更多复古软件。”

那么要问 ChatGPT 是否能够直接解决自己在旧的平台上运行的问题,其回答道:

请记住,创建 DOS ChatGPT 客户端可能具有挑战性,因为 DOS 是一个过时的操作系统,可能没有开发现代应用程序所需的工具和资源。

f3ae8d6b2d3a10437e6ecf5b2a78f907.png

不过,人类工程师还是用实现了 ChatGPT 感觉不可能的事情。反过来看,或许只需一点创造力,人工智能语言模型的最新技术就不必局限于前沿的硬件,它可以打通过去、现在和未来。

来源:

https://yeokhengmeng.com/2023/03/building-a-dos-chatgpt-client-in-2023/

GitHub 地址:https://github.com/yeokm1/doschgpt

 

b10f7d91352d19700fdb766ba8840ae5.gif

☞微软 154 页研究论文刷屏,对 GPT-4 最全测试曝光,称其初次叩开 AGI 的大门!
☞马云现身杭州谈ChatGPT;GPT机器人要来了?OpenAI领投人形机器人公司;马斯克退出OpenAI内幕|极客头条
☞当 ChatGPT 比你更会写代码,程序员还能干什么?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27093.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

50倍效率!600+AI工具、3000+AI提示艺术,《AIGC万能工具包》助你职场效率起飞

众所周知,2023年是AI元年。 以ChatGPT为例,AI能帮你定目标、写文案,列提纲、找数据,甚至还能帮你做到想不到的事情…… 对不同行业的职场人士来说,它绝对是一个省力气,省时间,能大幅度提升工作产…

阿里、百度、值得买齐发声,电商的“AIGC式”进化

配图来自Canva可画 一年一度618要来了,和往年一样折扣力度、明星直播等话题被炒得火热,不同的是今年618的科技属性更强。 究其原因,过去半年AIGC技术被电商平台应用到实际运营中,“AIGC选品”、“虚拟货场”、“智能客服”成为电商…

运营er们,AIGC来了!你们怕不怕?

微软已官宣将ChatGPT整合到Bing搜索和Edge浏览器之中,它能根据聊天的上下文进行互动,真正像人类一样来聊天交流,运营er们甚至能用它完成撰写邮件、视频脚本、文案、翻译、代码等任务! AIGC爆火 不仅可以提高我们工作效率 而且也可…

ChatGPT超级智能体改写人类未来的宇宙大冒险!|小智ai

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨开源AI平台 ChatGPT,这个惊世骇俗的超级智能体,正在以惊人的速度改写着人类的未来,引领我们进入一场前所未有的宇宙大冒险!准备好了吗&#xff1f…

大模型“图纸”已现,火山方舟开工

文丨刘雨琦 编丨王一粟 中国房子盖了2000年,直至汉朝初期,才开始出现“建筑图纸”。 有了图纸后,盖房子便不仅仅依赖于几个“老师傅”,图纸是全盘的指导,避免了曾经多次的推倒重建以及因为力学结构不合理而半途而废…

推荐一个开源数据同步神器,支持多种数据源和预警功能!

DBSyncer是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。 支持上传插件自定义同步转换业务,提供监控全量和增量数据统计图、应用性能预警等。 特点: 组合驱动&#…

Java 17 采用率在一年内增长 430% !

出品 | OSC开源社区(ID:oschina2013) New Relic 最新发布了一份 “2023 年 Java 生态系统状况报告”,旨在提供有关当今 Java 生态系统状态的背景和见解。该报告基于从数百万个提供性能数据的应用程序中收集的数据,对生产中使用最多…

简单的数据库连接与提供前端接口

前言: 本文浅浅讲解一下,使用多种软件共同开发一个java工程。 这是我在windows系统上跑成功的一次设计: 逻辑图如下: 一:所需软件和版本。 idea,maven,jdk,git,jenki…

免费“白嫖” GPT-4 方法 +1, 开发者锐评:跟“偷”有什么区别?

整理 | 郑丽媛、出品 | CSDN(ID:CSDNnews) 前不久,可“白嫖” GPT-4 的 Forefront Chat 吸引了众多关注,导致该网站一度崩溃,也令不少人发出疑问:“GPT-4 这么贵,为什么它能免费让我…

chatgpt赋能python:免费Python软件——学习和开发的首选工具

免费Python软件——学习和开发的首选工具 Python是一门高级编程语言,流行于数据科学、机器学习、自然语言处理等领域。但是,许多初学者和开发者因为高昂的学习和购买成本而退缩。然而,免费的Python软件正在帮助更多人轻松学习和开发Python程…

chatgpt赋能python:免费的Python编程软件:开发者必备工具!

免费的Python编程软件:开发者必备工具! Python是一门广受欢迎的编程语言,它已经成为了很多公司和开发者的首选语言。Python的出现改变了编程的方式,它具有简单、易懂、易读、易写、易拓展等特点,因此成为了很多新手入…

写 bug 速度提升200%!吊爆的 IDEA 使用技巧

来源:blog.xiaohansong.com/idea-live-templates.html 今天分享一篇idea技巧,让我们少写一些重复代码,提高效率~ 背景 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。对于这…

chatgpt赋能Python-python886

Python886:一款优秀的Python IDE 作为一款Python开发的强大IDE,Python886 绝对不会让您失望。Python886 是 Python 编程语言的一个集成开发环境(IDE),支持C、C、Python、PHP、Ruby、Perl等多种编程语言。Python886 具…

IntelliJ IDEA 2023.1 发布:新UI、支持Java 20、简化Git Commit、重新设计 “Run”

出品 | OSC开源社区(ID:oschina2013) IntelliJ IDEA 2023.1 现已发布。此版本包括对新 UI 的改进,根据从用户那里收到的反馈进行了彻底改造。此外还实现了性能增强,从而在打开项目时更快地导入 Maven 和更早地使用 IDE 功能。由于…

npm安装教程

一、使用之前,我们先来掌握3个东西是用来干什么的。 npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包。 vue-cli: 用户生成Vue工程模板。(帮你快…

实用工具 | <01>ChatGPT-4——Cursor(AI代码神器)

目录 一、简单介绍 二、安装教程 三、使用教程 四、总结 一、简单介绍 ChatGPT是一个大型多模态模型,可以接受图像和文本输入,并生成文本输出。GPT-4是基于Transformer的模型,经过训练后可以预测文档中的next token。为了提高准确性和确保G…

分割一切后,Segment Anything又能分辨类别了:Meta/UTAustin提出全新开放类分割模型...

点击上方“AI遇见机器学习”,选择“星标”公众号 第一时间获取价值内容 前几日,Meta 推出了「分割一切」AI 模型 Segment Anything,令网友直呼 CV 不存在了?!而在另一篇被 CVPR 2023 收录的论文中,Meta、UT…

无线电的节日

昨天坐车看东西,司机又拉过了,终于到家了 冥冥之中选择电磁场与无线电这个专业。这个专业就业方向包括射频、雷达和微波。后来跟着师傅选择了射频这条道路。 我老师当年说过你们要学英语,甚至还要学日语和德语,因为先进的创造来自…

Kotlin 集合操作符

集合操作符 集合操作符 一 (首字母 a - f) 这篇文章介绍下 Kotlin 集合中的操作符,本文中 Kotlin 所用版本是 1.8.10 all 判断集合中的所有元素是否满足需求,返回值为 Boolean 例如我们需要判断字符串的长度是否大于4 val songs listOf("一路…

讯飞星火认知大模型成果发布会举行

目录 一、提出通用人工智能七大维度481项评测体系 二、讯飞星火认知大模型三大能力已超ChatGPT 现场语音输入流畅 多维实测燃爆全场 写邮件、做方案、讲故事,讯飞星火大模型到底有多会写? 中文理解十级测试,现场观众:讯飞星火…