讓玩家全程掌控游戲:自然語(yǔ)言指令驅(qū)動(dòng)的游戲引擎到來(lái)了
對(duì)于每一位熱愛(ài)打游戲的人而言,都曾經(jīng)想過(guò)這樣一個(gè)問(wèn)題,「這游戲要是我來(lái)做就好了!」
可惜的是,游戲開(kāi)發(fā)有很高的門檻,需要專業(yè)的編程技巧。
近日,來(lái)自上海交大的團(tuán)隊(duì)開(kāi)展了一個(gè)名為「Instruction-Driven Game Engine, IDGE」的項(xiàng)目,他們針對(duì)未來(lái)游戲的開(kāi)發(fā),提出了一個(gè)酷炫的新范式:利用自然語(yǔ)言指令開(kāi)發(fā)游戲,玩家說(shuō)怎么玩就怎么玩,讓 UGC 貫穿于游戲的每個(gè)角落。
IDGE 顧名思義,是一個(gè)指令驅(qū)動(dòng)型的新概念「游戲引擎」,它能夠支持用戶輸入對(duì)游戲規(guī)則的自然語(yǔ)言描述,來(lái)自動(dòng)生成一個(gè)「玩家專屬」的游戲。
- 論文:https://arxiv.org/abs/2404.00276
- 代碼:https://github.com/gingasan/idge
- Demo:https://www.bilibili.com/video/BV1dA4m1w7xr/?vd_source=e0570b35759018455d30551c1e16a676
- 論文標(biāo)題:Instruction-Driven Game Engines on Large Language Models
概述
什么是 IDGE
游戲引擎是游戲開(kāi)發(fā)的核心,傳統(tǒng)意義上的游戲引擎由復(fù)雜的編程語(yǔ)言驅(qū)動(dòng)。這種壁壘阻礙了游戲愛(ài)好者實(shí)現(xiàn)他們開(kāi)發(fā)游戲的夢(mèng)想。
文中提出的指令驅(qū)動(dòng)游戲引擎 IDGE,讓使用者只需提供一段自然語(yǔ)言的指令,就能設(shè)計(jì)出新的游戲,并基于該引擎進(jìn)行游玩。這種指令作者稱之為「游戲劇本(Game Script)」,它詳細(xì)描繪了用戶想要的游戲的全貌。
從對(duì)話模型到游戲引擎
IDGE 是一個(gè)基于大語(yǔ)言模型(LLM)的神經(jīng)引擎,如今的對(duì)話式大語(yǔ)言模型,如 ChatGPT,能夠通過(guò)一個(gè) system prompt 來(lái)扮演各種角色,和用戶進(jìn)行對(duì)話交互。
傳統(tǒng)的游戲引擎也可以被看作是一個(gè)精密版的交互系統(tǒng)。引擎根據(jù)玩家利用編程語(yǔ)言實(shí)現(xiàn)的游戲規(guī)則,在每次玩家進(jìn)行了輸入以后,都會(huì)計(jì)算一次最新的游戲狀態(tài),并且將最新?tīng)顟B(tài)渲染成游戲畫(huà)面展示給玩家。對(duì)于 IDGE 來(lái)說(shuō),其主體流程與傳統(tǒng)游戲引擎類似,但游戲規(guī)則是用自然語(yǔ)言描述而不是用編程語(yǔ)言編程實(shí)現(xiàn),游戲狀態(tài)的計(jì)算也由 LLM 推理得到。
以大家最熟悉的石頭剪刀布為例,對(duì)于 IDGE 而言,我們實(shí)現(xiàn)游戲的方式是給定一段游戲劇本作為 system prompt:
現(xiàn)在玩一個(gè)名為石頭剪刀布的游戲,兩位玩家同時(shí)發(fā)出代表游戲元素的動(dòng)作;石頭、剪刀和布。游戲的結(jié)果由 3 個(gè)簡(jiǎn)單的規(guī)則決定:石頭戰(zhàn)勝剪刀;剪刀戰(zhàn)勝布;布戰(zhàn)勝石頭。如果動(dòng)作相同則進(jìn)入下一輪游戲。
以下是一個(gè)實(shí)際游戲的例子:
IDGE:開(kāi)始剪刀石頭布,請(qǐng)出示你的動(dòng)作
- player 1:剪刀 | player 2:剪刀 (player 1 2 發(fā)出動(dòng)作階段互相不可見(jiàn))
IDGE:player 1 的動(dòng)作是剪刀,player 2 的動(dòng)作是剪刀,游戲繼續(xù),請(qǐng)出示你的動(dòng)作
- player 1:剪刀 | player 2:石頭 (player 1 2 發(fā)出動(dòng)作階段互相不可見(jiàn))
IDGE:player 1 的動(dòng)作是剪刀,player 2 的動(dòng)作是石頭,player 2 獲勝,游戲結(jié)束
穩(wěn)定性和多樣性的雙重挑戰(zhàn)
乍一看,IDGE 的運(yùn)作方式跟傳統(tǒng)的對(duì)話模型是一樣的,用戶皆以多輪對(duì)話的形式和模型進(jìn)行互動(dòng)。但是,作者認(rèn)為 IDGE 相比于普通的對(duì)話模型,會(huì)遇到兩大挑戰(zhàn)。
- 首先是穩(wěn)定性(Stability)。相比于聊天,在游戲中,任何一個(gè)小問(wèn)題就有可能導(dǎo)致整個(gè)游戲發(fā)生錯(cuò)亂,因此 IDGE 的預(yù)測(cè)追求 100% 的準(zhǔn)確率。
- 其次是多樣性(Diversity)。玩家群體十分龐大,涵蓋不同年齡、性別、以及文化上的差異,它們對(duì)游戲的偏好截然不同,描述規(guī)則的語(yǔ)言也差異頗大。這意味著,IDGE 要理解高度多樣的用戶輸入,同時(shí)保證游戲運(yùn)行的穩(wěn)定。
如何建模游戲引擎的任務(wù)
文章中,作者基于對(duì)游戲的理解,提出了一種全新任務(wù),稱為「Next State Prediction」。相比于自然語(yǔ)言,由一串字符(token)定義了一句完整的話,一局完整游戲由一系列游戲中狀態(tài)(in-game state)組成,這些狀態(tài)代表了游戲當(dāng)前的所有信息。因此對(duì)于一個(gè)游戲引擎來(lái)說(shuō),它的任務(wù)就是,根據(jù)之前的游戲狀態(tài),預(yù)測(cè)下一個(gè)游戲狀態(tài)。
然而一個(gè)游戲狀態(tài)序列相比于字符序列要大得多,這很可能造成輸入的溢出。針對(duì)這種情況,作者引入了獨(dú)立性假設(shè),即某一時(shí)刻的游戲內(nèi)狀態(tài)只和此前的 1 個(gè)有關(guān),那么問(wèn)題的求解就簡(jiǎn)化成了:
其中 z 為游戲劇本,對(duì)于一整局游戲來(lái)說(shuō)是全局變量,x_t 是 t 時(shí)刻的玩家輸入。
數(shù)據(jù)生成和數(shù)據(jù)定義
除了問(wèn)題的建模,如何構(gòu)造數(shù)據(jù)也是 IDGE 的核心問(wèn)題。
本文以撲克牌游戲作為 IDGE 的第一個(gè)探索場(chǎng)景。在文中,作者通過(guò)一個(gè)撲克牌模擬程序,獲取了大量的游戲日志,由此作為 IDGE 的數(shù)據(jù)來(lái)源。
游戲劇本
作者制定了一個(gè)結(jié)構(gòu)化的劇本模板,如下圖所示。通過(guò)填充相應(yīng)的配置參數(shù),表達(dá)不同的游戲。
可以看到,劇本支持 7 種主要的參數(shù):玩家人數(shù)、底注、初始籌碼、花色種類、單牌的大小排序、組合牌的大小排序、游戲流程。
除了結(jié)構(gòu)化的描述,游戲劇本還包含了對(duì)某些特定游戲規(guī)則的自然語(yǔ)言描述,如上圖中的「Specific Rules」所示,這里的描述要求引擎把手牌最小的玩家視作為贏家,和傳統(tǒng)的德州撲克相反。自然語(yǔ)言的引入,大大增加了游戲劇本的多樣性。
游戲內(nèi)狀態(tài)和玩家輸入
作者設(shè)計(jì)了一套簡(jiǎn)潔高效的標(biāo)準(zhǔn)化語(yǔ)言,來(lái)表達(dá)撲克游戲中的每一個(gè)狀態(tài),如下圖左側(cè)。
上圖為作者發(fā)布的游戲 Demo 的截圖。左側(cè)為實(shí)際游戲中引擎的游戲內(nèi)狀態(tài),右側(cè)為游戲界面。
如圖所示,作者所設(shè)計(jì)的語(yǔ)言以 "|" 作為分割符,可以說(shuō)非常地簡(jiǎn)潔了。
我們還可以看到,圖中里玩家 1 輸入了一條指令「Raise to 10!」,代表他要加注。因此下一個(gè)狀態(tài)則變?yōu)榱讼旅嬉粡垐D,可以看到玩家 1 的籌碼發(fā)生了變化,由 「0/1000」變?yōu)榱恕?0/990」。此時(shí)引擎的輸出也發(fā)生了變化,它讓玩家 2 進(jìn)行下注。
數(shù)據(jù)效率
除了生成數(shù)據(jù),作者還強(qiáng)調(diào)了數(shù)據(jù)的效率問(wèn)題。由于模擬器是一局一局游戲生成的,那么會(huì)造成的結(jié)果是,一些出現(xiàn)概率較低的情況會(huì)更低,導(dǎo)致數(shù)據(jù)不平衡。作者提到,這是引擎(engine)相比于智能體(agent)的一個(gè)重大區(qū)別:智能體通常遵循一組特定的策略,而引擎則盡可能地保證對(duì)所有可能的策略都是無(wú)偏的。
一個(gè)直觀的例子就是撲克牌里的順子,正常來(lái)說(shuō)它出現(xiàn)的情況遠(yuǎn)遠(yuǎn)低于對(duì)子。那么在這樣的數(shù)據(jù)上訓(xùn)練得到的引擎,會(huì)在對(duì)子上過(guò)擬合,而在順子上欠擬合,即使訓(xùn)練數(shù)據(jù)量非常大。
針對(duì)這個(gè)問(wèn)題,作者給出了一個(gè)簡(jiǎn)單的小技巧,即調(diào)整數(shù)據(jù)采樣的比例,讓所有情況盡可能地均衡。下圖左側(cè)為隨機(jī)采樣下各個(gè)牌組出現(xiàn)的頻率直方圖,對(duì)子和高牌要遠(yuǎn)遠(yuǎn)高于其它組合,而右側(cè)為均衡之后的直方圖。
訓(xùn)練方法
為了使模型兼?zhèn)浞€(wěn)定性和多樣性,作者提出了一種課程學(xué)習(xí)的方法。一次訓(xùn)練分為三個(gè)階段。
預(yù)熱(Warmup)
一個(gè)游戲引擎涵蓋了多類型的任務(wù),對(duì)于一個(gè)撲克引擎來(lái)說(shuō),它需要學(xué)會(huì)發(fā)牌、翻牌、換牌、下注等。一次性讓模型去學(xué)習(xí)大量的子任務(wù),會(huì)帶來(lái)冷啟動(dòng)問(wèn)題。因此,作者提出了一個(gè)預(yù)學(xué)習(xí)過(guò)程,即讓模型先在一個(gè)稱為「核心集」(Core Set, CS)的指令微調(diào)數(shù)據(jù)集上進(jìn)行預(yù)學(xué)習(xí)。核心集里包含了各種各樣的基本函數(shù),為模型提供了一個(gè)良好的初始化。
作者提到,核心集的作用類似于傳統(tǒng)計(jì)算機(jī)系統(tǒng)的工具庫(kù),為系統(tǒng)的上層功能提供支持。只不過(guò)不同的是,對(duì)于大語(yǔ)言模型來(lái)講,這些工具都以指令的形式存在。
標(biāo)準(zhǔn)(Standard)
預(yù)熱過(guò)后的第二階段,即讓模型在標(biāo)準(zhǔn)的引擎數(shù)據(jù)上進(jìn)行微調(diào)。
多樣(Diverse)
最后一個(gè)階段也是最難的階段,模型需要超越標(biāo)準(zhǔn)數(shù)據(jù)中的結(jié)構(gòu)化游戲劇本,學(xué)習(xí)理解自然語(yǔ)言描述的劇本。相對(duì)于人工標(biāo)注大量的自然語(yǔ)言劇本,作者提出了一種簡(jiǎn)單而高效的方法,稱為「片段重述」(Segment Rephrasing, SR)。具體來(lái)說(shuō),隨機(jī)采樣劇本的某些片段,用 GPT3.5 以自然語(yǔ)言將其重述。相比于結(jié)構(gòu)化,經(jīng)過(guò)重述后的游戲劇本會(huì)具有更加豐富的語(yǔ)言表達(dá),更加難以理解。
這一個(gè)過(guò)程作者還利用了一個(gè)小技巧,即在經(jīng)過(guò)重述后的數(shù)據(jù)上訓(xùn)練的同時(shí),采樣一定比例的標(biāo)準(zhǔn)化數(shù)據(jù),目的是減輕模型的災(zāi)難性遺忘。作者發(fā)現(xiàn)這有助于提高最終的穩(wěn)定性。
以上三個(gè)階段,預(yù)熱、標(biāo)準(zhǔn)、多樣,對(duì)應(yīng)了課程學(xué)習(xí)的三種難度等級(jí)。從訓(xùn)練的角度來(lái)看,它對(duì)應(yīng)著模型從標(biāo)準(zhǔn)化到指令化的遷移。
實(shí)驗(yàn)結(jié)果
作者選擇了撲克牌作為測(cè)試的游戲,并設(shè)計(jì)了兩部分的實(shí)驗(yàn)來(lái)驗(yàn)證 IDGE 的性能。
模擬器數(shù)據(jù)
第一部分測(cè)試數(shù)據(jù)來(lái)自于撲克牌模擬器。作者借助模擬器,生成了一組測(cè)試集,涵蓋了總共 10 種撲克牌游戲的變體,分別是 Texas hold’em、5-card draw、Omaha、Short-deck hold’em、2-to-7 triple draw、A-to-5 triple draw、2-to-7 single draw、Badugi、Badeucey、以及 Badacey。
和常見(jiàn)的準(zhǔn)確率不同的是,作者匯報(bào)的是每局游戲的成功率(sucess rate)。每一種類的游戲連續(xù)玩 20 局,如果一局游戲中引擎的預(yù)測(cè)全部正確,那么成功率就 + 1。結(jié)果如下:
結(jié)果證明,核心集的預(yù)熱以及最后的重述,都十分利于模型的訓(xùn)練。
值得注意的是,作者挑選的是 CodeLLaMA-7b/13b 來(lái)進(jìn)行的實(shí)驗(yàn)。他發(fā)現(xiàn)經(jīng)過(guò)程序語(yǔ)言預(yù)訓(xùn)練的模型表現(xiàn)要優(yōu)于自然語(yǔ)言預(yù)訓(xùn)練的模型。為此,他給出的解釋是:程序語(yǔ)言和 IDGE 的標(biāo)準(zhǔn)化數(shù)據(jù)類似,都是高度結(jié)構(gòu)化的,因此 code-pre-trained LLMs 會(huì)更加擅長(zhǎng) IDGE。
作者還發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象,就是通過(guò) prompt 驅(qū)動(dòng)的 GPT3.5 和 GPT4 在這個(gè)任務(wù)上的成功率是 0。由此,作者做了進(jìn)一步分析,將所有局的游戲狀態(tài)按照功能進(jìn)行分類,得到了一個(gè)重組后測(cè)試集。
按照狀態(tài)分類后,各個(gè)模型的準(zhǔn)確率如下:
結(jié)果發(fā)現(xiàn) GPT3.5/4 的數(shù)學(xué)能力表現(xiàn)出色(prize 指代的是計(jì)算獎(jiǎng)池的功能)。但是,作者發(fā)現(xiàn)他們對(duì)牌的處理很差,例如在發(fā)牌(deal)上,準(zhǔn)確率一直是 0。作者猜測(cè),如今的大語(yǔ)言模型在訓(xùn)練時(shí)很少會(huì)遇到引擎的高精度數(shù)據(jù),因此表現(xiàn)不佳。這些子功能上的錯(cuò)誤累計(jì),最終會(huì)以木桶原理的方式影響引擎整體的性能。
玩家手寫(xiě)數(shù)據(jù)
為了進(jìn)一步驗(yàn)證引擎在真實(shí)場(chǎng)景下的表現(xiàn),作者團(tuán)隊(duì)邀請(qǐng)了幾名真人玩家,讓他們自行發(fā)揮創(chuàng)意,每人用自然語(yǔ)言編寫(xiě)一個(gè)新的游戲規(guī)則。
總共產(chǎn)出了如下 5 個(gè)劇本:
可以看到,從劇本 1 到劇本 5 的難度逐漸提升。劇本 5 非常具有挑戰(zhàn)性,定義了一個(gè)全新的 6 牌游戲,隨即新出現(xiàn)了兩個(gè)全新的 6 牌組合,三對(duì)(Three Pair)以及大葫蘆(Big House)。
在用戶為 IDGE 編寫(xiě)游戲劇本時(shí),還能夠通過(guò)手寫(xiě)幾個(gè)樣例,來(lái)提高引擎對(duì)劇本理解的準(zhǔn)確性。表現(xiàn)如下:
可以看到,對(duì)于劇本 1 至劇本 4,模型在零樣本或少樣本,能夠取得非常不錯(cuò)的成績(jī)。
然而對(duì)于劇本 5,模型顯得理解起來(lái)出現(xiàn)了困難。對(duì)于這種情況,作者給出的解決方法是,用戶自適應(yīng)!具體來(lái)說(shuō),在用戶游玩 IDGE 的時(shí)候,若發(fā)現(xiàn)模型給出錯(cuò)誤解,手動(dòng)糾正結(jié)果再送給模型。此時(shí)模型會(huì)收到一對(duì)「好」和「壞」的樣本,作者利用 DPO 進(jìn)一步更新模型的參數(shù)。用戶可以持續(xù)進(jìn)行這一過(guò)程,直到引擎性能令其滿意為止。
從結(jié)果來(lái)看,對(duì)于劇本 4,引擎需要 8 個(gè)樣本,在測(cè)試集上達(dá)到 100% 的準(zhǔn)確率。而對(duì)于劇本 5,引擎收集了 23 個(gè)樣本后,達(dá)到 100% 的準(zhǔn)確率。
這提供了給了游戲制作者和玩家們一個(gè)全新的思路:根據(jù)玩家自己的游戲反饋,定制一個(gè)私有化可定制的的個(gè)人游戲引擎!
總結(jié)與展望
本文基于大語(yǔ)言模型提出了一種全新的游戲引擎概念,Instruction-Driven Game Engine, IDGE。作者將游戲引擎定義為了一種自回歸式的狀態(tài)預(yù)測(cè),Next State Prediction,并且提出了一種課程學(xué)習(xí)的訓(xùn)練過(guò)程。同時(shí),作者還提出了 IDGE 的一種可能的應(yīng)用形態(tài),自適應(yīng)型的個(gè)人游戲引擎,這或?qū)⒊蔀槲磥?lái)聯(lián)結(jié)游戲開(kāi)發(fā)者和玩家之間的全新閉環(huán)。
作者相信這種游戲引擎適用于所有類型的游戲,但是,目前大規(guī)模應(yīng)用 IDGE 還有以下限制:
- 推理延遲:大語(yǔ)言模型的推理很緩慢,導(dǎo)致目前的 IDGE 不適合于實(shí)時(shí)類的游戲,例如 RTS。
- 上下文窗口:當(dāng)游戲變得更加復(fù)雜,一個(gè)游戲狀態(tài)會(huì)帶來(lái)大量的字符數(shù),以此來(lái)滿足獨(dú)立性假設(shè),這將對(duì)大語(yǔ)言模型的長(zhǎng)期理解能力和 KV 緩存帶來(lái)挑戰(zhàn)。
- 游戲數(shù)據(jù)的缺乏:目前大部分商業(yè)游戲的數(shù)據(jù)都是私有化的,為此,作者將研究重點(diǎn)放在了撲克牌上。
作者們還相信,關(guān)于推理延遲和上下文窗口的瓶頸漸漸會(huì)隨著 LLM 相關(guān)技術(shù)的突破而被解決;而關(guān)于游戲數(shù)據(jù)的問(wèn)題,作者呼吁更多公司開(kāi)放游戲 API 來(lái)方便促進(jìn) AI 研究。