有人在 48MB 内存的诺基亚 110 上跑起了一个 AI Agent

Hacker News 上这两天有个帖子挺对我胃口:一个叫 anupray 的开发者,把 AI Agent 塞进了诺基亚 110。不是那种只给手机起个炫酷名字的演示,是真把 DeepSeek 的模型接进了这台只有 48MB 内存的功能机里,还跑了几个自动化动作。帖子 30 分,14 条评论,评论区没怎么吵起来,反而都在问「你是怎么 reverse 出来的」。

动机部分可能是整个事情最私人也最真实的地方。他买这台机器本来是为了减少屏幕时间,想用一台「干不了什么坏事的手机」把自己从无休止的刷屏里捞出来。结果淘着淘着,顺手起了个念头:能不能往里头塞个 AI。这操作我太熟,程序员的反向自律——本想远离屏幕,最后却开始折腾屏幕旁边的硬件。

动手第一步就没顺利。他试着装 Android,直接失败了,因为这台机器只有 48MB RAM,Android 根本跑不起来。于是转去 reverse 固件。这一步能成立,靠的是诺基亚 110 的固件是用 C 写的——注意,不是早年诺基亚那种跑 J2ME/Java 的老一代。他把固件抽出来,研究内置应用是怎么调用屏幕、键盘、网络这些底层功能的。

有个细节我印象最深。他先写了个很小的 C 应用,按下任意键,它会在计算器里显示一个「PDP」。别小看这一小步,能在人家的计算器里塞进自己的代码,就证明你已经撬开了这台机器的执行入口。之后他在计算器的代码上继续叠加功能,越加越多,最后把它做成一个能承载基本应用逻辑的壳。

卡住他最久的难点在这。DeepSeek 的 API 调用能发出去了,问题能问了,但 API 的响应他一开始抓不到。原因很直接——响应塞不进这个小内存,答案被存在某个缓冲区里,而这个缓冲区的位置很难定位。他说这是整个 reverse 工程里最棘手的一块。等把这啃下来,才在后面接了个小型的自定义 Agent:让 DeepSeek 的 API 返回 JSON,再用这段 JSON 去调用诺基亚的原生功能,或者直接回答问题。

这个 Agent 其实是个很朴素的循环——问一句、调用 API、拿回 JSON、解析、执行对应的原生动作。跟你在云端搭的 Agent 没什么本质区别,只不过全部挤在 48MB 的机器里,连 buffer 都要按字节数着用。评论区有人问「这里面的 AI 到底在哪」,他回答得很老实:问答和工具调用是 AI Agent 干的,核心就是把自然语言转成 DeepSeek 返回的 JSON,再用这份 JSON 去驱动手机的原生能力。

这个项目最诚实的部分在最后。有人问能不能给这代诺基亚加自定义应用,作者承认固件确实可以改、应用也确实能塞进去,但按他目前的进度,一旦重启,改动就会被重置。也就是说,整个 reverse 的成果目前还是「能演示、不能持久」的状态。他没吹「我移植成功了」,只说了句「感谢」,然后继续在评论区里回问题、回「thanks」。

我对这种帖子向来有种好感,因为它把 AI 圈里最常见的两种叙事都戳破了一点。一边是「Agent 能干什么」被吹到天花乱坠,一边是「老硬件已死」被说得很笃定。而这里就是一个普通开发者,用一台 48MB 的旧手机,把「Agent 就是一个 JSON 循环」这件事做得明明白白——它没多神秘,就是一个把模型返回翻译成原生动作的简单回路,难的是让这个回路在几乎没有内存的地方跑通。

这件事也顺带解释了为什么当年 J2ME 时代手机能装 Java 应用,现在反而啥都不能装:这代固件是 C 写的,生态和工具链都变了。而正是这种「封闭」,才逼出这种把计算器改成应用入口的野路子。

代码放在 GitHub 上(github.com/anupray95/AI-Agent-on-a-NOKIA),想看 reverse 过程和这个小 Agent 怎么写的,可以直接去翻。这个「跑在诺基亚上的 Agent」目前还带着重启即失效的硬伤,属于演示性质的东西,真指望它干活还早。但看着有人在这种硬件上较真地啃缓冲区和固件,而不是躺在 4090 前面等 Agent 自己把活干完,还是挺提气的。

相关链接