果蠅大腦模擬教學:從 MaleCNS 到 DOOMFLY,自己接上遊戲與奇怪實驗
用公開果蠅神經資料建立遊戲控制模型:附 DOOMFLY 安裝指令、三組視覺實驗與延伸玩法,並說明哪些展示還不能證明學會遊戲。
想自己做出 X 上會玩遊戲的「果蠅大腦」,最實際的起點是使用公開的神經接線資料,搭配現成模擬程式。本文選用 DOOMFLY,帶你從看懂資料、安裝環境,到改變視覺輸入,觀察遊戲控制如何跟著變化。
先把成果說清楚:你會建立一個使用真實果蠅接線資料的軟體模型,讓它接收遊戲畫面並輸出控制訊號。這和復活一隻果蠅、重現牠的記憶,或證明牠學會玩遊戲,是不同的事。
教學面向第一次接觸神經模擬、能開啟終端機操作的讀者。完全不寫程式,也可以先完成官方網頁的探索。以下流程已在 Apple Silicon Mac 實際完成:下載並核對 MaleCNS v1.0、建立全量圖譜、通過 16 項測試、啟動 DOOMFLY,再用相同 seed 比較正常視覺與關閉視覺。文中的儀表板圖片都是這次實跑截圖。
你要建立的「果蠅大腦」,其實包含哪些東西?
這類專案的核心是神經連接組(connectome),也就是記錄神經細胞彼此如何相連的接線圖。突觸則是細胞之間傳遞訊號的接點。知道接線,可以研究訊號可能往哪裡走,但仍需要另外定義細胞怎麼產生反應。
MaleCNS 是成年雄果蠅中樞神經系統的資料集名稱,範圍包含頭部的大腦與連接身體的腹神經索。Google Research 的介紹以超過 16.6 萬個神經元、約 1.25 億個突觸連接概括其規模。官方專案時間表則顯示,v1.0 在 2026 年 6 月 8 日釋出,論文於 9 月 3 日發表。

把接線資料變成能互動的作品,還要補上三件事:模擬細胞活動的計算規則、把畫面轉成神經刺激的方法,以及把神經活動轉成遊戲操作的方法。DOOMFLY 已把這些部分接在一起,適合拿來理解完整流程。
例如遊戲中出現一面亮牆,程式先把畫面的亮度與顏色轉成輸入,模型算出神經反應,再由開發者指定的規則決定轉向、移動與射擊。這套轉接規則叫做解碼器,你可以把它理解成「把神經訊號翻成按鍵」的翻譯層。
研究團隊的官方動畫可以幫你看懂真實資料中的視覺與運動通路。遊戲專案如何選擇輸出訊號,仍是另一層工程設計。
影片來源:MaleCNS 官方媒體庫。由 Philip Hubbard 與 Alexandra Fragniere 製作,資料來自 FlyEM、Cambridge Connectomics Group 與 Google Research。在 YouTube 觀看。
X 上那些作品,哪些現在能自己做?
先選一個有程式、資料入口與操作說明的專案,成功機率會高很多。下面區分可自行安裝的作品,以及仍以展示為主的作品。
| 想做的事 | 可以從哪裡開始 | 目前限制 |
|---|---|---|
| 看果蠅神經的 3D 接線圖 | MaleCNS 官方 Explore 頁面 | 看的是結構,沒有自動進行動態模擬。 |
| 讓神經模型操作 Doom 引擎遊戲 | DOOMFLY 公開原始碼 | 需要本機運算環境,學會遊戲的主張尚未通過驗證。 |
| 讓模型控制 Mario 64 | Fly64 公開原始碼 | 作者只在一台 MacBook 測過,另需自行提供遊戲 ROM。 |
| 在 Minecraft 養互動果蠅 | NeuroCraft Fly 展示與開發計畫 | 作者尚未釋出可執行的 mod 與配套程式。 |
| 把神經點雲做成音樂動畫 | 自行建立視覺化作品 | 這是創作方向,需另外寫影像與點雲的對應程式。 |
Fly64 作者說明使用 M2、16 GB 記憶體的 MacBook,並需要約 1.1 GB 的腦資料空間。這是該作品的環境紀錄,不能當成所有果蠅模擬的通用需求。NeuroCraft Fly則明確標示軟體仍在準備釋出,目前適合參考展示與方法。
下面採 DOOMFLY 為主線。它的價值在於能查看從資料到遊戲的每一層,而且作者也公開了失敗的驗證結果。
第一步:先用瀏覽器探索官方果蠅接線圖
不用先下載大量資料。打開 MaleCNS Explore,選擇 Neuroglancer。這是一個用瀏覽器查看大型 3D 研究資料的工具。
- 從頁面的「Open in new tab」打開完整場景,先觀察目前顯示的神經形狀。
- 找到
cns-seg圖層,它用來顯示辨識出的神經細胞。依官方範例,把搜尋詞DNa01改成DP1m,觀察另一類細胞。 - 開關
presyn與postsyn圖層,查看所選神經的突觸位置。 - 想查細胞彼此的連接,再回到 Explore 選 neuPrint。它提供搜尋、形狀與連接關係的分析入口。
完成這一步,你應該能解釋「我正在看哪類細胞、它的接點在哪裡」。畫面中漂亮的線條提供的是結構資訊,還需要計算程式才能變成會隨時間更新的反應。

