數十億場對局,會贏還不夠?《洛克王國:世界》公開戰鬥AI

文 / 遊戲那點事 零、willow

一款持續更新的遊戲,要怎樣讓AI對手跟上玩家和版本的變化?

從AI角色動畫、自動化測試,到玩家直接面對的戰鬥AI,騰訊遊戲在科隆遊戲展開發者大會(gamescom dev)分享了多項技術實踐。其中,《洛克王國:世界》提供了一個已經投入線上運營的案例:團隊如何訓練不同風格的NPC,並跟隨遊戲內容的更新,按周交付模型。

圖片


(2026年gamescom期間的騰訊遊戲展區)

在這場分享中,騰訊遊戲魔方工作室羣Game AI團隊負責人劉若塵分享了《洛克王國:世界》戰鬥AI的訓練與部署實踐。據他介紹,這套AI系統與遊戲同期上線,已累計支撐數十億場線上對局。

這些對局裏的AI,要給新手感受到博弈的樂趣,也要讓熟練玩家有機會練習反制。它需要理解複雜陣容,依據對局中已經公開的信息作出判斷;數百名NPC還要呈現不同風格,並隨新精靈、新技能持續更新。

這套系統採用的是相對常規的強化學習算法:模型在反覆對戰中,根據行爲和結果獲得獎勵或懲罰,逐步學會怎樣決策。若塵在分享中用了大量篇幅講述具體研發問題:如何避免能量已滿卻繼續聚能的異常行爲,如何讓AI學會使用不同陣容,以及如何跟上設計團隊的節奏,按周交付模型。

以下爲遊戲那點事整理的分享實錄,爲提高閱讀體驗有所調整:


01

 不同玩家,需要怎樣的PvE對手?

大家好,我是劉若塵,來自騰訊魔方工作室羣,負責Game AI團隊。今天和大家分享《洛克王國:世界》PvE戰鬥背後的強化學習AI。

圖片


(團隊爲動作、射擊、RPG等不同品類研發AI,共用工具,技術方向包括強化學習、生成式AI和大語言模型)

《洛克王國》最早於2010年以頁遊形態推出。打開網頁就能玩,也讓它成爲許多中國玩家的童年記憶。

圖片


(早期角色宣傳圖與頁遊家園界面)

新作《洛克王國:世界》把這個系列擴展爲精靈大世界。玩家在世界中探索,收集、培養稱爲“精靈”的戰鬥夥伴,再用精靈和技能組成陣容,參與回合制戰鬥。我們也首次在精靈回合制的NPC戰鬥中引入了深度強化學習。

圖片


(除探索和戰鬥外,新作還包含多人互動,可在PC和移動端遊玩)

我們要覆蓋的PvE(玩家與遊戲內對手的戰鬥)場景,大致分爲三類。

一類是露天對戰,玩家探索世界時會頻繁遇到,局面變化很多;一類是晉升考覈,幾乎每名玩家都會經歷,難度曲線要穩定;還有“星光對決”這樣的限時玩法,對手使用的陣容更接近玩家對戰時的搭配,需要根據局面連續決策。

圖片


(露天對戰、晉升考覈與“星光對決”的場景示例)

玩家對這些戰鬥的期待也有差異。休閒玩家希望玩得有趣,NPC至少要能回應玩家的策略,讓戰鬥有來有回。對於競技玩家,PvE也是進入PvP對戰前的練習。他們需要通過NPC連貫的反制,練習系別克制、換位時機和資源管理。

過去,我們可以用行爲樹、狀態機和條件判斷來規定NPC的動作。這類方案適合目標明確、流程固定的場景。但隨着精靈、技能和陣容持續增加,規則很容易固化成一兩套被玩家熟悉的套路。每次增加新內容,開發者還要回頭調整大量規則,維護成本也隨之上升。

圖片


(團隊從策略生成、戰鬥記憶、全局判斷、風格擴展和維護成本等維度比較兩條技術路線)

我們因此爲項目定製了一套強化學習方案,希望決策模型能結合戰鬥歷史考慮連續多步行爲,同時適應不斷加入的新內容。

這套方案需要解決四類問題。

