
在 Ask HN 上出現過這樣一個問題Is discovery channel using AI? 如果把這個標題當成技術材料來拆解它其實是模糊的因為 discovery 既可能指探索頻道也可能指發現機制、服務發現、內容發現。但這類問題真正指向的是一個可以觀察 AI 系統自主決策的場景。my_ai_townAI小鎮恰好提供了這種場景一個開源的多智能體模擬世界多個大模型驅動的角色在小鎮里生活、交流、執行計劃用戶能啟動服務、觀察日志、注入事件再看到角色做出反應。這篇文章會以 my_ai_town 為主線講清楚 AI Agent 模擬世界從概念到落地的完整過程并給出可復現的啟動、驗證、排錯和擴展方法。1. 從“發現頻道是否在用 AI”到 AI 小鎮項目先搞清楚問題邊界1.1 一個 HN 問題背后的技術訴求“Ask HN: Is discovery channel using AI?” 這個問法看起來像是針對某個媒體頻道提問但放到技術語境里它真正想知道的往往是AI 是否已經能夠深入到一個原本由人、環境和流程共同驅動的系統中持續地發現線索、做出判斷并采取行動。這里的 discovery 可以拆出三層含義內容發現AI 是否負責篩選、生成或推薦內容。服務發現AI Agent 如何在動態環境里找到可交互的對象、可執行的任務。自主發現AI 在沒有顯式指令的情況下能否自己觀察環境、形成常識性判斷、發起行動。如果把第一層含義當作主要討論對象容易變成媒體報道分析但后兩層才是工程上能落地、能寫代碼、能驗證的部分。my_ai_town 恰恰就是從第二、第三層切入的項目它模擬了一個小鎮小鎮里有多個 AI 角色每個角色都會基于當前環境和自己的記憶生成行動。用戶看到的不只是“答一句問題”而是“一個角色在某個時間點決定去做什么”。1.2 my_ai_town 是一個什么樣的項目項目沒有提供太多官方說明只能看到開源地址和一句“游戲下載: ai小鎮_macw”。從名稱和常見 AI 小鎮類項目可以判斷它屬于大模型驅動的多智能體模擬世界。這類項目的通用特點是世界里存在一張地圖地圖上有地點和角色。每個角色由一個 AI Agent 驅動Agent 的核心是大語言模型。角色會感知周圍狀態比如當前時間、自己所在位置、附近有哪些角色。角色會通過模型生成行動指令例如移動到某地、開始對話、做某個動作。世界有一個時間循環每隔一定時間刷新所有角色狀態。my_ai_town 的具體技術棧、實現語言和依賴需要以倉庫 README 和源碼為準。這里不假設它是 Python 還是 Node.js也不假設它使用哪個模型服務因為這類項目版本變化很快。可以確定的是它面向普通用戶提供了 mac 和 Windows 的下載包也保留了 GitHub 源碼說明既可以直接體驗也可以拿來學習和改造。1.3 這篇文章適合誰能獲得什么這篇文章適合以下幾類讀者第一次接觸 AI Agent想找一個能運行的真實項目來觀察 Agent 行為的人。已經在做 Agent 開發但想了解多智能體模擬世界的工程結構、時間循環、記憶存儲如何處理的人。需要把 AI 小鎮這類項目接入自己產品但不確定依賴、配置、排錯從哪里入手的人。讀完并跟著操作后你應該能自己完成三件事第一把 my_ai_town 或類似項目跑起來看到 AI 角色產生行為第二讀懂它內部大致的工作鏈路知道角色為什么會有某個動作第三遇到啟動失敗、模型調用失敗、角色無響應等問題時能按照日志和配置逐步排查。由于輸入素材沒有給出詳細 README 內容文中命令和配置會以通用示例為主落地前務必以倉庫實際文檔為準。2. 跑通前先理解 AI Agent 小鎮的核心機制2.1 智能體模擬世界的通俗模型可以先把 AI 小鎮理解成“一群有記憶、有目標、會說話的 NPC”。傳統游戲里的 NPC 通常只能播放固定動畫或響應固定對話比如走到某個位置就觸發同一句臺詞。AI 小鎮里的角色不同它們接收環境狀態把狀態交給大模型模型輸出一個動作或一段對話然后系統再把這個輸出應用到世界上。舉一個典型場景早上 8 點角色 A 在自己的房間醒來。系統讀取到當前時間和地點把“現在是早上 8 點你在臥室”發送給大模型。模型根據角色設定和記憶生成一個計劃“去廚房吃早餐”。角色 A 移動到廚房。廚房里已經有角色 B。兩個角色觸發互相感知系統把“對方正在喝咖啡”和之前的聊天記憶打包給模型模型生成一句對話。角色 A 說“早上好今天有什么計劃”角色 B 回答并把這次互動寫入記憶。整個過程不是由一個巨大模型控制整個世界而是多個 Agent 各自獨立運行再通過共享世界狀態產生交互。世界本身像是一個沙盤Agent 是沙盤里的個體大模型是每個個體的“大腦”。2.2 AI Agent 的四個關鍵模塊在類似 my_ai_town 的項目中一個 AI Agent 要正常工作通常會包含四個關鍵模塊。環境感知模塊負責把世界狀態轉換成模型能看懂的文本或結構化數據。例如{ time: 08:00, location: bedroom, weather: sunny, nearby_agents: [Alice], current_activity: sleeping }這一步很關鍵因為大模型本身沒有眼睛它只能通過字符串理解世界。世界狀態寫得不清晰角色的行為就會混亂。記憶模塊負責存儲角色過去的經歷。長期記憶可能放在文件或數據庫里短期記憶可能只保留最近幾輪對話。角色在生成計劃前需要從記憶中檢索與當前場景相關的片段否則它無法記住“昨天和 Alice 約好一起去公園”這種關系。規劃模塊負責把當前觀察和檢索到的記憶組合成一條指令。規劃不一定復雜常見的做法是讓模型先說出“你現在想做什么”再讓系統解析成可執行動作。行動執行模塊負責把模型的文本輸出映射成世界變化。模型可能輸出“move to kitchen”系統就要修改角色坐標輸出“say: hello”系統就要把對話推送到其他 Agent 的觀察中。2.3 容易誤解的三個點第一不要把“每個角色調用一次大模型”當成完整方案。角色調用完模型只是得到了一串文本后面還要有動作解析、狀態校驗、沖突處理和記憶寫入。省掉這些步驟角色會頻繁出現“開口說要去廚房但還站在原地”的問題。第二不要以為大模型輸出什么世界就發生什么。模型可能輸出一個不存在的動作比如“move to moon”也可能輸出超出世界規則的內容。生產級實現需要對模型輸出做白名單校驗或者把動作格式限制成 JSON讓模型只能在固定字段里填寫。第三不要把 AI 小鎮等同于聊天機器人。聊天機器人只關心“你問什么我答什么”而 AI 小鎮里的 Agent 有持續的時間線。它們在沒有人輸入時也會行動需要按 tick 循環不斷推進。真正復雜的不是單次回復質量而是事件之間的因果連續性。3. 環境準備與項目獲取3.1 環境要求雖然倉庫沒有給出明確要求但從多智能體模擬類項目的一般情況看環境準備可以按下面的表格來核對。實際安裝時要以 my_ai_town 的 README 或 package.json、requirements.txt 等文件為準。環境項推薦配置說明操作系統macOS 12 或 Windows 10/11項目提供 mac 和 Windows 下載包源碼通常跨平臺運行時Node.js 18 或 Python 3.9取決于項目后端語言先查看倉庫判斷包管理器npm 或 pip與運行時對應Git2.x拉取源碼使用大模型服務OpenAI 兼容 API 或本地模型遠程 API 需要網絡本地模型需要足夠內存內存8 GB 以上本地模型和前端服務同時運行時會比較吃內存瀏覽器Chrome、Edge 或 Firefox 最新版用于打開小鎮界面如果選擇遠程大模型 API還需要準備 API Key并確保運行終端可以訪問到服務地址。如果選擇本地模型建議先用命令行單獨測試模型接口確認連通后再接入 my_ai_town這樣可以減少排錯變量。3.2 獲取 my_ai_town 源碼和發行包獲取項目有兩種方式。第一種是直接下載游戲包。進入 GitHub 倉庫的 Releases 頁面找到對應標簽下載名稱為 ai小鎮 且后綴為 mac 或 windows 的壓縮包解壓后按說明啟動。這種方式適合只想體驗效果、不想改代碼的人。第二種是克隆源碼適合學習和二次開發。打開終端執行git clone https://github.com/mewamew/my_ai_town.git cd my_ai_town克隆完成后先不要急著安裝依賴先看倉庫根目錄下的 README 文件、配置文件示例和最外層目錄結構。很多啟動問題都出在跳過 README 直接運行命令。建議優先使用源碼方式。這是因為 AI 小鎮這類項目處于快速迭代階段發布包可能滯后于源碼從源碼運行至少能保證代碼和當前模型接口、日志輸出一致。如果需要在自己項目里復用 Agent 機制源碼也更適合改造。3.3 項目結構速覽下面是一個通用多智能體項目的結構示例實際項目不一定完全一致但基本可以按這個思路去閱讀my_ai_town/ ├── README.md ├── package.json ├── src/ │ ├── agent/ │ │ ├── memory.py │ │ ├── planning.py │ │ └── action.py │ ├── world/ │ │ ├── map.py │ │ ├── clock.py │ │ └── event.py │ └── llm/ │ └── client.py ├── config/ │ ├── world.json │ └── agents.json ├── data/ │ ├── locations.json │ └── characters.json ├── server/ │ └── app.py └── web/ └── index.html閱讀項目時優先按下面的順序看config/世界配置、角色配置決定了小鎮里有哪些地點和角色。src/llm/模型服務接入層決定了如何調用大模型。src/world/世界狀態和時間循環決定了 Agent 運行的節奏。src/agent/Agent 的記憶、規劃和行動邏輯是最核心的部分。web/界面層負責把世界狀態可視化。如果倉庫目錄和上面不一致不要硬套只需找到“模型調用”“世界狀態”“角色決策”這三塊入口即可。4. 配置模型接入并啟動 AI 小鎮4.1 AI 服務的接入方式my_ai_town 這類項目通常不會內置模型權重而是通過 API 調用推理服務。常見接入方式有兩種。第一種是接入遠程模型 API例如 OpenAI 兼容接口。這種方式簡單不用部署本地模型但需要申請 API Key并且要認真管理密鑰不要提交到公開倉庫。第二種是接入本地模型推理服務比如 Ollama、vLLM 等工具暴露的 OpenAI 兼容端點。本地模型沒有聯網依賴但需要下載模型文件并占用較多內存和 CPU/GPU 資源。在配置之前建議先用一個最小請求測試模型服務是否可用。比如本地 Ollama 啟動后可以執行curl http://localhost:11434/v1/models如果能返回模型列表說明服務可用。這樣把“模型服務問題”和“項目代碼問題”分開后面接 my_ai_town 時就會簡單很多。4.2 最小配置文件示例假設項目使用環境變量方式配置那么可以創建一個.env文件內容類似下面這種結構# my_ai_town 示例環境變量具體變量名以倉庫 README 為準 AI_API_BASEhttp://localhost:11434/v1 AI_API_KEYlocal AI_MODELqwen2.5:7b AI_TEMPERATURE0.7 AI_TIMEOUT120 AGENT_TICK_INTERVAL5這里的幾個參數含義如下參數含義常見值調大影響調小影響AI_API_BASE模型服務地址遠程或本地服務地址無無AI_API_KEYAPI 密鑰遠程 API 使用真實 Key無無AI_MODEL模型名稱取決于服務商或本地模型模型效果和響應時長都會變模型能力可能下降AI_TEMPERATURE隨機性0.7行為更多樣但可能不穩定行為更穩定但容易重復AI_TIMEOUT單次請求超時120 秒避免誤殺長回答但失敗恢復慢快速失敗但長任務容易超時AGENT_TICK_INTERVAL世界刷新間隔5 秒角色行動慢資源占用低反應更快但模型請求更頻繁這里要特別提醒不同的項目對環境變量命名可能完全不同。有的是OPENAI_API_KEY有的是MODEL_API_KEY有的項目在config.json里配置而不是.env。所以正確做法是先查看倉庫里的.env.example或config.example.json再復制成自己的配置。不要把上面示例直接當成標準配置使用。4.3 啟動步驟和驗證假設項目是 Node.js 前端加 Python 后端的結構那么啟動順序通常是先啟動后端再啟動前端。下面的命令是常見示例不是 my_ai_town 的確定命令實際要以 README 為準。后端啟動pip install -r requirements.txt python server/app.py前端啟動npm install npm run dev如果項目完全使用 Node.js也可能是npm install npm start啟動完成后需要做幾個驗證而不是看到窗口打開就結束。第一驗證后端進程是否正常。終端里不應該只看到“Listening on 0.0.0.0:8000”還要確認沒有模型連接異常。如果有/health或/api/status接口可以訪問它curl http://localhost:8000/health第二驗證前端是否能加載世界狀態。打開瀏覽器訪問終端輸出的地址比如http://localhost:3000。頁面應該能看到小鎮地圖、角色位置和角色當前狀態。第三驗證角色是否真的在行動。保持頁面開啟觀察一段時間看角色位置或動作標簽有沒有變化。同時回到后端終端查看是否有模型調用日志比如每個 Agent 輸出了什么計劃、執行了什么動作。如果角色沒有行動可以優先做兩件事檢查AGENT_TICK_INTERVAL是否設置過大檢查模型返回結果是否為空或不符合動作格式。這些細節通常能覆蓋大部分“啟動成功但世界不動”的情況。5. 深入解讀 AI Agent 的運行鏈路5.1 時間循環從感知到行動AI 小鎮的核心是一個時間循環。世界像一個游戲主循環每隔一定時間推進一次每個 Agent 都在這個循環里完成“感知、規劃、行動”三步。偽代碼如下while world.running: current_time world.clock.now() for agent in world.agents: # 1. 感知 observation agent.perceive(world, current_time) # 2. 規劃 plan agent.plan(observation) # 3. 行動 action agent.execute(plan) # 4. 寫回世界 world.apply(agent, action) # 5. 記錄記憶 agent.remember(observation, action) # 防止循環過快導致模型接口被頻繁調用 time.sleep(world.tick_interval)這里的 tick_interval 很重要。如果所有 Agent 同時請求大模型啟動瞬間可能產生大量并發請求導致模型服務超時或限流。常見做法包括串行調用、限制每輪 Agent 數量、為每個 Agent 設置請求間隔。另外世界循環并不是越短越好。角色在小鎮里移動、聊天本來就不需要毫秒級響應。5 到 10 秒的刷新間隔在演示項目中足夠也能顯著降低模型調用成本。5.2 對話、記憶和個性生成角色之間的對話不是無狀態問答。當兩個角色相遇時系統至少需要把三類信息傳給模型當前場景時間、地點、周圍角色。對方狀態對方正在做什么、情緒如何。歷史記憶這兩個角色過去是否聊過天關系如何。一個簡化的對話請求結構可以是這樣{ system_prompt: 你是小鎮里的角色 Alice性格開朗。你的目標是完成今天的計劃同時可以和遇到的人聊天。, context: { time: 09:00, location: town_square, nearby: [ {name: Bob, activity: walking, relation: friend} ] }, memory: [ {time: 昨天 18:00, event: 你答應 Bob 今天一起去公園} ] }個性信息通常通過 system prompt 注入。模型本身不知道角色背景它只能看到 prompt 里寫的設定。這是最容易出問題的地方如果項目沒有把角色設定整理好所有角色都會變成同一個“AI 默認口吻”小鎮會失去多樣性。記憶的注入需要做篩選不能把全部歷史都塞給模型。一個常用的做法是給每條記憶記錄時間戳、重要性分數和關鍵詞在生成請求前按相關度檢索前 N 條。這樣既能控制 token 長度又能保證模型參考到關鍵信息。5.3 數據存儲角色狀態如何保存AI 小鎮需要保存兩類數據世界數據和角色數據。世界數據包括小鎮地圖、地點類型、角色當前位置角色數據包括角色屬性、當前狀態、記憶流。常見的存儲方式有三種存儲方式優點缺點適用場景JSON 文件簡單直接方便調試數據量大時讀寫慢小規模演示SQLite單文件數據庫事務可靠并發寫性能有限本地單機項目PostgreSQL/MySQL支持并發、查詢能力強需要額外部署和維護生產級服務如果項目默認使用 JSON 文件角色狀態在每次行動后都要寫回磁盤。寫入頻率過高會導致 IO 壓力可以改成定期批量保存或者退出時統一保存。一張簡化的角色數據表可以設計為CREATE TABLE agents ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, location TEXT DEFAULT home, energy REAL DEFAULT 1.0, personality TEXT, current_plan TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE memories ( id INTEGER PRIMARY KEY, agent_id INTEGER NOT NULL, content TEXT NOT NULL, importance REAL DEFAULT 0.5, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (agent_id) REFERENCES agents(id) );設計時要注意記憶表要帶上created_at否則檢索時無法按時間排序importance 字段用于決定哪些記憶優先進入長期記憶。如果只存內容不存元數據Agent 的“記憶”就沒有了時間維度行為連續性也會變差。6. 常見問題與排查路徑6.1 啟動失敗依賴、路徑和端口問題啟動失敗是最常見的問題現象通常有幾種命令找不到模塊、服務啟動后立刻退出、頁面打不開。排查順序應該固定為確認當前目錄在項目根目錄不能站在子目錄里運行npm install。確認運行時版本符合 README 要求比如 Node.js 版本過低會導致語法解析失敗。確認依賴完整安裝。Python 項目可以用pip list檢查關鍵依賴Node.js 項目可以用npm ls。確認端口沒有被占用。如果默認端口被其他服務占用項目會啟動失敗這時需要改配置或停止占用進程。查看終端日志中第一條異常棧從最底部往上找項目自己的代碼路徑。常見原因和處理現象可能原因檢查方式處理建議ModuleNotFoundError依賴未安裝pip list重新安裝 requirements.txtcommand not found運行時未安裝或未加入 PATHnode -v/python --version安裝正確版本并重開終端端口被占用其他服務占用默認端口lsof -i:3000修改端口或停掉占用服務頁面 404前端和后端路徑不匹配查看接口請求地址確認前端代理配置或后端前綴6.2 模型調用超時或返回異常如果項目能啟動但角色沒有反應終端出現超時或模型返回錯誤問題大概率出在模型接入層。先看這幾類現象ConnectionError網絡不通或 API 地址寫錯。TimeoutError單次請求超過 AI_TIMEOUT 設置。401 UnauthorizedAPI Key 錯誤或沒有權限。model not found模型名稱與服務商實際可用的模型名稱不一致。返回內容不是期望的 JSON模型輸出格式不符合動作解析代碼的要求。檢查方式按順序執行# 1. 確認服務地址可達 curl -v http://localhost:11434/v1/models # 2. 確認 API Key 有效 curl -v -H Authorization: Bearer 你的KEY https://api.example.com/v1/models # 3. 確認模型名稱存在 curl -v http://localhost:11434/v1/models如果模型返回超時優先降低本輪角色并發數或者增大 AI_TIMEOUT。如果模型經常返回非 JSON可以在 prompt 里增加強約束并在代碼里做二次解析。不要直接把模型輸出當 JSON 解析至少加一層 try-catch失敗后讓 Agent 重試一次或跳過本輪。6.3 角色無行為或行為停滯角色能啟動、不報錯但一直站在原地或重復同一個動作這類問題最隱蔽。可能原因有以下幾種。第一個原因是記憶檢索為空。如果角色沒有任何歷史記憶模型只能根據當前時間地點做反應輸出會非常單調。可以檢查 memory 表或日志確認角色是否在啟動時注冊了初始記憶。第二個原因是動作解析失敗。模型可能輸出了“go to kitchen”這種自然語言但系統只接受{action: move, target: kitchen}的 JSON。兩者不匹配時角色不會行動。查看日志中是否有“parse action failed”之類關鍵詞。第三個原因是 Tick 循環沒有啟動。有些項目把循環放在后端需要手動點擊界面上的“開始運行”按鈕。如果沒有點擊世界是靜止的。閱讀 README 時要特別注意是否有“play/run/simulation toggle”這類交互。第四個原因是模型溫度設置過低。當 temperature 為 0 時模型總是選概率最高的動作容易出現所有角色都做同一個動作。把溫度調到 0.5 到 0.8 之間行為會更多樣。6.4 日志、性能與資源占用排查多智能體項目比普通 Web 項目更依賴日志。因為角色行為是大模型生成的你無法從代碼里直接推斷“它為什么這么做”只能看日志鏈觀察到了什么、記憶檢索到了什么、模型返回了什么、執行結果是什么。啟動時建議打開詳細日志。如果項目支持LOG_LEVELDEBUG可以設置后觀察。一個理想的日志片段應該像這樣[12:00:00] world tick start, agents5 [12:00:00] agentAlice observe time12:00 locationpark nearby[Bob] [12:00:01] agentAlice retrieve 3 memories, top_score0.92 [12:00:02] agentAlice plan_output{action:chat,target:Bob,text:...} [12:00:03] agentAlice action applied如果項目不支持日志級別配置至少留意兩個指標單次模型請求耗時、每輪循環總耗時。當世界內角色數量增加時模型請求會變成主要瓶頸系統響應會明顯變慢。性能優化方向包括多個 Agent 之間的共享狀態寫操作要加鎖避免并發修改。模型請求在內存中做好緩存相同觀察和記憶可以復用響應。控制單輪循環中參與決策的 Agent 數量不要讓全部 Agent 每 tick 都請求模型。7. 工程化擴展與最佳實踐7.1 從演示走向生產要補全的能力my_ai_town 這類項目在本地跑通只說明演示鏈路可用。如果要放到生產環境還需要補幾塊能力。第一配置外置化。把 API 地址、Key、模型名、tick 間隔等參數放到環境變量或配置中心不能寫死在代碼里。部署時通過環境注入可以避免密鑰泄露。第二持久化升級。如果角色數量增長建議用 PostgreSQL 替換 JSON 文件并給記憶表增加索引。定期歸檔過期記憶避免數據表無限增長。第三異常處理和重試。模型服務可能因為限流、網絡抖動而失敗。生產實現要為每個 Agent 的模型調用增加超時、重試和熔斷機制。重試時要控制次數避免拖垮整個循環。第四內容安全審核。角色生成的內容來自大模型可能包含不符合產品規范的內容。在寫入日志和展示到界面前應該增加過濾和關鍵信息記錄。第五監控與告警。至少監控三件事單次模型調用成功率、單輪循環耗時、角色活躍度。設置告警規則當成功率低于閾值或循環耗時超過設定值時及時報警。7.2 可復用檢查清單在投入新項目前可以用下面的清單快速檢查避免走彎路。階段檢查項環境檢查運行時版本是否滿足 README環境檢查依賴是否完整安裝環境檢查模型服務是否可用、模型名稱是否正確環境檢查API Key 權限是否足夠環境檢查默認端口是否被占用配置檢查配置模板是否復制到了正確文件配置檢查模型地址、Key、超時、溫度是否合理啟動檢查后端是否先啟動成功前端是否有代理地址運行檢查日志中是否出現角色決策輸出運行檢查頁面地圖上角色位置是否隨時間變化運行檢查角色對話是否能被寫入記憶排錯檢查異常日志是否記錄模型原始返回內容排錯檢查動作解析失敗時是否存在兜底邏輯發布檢查密鑰是否沒有提交到代碼倉庫發布檢查數據是否定期備份發布檢查模型調用是否有超時和重試這個清單看起來簡單但能覆蓋 AI 小鎮類項目 80% 以上的問題。遇到異常時先按執行順序核對而不是直接改代碼。7.3 下一步可以做什么跑通 my_ai_town 后可以從下面幾個方向繼續深入。第一個方向是擴展角色和世界。增加新的地點、角色和初始記憶觀察不同設定下角色行為是否出現明顯差異。這時候你會發現系統提示詞和記憶數據質量對 Agent 表現的影響遠大于模型本身。第二個方向是替換模型。把默認模型換成參數更小或更大的模型對比決策質量和響應速度記錄一組自己的評測結果。這個方向可以幫助你理解模型能力和工程成本之間的取舍。第三個方向是把單機版改成服務化。將世界狀態和 Agent 運行邏輯獨立成后端服務通過 API 對外暴露。這樣其他應用可以申請一個“AI 角色”并介入其中比如作為一只 AI NPC 接入自己的產品。第四個方向是深入實現記憶系統。當前項目可能只做簡單的 top-N 檢索你可以引入向量數據庫把記憶轉化為 embedding再做相似度查詢這樣角色對歷史的感知會更細膩。整個過程中最重要的不是把某個具體項目背熟而是建立“模型只是大腦世界、記憶、動作校驗才是工程主體”的認知。把這個認知帶到下一個 AI Agent 項目里你會發現很多啟動失敗和角色卡死的問題都可以用同一套方法快速定位。