第二步:準備 DOOMFLY 的本機環境
DOOMFLY 安裝文件要求 Python 3.11、C++ 編譯器,以及數 GB 的可用記憶體。觀看介面另需 Node.js 22.13 以上。Python 負責神經運算,Node.js 負責啟動網頁介面,兩者會同時執行。
以下使用 macOS/Linux 的終端機語法。先確認 git --version、python3.11 --version、clang++ --version 與 node --version 都能顯示版本。缺少工具時,先依 Python、Node.js與作業系統的開發工具安裝說明完成設定。Windows 讀者需要另行處理環境相容性,本文不把這些命令視為 PowerShell 教學。
先取得程式,固定到本教學查閱的版本,避免後續更新讓檔名或參數不同。
git clone https://github.com/nftechie/doomfly.git
cd doomfly
git checkout 71ecf53d78eaffaf1a57ed7b0ccf5d458abc9f33
python3.11 -m venv .venv-neural
source .venv-neural/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements-neural.txt -r doom/requirements.txt \
--build-constraint neural-build-constraints.txt
其中 .venv-neural 是這個專案自己的 Python 套件空間,可避免不同專案的套件版本互相干擾。後續命令都在 doomfly 資料夾執行,終端機也要維持這個環境啟用。若重新開啟終端機,先回到資料夾,再執行一次 source .venv-neural/bin/activate。
如果電腦沒有 python3.11,但已安裝 uv,也可以先執行 uv python install 3.11,再用 uv venv --python 3.11 .venv-neural 建立環境。本次 Apple Silicon Mac 實跑採用這條路線,套件則以 uv pip install --python .venv-neural/bin/python 安裝相同的需求檔。
第三步:下載資料,建立可計算的神經網路
只下載程式還不夠,神經接線資料需要另外取得。專案的 doom/datasets.json 指定了三份來源,分別是細胞註記、神經傳遞物質資訊與連接權重。權重表示模型中一條連接的影響程度。
以下程式依專案清單下載,並檢查 SHA-256。它是一種檔案指紋,可以檢查下載內容是否與作者記錄的版本一致,避免檔案不完整卻繼續運算。
python - <<'PY'
from pathlib import Path
import hashlib
import json
import urllib.request
name = 'malecns_v1'
registry = json.loads(Path('doom/datasets.json').read_text())['datasets'][name]
locked = json.loads(Path(f'data-provenance/{name}/source.lock.json').read_text())
root = Path('connectome_data') / name
root.mkdir(parents=True, exist_ok=True)
for filename, url in registry['files'].items():
target = root / filename
if not target.exists():
partial = target.with_suffix('.download')
urllib.request.urlretrieve(url, partial)
partial.replace(target)
with target.open('rb') as stream:
digest = hashlib.file_digest(stream, 'sha256').hexdigest()
if digest != locked[filename]['sha256']:
raise RuntimeError(f'Source checksum mismatch: {filename}')
(root / 'source.lock.json').write_text(json.dumps(locked, indent=2) + '\n')
PY
接著匯入資料、產生模擬需要的檔案,再編譯運算核心。
python -m doom.connectome malecns_v1
python -m doom.prepare
python -m doom.audit_data
python -m doom.build_kernel
每一行成功後才執行下一行。專案保留的模型包含 166,700 個神經元與 25,582,938 條有向連接紀錄。連接紀錄可能彙整多個突觸接點,因此不要把這個數量和研究介紹中的約 1.25 億直接相比。
最後執行作者提供的數值與功能檢查。它們協助找出程式錯誤,但通過也不代表模型已被證明與真實果蠅完全一致。
python -m pytest tests/test_doom.py tests/test_doom_reference.py \
tests/test_doom_live_training.py -q
若出現失敗,先保留完整錯誤訊息,回到對應步驟處理,不要跳過檢查直接改參數。
第四步:啟動神經模擬,再開觀看介面
第一次先執行 baseline,也就是不啟用實驗性學習的基準版本。先確認訊號能從畫面一路走到遊戲控制,後面比較變化才有依據。
python -m doom.server --model baseline --port 8766 \
--audit-dir outputs/doom/tutorial-baseline
保留這個終端機執行。另開一個終端機,先檢查本機服務是否啟動。
curl http://127.0.0.1:8766/health
curl http://127.0.0.1:8766/state
health 提供服務狀態,state 提供目前的模擬資料。剛啟動時可能還在載入,等待終端機出現執行狀態後再查一次。連續查詢時,序號或時間應持續更新。127.0.0.1 表示你自己的電腦,這個步驟不需要公開網站。
服務正常後,在第二個終端機回到同一份 doomfly 專案,啟動觀看頁面。
cd doom-ui
npm ci
cat > .dev.vars <<'VARS'
DOOM_STREAM_ORIGIN=http://localhost:8766
VARS
npm run dev
打開終端機顯示的本機網址。這個網頁會向剛才的 Python 服務取得畫面與數據,瀏覽器本身沒有在計算整張神經網路。若只開網頁、沒有開模擬服務,就不會有持續更新的遊戲。
成功的判斷是畫面與神經讀值持續更新,而且模型輸出有傳到遊戲。角色一直轉圈或撞牆,仍可能表示控制流程已接通。至於有沒有玩得更好,需要另外設計比較。

