AI VTuber 的記憶與自主性設計
這篇記錄的是我做AI VTuber專案時,把「怎麼設計得像活的」拆解出來的兩個核心機制:長期記憶怎麼存、自主行動怎麼來。適合已經在動手做LLM驅動虛擬主播雛型、對prompt、RAG、embedding有基本概念的人讀。讀完能判斷自己的專案該先做哪一層記憶、主動迴圈怎麼加、玩遊戲這件事現在該不該碰,而不是一開始就想著做出能自主玩任何遊戲的AI VTuber。
對應的專案是010-AI-VTuber,背景可以先看AI-VTuber 是什麼-白話入門。我對這個設計的原則很簡單:誠實面對LLM的能力邊界,先用最省成本的做法把「像活的」的感覺做出來,不要一開始就衝著玩遊戲去。
現在的雛形只有短期記憶,程式一關就忘光
目前的雛形版本只靠context window(上下文視窗)裡最後8輪對話撐場面,代表AI VTuber完全不記得昨天發生的事,也不記得誰是常客。長期記憶得另外設計,由淺到深大致分四層:
| 做法 | 怎麼運作 | 成本/難度 | 適合情境 |
|---|---|---|---|
| 事實清單 | 把重要事實寫成檔案(例如「觀眾A是常客」「上次玩薩爾達」),開場時整包塞進system prompt | 零成本、最穩 | 起步就用這個 |
| 滾動摘要 | 對話太長時,讓LLM把內容壓成摘要存檔,下次對話再注入 | 低成本 | 控制token用量、跨天記憶 |
| 向量庫語意檢索(RAG) | 每條記憶轉成embedding存進Chroma、FAISS這類向量資料庫,需要時語意檢索最相關的幾條再注入 | 中;embedding可以用本地模型免費跑,GTX 1660就能負擔 | 記憶量大、多個角色要共享同一套世界觀 |
| 知識圖譜 | 記錄實體與實體之間的關係 | 高 | 多數個人專案用不到 |
何時寫入記憶,比怎麼存更關鍵
每句對話都存下來會爆量,而且大多是雜訊。業界的標準做法叫「反思」:每場直播結束後,讓LLM回顧整場內容,自己萃取出幾條值得長期記住的重點再存檔,而不是逐句無腦記錄。
這套「記憶流加重要性評分加反思」的架構,出自史丹佛2023年的論文《Generative Agents: Interactive Simulacra of Human Behavior》(俗稱AI小鎮),是這個領域公認的範本藍圖。該記的內容大致分三類:角色自己的設定與經歷,用來維持人格一致;觀眾互動紀錄,誰是常客、聊過什麼,這部分要留意隱私;事件記憶,玩過哪些遊戲、發生過什麼趣事。
務實路線:先用零成本的檔案法,記憶量大了才上向量庫
對「一個角色每天直播」這種規模,事實清單加滾動摘要已經足夠而且穩定,純檔案零成本,先做這一層就好。等到記憶量真的大到塞不進system prompt,或是要做一群角色共享世界觀,再上向量庫,embedding走本地免費模型(例如bge-small)就好,不需要額外的API費用。
AI VTuber看起來有自我,其實是工程堆出來的錯覺
先講清楚,免得期待落空:LLM沒有真正的意識或主觀體驗。像以自主感聞名的AI VTuber Neuro-sama那樣,看起來「有自我、會主動」,本質是工程編排出來的效果,由三樣東西堆出來:主動迴圈、人格一致性、長期記憶。這三樣做好,觀眾就會覺得「她像活的」,但底層仍然只是程式運作。
自主行為的本質,是多加一個定時戳LLM的迴圈
現在的雛形是被動的,等使用者打字才會回應。要做出自主的感覺,做法是加一個主動迴圈:沒人講話的時候,定時去問LLM現在想說什麼、想做什麼,讓它自己開話題、吐槽、回應彈幕。這是CP值最高、相對好做的一步,只需要一個排程器加上幾個可選動作。
flowchart LR A[定時排程器觸發] --> B{目前有沒有人在聊天} B -->|沒有| C[主動找話題或吐槽] B -->|有| D[被動回覆訊息] C --> E[發到聊天室] D --> E
玩遊戲是完全不同量級的工程,別一開始就衝這個
讓AI VTuber自己玩遊戲得拆成三步,每一步都有坑:看畫面(感知)要截圖丟給能理解圖片的視覺語言模型(VLM,例如Qwen-VL或GPT-4o);決策是讓LLM依畫面內容決定下一步動作;操作則是模擬鍵盤或手把輸入去執行。VLM又貴又慢,GTX 1660本地跑大型VLM很吃力,多半得走API,成本與延遲都會上升。
技術細節:不同遊戲類型的可行性落差
- 文字類、回合制、猜謎、瀏覽器小遊戲:可行,是不錯的起點。
- 有現成程式API的遊戲(西洋棋引擎、Pokemon模擬器、透過Mineflayer操作的Minecraft):可行,但要自己寫接口。
- 即時動作類(FPS、複雜動作遊戲):屬於研究級難題,VLM的延遲是硬傷,尚未驗證有低成本可行的做法。
業界常見的偷吃步是半自動:實際操作遊戲的是真人或腳本,AI只負責嘴,也就是旁白、吐槽、看畫面評論。Neuro-sama玩osu!、Minecraft是針對性的專門工程,不是通用能力。另外可以參考的延伸案例是《Voyager》,GPT-4在Minecraft裡自主探索,但那是有程式介面可用的特例,不能直接套用到一般遊戲。
務實路線:先做主動迴圈,玩遊戲放最後
在GTX 1660加低預算的條件下,別一開始就追「自主玩任意遊戲」,那會吃掉全部時間與預算。比較合理的順序是:先做主動迴圈,讓AI在冷場時自己找話題、回聊天室,這是最像活的、也最該先做的一步;接著做可程式化的簡單互動,像文字遊戲、猜數字、觀眾問答、讀彈幕做反應;再來是看畫面吐槽,定時截圖丟給VLM API做評論,比實際操作遊戲便宜也可行;真正的自主操作遊戲放到最後,或者挑一款有現成API的遊戲做展示就好。
24小時自主發言的代價是內容風險,得靠護欄擋下來
自主又24小時在線的AI VTuber,有說錯話、被觀眾釣魚帶風向的風險。上YouTube之前要加內容過濾與護欄,包含敏感詞處理、拒答政策、人設邊界。主動迴圈的頻率也不能設太高,否則token成本和碎念感都會失控。