首先是陣容規模。數百種精靈、上千種技能可以搭配出數量龐大的組合,逐一窮舉並不現實。

其次是信息不完全。對手尚未出場的後備精靈、沒有使用過的技能,都可能改變局勢,AI需要根據已經公開的信息作判斷。

第三是怎樣評價一場戰鬥。除了勝負,還要看資源交換、系別克制、特殊機制的處理,以及行爲是否自然。

第四是沒有“反應時間”這個抓手。動作或射擊遊戲可以通過調整AI的反應速度改變體驗感受。回合制戰鬥給雙方都留出了決策時間,感受的調節就更多地取決於策略本身。

圖片


(回合制戰鬥的主要技術挑戰)

我們把研發工作分爲狀態表示、網絡結構、獎勵設計、訓練數據與調度,以及日常訓練和線上部署五個環節。

圖片


(從模型輸入到線上部署的整體方案)


02

 模型能看見什麼,又能從中學到什麼?

先看一場戰鬥包含哪些信息:回合數、天氣和進度位於最上層,下面是雙方陣容中的精靈,每隻精靈又有自己的屬性、技能、增益和效果。整套數據可能嵌套四五層,各層的對象數量還會變化。

如果把各層都補成固定長度,再將所有信息拼接在一起,會佔用大量空間,“哪個技能屬於哪隻精靈、哪個效果屬於哪個技能”的關係也不容易保留。

我們的做法是逐層編碼。先把技能整理成固定長度的特徵,再匯入精靈層;精靈特徵匯入陣容層,最後形成整場戰鬥的狀態。同一層的對象共用編碼方法,空位則單獨標記,讓模型在計算時忽略這些位置。

圖片


(效果、增益、技能、精靈和陣容逐層匯入全局狀態)

技能還有一個持續更新的問題:模型要怎樣理解剛加入遊戲的新技能?

我們爲技能同時保留具體ID和語義類別。具體ID用來區分每一個技能;語義類別把作用相近的技能歸到一起,讓模型面對新技能時,能先參考已經學過的同類技能。

這些類別通過一條獨立流程生成。大語言模型先讀取技能的結構化屬性,將它們整理成格式統一的文字描述;文本嵌入模型把描述轉成一組數值,用來表示技能的含義;再通過聚類,將含義相近的技能分到同一類別。新技能走完這條流程,模型就能參考已有類別,對它的作用形成初步判斷,無需每次都重做輸入結構。

大語言模型在對局外完成這項工作。正式戰鬥中的出招,仍由強化學習策略網絡決定。

圖片


(以“當頭棒喝”爲例,技能經過描述生成、文本嵌入模型編碼和聚類後獲得語義類別)

模型還需要遵守戰鬥中的信息邊界。對手的後備精靈沒有出場,就保持隱藏;精靈即使已經出場,尚未使用過的技能也不會提前向AI公開。我們對精靈和技能分別做動態信息屏蔽,讓線上出招使用的信息與玩家的可見範圍一致。

訓練時,我們會用到兩類網絡。策略網絡負責選擇動作,始終只接收玩家可見的信息;價值網絡負責評估局面,可以在訓練階段讀取完整狀態,爲學習提供更穩定的判斷依據。這種安排稱爲“集中訓練、分散執行”(CTDE)。上線後,只運行遵守可見邊界的策略網絡。

圖片


(左側爲動態信息屏蔽,右側爲集中訓練、分散執行的結構)

隱藏信息無法直接讀取,已經發生的動作卻能提供線索。玩家會記得對手常用什麼技能起手,哪隻精靈在低生命值時被換下,誰可能被留作後手。模型同樣需要利用這些歷史。

我們把它們分成兩條序列:技能操作序列記錄每回合的技能使用,捕捉短期意圖、連招和效果疊加;精靈出場與換位序列則記錄更長時間裏的陣容安排。技能序列先完成編碼,再與出場序列融合,最後併入當前局面。

圖片


(下方兩張戰報界面分別展示技能記錄與精靈出場記錄)

這樣,模型既有當前戰鬥狀態,也保留了前面回合的公開線索,可以據此判斷對手接下來可能怎樣行動。

圖片


(完整網絡結構:狀態與歷史信息完成編碼後,分別用於動作選擇和訓練時的價值評估)