DOOMFLY 原作者的 X 展示。這是作者作品影片,並非本教學的實跑紀錄;若嵌入未載入,可開啟原始貼文。
第五步:先做三個能比較結果的奇怪實驗
讓它動起來後,最容易開始的玩法是改變它收到的視覺資訊。每次只改一個條件,保留相同的初始隨機設定,才比較容易追查差異從哪裡來。seed 就是用來固定隨機起點的數字。
以下每次只執行一個命令。切換實驗前,在模擬終端機按 Ctrl+C 停止前一次執行,避免占用同一個連接埠,也避免同時載入多份大模型。
實驗一:正常看世界
python -m doom.server --model baseline --condition intact --seed 41027 \
--audit-dir outputs/doom/tutorial-intact
把這次當成參考組。記錄固定時間內的轉向、射擊與存活情況,並保存執行紀錄。不要只留下最好看的一段。
實驗二:把視覺輸入歸零
python -m doom.server --model baseline --condition blank_vision --seed 41027 \
--audit-dir outputs/doom/tutorial-blank
這個條件把送進模型的視覺刺激歸零。若角色依然行動,代表在這個設定下,動作不能全部歸因於當下看到的畫面。它不等於模型在「憑記憶導航」,還可能與持續的網路活動及控制規則有關。

