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

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

如果撇开科技大厂的业务线不谈,我们还可以用+ChatGPT、GPT-4来干什么?除了逗趣、生成代码、聊天之外,这届网友已经尝试雇佣了+GPT-4+++当老板,开启从零的创业之旅……。

varcid=”1510440″.toString();varczPay=localStorage.getItem(‘czpay’);if(czPay!=null){if(czPay.indexOf(cid)!=-1){varpids=czPay.split(‘,’)for(leti=0;i声明:本文来自于微信公众号CSDN(ID:CSDNnews)),编译|苏宓,授权金钥匙转载发布。

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

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

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

应用程序的屏幕截图定目标硬件Dos是很多老程序员的青春记忆。

之所以选择Dos平台开发,YeoKhengMeng表示,“2019年,我曾为Windows3.1创建了一个Slack客户端(https://yeokhengmeng.com/2019/12/building-a-new-win-3-1-app-in-2019-part-1-slack-client/)。

这次我想尝试一些不同的东西,也想要开启为更旧的平台开发的挑战。

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

在硬件选择上,YeoKhengMeng使用的MS-DOS电脑是1984年的IBM5155便携式电脑,它拥有Intel80884.77MhzCPU、640KB常规内存(使用升级套件)、CGAISA图形、NE2000兼容的ISA以太网适配器、XT-IDEISA驱动器控制器和MS-DOS6.22系统等配置。

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

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

不过,16位DOS程序的问题是,现代64位版本的Windows默认不能执行它们。

在开发过程中,Yeo仍然需要一种方法来测试编译后的二进制文件。

虽然把二进制文件传送到IBMDOSPC上是有可能的,但这会大大增加开发过程中的复杂性。

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

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

完整的VM配置信息详见:https://github.com/yeokm1/retro-configs/tree/master/vms/vbox-dos622Yeo把它设置成与主机在一个桥接网络上,这样两者之间就可以很容易地进行通信,而且虚拟机可以访问Yeo个人的互联网连接。

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

代码为:python3-mhttp.server8000在虚拟机上,Yeo使用MTCP的一个程序来下载二进制文件进行测试:htget-odoschgpt.exehttps://X.X.X.X:8000/doschgpt.exe编码正如文章伊始所述,与现代Windows/Mac/Linux相比,MS-DOS平台的编码提出了一些额外的挑战。

最大的问题是网络API,因为DOS本身并不附带这些API。

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

应用架构为了在IBMPC上处理网络问题,Yeo也穿梭于多个层级之间。

在做了一些研究之后,Yeo使用了1983年发明的“PacketDriverAPI”标准。

如果要使用低级别的PacketDriverAPI,网卡制造商通常会发布一个实现该API的驱动程序。

然后,应用程序开发人员使用该API与网卡通信。

最初,Yeo认为要掌握这个低级别的API是一个巨大的挑战,但幸运的是,有一个现有的开源网络库可以帮助完成这个任务。

这个库是由MichaelB.Brutman编写的MTCP(https://brutmanlabs.org/mTCP/)。

MTCP库必须被集成到应用程序中。

然后,它将与制造商提供的数据包驱动程序进行通信,该驱动程序作为一个常驻程序(TSR)运行。

TSR在后台保持休眠状态,直到被一个应用程序调用。

然后,数据包驱动程序直接与网卡进行通信。

不过,Yeo没有找到可以安装在现代64位Windows操作系统上的数据包驱动程序。

因此,即使16位DOS二进制文件可以使用winevdm等工具执行,它也不会连接到网络,所以这也是为什么不直接用第三方解决方案的原因。

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

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

为驱动较低的网络层,这组函数必须定期被调用:PACKET_PROCESS_SINGLE;Arp::driveArp();Tcp::drivePackets();MTCP提供的原始套接字API,具有基本的send()和recv()函数,足以让人使用。

ChatGPTAPI不久之前,OpenAI宣布开放API。

在这里,Yeo只选择了ChatCompletionAPI(https://platform.openai.com/docs/api-reference/making-requests)。

官方也提供了一个很好的使用示例供参考:curlhttps://api.openai.com/v1/chat/completions-H"Content-Type:application/json"-H"Authorization:Bearersk-XXX"-d'{"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"WhatisMS-DOS?"}],"temperature":0.7}'使用这个API,Yeo将需要构建整个POST请求。

与现代开发平台不同,这里没有可以使用的辅助函数,所以Yeo选择用C语言手动构建整个POST请求,如下所示:#defineAPI_CHAT_COMPLETION"POST/v1/chat/completionsHTTP/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"#defineAPI_BODY"{\"model\":\"%s\",\"messages\":[{\"role\":\"user\",\"content\":\"%s\"}],\"temperature\":%.1f}"JSON解析ChatGPTAPI将返回以下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(MicrosoftDiskOperatingSystem)isacommand-lineoperatingsystem….."},"finish_reason":"stop","index":0}]}在这个过程中,Yeo遇到了一个重大障碍:ChatGPTAPI需要加密的HTTPS连接。

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

Yeo表示,由于DOS应用程序的单线程特性,向控制台读取和写入输入带来了另一个挑战。

为此,他使用MTCP页面(https://brutmanlabs.org/Adventures_In_Code/Adventures_In_Code.html)和在线示例(https://jmagic.tistory.com/982)作为参考,设计了一种无需暂停程序即可检查和接收按键的方法:intcurrentMessagePos=0;char*messageToSend=(char*)calloc(SIZE_MESSAGE_TO_SEND,sizeof(char));while(true){if(_bios_keybrd(_KEYBRD_READY)){charcharacter=_bios_keybrd(_KEYBRD_READ);…messageToSend[currentMessagePos]=character;currentMessagePos++;printf("%c",character);fflush(stdout);}}_bios_keybrd是一个通向INT16hBIOS键盘中断的通道。

如果检测到一个按键,该按键将被存储到一个本地缓冲区并打印到控制台。

现在Yeo可以在不暂停程序的情况下检查和接收按键。

最后最终,这款程序的运行的效果,远超Yeo的预期。

他表示,“编写这个聊天客户端是一种有趣的体验。

让编译器能够在现代Windows操作系统上运行肯定会让事情变得更容易。

事实上,这一次比我以前做的Windows3.1Slack应用程序更容易。

考虑到这是我第一次在DOS平台上编写代码,我对这样的旧机器的性能印象深刻。

经历了这一切,我以后肯定会写更多复古软件。

”那么要问ChatGPT是否能够直接解决自己在旧的平台上运行的问题,其回答道:请记住,创建DOSChatGPT客户端可能具有挑战性,因为DOS是一个过时的操作系统,可能没有开发现代应用程序所需的工具和资源。

不过,人类工程师还是用实现了ChatGPT感觉不可能的事情。

反过来看,或许只需一点创造力,人工智能语言模型的最新技术就不必局限于前沿的硬件,它可以打通过去、现在和未来。

来源:https://yeokhengmeng.com/2023/03/building-a-dos-chatgpt-client-in-2023/GitHub地址:https://github.com/yeokm1/doschgpt(举报)。

免责声明:

本站提供的信息来源网络,所有内容及软件的文章仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,如有侵权删除请致信E-mail:kefu1086999@qq.com

热门文章

发表评论

您的电子邮箱地址不会被公开。