03

 用獎勵約束行爲,讓NPC打出不同風格 

我們使用PPO(近端策略優化)算法訓練模型,讓它從換位、施放技能、聚能等規則允許的動作中作選擇。訓練時,模型之間反覆對戰,也就是進行自我博弈;一次任務會運行數千萬場對局。

具體到《洛克王國:世界》,大量工作都花在了怎樣定義“打得好”上。

勝負要到戰鬥結束才能確定,傷害、資源交換和系別克制則在過程中不斷髮生。這些目標的反饋時間和數值範圍不同,也各有波動,混在一個評估結果裏,會給訓練帶來干擾。

我們採用多頭價值網絡,在共享特徵之上分出不同的評估分支:一個分支專門預測最終勝負,其他分支分別負責不同的過程目標。各類獎勵由此有了各自的評估基準,便於穩定訓練;需要增減目標時,主要調整配置即可。

圖片


(各分支分別評估勝負、傷害效率、系別克制、技能質量、生命值增減和行爲懲罰)

具體獎勵也隨之拆開。勝負、超時、雙方精靈的生命值差和資源差屬於基礎獎勵;時機合適的換位、有效使用技能和利用系別克制,會得到額外獎勵。

我們還要單獨處理一些異常行爲。AI可能贏下一場戰鬥,卻在過程中反覆無意義換位,甚至在能量已經蓄滿時繼續聚能。這些動作未必立刻導致失敗,玩家看着卻會覺得對手不合常理。

我們把它們稱爲“immersion bugs”,也就是會破壞戰鬥沉浸感的異常行爲。訓練時,無意義換位、滿能量聚能、換上生命值過低的精靈等行爲都要受到懲罰,促使模型在追求勝利的同時,打出正常的戰鬥過程。

圖片


(不同獎勵的訓練曲線可以分開觀察,便於檢查具體行爲的學習情況)

不同的獎勵配置,還能改變NPC的戰鬥風格。開放世界裏有數百名NPC訓練師,如果大家都以同一種節奏出招、換位,體驗就會顯得機械。

我們複用同一套網絡結構,通過不同的獎勵配置,訓練均衡、進攻、防守等風格的模型。它們在反制、換位、資源使用等指標上會呈現不同特徵,無需爲每一種風格重新設計底層網絡。

圖片


(雷達圖對照三種風格的勝率、反制與換位次數,以及攻擊、防守技能佔比)

獎勵也要適應具體機制。以天氣隊爲例,天氣技能會在多個回合內改變全局環境,影響特定屬性技能的威力。如果己方陣容無法從中受益,開啓天氣就浪費了一個回合;如果用得太晚,剩餘時間又不足以發揮效果。

因此,我們爲天氣設置單獨的獎勵。陣容能夠受益時,獎勵會鼓勵模型儘早在合適的時機開啓天氣;隨着回合推進,這項獎勵逐漸衰減。如果當前陣容無法受益,或時機已經太晚,就應該跳過這個動作。

圖片


(左側曲線記錄模型合理施放天氣的概率)

共鳴魔法則在常規戰鬥中增加了新的變量,每種共鳴魔法都需要相應的獎勵設計。

當AI使用的陣容帶有共鳴魔法時,我們先通過獎勵,讓它學會每場戰鬥至少使用一次,再繼續尋找合適的施放時機。如果是對手獲得了強力增益,模型對資源交換的判斷也要隨之調整,避免繼續按普通狀態下的收益來作決策。

圖片


(共鳴魔法與戰鬥風格、細化參數共同組成場景配置,一次訓練可覆蓋數百個PvE場景)


04

 從訓練到部署,讓AI跟上版本更新 

用於訓練的陣容,決定了模型會把時間花在哪些戰鬥上。

如果從所有精靈和技能中完全隨機組隊,大量計算會耗在正式版本里幾乎不會出現的組合上。模型在這些陣容上學到的策略,也未必適用於設計團隊準備上線的內容。

我們因此建立了一個混合陣容池,持續納入最新的PvE設計陣容和早期封閉測試中真實出現過的陣容。訓練由這些實際內容起步,再按一定比例對精靈或技能作局部隨機替換,擴充能夠覆蓋的組合。遊戲上線後,新陣容也會繼續加入。

