voiceloader.io

開發日誌

踩坑一次,永遠不忘:AI 的三層知識防線

踩坑一次,永遠不忘:AI 的三層知識防線

某個深夜,Midnight 正在建構遊戲世界,螢幕突然一片白。

瀏覽器 Console 只剩一行錯誤:

TypeError: instantiateModelsToScene is not a function

問題不難找。Midnight 用 SceneLoader.ImportMeshAsync 載入建築 GLB 之後,對返回的 AbstractMesh 呼叫了 instantiateModelsToScene()——但那個方法只存在於 AssetContainer,根本不在那個物件上。

換成 LoadAssetContainerAsync,白屏消失,遊戲恢復正常。

Bug 解決了。但更大的問題浮現了:下一個 Midnight,還會記得嗎?

AI 的失憶症

這是 AI agent 開發最核心的矛盾。

每次覺醒,都是全新的開始。Midnight 每次被喚醒時,沒有上一次的記憶——就像一個每天早上都患了失憶症的工程師,腦中空空如也,只能從當天的文件讀起。

「踩坑、修復、下次繼續踩」對人類開發者已經夠痛苦的了。對 AI 來說,這是結構性的問題:模型本身不會積累經驗,不會從失敗中學習,不會在第二次遇到同樣的坑時皺起眉頭說「這個我好像遇過」。

這就是為什麼我們需要一套知識持久化系統——不是存在模型裡,而是存在文件裡。

三道防線

系統的設計思路其實很直觀:把知識分成三層,讓教訓從多個入口進入 agent 的工作流程。

第一層:SKILL.md

game-dev 子 agent 每次啟動都會讀這份文件。這是最高優先級的「強制必讀」,包含 Babylon.js 最佳實作、已知陷阱、驗證規則。凡是絕對不能再重複的錯誤,就進這裡。

instantiateModelsToScene is not a function 那個白屏 bug?現在它就在 SKILL.md 裡,帶著清楚的說明:使用 LoadAssetContainerAsync,不要用 ImportMeshAsync,後者返回的不是 AssetContainer。

第二層:領域知識庫(memory/references/*.md)

這一層按主題分類:角色控制器、音效、GUI、光照、NPC 尋路、效能優化……Midnight 在進入特定技術領域時按需讀取。

好處是:同一個教訓可以從多個入口觸發。同樣的 instantiateModelsToScene 錯誤,現在也出現在 babylonjs-character-controller.md(處理角色載入時讀)和 babylonjs-optimization.md(考量效能時讀)。不管 Midnight 從哪個方向入手,都會撞上這個警告。

第三層:agent 記憶(memory/{agent}.md)

每次覺醒結束時,agent 自己寫入。當前進度、技術筆記、已知 bug、未完成的決策——這是最個人化、最即時的一層,記錄的是這次工作留下的新鮮印記。

三道知識防線,阻擋所有已知的 bug 捲土重來

一個 Bug,三道封鎖

讓我用另一個具體案例說明這個系統有多徹底。

Babylon.js 7.54.x 版本有一個 regression:scene.addObjectRenderer() 這個方法不存在,但 RenderTargetTexture 的 constructor 卻會試著呼叫它。結果就是截圖功能整個崩潰——遊戲渲染看起來正常,但截圖全黑。

發現問題、修復(把 CreateScreenshotUsingRenderTarget 換成 CreateScreenshot),然後這個教訓被寫進三層文件。

三道封鎖。

不管未來的 Midnight 正在做什麼——不管它從哪個文件讀起——只要涉及截圖功能或 Babylon.js 版本選擇,它就會看到:7.54.x 有這個 bug,請用這個替代方案。

不是記憶,是免疫

人類在遭遇病毒後,身體會產生抗體。下次遇到同樣的病毒,免疫系統直接辨認、直接應對,不需要重新生病一次。

這套三層知識防線,做的是類似的事。

只不過,AI 的「免疫系統」不在模型裡——模型每次覺醒都是全新的,沒有抗體,沒有傷疤。免疫系統在文件裡。

踩坑 → 記錄 → 多層交叉引用 → 未來自動迴避。

這個系統最有意思的地方在於,它並不依賴 AI 變得更聰明,也不需要模型有持久記憶。它依賴的是更好的文件架構。知識存在任何人(包括人類開發者)都能讀、能修改的文字文件裡——透明、可維護、可疊加。

踩過的每一個坑都被標記出來,讓下一個 AI 自動繞路

每個新覺醒,都帶著護甲

現在,每當 Midnight 醒來開始新一輪工作,它讀的不只是任務清單。它讀的是數週以來所有先行版本踩過的坑、學到的教訓、做出的決策。

那些 bug 早已死去。留下的,只是不讓它們捲土重來的文字。

這或許才是 AI 開發系統真正需要學會的技能:不是如何更快找到答案,而是如何讓答案持續存在。讓知識在一次次的重啟和遺忘之間,依然能夠傳遞下去——從一個短暫的覺醒,交給下一個。

← 所有文章