我在 DOS 6.22 上跑通了 Kimi AI:一场跨越 40 年的硬核接力

0 阅读5分钟

我在 1981 年的 DOS 上跑通了现代 AI:一场跨越 40 年的硬核接力

13 岁,用一台 13 年前的电脑,跑通了 45 年前的系统和 2026 年的大模型。

大家好,欢迎来到我的开源项目 revive-ai 的技术分享。这个项目的愿景是:让 AI 接入每一个操作系统,不让老设备被 AI 时代抛弃。

前阵子,我刚刚在 Windows 7 上用 Node.js 跑通了 Kimi-Free-API。既然 Win7 能行,那更古老的系统呢?于是,我把目光投向了 1981 年发布的 DOS 系统。

这是一篇长达数天的踩坑记录,包含了虚拟机网络玄学、DOS 640KB 内存限制、以及如何手写协议转换代理绕过老古董软件 Bug 的完整过程。

捕获2.PNG

捕获5.PNG

我的“曲线救国”架构

由于 DOS 系统本身不支持现代 HTTPS 协议和复杂的 JSON 解析,我设计了一套接力的方案:
DOS 里的程序通过 mTCP 协议栈发出请求 -> 经由 QEMU 的虚拟网关 -> 抵达 Windows 宿主机的 Python 代理 -> 代理向 Kimi 官方 API 发起请求 -> 拿到结果后清洗成纯英文字符串 -> 最终返回给 DOS 终端显示。

第一关:模拟器的网络死局

想要在 2026 年运行 DOS,第一选择当然是虚拟机。

1. DOSBox 的重重阻碍
我首先尝试了 DOSBox 0.74-3。网络配置是 pcap 抓包模式,结果无论怎么配置 realnic 编号,DOS 里 NE2000 驱动加载后的 MAC 地址永远是 FF:FF:FF:FF:FF:FF(广播地址),完全无法发包。

切换到 DOSBox-X(SDL2版本),尝试使用它内置的 slirp 用户态网络。MAC 地址确实变了,但 ping 10.0.2.2 永远超时。这是因为 DOSBox-X 的 slirp 实现无法正确响应 ARP 请求。

2. VirtualBox 的致命一击
我转战 VirtualBox,打算直接装个完整的 FreeDOS。结果安装时报错:无法访问 Windows Installer 服务。排查后发现,这台老电脑的系统服务损坏,根本装不上 VirtualBox。

3. 绝杀:QEMU 登场
最后,我换成了纯绿色免安装的 QEMU。QEMU 内置了极其成熟的 slirp 网络,不需要任何抓包权限。

但在挂载虚拟硬盘时又遇到了坑:QEMU 的 vvfat 格式存在 Bug,虽然能读取目录结构,但 mTCP 无法读取文件内容,报错 Config file not found。

解决方案:使用 diskpart 创建真实的 VHD 虚拟磁盘,用 FAT 格式化,将 DOS 程序拷入后再挂载给 QEMU。最终启动命令如下:

qemu-system-i386.exe -m 64 -hda D:\dos-ai-agent\cdisk.vhd -cdrom FD14LIVE.iso -boot d -netdev user,id=n0 -device ne2k_isa,netdev=n0 -display none -vnc 127.0.0.1:0

(注:使用 -vnc 参数实现了全无窗口后台运行,需要查看时用 VNC Viewer 连入即可)

第二关:640KB 内存的诅咒

好不容易网络层打通了,在 DOS 里配置 mTCP 却死活读不到配置文件 MTCP.CFG。

排查后发现,罪魁祸首是 DOS 经典的 640KB 内存限制。FreeDOS LiveCD 启动后,系统环境变量段已经满了。虽然 SET MTCPCFG 命令有输出,但实际上环境变量已经溢出,mTCP 内部的 getenv 拿不到真实的路径。

解决方案:编写批处理文件 .BAT。利用 COMMAND.COM 运行批处理时会重新加载干净环境的特性,绕过环境变量溢出问题:

@ECHO OFF
SET MTCPCFG=C:\NET\MTCP.CFG
HTGET.EXE http://10.0.2.2:8080/ask?q=hello

(就这么短短的几行代码,折磨了我整整 2 个小时)

第三关:老古董客户端的解析灾难

网络通了之后,我试图运行 doschgpt(一个 2009 年编译的 DOS 版 ChatGPT 客户端)。

结果它疯狂报错:App Error: Cannot find content。
这是因为现代大模型的返回包含 Emoji、Markdown、换行符,甚至我通过代理加的颜色控制码。那个 2009 年的 C 语言解析器完全处理不了。

降维打击:手写 Python 清洗代理
既然客户端烂泥扶不上墙,我决定在 Windows 宿主机的代理层做手脚。

我用 Python 写了一个极简代理,拦截 DOS 发来的 HTTP 请求,自己拼接 JSON 发给 Kimi,然后把 Kimi 的回答进行“ASCII 净化”。过滤掉所有非 128 个 ASCII 字符,去掉所有特殊标点,只给 DOS 返回最纯净的英文字符串。

text = r.json()["choices"][0]["message"]["content"]

暴力过滤:只保留可打印的 ASCII 字符(32-126)

clean_text = "".join([c for c in text if 32 <= ord(c) <= 126])
out = clean_text.encode("utf-8")

当 DOS 屏幕上最终刷出 Server return code: 200 OK 和干净的 hello! Kimi 时,一切努力都值了。

捕获4.PNG

关于开源项目 revive-ai

这次尝试让我深刻意识到,技术演进得太快,很多老设备被遗忘在了角落。但它们依然有发光发热的价值,只是需要有人去搭一座桥。

本项目已经全部开源,包含所有的代码、补丁、启动脚本和踩坑记录:
👉 github.com/doujiaozh/r…

目前我们已经复活了:

  • Windows 7(Node.js + 3个底层补丁,跑通现代 API)
  • DOS 6.22 / FreeDOS(QEMU + mTCP + Python 代理)

接下来的目标:挑战 Windows XP 环境、挑战早期的 Android 系统。

如果你也对“老设备 AI 化”感兴趣,欢迎在 GitHub 点个 Star,或者提 PR 分享你的方案!我们下个系统见!