网友拿果蝇大脑干了什么?马里奥、我的世界、DOOM……9 个项目逐个拆,复测了 2 个
网友拿果蝇大脑干了什么?马里奥、我的世界、DOOM……9 个项目逐个拆,复测了 2 个
2026 年 3 月 Eon Systems 宣布「上传了一只果蝇」之后,果蝇大脑成了开发者的新玩具。光是 9 月份,GitHub 上就冒出了一串项目:让果蝇大脑打 DOOM、玩马里奥、玩 Flappy Bird、在《我的世界》里当 NPC、跑在鸿蒙手机上、住在 Mac 桌面上,甚至还有人拿它做股票交易信号。
标题一个比一个唬人。我把 9 个项目的 README 和关键代码逐个读完,对每个都问三个问题:
- 用了多少个神经元? 全脑 13.9 万 / 16.6 万,还是从里面抽一小块,还是自己搭的几十个?
- 动作到底是谁决定的? 连接组本身、训练出来的读出层、状态机,还是手调的权重?
- 有没有对照? 把某条通路切断,行为会不会跟着变?
然后挑了两个能在 Mac 上跑的项目亲手复测。先说结论:
- 这批项目里最「诚实」的,恰恰是最火的那几个。 DOOMFLY(417 星)在 README 第一段就写明「目前没有证明学会了生存」,DesktopFly(1,063 星)单列了一节「哪些是真的」。
- 「用了全脑」不等于「全脑在做决定」。 好几个项目全量加载了十几万个神经元,但真正决定动作的,是一个训练出来的读出层,或者一个状态机。
- 21 个神经元、手调权重的项目也能通关马里奥,但很脆弱。 我把它的所有权重整体缩到 0.8 倍,果蝇一步也不走了;放大到 1.3 倍,跑到一半摔死。
9 个项目一览
星数截至 2026-10-03。
| 项目 | 干了什么 | 用的数据 | 神经元规模 | 动作由谁决定 |
|---|---|---|---|---|
| DOOMFLY(417★) | 果蝇大脑打 DOOM | MaleCNS v1.0 | 全量 166,700 | 固定的神经元→按键映射,外加实验性多巴胺可塑性 |
| DesktopFly(1,063★) | Mac 桌面上的 3D 果蝇宠物 | FlyWire + MaleCNS | 抽取 668 + 1,045 | 子回路 LIF + 建模的身体与状态 |
| fly-flappy(28★) | 果蝇大脑玩 Flappy Bird | MaleCNS v1.0 | 全量 166,700 | 训练出来的逻辑回归读出层 + 安全护栏 |
| FlyCraft | 《我的世界》里的战斗 NPC | MaleCNS | 子图约 8,000 节点 | 子图动力学 → 打 / 逃 / 游荡 |
| 赛博果蝇 HarmonyOS | 鸿蒙手机上的 3D 果蝇生态 | MaleCNS v1.0 | 全量 165,122 | 状态机为主,连接组做六路调制 |
| Fly Mario | 果蝇回路自动通关马里奥 | 只借用了细胞名和 ID | 21 个 | 手调权重的 LIF 小回路 |
| @chnak/fly | TypeScript 训练库,README 里提到做交易信号 | MaleCNS | README 未说清 | 逻辑回归读出层 |
| 果蝇的每一天(LingChat PR) | Rust 写的 3D 果蝇生活小游戏 | FlyWire v783 | 全量 139,255 | LIF + 奖惩可塑性 + 感觉运动映射 |
| fly-brain(Rojas)(65★) | 两只相同连接组的果蝇「长出个性」 | FlyWire v783 | 全量 138,639 | LIF + 赫布可塑性 + NeuroMechFly 身体 |
下面挑最有意思的几个细说。
DOOMFLY:最认真,也最坦白
这是目前「果蝇大脑玩游戏」里工程量最大的一个。每一帧 DOOM 画面被转成 3,335 个感光细胞的亮度输入和 811 个颜色输入,灌进 MaleCNS 的 166,700 个神经元、25,582,938 条连接,不裁剪任何回路。果蝇受伤时,会给两个多巴胺神经元一个 200 毫秒的「惩罚」信号,驱动蘑菇体里 4,184 条连接的可塑性变化——也就是说,它在尝试真的「学」。
但作者在 README 第一段就写了:
Status: live experimental training, not demonstrated learned survival.
(状态:实验性在线训练中,没有证明学会了生存。)
当前版本没有通过视觉、条件反射和生存三项验证。转向和开火是靠两个指定的下行神经元(DNp20、DNpe017)读出来的,作者也明说这是「工程上的控制器分配,不是已确认的自然运动功能」。仓库里保留了所有失败的实验结果。
这种写法值得所有同类项目学习:权重在变、单局活得更久,都不等于学会了。
DesktopFly:最火的那个,我编译跑了一遍
一只住在 macOS 桌面上的 3D 果蝇,会在窗口上爬、梳理、睡觉,鼠标快速靠近它就会起飞逃跑。旁边可以打开一个「大脑窗口」,23,210 个真实神经元的胞体位置在实时闪烁。
它没有跑全脑,而是从 FlyWire 里抽了 668 个神经元:逼近检测(LC4、LPLC2)、巨纤维(逃跑指令)、转向、前进、后退、梳理,加上它们最强的 330 个连接伙伴,共 18,968 条真实连接。9 月的更新又从 MaleCNS 抽了 1,045 个神经元的腿部运动回路,包括 220 个真实的腿部运动神经元,让模拟出的运动神经元放电去驱动关节。
我在 Mac mini 上克隆、编译(14 秒),跑了它自带的三套测试:

全部通过。几个数字值得一看:
- 突然逼近的刺激出现后 4 毫秒,巨纤维就放电了;静息 4 秒,巨纤维一次都不放。
- 静息时全回路平均放电 5.21 Hz——说明它加了背景活动。纯连接组 LIF 模型不给输入是完全静默的(我们在另一篇实测里验证过),要让果蝇「活着」,总得往里加点东西。
- 它自带了消融测试:切断下行到运动的突触,运动神经元放电归零;损毁运动神经元,身体就不动了。
作者自己的定位很清楚:飞行、扇翅、梳理和睡眠仍然是建模的动画和状态规则,「这不是完整的中枢神经系统,也不是经过生物学校准的行走模拟」。
Fly Mario:21 个神经元,我拔了它的线
这个项目的 README 开门见山:「不是 13.8 万神经元的全脑仿真」。它只用了 21 个神经元组成的两跳小回路,细胞名字(DNp09 前进、DNp01 巨纤维起跳)和部分 FlyWire ID 来自公开数据,但突触权重是为了让这一关能通而手调的。
它自带一个「必须通关」的无头测试,9 个用例 31 毫秒全过。我在它的测试框架里加了两个实验:

| 实验 | 结果 |
|---|---|
| 原版 | 13 秒通关,巨纤维触发跳跃 239 次 |
| 切断巨纤维(DNp01)的全部输入 | 1.7 秒掉进第一个坑,跳跃 0 次 |
| 全部权重 × 0.5 / 0.7 / 0.8 | 45 秒原地不动 |
| 全部权重 × 0.9 ~ × 1.2 | 通关 |
| 全部权重 × 1.3 / 1.5 / 2.0 | 跑到 x=2213 摔死 |
第一行说明巨纤维这条「逃跑起跳」通路在它的设计里确实是必需的。第二组说明,手调的权重只在 ±10%~20% 的窄窗口里有效——这正是「调出来能用」和「从接线图里长出来」的区别。作者没有掩饰这一点,这是好事;但看演示视频的人很容易忽略。
用了全脑,不等于全脑在做决定
fly-flappy 和赛博果蝇都全量加载了 MaleCNS 的十几万个神经元,这在工程上很了不起:前者在浏览器的 Web Worker 里跑,后者在手机上跑,完整模式三份连接组约占 620 MB 内存。
但读下去会发现,决定动作的是别的东西:
- fly-flappy:在下行神经元的放电上训练一个逻辑回归读出层来判断「该不该拍翅膀」,在线模式约 1,000 个样本后收敛;另外还有两条硬规则——「在管道间隙上方禁止拍翅」「快速上升时禁止二次拍翅」。所以它飞得好,很大一部分功劳在读出层和护栏。作者也写了:「感官编码和运动解码是人工设计的接口,并不表示真实果蝇能够理解 Flappy Bird。」
- 赛博果蝇:行为的骨架是 13 个状态的状态机加上饥饿、恐惧、好奇、疲劳四种内驱力,连接组的放电只做「六路调制」(步速、惊吓、理毛、觅食意图、左右转向、振翅意图)。作者称之为「混合驱动」,并写明「本项目不宣称果蝇在思考」。
这不是批评,而是看这类项目的正确姿势:先找到「动作是谁决定的」那一层。
其他几个
- FlyCraft:从 MaleCNS 抽了约 8,000 个节点的子图,在《我的世界》里驱动一个会追击、近战、低血逃跑的 NPC,自带评测(总分 0.977、低血逃跑 8/8)。README 把「拔线对照:完整脑 vs 敲掉通路」列为下一步。
- 果蝇的每一天:给开源项目 LingChat 提的一个 PR,用 Rust 跑 FlyWire v783 全脑,单步约 0.3 毫秒。这个 PR 已关闭,没有合并。
- Rojas 的 fly-brain:两只连接组完全相同的果蝇,各自经历 24 小时后,逃跑率分化成 81% 和 47%,作者称之为「涌现的个体性」。注意它发表在 Zenodo 上,是预印本,没有经过同行评审。
- @chnak/fly:一个 TypeScript 训练库,README 最后一章写的是「应用方向:自动交易」。我不建议这么做:读出层就是一个逻辑回归,果蝇的视觉神经元在这里只是一个固定的非线性特征变换,没有任何理由认为它比普通特征工程更懂行情。作者自己也写了「回测必须」。
顺带说一句:搜「果蝇乐园」会搜到一个叫 fly-paradise 的 Windows 桌面程序,那是个养果蝇的桌面小游戏(还有一个「造福版」专门装到朋友电脑上整蛊),和果蝇大脑没有关系。
为什么大家写的「突触数」能差 20 倍
读这些 README 时最让人困惑的,是数字对不上。光说 FlyWire 那一只雌果蝇的大脑,就能看到 248 万、269 万、500 万、1,509 万、5,450 万好几种说法。我拿公开数据逐个对了一遍:
| 说法 | 实际是什么 |
|---|---|
| 5,450 万个突触 | ✅ 突触总数。Nature 论文的数字,把连接表的突触数一列加起来是 54,492,922 |
| 1,509 万 | 有连接的神经元对数(15,091,983),每对之间可能有 1 个到 2,405 个突触 |
| 约 269 万 | 至少 5 个突触的神经元对数(2,700,513)。FlyWire 的 Codex 默认用这个门槛,过滤掉自动检测的误报 |
| 约 500 万 | 出自 Eon 的 fly-brain 仓库 README(「~5M synapses」),但同一仓库的数据文件是 1,509 万行、5,449 万个突触。这个数字被好几个项目照抄,包括 Fly Mario 的源码注释,也包括本站之前的一篇文章(已更正) |
| 248 万 | 果蝇的每一天 PR 里的数字,口径没有说明,可能是另一种过滤 |
MaleCNS 是另一个数据集:一只雄性果蝇的完整中枢神经系统,包括大脑和腹神经索(相当于脊髓)。项目们写的规模是约 16.6 万个神经元、2,500 多万条连接。它在 2026 年 6 月发布 v1.0,9 月在 Cell 上发表论文,由 Janelia、剑桥大学、MRC 分子生物学实验室和 Google Research 合作完成。
为什么 9 月以后的新项目几乎都换成了 MaleCNS?两个原因:
- 它有腹神经索。 腿和翅膀的运动神经元都在那里。FlyWire 只有脑,所以之前所有项目都得在「下行神经元」和「腿」之间手写一层接口;有了 MaleCNS,DesktopFly 才能让真实的运动神经元去驱动关节。
- 许可证更宽松。 MaleCNS 是 CC BY 4.0,可以商用;FlyWire 是 CC BY-NC 4.0,不能商用。
怎么判断一个「果蝇大脑」项目
下次再看到「我把果蝇大脑接进了 XX」,可以问这三个问题:
| 问题 | 好的回答 | 要警惕的回答 |
|---|---|---|
| 用了多少神经元? | 明确写出是全脑还是子回路,以及怎么抽的 | 只说「用了果蝇大脑」 |
| 动作是谁决定的? | 说清楚读出层、状态机、手调参数各占多少 | 「完全由连接组驱动」但没有解释接口 |
| 有没有对照? | 切断某条通路,行为跟着变(DesktopFly、DOOMFLY 都有) | 只有一段演示视频 |
这批项目里,大部分在 README 里都诚实地回答了这些问题,只是标题和演示视频不会告诉你。
想自己动手?官方的全脑模型在普通电脑上就能跑,步骤见果蝇大脑怎么下载、在自己电脑上跑;想先玩,可以去数字果蝇实验室在浏览器里开一只物理仿真的果蝇。
常见问题
这些项目里的果蝇真的会「玩游戏」吗?
不会,至少目前没有任何一个项目证明了这一点。它们做的是:把游戏画面翻译成果蝇感觉神经元的输入,再从下行神经元的放电里读出按键。翻译和读出这两层都是人设计的,有的还经过训练。DOOMFLY 的作者明确写了没有证明学会生存,fly-flappy 的作者写了「不表示真实果蝇能够理解 Flappy Bird」。
哪个项目最适合入门?
想看效果:DesktopFly,Mac 上克隆后一条命令编译,十几秒就能看到桌面上的果蝇。想理解原理:Fly Mario,只有 21 个神经元,代码短,改权重就能看到行为变化。想做研究:从官方的 Shiu 2024 全脑模型开始。
能商用吗?
看用的是哪个数据集。FlyWire(FAFB)是 CC BY-NC 4.0,不能商用;MaleCNS 是 CC BY 4.0,署名即可商用。各项目自己的代码大多是 MIT,但数据许可要单独遵守。
参考
- 各项目 GitHub 仓库 README 与源码(链接见上表),读取日期 2026-10-03
- MaleCNS:male-cns.janelia.org(v1.0 发布于 2026-06-08,CC BY 4.0)
- Dorkenwald et al. 2024, Neuronal wiring diagram of an adult brain, Nature. doi:10.1038/s41586-024-07558-y
- Eon Systems fly-brain:github.com/eonsystemspbc/fly-brain