blank_vision 後的實跑畫面。Doom 場景仍在運作,但下方的感覺輸入區域沒有視覺刺激;模型仍會輸出移動與射擊,因此「會動」本身不能證明它看懂遊戲。實驗三:讓視野停在同一張畫面
python -m doom.server --model baseline --condition frozen_vision --seed 41027 \
--audit-dir outputs/doom/tutorial-frozen
這個條件固定模型接收的視覺輸入,遊戲仍會繼續。你可以比較:沒有新畫面後,角色的轉向模式是否改變?若差異很小,就值得進一步檢查控制是否真的依賴連續視覺。
上述參數已存在於專案的服務程式。先做一輪理解差異,再換幾組 seed 重複比較。相同 seed 有助於比較,但不保證所有平台與執行時間都完全一致,也不能靠單次結果證明生物學結論。
本機實跑的比較結果
我在同一台 Apple Silicon Mac、相同 seed 41027 下,各取前 50 秒神經時間比較。正常視覺在這段期間維持第一局,得到 11 kills;關閉視覺則死亡 5 次,共得到 7 kills。正常視覺的平均前進控制值為 19.23,關閉視覺為 7.04。
這一輪顯示視覺刺激確實改變了控制器的行動與存活結果,但樣本只有一個 seed,也沒有重複多輪統計。它是「整條流程已接通」的工程證據,不是模型學會 Doom 或重現自然果蠅行為的科學證明。

