工具大全
数字果蝇实验室作者:Coocon2026年10月3日16 次阅读约 11 分钟阅读

网友拿果蝇大脑干了什么?马里奥、我的世界、DOOM……9 个项目逐个拆,复测了 2 个

网友拿果蝇大脑干了什么?马里奥、我的世界、DOOM……9 个项目逐个拆,复测了 2 个

2026 年 3 月 Eon Systems 宣布「上传了一只果蝇」之后,果蝇大脑成了开发者的新玩具。光是 9 月份,GitHub 上就冒出了一串项目:让果蝇大脑打 DOOM、玩马里奥、玩 Flappy Bird、在《我的世界》里当 NPC、跑在鸿蒙手机上、住在 Mac 桌面上,甚至还有人拿它做股票交易信号。

标题一个比一个唬人。我把 9 个项目的 README 和关键代码逐个读完,对每个都问三个问题:

  1. 用了多少个神经元? 全脑 13.9 万 / 16.6 万,还是从里面抽一小块,还是自己搭的几十个?
  2. 动作到底是谁决定的? 连接组本身、训练出来的读出层、状态机,还是手调的权重?
  3. 有没有对照? 把某条通路切断,行为会不会跟着变?

然后挑了两个能在 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 秒),跑了它自带的三套测试:

DesktopFly 自带的三套测试全部通过:静息时巨纤维不放电、突然逼近 4 毫秒后放电;切断突触后运动神经元零放电;MDN 驱动身体后退

全部通过。几个数字值得一看:

  • 突然逼近的刺激出现后 4 毫秒,巨纤维就放电了;静息 4 秒,巨纤维一次都不放。
  • 静息时全回路平均放电 5.21 Hz——说明它加了背景活动。纯连接组 LIF 模型不给输入是完全静默的(我们在另一篇实测里验证过),要让果蝇「活着」,总得往里加点东西。
  • 它自带了消融测试:切断下行到运动的突触,运动神经元放电归零;损毁运动神经元,身体就不动了。

作者自己的定位很清楚:飞行、扇翅、梳理和睡眠仍然是建模的动画和状态规则,「这不是完整的中枢神经系统,也不是经过生物学校准的行走模拟」。

Fly Mario:21 个神经元,我拔了它的线

这个项目的 README 开门见山:「不是 13.8 万神经元的全脑仿真」。它只用了 21 个神经元组成的两跳小回路,细胞名字(DNp09 前进、DNp01 巨纤维起跳)和部分 FlyWire ID 来自公开数据,但突触权重是为了让这一关能通而手调的。

它自带一个「必须通关」的无头测试,9 个用例 31 毫秒全过。我在它的测试框架里加了两个实验:

Fly Mario 拔线实验:原版 13 秒通关;切断巨纤维的全部输入后 1.7 秒掉坑;全部权重缩到 0.8 倍以下果蝇不动,放大到 1.3 倍以上在 x=2213 处摔死

实验 结果
原版 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?两个原因:

  1. 它有腹神经索。 腿和翅膀的运动神经元都在那里。FlyWire 只有脑,所以之前所有项目都得在「下行神经元」和「腿」之间手写一层接口;有了 MaleCNS,DesktopFly 才能让真实的运动神经元去驱动关节。
  2. 许可证更宽松。 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

相关文章

果蝇、小鼠、人:全脑模拟还差多远?用 Mac mini 实测算一笔账

果蝇、小鼠、人:全脑模拟还差多远?用 Mac mini 实测算一笔账

果蝇全脑 13.9 万个神经元,在一台 Mac mini 上模拟 1 秒脑时间要 12.6 秒,权重矩阵约 121 MB。照同样的模型和算法外推:小鼠 7,089 万个神经元,模拟 1 秒要约 41 小时、权重占约 1.4 TB 内存;人脑 861 亿个神经元,模拟 1 秒要约 5.7 年、需要约 1.7 PB 内存。但算力还不是最难的墙。按 FlyWire 的校对效率,光是把小鼠脑的 AI 分割改对,就要约 1.7 万人年;而且就算接线图完整,现在的模型也没有学习、记忆和神经调质。本文把四堵墙逐一摆出来,每个数字都注明出处和假设。

果蝇连接组+6
fruit-fly2026年10月4日8 min
13
MaleCNS 是什么?第一张雄性果蝇全中枢神经接线图,和 FlyWire 差在哪

MaleCNS 是什么?第一张雄性果蝇全中枢神经接线图,和 FlyWire 差在哪

MaleCNS 是一只雄性果蝇完整中枢神经系统的接线图:166,700 个神经元,第一次把大脑和腹神经索(相当于脊髓)放在同一张图里。2026 年 6 月发布 v1.0,9 月在 Cell 上发表,许可证 CC BY 4.0,可以商用。它和 2024 年的 FlyWire 是两套完全不同的工程:不同性别、不同电镜、不同的 AI 分割。论文对比雌雄两只脑发现,11,710 种神经元里只有 138 种两性异形、289 种雄性特有、71 种雌性特有,而且都集中在高级脑中枢。我用 FlyWire 官方注释表按脑区重算了一遍,比例最高的不是中央脑,而是大脑向身体发指令的下行神经元:8.4%。

flywire果蝇+6
fruit-fly2026年10月4日7 min
13
果蝇大脑地图是怎么画出来的?切成 7,062 片、拍 2,100 万张照片、改了 300 万次

果蝇大脑地图是怎么画出来的?切成 7,062 片、拍 2,100 万张照片、改了 300 万次

一只雌果蝇的大脑被切成 7,062 片、每片 35~40 纳米厚,电镜拍了 16 个月、2,100 万张照片、106 TB;AI 把每根神经纤维描出来,再由科研人员、专业团队和一群游戏玩家改了 3,013,513 次,最终得到 139,255 个神经元、5,450 万个突触的完整接线图。本文按工序拆开这张地图的制作过程,也讲清楚常被搜到的「谷歌果蝇」到底是怎么回事:Google 在 2019 年给这只果蝇做过一版自动分割,但 FlyWire 最终用的是普林斯顿自己重做的版本。

flywire果蝇+6
fruit-fly2026年10月3日9 min
10
果蝇大脑怎么下载?13.9 万个神经元,我在 Mac mini 上 33 秒跑完一次实验

果蝇大脑怎么下载?13.9 万个神经元,我在 Mac mini 上 33 秒跑完一次实验

「果蝇大脑下载」下载的其实是两个文件:一张 13.9 万个神经元的清单,和一张 1,509 万行的连接表——把表里的突触数加起来正好是 Nature 论文里的 5,450 万。我照官方仓库从零走了一遍:克隆 57 秒、装依赖 21 秒、刺激糖味觉神经元的示例 33 秒跑完,伸喙运动神经元 MN9 放电 80.2 Hz。路上踩到两个坑:README 教你换成公开版 v783 数据,但示例里的 21 个神经元有 1 个在 v783 里已经不存在,直接 KeyError;输出目录不存在则要等模拟跑完才报错。最后用「逐个沉默神经元」做了一次真实果蝇上很难做的实验:沉默一个下行神经元 DNge031,进食输出反而升了 30%。

开源实测+6
hands-on2026年9月28日8 min
167