圖片


(訓練初期使用的陣容來源)

模型使用不同陣容時,學得快慢並不一樣。某些陣容很快就能打出不錯的表現,另一些卻長期勝率偏低。如果平均分配訓練次數,已經熟練的陣容會佔用大量計算,落後的陣容卻遲遲得不到足夠練習。

我們用“遺憾值”調整各套陣容被抽中訓練的概率。模型使用某套陣容時的失敗率越高,這套陣容的遺憾值就越大,下一階段獲得的訓練機會也越多。隨着勝率改善,它的採樣權重會逐漸回落,計算資源再轉向其他需要加強的陣容。

挑選自我博弈對手時,我們也採用同樣的方法。當前模型較難戰勝的歷史版本,會更頻繁地被選爲對手,讓訓練持續針對尚未掌握的應對方式。

圖片


(圖中早期樣本里,電系陣容由於低勝率被採樣更多;後期各類採樣次數逐漸接近)

在訓練環境上,我們複用了魔方原有的遊戲測試自動化平臺。它可以用大量虛擬客戶端壓測戰鬥服務器,直接調用正式戰鬥邏輯,用來並行開展自我博弈,也能讓訓練與正式產品保持一致。

在此基礎上,我們接入內部分佈式訓練平臺,支撐每次任務中數千萬場對局的運行。

模型上線時,戰鬥服務器通過輕量推理工具包(SDK)直接調用模型,計算戰鬥動作。多個戰鬥實例共用一份模型和配置,每場對局分別保存自己的歷史狀態;不變的特徵可以提前緩存。模型、配置和NPC參數由配置服務動態更新,更換模型無需重啓戰鬥服務器。

圖片


(左側爲分佈式訓練環境,右側展示戰鬥服務器上的推理SDK與動態配置)

前面的狀態表示、獎勵設計和陣容採樣,再加上這套訓練與部署方式,使我們可以跟着設計團隊按周更新,持續交付多種能夠上線的模型。算法本身相對常規,這些圍繞具體遊戲完成的工作,才讓它能夠穩定應用於正式版本。

圖片


(團隊內部對比:本方案的訓練池約含10³套陣容,可按周迭代;純隨機方案的可能組合約爲10³⁴種,迭代週期爲月級)

判斷模型在一場戰鬥中的表現,可以留意它怎樣利用系別克制、何時施放共鳴魔法,以及換位節奏是否合理。

圖片


(現場展示的《洛克王國:世界》戰鬥畫面)

這套強化學習模型與遊戲同期上線,目前已累計支撐數十億場線上對局,覆蓋數百名NPC。

接下來的工作主要有四個方向。

第一是混合專家模型(MoE)。現在,不同風格的模型仍然並行存在。我們希望未來把它們整合進一個模型,根據場景調用相應的“專家”模塊,在豐富戰鬥行爲的同時控制模型數量。

第二是平衡性分析。我們正在建立一條從訓練策略到陣容搜索的流程,希望在新精靈或新技能上線前預測強度,幫助設計團隊更早調整數值。

第三是場景擴展,包括更多的賽季和限時內容,以及未來可能出現的玩家與AI並肩作戰的合作場景。在這些場景中,AI還要學會怎樣與玩家配合。

第四是進一步輕量化。我們會繼續壓縮模型,降低推理成本,爲未來可能的邊緣推理等場景作準備,同時儘量保持戰鬥行爲的質量。

圖片


(團隊計劃繼續探索的方向,在玩家設備上運行模型仍屬於未來工作)


05

 現場問答 

問:遊戲現在有離線模式嗎?模型運行在玩家設備上,還是服務器上?

若塵:目前《洛克王國:世界》是在線遊戲,模型運行在戰鬥服務器上。至於把模型壓縮後放到玩家設備上運行,用於可能出現的離線或其他場景,仍是未來的探索方向。

問:線上單次推理大概需要多久?使用什麼技術,成本怎樣?

若塵:目前單次推理耗時低於1毫秒。我們使用TensorFlow Lite和輕量推理SDK,在戰鬥服務器的CPU上完成推理,再把結果同步到客戶端。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com