還想更怪?把神經輸出接到自己的小遊戲
如果目標是做出可互動作品,我推薦先做「接近亮點的小圓點」。場景只需要左右兩側的亮度、角色位置與目標距離,容易看出輸入和輸出之間的關係,維護成本也比直接改大型遊戲低。
下面是可自行開發的方向,並非 DOOMFLY 已內建的功能。
| 創作方向 | 要增加的程式 | 可以觀察什麼 |
|---|---|---|
| 找香蕉小遊戲 | 把自製場景轉成視覺輸入,用神經讀值控制圓點轉向 | 換一邊放目標後,控制方向會不會跟著變。 |
| 神經音樂播放器 | 把不同神經群的活動量轉成音高與音量 | 固定輸入和變動輸入,會產生什麼聲音差異。 |
| 神經點雲動畫 | 把圖像或自製動畫的明暗對應到神經點的位置 | 呈現類似社群音樂動畫的視覺效果。 |
| 神經訊號控制虛擬寵物 | 用訊號選擇預先寫好的走路、停下、轉身動畫 | 哪些動作來自神經讀值,哪些來自動畫規則。 |
自己開發時,保留三個清楚的程式邊界:場景提供輸入、模型計算反應、控制器改變角色。先用固定數值檢查角色能否左轉與右轉,再接入模型輸出,較容易分辨是遊戲控制錯了,還是模型本來就沒有你期待的反應。
點雲動畫尤其適合創作,但要標示它如何生成。若是直接把影片明暗畫到神經位置上,成果代表影像映射,不能由此推論大腦看懂、學會或自己生成了那支影片。使用自製影像與音樂,也比較方便後續分享作品。
可以打開「學習模式」嗎?
DOOMFLY 的確提供實驗性學習版本。這裡的學習指的是依活動與回饋改變部分連接的強度,並不是讓語言模型讀懂遊戲說明。
完成基準版本後,可以另開一組紀錄,按作者提供的方式啟動。
python -m doom.server --model experimental-v6 --learning --port 8766 \
--audit-dir outputs/doom/tutorial-learning \
--checkpoint-dir outputs/doom/tutorial-learning/checkpoints \
--checkpoint-seconds 300 --resume
checkpoint 是儲存模型狀態的檔案,方便之後接續執行。這個版本恢復的是模型狀態,遊戲會開啟新的一局,不能把它當作遊戲世界完整回到中斷瞬間。
作者的訓練說明指出,目前視覺、制約與生存驗證仍未通過。看到連接強度改變、偶爾活得較久,都還不足以宣稱學會生存。若要研究學習,至少要比較不同初始設定、凍結學習的對照組,以及訓練時沒見過的測試條件。
因此,第一個作品先以「能接收刺激、輸出動作,而且能說明差異」為目標。這已經足以做成有趣、可展示也可檢查的專案。
安裝卡住時,先檢查哪裡?
| 現象 | 優先檢查 |
|---|---|
找不到 python3.11 |
Python 3.11 是否已安裝,命令是否在系統搜尋路徑。 |
套件安裝不接受 --build-constraint |
是否在剛建立的環境內先升級 pip,並使用指定的 Python 版本。 |
出現 Source checksum mismatch |
指定檔案是否下載完整。保留錯誤後移走該檔,再重新下載比對,不要關掉驗證。 |
找不到 clang++,或核心編譯失敗 |
C++ 工具鏈是否完整。這份程式實際呼叫的是 clang++。 |
| 網頁顯示離線 | /health 是否正常、Python 是否仍執行、.dev.vars 是否位於 doom-ui,修改後是否重啟網頁服務。 |
| 程式被系統終止 | 是否記憶體不足,或同時跑了多份全量模擬。先停止其他模擬程序。 |
| 角色亂轉、表現很差 | 先查狀態更新與控制傳輸。控制成功和遊戲技巧是不同驗收項目。 |
果蠅大腦模擬 FAQ
一定要有 GPU 嗎?
DOOMFLY 的這條安裝路線沒有把 GPU 列為必要條件,主要要求 Python、C++ 編譯環境與足夠記憶體。實際速度仍與硬體和執行設定有關,本文沒有提供全量效能實測數字。
可以只在瀏覽器建立完整模擬嗎?
本文的 DOOMFLY 路線需要獨立執行 Python 模擬服務。官方 Neuroglancer 可以直接在瀏覽器探索接線圖,但它和動態神經模擬是兩個不同工具。
可以直接下載 Minecraft 的果蠅 mod 嗎?
截至 2026 年 9 月 12 日,NeuroCraft Fly 的專案頁仍表示 mod 與配套程式尚未提供下載。可以看作者展示和開發計畫,不能把目前頁面當成已完成的安裝包。
這是在操控真正活著的果蠅嗎?
這些步驟操作的是電腦中的數值模型,使用的是研究團隊公開的結構資料。現有展示沒有建立它具有意識或主觀感受的證據,也不能把遊戲受傷直接等同於真實果蠅受傷。
第一個作品,做到能解釋就值得分享
先把官方接線圖看懂,再讓基準模型跑起來,接著完成正常視覺、無視覺與固定視覺三組比較。分享時同時展示畫面、設定和結果,別只剪出看起來最聰明的那一刻。
如果這個流程順了,再把控制輸出接到找香蕉的小遊戲或虛擬寵物。觀眾能玩到作品,你也能指出哪些來自資料、哪些來自模型、哪些是自己寫的規則,這樣的教學與展示才容易被別人重做。
延伸閱讀:「他們把果蠅大腦接上 AI,結果它只聊爛水果?」百萬爆紅推文背後,Google 聯手科學界繪製首張完整雄果蠅神經圖譜
資料來源
- MaleCNS 官方資料入口、時間表與授權
- MaleCNS Explore 操作說明
- MaleCNS 官方圖片與影片庫
- Google Research:成年雄果蠅完整神經圖譜
- DOOMFLY 原始碼與安裝文件
- DOOMFLY 實驗性訓練方法與限制
- DOOMFLY 第三方資料與素材權利說明
- Fly64 作者說明
- NeuroCraft Fly 釋出狀態
本教學的資料下載程式改寫自 DOOMFLY 的 MIT 授權文件。Copyright (c) 2026 nftechie and DOOMFLY contributors。完整授權如下。
DOOMFLY 程式片段 MIT 授權聲明
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.