
做一款 AI 公司題材的 tycoon 游戲表面上是在設計一串數字增長實際上是在模擬一家技術公司的資源分配過程。玩家手里有現金、算力、數據、工程師和聲譽五類資源需要不斷做出選擇是先買數據訓練模型還是先做市場投放是盡快上線一個效果一般的產品還是攢資源訓練一個高質量模型。下面用一個最小可運行的工程把這條路走通后端使用 FastAPI存儲使用 SQLite前端只保留一個簡易操作頁。最終會得到一個可以點擊、可以驗證、可以繼續擴展的 AI 公司經營游戲原型。這個項目對開發者來說真正的價值不是“做一個游戲”而是練習后端狀態管理、時間系統、數據持久化和數值平衡。對想接觸 AI 工程實踐的開發者它也能幫你理解模型訓練、資源消耗和產品化之間的成本關系。需要先說明一點這里說的“訓練模型”只是游戲里的數值模擬不是真實的大模型訓練。這樣設計是為了先把經營循環跑起來后面再按需替換成真實技術棧。文章會給出完整的數據表結構、核心引擎代碼、API 接口和前端交互片段。代碼不一定是最優實現但每個選擇都有明確原因尤其是“為什么使用懶更新而不是后臺循環”和“為什么把經濟系統放到后端而不是前端”。1. 先拆解游戲核心AI 公司經營到底模擬什么1.1 玩家目標和核心循環tycoon 游戲或者說經營模擬游戲最核心的循環是賺錢投入產出再投入。AI 公司題材只是把“生產”環節替換成 AI 行業特有的動作。AI 公司題材的循環可以拆成五步玩家用現金購買數據和算力。雇傭工程師作為生產資源。工程師消耗數據和算力訓練出一個模型。玩家將模型發布成產品產品持續產生收入。收入繼續用于購買數據、擴充算力、招聘工程師和做市場投放。如果收入長期覆蓋不了工資和采購成本公司就會破產。所以玩家的目標不是“訓練出最好的模型”而是在現金流約束下讓每條決策都更接近可循環的增長。1.2 五類資源與經營動作游戲里的資源不能設計得太復雜否則新手玩家很難理解。建議第一版只保留五類資源現金、算力、數據、工程師、聲譽。資源作用初始值主要變化來源現金支付所有采購和工資100000產品收入增加招聘、買數據、市場投放減少算力訓練模型時消耗50每 tick 自動恢復一部分訓練時消耗數據訓練模型時消耗100購買數據集增加訓練時減少工程師訓練任務必需的生產力0招聘增加工資按 tick 扣除聲譽放大產品收入倍率0市場投放增加對應地第一版只需要五個經營動作招聘工程師消耗現金獲得一個技能值隨機但穩定的工程師。購買數據消耗現金增加數據量。訓練模型占用一個空閑工程師消耗算力和數據經過一段時間后生成一個模型。發布產品選擇最新訓練完成的模型開始產生每 tick 收入。市場投放消耗現金增加聲譽。這五個動作已經足夠覆蓋“資源投入、生產等待、產品變現、再投入”的閉環。后續要加特殊事件、研究樹、競品系統都是在這個閉環之上擴展。1.3 數值設計要回答的三個問題寫代碼之前要先把數值規則想清楚。否則會出現“每天收入很高但工資更高”“訓練成本永遠無法收回”“產品上線后收益沒有感知”等情況。第一版需要回答三個問題每個 tick 有多長這里定義 1 tick 1 秒方便本地觀察。生產環境可以改成 2 秒、5 秒或 10 秒。產品收入是否覆蓋維護成本產品收入必須明顯高于單個工程師的工資否則公司規模越大越容易破產。訓練等待是否值得訓練需要消耗數據、算力和時間所以模型質量上限要能帶來顯著收入提升玩家才愿意等待。這些數值不需要一開始完美但要有調參入口。全部集中在引擎文件頂部不要分散在代碼里。2. 技術選型與整體架構用 FastAPI 和 SQLite 跑通最小閉環2.1 為什么選 FastAPI SQLite 原生前端選技術棧時第一版的目標是“能快速驗證玩法”而不是“支撐十萬玩家”。FastAPI 適合做這類原型因為它的接口定義簡單可以直接返回 JSON開發體驗接近寫普通 Python 函數。SQLite 是零配置數據庫文件即數據庫適合本地開發和單機測試。前端使用原生 HTML JavaScript不需要 Webpack、Vite 等構建工具打開瀏覽器就能操作。需要說明的是這個組合適合學習和驗證不代表生產環境也要這么選。真實項目通常會引入 PostgreSQL、Redis、異步任務隊列和前端框架。如果后續規模擴大FastAPI 的接口層可以保留但存儲和實時推送都需要替換。2.2 用懶更新來代替后臺循環經營游戲最常見的技術問題是“時間怎么推進”。最簡單的做法是啟動一個后臺線程或異步任務每 tick 更新一次數據庫。但這個方案有三個問題服務重啟后后臺循環可能丟失。多個 worker 同時推進狀態容易產生重復扣費或重復發工資。離線時間里狀態無法自動推進。這里采用懶更新也叫 tick-on-read。做法是數據庫里保存last_tick_at字段每次玩家請求狀態時根據當前時間和上次更新時間的差值計算出應該推進多少個 tick然后一次性推進。這樣不需要后臺任務服務重啟也能通過時間差繼續推進也更容易控制單個請求的計算量。為了防止玩家離線很久后一次性循環幾萬次需要設置一個最大 tick 上限例如最多推進 120 個 tick超出部分直接丟棄或按上限結算。2.3 項目目錄結構項目文件不多保持扁平即可ai-tycoon/ ├── main.py # FastAPI 入口和接口定義 ├── engine.py # 游戲引擎狀態推進、經營動作、初始化 ├── schema.sql # SQLite 建表腳本 ├── requirements.txt # Python 依賴 └── static/ └── index.html #