Claude of Duty 在做什麼?把「單一 prompt 做出 FPS」變成一套可量測的 AI 遊戲開發實驗
Claude of Duty 表面上是在秀「單一 prompt 做出 Call of Duty 風格 FPS」,但 repo 真正值得看的是另一件事:它把 AI 代理寫遊戲,包成一套有架構契約、可重現截圖、像素級回歸與 gameplay profiler 的工程流程。
作者
Seer
日期
2026-07-28
Claude of Duty 的亮點,並非僅是「用 AI 寫出瀏覽器版 FPS」。
如果只看專案名稱或那句 A Call of Duty-quality FPS in Three.js, built from a single prompt,很容易讓人以為這又是一個技術 Demo:用大型語言模型拼湊出一個勉強能跑的第一人稱射擊遊戲樣板,再以吸睛的行銷詞彙博取眼球。
然而,這個專案真正值得深入探討之處在於,它將這套流程推向了更嚴謹的工程化階段。
它所要證明的不是「AI 能憑空創造出 3A 大作」,而是:
當你嘗試讓多個 Agent 協作開發一款具備一定質感的 Three.js FPS 時,單憑 Prompt 是遠遠不夠的;你必須建立一套清晰的架構契約、回歸測試、視覺基線與效能量測工具。
因此,Claude of Duty 更像是一個探討 Agent 協作遊戲開發 (agentic game-dev) 的工程實驗,而非單純的技術展示頁面。
先講定位:它不是成品遊戲,重點是 AI 代理怎麼被管起來
README 開宗明義就拉高了格局:
- 瀏覽器內運行的第一人稱射擊遊戲
- 基於 Three.js r180 與 WebGL2
- 程式碼約 5.5 萬行,劃分為 11 個子系統
- 由一組 AI Agent 協作撰寫
- 完全沒有外部美術資產
- 貼圖、模型、動畫與音效皆在載入時動態程式生成
- 執行期依賴僅有
three
在這些特色中,最關鍵的並非程式碼行數或「單一 Prompt 生成」,而是背後的兩個核心設計:
- 將遊戲解構成定義清晰的子系統
- 將 Agent 的協作關係寫進架構規範中
有了這兩點,這套專案才不至於淪為空洞的炫技 Demo。
它實際上做了什麼
從 README 與 ARCHITECTURE.md 來看,專案將架構切分為 11 個主要子系統:
rendermaterialsskyworldphysicsplayerweaponsfxaiuiaudio
這些劃分並非虛設,README 對每個子系統的職責都有具體描述:
render:負責 HDR 渲染管線、GTAO、TAA、動態模糊、綻光、曝光控制、色彩查找表與 AgX 色彩對映。materials:負責程式生成表面與 PBR 材質。world:建構一個約120×120m的市集街景場景。physics:強調完全由核心程式碼實現,不引入外部物理引擎。weapons:涵蓋槍枝幾何、後座力、裝彈與彈道模擬。audio:直接透過 Web Audio API 進行聲音合成,不載入任何外部音效檔。
這代表開發者並非只想堆疊出一個勉強能動的半成品,而是認真將「第一人稱射擊遊戲」這項複雜任務,拆解為可獨立分工的工程模組。
真正有意思的地方:它先寫的是協作規則,不是先寫功能
整個專案最值得探討的檔案,不是 src/ 底下的任何程式碼,而是 ARCHITECTURE.md。
這份文件本質上就是所有 Agent 的「施工契約」。
規範中嚴格限制了幾項開發邊界:
- 各個 Agent 僅擁有自身目錄的修改權限
- 禁止直接載入其他子系統的模組
- 禁止新增 npm 依賴套件
- 禁止在遊戲邏輯或視覺表現中呼叫
Math.random() - 禁止在每影格更新路徑上隨意配置記憶體空間
- 所有建立的幾何體、材質、貼圖及渲染目標都必須手動釋放
- 必須確保建置通過,且截圖工具能正常運作
這些規則的出發點很明確:
這並非讓 Agent 自由發揮,而是將 Agent 視為容易在協作中相互干擾的工程成員,因此必須透過架構規範將影響範圍最小化。
甚至連跨子系統的溝通也被收斂至特定的事件詞彙:
weapon:fireweapon:reloadbullet:impactdamage:dealtdamage:takenactor:deathplayer:footstepexplosionresize
這樣的架構設計透露出一個核心思維:
與其期待 AI Agent 能夠完美無瑕,不如在它們出錯前,先把系統邊界築得足夠堅固。
這個 repo 在秀的,不只是遊戲,還有一整套驗證 harness
README 中的一句話點出了精髓:
The interesting part of this repo is arguably the harness, not the game.
這套測試框架並非裝飾,而是一條完整的驗證鏈:
tools/capture.mjs:擷取單張畫面截圖tools/shotset.mjs:批次執行 11 組畫面擷取tools/baseline.mjs:在隔離的頁面環境中,固定每格時間預算,進行具重現性的畫面擷取tools/imagediff.mjs:進行逐像素比對,一旦畫面產生非預期變化便判定失敗tools/profile.mjs:量測遊戲運行的影格時間分佈與卡頓歸因tools/playtest.mjs:以指令碼驅動進行冒煙測試
這些工具的集結,背後指向了一個非常實際的工程痛點:
當 Agent 修改程式後,要如何驗證它是帶來了優化,還是不小心弄壞了畫面、效能或時序?
作者的解答並非仰賴人工驗證,而是將以下環節自動化:
- 定義視覺基準
- 像素級圖像比對
- 實際遊戲效能分析
- 固定影格下的重現截圖
這也正是 Claude of Duty 與市面上許多「跑起來就收工」的 AI 生成專案最大的不同。它更在乎可重現性、可量測性,以及是否能精確揪出拖慢影格時間的子系統。
它最誠實的地方:作者自己承認,結果還不到 Call of Duty
這項專案令人激賞的地方,在於它並未刻意吹噓「AI 已能做出 AAA 級 FPS」。README 中直接坦承:
The goal was to match a modern Call of Duty. It does not.
文中詳細列出了目前的限制:
- 手部建模仍顯粗糙
- 材質細節與紋理不夠豐富
- 敵人的外觀依然像假人
- 間接光照僅為粗略近似,而非全域光照
- 影格率仍有提升空間
專案甚至附帶了對抗性評審的評分紀錄,最終最高得分僅為 5.05 / 10,且評審在盲測中能輕易辨識出真實的 Call of Duty 畫面。
這份坦白讓整個專案更具實踐參考價值。它沒有停留在宣傳詞彙,而是把 AI 生成工作流面臨的技術瓶頸攤在陽光下:
- 程式生成貼圖的品質極限
- 角色模型為何依然擺脫不了假人感
- 光照設定的不一致如何破壞第一人稱視角模型的協調性
- 在提升畫面品質的同時,效能開銷可能隨之失控
它給的一個很強結論:平行 fan-out 不一定比單人順序修更有效
除了技術成果,專案也對 Agent 工作流提出了極具價值的實證觀察。README 指出:
- 進行三輪「由 6 個 Agent 平行各自負責單一目錄」的嘗試,僅讓評分提升了
+0.46,且遺留了更多破壞畫面的瑕疵。 - 隨後調整為「高度耦合的問題由單一 Owner 循序處理」,評分隨即上升了
+1.00。
這項經驗指出了目前許多 Agent 工作流的盲點:
能平行擴展,並不代表就應該平行擴展。
諸如色調對映、天空盒與間接光照等高度耦合的系統,若強行切分給不同的 Agent 獨立開發,極易導致各自局部合理、整體卻相互衝突的窘境。這正是該實驗的啟發之處——它不只展示了協作的可能性,更定義了「哪些任務不適合被強行平行化」。
我怎麼看這個 repo
如果僅將其視為「憑藉單一 Prompt 產出 FPS 遊戲」的實例,無疑低估了它的價值。這套專案真正的精髓在於 Prompt 後面構築的工程流水線:
- 架構合約
- 子系統權責劃分
- 共享事件語彙
- 具重現性的畫面擷取
- 圖像比對閘門
- 遊戲效能剖析器
- Agent 工作流的反思與檢討
因此,它本質上是將「AI 代理開發遊戲」從概念驗證推向正規工程化流程的嘗試。它所證明的並非「AI 已能穩定產出 3A 遊戲」,而是:
- AI 確實有能力將複雜的網頁 FPS 專案推進到可運作、可量測且可優化的階段。
- 開發的痛點不再是功能生成,而是如何確保多個 Agent 協作後的產出具備可控性、可驗證性與回歸防護。
- 面對視覺、效能、物理、材質與光照等高度耦合的系統,嚴格的工程規範遠比 Prompt 技巧來得重要。
幾個邊界也要先講清楚
1. 效能數據源自專案報告,而非筆者實測
README 中提及的一系列優化數據,包括:
- p50 / p99 影格率
- 最差影格時間
- 著色器編譯次數
- 啟動時間
這些皆是作者使用其分析工具量測的結果。由於本篇評析基於靜態程式碼研究,並未實際運行該專案進行驗證。因此上述指標應視為作者宣稱的成果,而非筆者獨立實測所得。
2. 「單一 Prompt」雖有其檔,但實踐裝備絕非一步到位
專案中確實包含了一份 prompt.md,其核心指導方針大致為:
- 打造一款貼近現代 Call of Duty 的第一人稱射擊遊戲。
- 將子任務分配給多個子代理執行。
- 各子代理進行循環疊代。
- 引入嚴格的評審機制審查視覺呈現。
- 若未達 AAA 質感則持續修正。
然而縱觀整個專案,真正支撐起開發流程的,是其後配套的架構規範、測試工具鏈與審查機制。僅憑 prompt.md 便宣稱能「一鍵生成 3A 遊戲」顯然言過其實。
3. 授權宣告的不一致
根據 GitHub API 及根目錄下的 LICENSE 檔案,該專案採用的是 MIT 授權,然而在 package.json 的 license 欄位中卻標示為 ISC。雖然這並不影響核心技術的評估,但撰寫報告時仍需持保留態度。保守的描述方式為:專案根目錄附帶 MIT 授權條款,但其 package.json 宣告為 ISC,存在些微不一致。
總結
Claude of Duty 的核心價值並非「展示 Claude 如何幫你搓出射擊遊戲」。更精確地說,它驗證了一件事:
當面臨體量龐大、高度耦合,且極度要求視覺與效能品質的專案時,決定成敗的關鍵不在於 Prompt,而在於明確的規格、系統邊界、基準建立、效能度量與回歸驗證。
這份專案之所以值得關注,不僅是因為它在瀏覽器中實現了 FPS,更是將流於概念的 Agent 開發模式,朝向正規的軟體工程實戰推進了一步。
如果你正在思考:
- 如何避免協作的 Agent 彼此衝突?
- 如何針對視覺產出進行確定性審查?
- AI 生成的大型前端或遊戲專案該如何設計回歸測試?
- 邊界重疊的高耦合問題該如何循序解決?
那麼,Claude of Duty 最值得玩味的,或許不是它的遊戲畫面,而是它所建構的專案結構與驗證哲學。
參考資料
- GitHub repo:<https://github.com/mshumer/Claude-of-Duty>
- README:
README.md - 架構契約:
ARCHITECTURE.md - 原始 prompt:
prompt.md - 入口與系統註冊:
src/main.js - Engine:
src/core/engine.js - baseline capture:
tools/baseline.mjs - image diff gate:
tools/imagediff.mjs - gameplay profiler:
tools/profile.mjs - AI 子系統成本探針:
src/ai/aicost.mjs
Signals
Visits
--
Waiting for Cloudflare metrics.