當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

0 評論 3412 瀏覽 7 收藏 52 分鐘

本文圍繞多技術融合的虛擬人技術,把握三個主題:虛擬人技術框架、多虛擬人互動框架、虛擬人玩轉Among Us,聚焦于如何利用大模型來驅動虛擬人,并結合 AI 智能體的概念和技術進行架構設計。

2022年12月19日,Twitch上出現了一個名為“vedal987”的新直播頻道。該頻道沒有真人主播,只有一個可愛的二次元女孩形象在屏幕上移動和說話。她自稱為Neurosama,是一位人工智能VTuber。

從那天起,她開始了自己的直播生涯,并迅速獲得了大量關注和支持。與傳統基于動作捕捉的中之人范式的虛擬主播不同的是,Neuro完全是由人工智能驅動的,準確來說是由背后大語言模型驅動的。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

AI驅動的虛擬人具有許多優點和廣闊的前景:

  • 強大的交互能力:在大模型技術的驅動下,虛擬人的表達能力、交互能力和智能化水平將不斷提高,可以與人類進行實時對話和互動。這使得虛擬人能夠理解和回應人類的需求,提供個性化的服務和支持。
  • 高效的工作效率:由于虛擬人可以進行24小時不間斷的工作,而不需要休息和睡眠,因此它們能夠在短時間內完成大量的任務和工作。這大大提高了工作效率和生產力。
  • 減少人力成本:虛擬人可以替代一些重復性和機械性的工作,從而減少了企業的人力成本。通過使用虛擬人,企業可以將人力資源用于更具創造力和戰略性的任務。
  • 提供個性化的用戶體驗:AI驅動的虛擬人可以根據用戶的需求和喜好提供個性化的服務和建議。這種個性化的用戶體驗不僅可以提高用戶滿意度,還能增強用戶對品牌的忠誠度。
  • 商業應用場景不斷拓展:虛擬人可以應用于廣告營銷、客戶服務、培訓教育、社交媒體、游戲娛樂等領域。隨著技術的發展和推廣,虛擬人的應用場景將不斷擴大。

受到 Neuro-sama 的啟發,本文中將介紹我們基于大模型驅動以及 AI 智能體思考的虛擬人技術的相關嘗試。首先,我們將介紹基于 AI Agent 思想構建的虛擬人技術框架,然后我們將介紹在多虛擬人場景如何搭建靈活的互動框架,最后基于 AmongUs 游戲我們探索了游戲智能體的技術可能性,進一步豐富虛擬人的應用場景。

一、虛擬人技術框架

在基于大模型驅動的虛擬人的整體技術框架設計中,我們主要參考 AI Agent 模式進行設計,并根據虛擬人的特定場景和需求進行相應的優化。

如下圖所示,整個虛擬人框架主要包括兩個基礎組件,AI 智能體和 Live2D 模型:

  • AI Agent 部分是虛擬人的大腦,包括虛擬人的人格(Persona)、知識(Knowledge)、記憶(Memory)和能力(Skill),以及虛擬人的組織邏輯、回復生成和肢體驅動等。
  • Live2D 模型則是虛擬人的形象,是虛擬形象的展示和呈現的載體,包括可見的外貌、表情和肢體動作等。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

1、虛擬人感知

我們將虛擬人的感知系統主要分為兩部分:環境信息感知和交互信息感知。

  • 環境信息即虛擬人所處的世界的信息,通俗來講,我們在進行虛擬人應用開發時,通常需要考慮場景的設定,比如在直播的場景下,虛擬人需要能感知直播間的狀態:直播間人數、粉絲送禮物等。又比如在多虛擬人場景下,每個個體需要了解該場景下是否存在可見朋友、以及朋友當前狀態等。具體實現時,這類信息可以以全局或局部變量的形式存儲在 Agent 類中。
  • 交互信息即指用戶與虛擬人以及虛擬人之間的交流信息,這類信息是虛擬人可以互動交流的主要依賴,以文本輸入和輸出為主,也是語言模型的基礎能力。

2、虛擬人大腦

虛擬人的大腦是整個大模型驅動的虛擬人的核心部分,即上圖的 AI Agent 部分。我們需要在這里定義虛擬人的角色設定、行為決策及對話生成。

(1)大模型選型

大模型驅動著整體虛擬人的行為,因此選擇合適的大模型尤為重要。由于 OpenAI 的 ChatGPT 和 GPT4因為其優秀的推理能力以及潛在的角色扮演能力,想必會成為大家的首選。但是在虛擬人這一具體場景中,由于考量的因素不同,ChatGPT 并不一定會是最優的選擇。在實踐過程中,我們主要的考量因素包括兩點:

  1. 響應的實時性。雖然 ChatGPT 具備優秀的推理能力和對話能力,但是由于其整體模型的規模導致響應速度慢,這將會對整體的體驗帶來很大的影響。因此,在大模型的選擇時,我們可能更加傾向于規模更小、生成速度更快的模型,同時一定程度忽略模型的復雜推理能力,因為這對于展示型虛擬人往往不是必須的。
  2. 對話的擬人性。由于 ChatGPT 考慮的是通用場景,并為針對角色扮演這一領域針對性訓練,導致 ChatGPT 的整體回復跟傾向于正式、嚴肅的風格,并且回復內容通常冗余啰嗦,不是自然的人類聊天,這在一定程度上會影響虛擬人的擬人性。

隨著 Llama 系列模型的開源,以及開源社區的活躍二創,許多針對角色扮演的小規模開源大模型陸續推出?;谏鲜鰞牲c考量,我們將模型選型聚焦于針對角色扮演微調的 7B~13B開源大模型,經過社區評估和實際測試,綜合考慮以下兩個模型:

①Nous-Hermes-Llama2-13b

Nous-Hermes-Llama2-13b是基于 Llama 2 13B微調的語言模型,由經過超過300,000條指令的精細調整。該模型在開源社區非?;鸨?,TheBloke/Nous-Hermes-13B-GPTQ的下載量已經高達160K。

其微調數據包括:由Teknium提供的GPTeacher、由nlpxucan提供的Wizard LM、由Microsoft提供的GPT4-LLM和Unnatural Instructions、由jondurbin提供的Airoboros dataset以及來自Camel-AI的Camel-AI的領域專家數據集等。

②Pygmalion-2-13b

Pygmalion-2 13B同樣基于Meta AI發布的Llama-2 13B。Pygmalion是一個聚焦于角色扮演領域的開源研究組織,旨在嘗試獲得可用于對話、角色扮演和寫作故事的模型,同時可以像其他通用語言模型一樣使用自然語言進行引導。用于微調此模型的數據集包括PIPPA,以及其他幾個指令數據集和從各種RP論壇獲取的數據集。

(2)角色設定

角色設定定義了角色的性格、背景、經歷等信息,這直接決定著生成的對話風格。有關角色大模型微調和角色定義的詳細介紹,可以參考我們的另一篇文章《一文帶你低成本打造屬于自己的 CharacterAI》。我們將定義角色的要素主要劃分為 3 類:

a. 人格設定

人格設定定義了虛擬人的特性,包括個人信息(姓名、外貌、工作等)、性格(性格特點、喜好、語氣等)、人物背景等。

b. 知識與記憶庫

除了大模型訓練過程中蘊含的海量知識外,虛擬人仍需要和自身世界觀相關的垂直知識,這里我們考慮在本地外掛知識庫,方便檢索召回。我們主要考慮三類:世界知識,即虛擬人所在場景的通用信息;實體知識,即虛擬人所了解到的重要實體信息;以及事件知識,即虛擬人自身所經歷的事件。

記憶庫則主要存儲的是虛擬人的歷史記錄,包括短期記憶和長期記憶。短期記憶即最近 N 次對話記錄,以大模型的連續對話形式呈現。長期記憶則是以將對話記錄本地化存儲實現,并在對話過程中實時召回。批量的對話數據可以通過離線的方式進行摘要總結轉換為事件。

c. 技能庫

技能庫主要用于存儲虛擬人可實現的技能,比如:唱歌、講故事、玩游戲等。

(3)行為決策

對虛擬人角色進行定義后,當有對話消息(Query)傳入后,首先我們需要虛擬人進行行為決策。這里考慮到互動的實時性,我們不再考慮AI 智能體標準定義中復雜的任務拆分和規劃流程,而是采用意圖識別的方式,根據虛擬人的技能庫對當前對話信息進行意圖識別來決定虛擬人的行為分支。

比如當對話消息為“Can you sing a song?”時,我們會判斷當前信息的意圖,當識別到意圖為“Sing”時,我們便可以執行唱歌行為分支,將離線生成的歌曲音頻進行加載以及對話響應進行生成。(歌曲生成的方案可以參考 AI 孫燕姿的技術選型:so-vits-svc)若當前意圖和虛擬人技能庫中已有能力不匹配或者當前意圖為 chat 時,我們將執行對話行為分支。

對話行為分支,我們采用的是召回增強檢索(RAG)的方式。事先,我們將知識庫中的文檔進行文本分句切片后通過向量化之后生成 embedding 保存到向量 中,記憶庫中的聊天歷史記錄采用相同的方式,唯一的區別是在切分時,對話歷史會切分成 [對方-自己] 對話對。

然后當有 Query 產生時,我們利用同樣的向量化技術生成對應的 embedding,然后根據向量相似度計算,從知識向量庫和記憶向量庫中分別召回最相關的內容,然后在 Prompt 模板中在對應位置進行文本替換,重構出新的 Prompt。最終,新的 Prompt 被輸入到 LLM 中獲得當前的響應。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

(4)語音合成

虛擬人的語音作為用戶感知最明顯的特征之一,對于整個虛擬人的表現力至關重要。經過調研和實際測試,最終我們考慮兩個技術選型:微軟 TTS 和Elevenlabs 。

微軟 TTS 是一種被廣泛使用的語音合成技術,擁有豐富的多語種的音色。優點是合成質量穩定,響應速度快,費用相對較低。但是它不支持語音克隆,只能從已有的音色中選擇,同時生成的語音語氣較為平淡,表現力差。

ElevenLabs是一家提供文本生成語音解決方案的語音技術研究公司。它可以合成高質量語音,能夠生成高質量的語音,同時支持語音克隆,用戶可以通過提供幾十秒語音片段,便可生成相應的語音克隆聲音,并且語音富有情感,表現力強。但是它的缺點是生成速度慢,想比于微軟的 TTS 服務大約慢 3~5倍,同時費用相對較高。

針對上述兩種方案的優缺點,我們根據不同場景的需要進行選擇。

3、虛擬人形象

(1)外貌選型

目前,在虛擬主播的外貌選型上大致可以分為 3 種方案:

  1. ?SadTalker/Video-retalk:使用圖片與音頻文件自動合成人物說話動畫的開源模型,給模型一張圖片以及一段音頻文件,模型會根據音頻文件把傳遞的圖片進行人臉的相應動作,比如張嘴,眨眼,移動頭部等動作,適用于真人形象的虛擬人,缺點是動作幅度小,表現力低。
  2. ?Live2D + VtubeStudio:二次元動漫虛擬角色,可以建模多種動作,肢體豐富,缺點是受眾局限于二次元。
  3. ?Omniverse Audio2Face:3D 虛擬角色形象,可直接通過音頻文件創建面部動畫的AI工具,其推理和生成情緒的功能可用于制作所有面部特征動畫,將繁瑣的手動 blendshape 過程交給了 AI。

實踐中,我們最終選擇 Live2D二次元角色作為虛擬人形象。Live2D的優點在于模型的建模相對簡單且具備優秀的表現力,同時可以通過動作捕捉生成大量的動作和表情。相比于 3D 模型,Live2D 的建模和表情、口型驅動難度更低,這可以降低恐怖谷效應的風險。

恐怖谷效應是指1970 年日本機器人專家森昌弘提出“恐怖谷”理論,由于機器人與人類在外表、動作上相似,所以人類會對機器人產生正面的情感。當機器人與人類的相似程度達到一個特定程度的時候,一點點的差別都會被放大,并帶來負面和反感情緒。而當機器人與人類的相似度繼續上升,人類對其情感會再度回到正面。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

(2)口型驅動

二次元角色的口型同步一種比較簡單的方式是根據音頻片段音量決定嘴巴張合大小。具體操作步驟為:

  1. 獲取語音合成的音頻片段
  2. 針對音頻按一定步長進行切片
  3. 獲取切片的音量大小并進行歸一化,然后將其映射到 Live2D 角色的嘴巴張合。

(3)動作表情驅動

除了一些 Idel 的動作預置外,我們會引導大模型在對話過程中生成與情景相符的動作和表情。如下圖所示,我們將解析獲得動作或表情與 Live2D 已建模的動作表情進行相似性匹配,獲得最符合的表情或動作。

二、多虛擬人互動框架

在實際的應用場景中,只依靠單個個體虛擬人往往缺乏表現力。為了增加虛擬主播的娛樂性和互動性,往往需要多個虛擬人的參與。因此,我們在個體虛擬人的基礎上提出了下面的多虛擬人互動框架。

如下圖所示,我們的多虛擬人技術框架主要包含 3 類組件:

  1. 世界沙盒:即 World Sandbox,它定義了當前虛擬人應用所處的場景,他相當于智能體系統中的環境,主要定義了一些用戶配置信息(虛擬人數量、虛擬人可見性)、組件初始化(Agent 初始化、消息隊列初始化、用戶組件初始化等)以及消息管理(包括事件分發、任務展示等)。
  2. 用戶交互組件:主要包括 User 和 Live Room,分別作為交互入口獲取運營用戶互動和直播間互動信息。
  3. 虛擬人智能體:即 AI Agent+Live2D 模型,他們是虛擬人的邏輯主體。

整個虛擬人框架的通訊范式采用的是生產者-消費者的模式,全局維護兩個消息隊列 Event_Queue和 Task_Queue,前者用于管理互動事件消息,后者用于展示虛擬人的多媒體任務。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

User Agent主要用于用戶交互,包含語音識別 ASR 、文本輸入和指令監聽等。User Agent 作為虛擬人系統與用戶交互入口之一,便于與用戶進行實時對話或運營場景切換等等。

Live Room Agent 主要用于監聽直播間信息,主要包括監聽直播評論彈幕、粉絲 Super Chat 、粉絲禮物互動和其他直播間信息。不同信息會分為不同的優先級。

Event Queue 主要用于互動事件管理。它主要監聽兩個來源,一個是用戶生產的互動事件(來自 User 、 Live Room等),另外一個是虛擬人生產的互動事件(來自 AI Agent),互動事件實質是指對話內容或互動內容。在監聽到互動事件后,World Sandbox 會將其分發至具體的 AI Agent 進行消費處理,即上圖中的distribute 函數。

分發的策略可以設置為順序執行和規則執行。順序執行是指事件處理順序是固定的、依次執行的,比如假設存在兩個虛擬人,用戶生產的互動事件1先分發給 AI Agent1處理后生成互動事件 2,然后再將互動事件 2 分發給 AI Agent2生成互動事件 3,然后互動事件 3 再分發給 AI Agent1進行處理。規則執行則是根據一定的規則來進行分發,比如解析對話內容中的目標聽眾,從而將相應事件分發給該聽眾。

Task Queue 主要用于管理虛擬人生產的行為展示的任務。當 AI Agent 的處理某個互動事件后會生產出對應的新的互動事件以及行為任務,這里一個行為任務塊通常包括:對話語音、技能行動(Skill Action)以及用于驅動 Live2D 模型的表情動作。

當任務塊發送到 Task Queue 之后,World Sandbox會按照任務塊的生產順序將其分配給相應的 Live2D 角色依次進行展示,即上圖中 display 函數。這里之所以要對所有 AI Agent 生成的行為展示任務塊進行統一管理,是為了避免當存在多個虛擬人時可能會存在大家同時說話導致展示混亂的情況。

執行流程示例:

  1. 監聽用戶或粉絲產生的互動消息、提出的問題或對話信息,并將其發送給 Event_Queue。
  2. 當Event_Queue中有新消息到達后,World Sandbox通過配置的分發策略將其分配給對應的 AI Agent 進行處理
  3. AI Agent 拿到新事件消息后對其響應,并生成對應的回復信息和行為任務。行為任務被封裝為任務塊發送到 Task_Queue,回復信息則根據需要判斷是否被封裝為新的事件發送給Event_Queue進行下一步的處理(有可能不產生新的事件)。
  4. 當Task_Queue 中存在消息時,World Sandbox 根據生產的時間順序依次將對應任務塊分配給對應的虛擬人 Live2D 角色進行展示。

三、虛擬人玩轉 Among Us

AmongUs是一款場景在太空中的狼人殺類型的游戲,玩家通過聯機一起玩耍,在游戲中我們將會進入太空,在這個封閉的世界中,尋找背叛者,并完成一項一項得任務。游戲中有兩類角色:船員(Crewmate,好人)和背叛者(Imposter,壞人)。他們有不同的目標:對于船員來說,他們需要完成任務并找到所有的背叛者并通過會議聊天投票將其淘汰;對于背叛者來說,他們需要殺死所有的船員。

《Among Us》是一款需要船員合作、推理和判斷的游戲,這對于基于大模型的具備推理能力的智能體來說進行模擬實驗十分合適。我們的模擬實驗的任務是讓智能體通過扮演上述兩類不同角色參與到游戲中,并通過推理、欺騙、自主行為決策來取得最終的勝利。我們構建了一個可以自動玩 AmongUs 的游戲智能體,整體技術框架被設計為三部分:環境感知、行為決策和行動實施。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

1、環境感知

為了自動化參與游戲,游戲智能體需要對游戲角色所處的環境信息擁有充分的感知,因此需要了解在 AmongUs 的游戲設定中需要哪些重要的信息。經過對該游戲的研究歸納,Amongus 中的可感知環境信息包括:地圖信息、玩家信息(位置、狀態、行為)、任務信息(列表與位置)以及舉報會議中的對話信息。

(1)地圖信息

AmongUs的游戲設定是在太空飛船上,所以玩家所處的地圖是一個密閉的游戲空間。因此對于整個地圖空間的感知變得至關重要,這需要我們對游戲地圖進行建模。

基于地圖提供的空間信息,游戲智能體可以決定如何移動角色、如何執行任務以及與其他玩家如何互動,這對于推動游戲進程起著關鍵作用。那么我們如何對地圖進行建模呢?一種直觀的想法就是先人為探索整個游戲地圖,然后依次將地圖的空間信息記錄下來,最后組成完整的地圖信息。

具體來說:

  1. 首先,我們需要了解如何實際地移動玩家角色,值得慶幸的是,Python 中提供了一個名為vgamepad的庫,允許我們模擬游戲手柄來驅動角色進行上下左右的移動。這樣我們就可以通過簡單的模擬將操縱桿向某個方向移動來移動角色。
  2. 然后,對于整個地圖的建模,我們可以使用圖論的技術,通過移動角色在地圖上走動并將多個(x,y)坐標記錄為圖中的節點,這樣我們就可以建模得到完整的地圖。
  3. 最后,記錄下太空飛船中不同設施(比如:Boiler Room,Storage,Office,Upper Engine 等)的位置,這通常和游戲中所要做的任務位置相關,有利于后面定義策略規則。

這樣我們就獲得了完整的地圖信息,這些信息將幫助智能體進行環境空間感知,為行為決策提供參考。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

通過圖論建模地圖的好處有很多,比如我們可以了解整個地圖的空間結構,比如哪里是互通的、哪里是有障礙的。比如同時基于圖論的已有技術,我們可以使用使用很多眾所周知的圖論算法(如迪杰斯特拉算法)來確定如何將角色從移動一個位置移動到另一個目標位置,這將簡化智能體做決策后的行動實施。

(2)玩家信息

在AmongUs游戲中,玩家之間需要我們需要游戲智能體可以感知其他玩家的信息,包括:

  • 當前玩家信息。玩家身份和玩家位置。
  • 玩家狀態。主要包括周圍是否存在尸體,當前的存活玩家和死亡玩家。
  • 視野范圍內的其他玩家的相對位置。因為我們知道不同玩家在圖中的坐標,因此相對位置可以通過圖中兩點的距離得到。這一信息可以影響智能體對其他玩家的信任度(玩家是否是壞人,是否可能單獨行動)以及特殊角色的行為決策(比如背叛者將根據視野內的玩家位置和玩家數量決定是否需要殺人以及在什么時候殺人)。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革
(3)任務信息

AmongUs 中船員的任務是完成各種任務,這些任務可以分為兩類:任務欄任務和緊急任務。任務欄任務是指完成后會在任務欄上顯示進度的任務,如修復電路、清理垃圾等。而緊急任務則是指需要在一定時間內完成的任務,如緊急修復氧氣供應、緊急修復核心等。

完成任務對于船員來說非常重要,因為完成任務可以增加船員的勝利機會,并幫助船員區分誰是背叛者。背叛者可以假裝完成任務,但他們無法真正執行任務欄任務,只能執行一些特殊的任務,如殺死船員、破壞設備等。

任務信息主要包括當前地圖上任務列表以及每個任務所處的位置,由于相同類型的任務可能分布在不同的設施上,因此位置信息包括設施名+位置坐標,具體形式如下:

(4)會議信息

會議信息是一類特殊的環境信息,主要是在進行緊急會議時玩家之間的聊天記錄,包括玩家和聊天內容,這可以通過 OCR 識別或AmongUs插件獲取。

2、行為決策

在大模型出現前,游戲智能體的行為決策主要依靠的是強化學習。游戲智能體中強化學習的劣勢主要體現在以下幾個方面:

  • 樣本低效性:強化學習通常需要通過大量的試錯和反饋來優化策略,智能體必須不斷地與環境進行實驗并接收反饋信號,這就意味著需要花費大量的時間來構建高質量的數據進行訓練。
  • 環境理解要求高:強化學習算法對環境的建模和理解能力要求較高,如果環境復雜或不確定性較高,強化學習的效果可能會受到限制,難以在許多現實場景下迅速實現良好的性能。
  • 好的獎勵函數難以設計:強化學習依賴于獎勵信號來指導學習過程,但如何設計合適的獎勵信號是一個挑戰,不恰當的獎勵信號可能導致學習過程出現偏差或不穩定。

而當智能體出現后,大語言模型在邏輯推理方面涌現出的能力,使得AI智能體的實施成本大大降低,同時保持良好的性能,比如英偉達AI智能體 Voyager、清華等機構提出了能夠自主學習解決任務的AI智能體 Ghost in the Minecraft (GITM) 在 Minecraft 中取得的令人驚訝的表現。

大語言模型,如ChatGPT,在游戲智能體中進行行為決策時的關鍵在于理解游戲規則、情境和目標,以及玩家的意圖和行為,并利用這些信息來采取合適的游戲行為。這一過程中需要考慮以下方面:

  • 游戲規則:游戲都有特定的規則,這些規則可能是明文規定的,也可能是需要玩家自己探索和理解的。大語言模型需要理解這些規則,并根據這些規則來生成游戲行為。
  • 玩家意圖:理解玩家的意圖對于生成合適的游戲行為至關重要。例如,如果玩家想要攻擊敵人,大語言模型就需要生成攻擊性的游戲行為。
  • 游戲情境:大語言模型還需要理解游戲的情境,例如當前的游戲狀態、玩家的位置、資源情況等。這樣,它就可以根據這些信息來生成合適的游戲行為。
  • 策略戰術:大語言模型需要理解游戲的策略和戰術,例如如何在游戲中獲得優勢、如何有效地使用資源等。這樣,它就可以根據這些策略和戰術來生成合適的游戲行為。

如前文的介紹的環境感知,實際上便是在感知游戲情景,而其他方面,比如:游戲規則、玩家意圖和策略戰術等,則需要我們在讓大模型進行行為決策時進行額外的背景設定。以 AmongUs 為例,這些游戲背景包括:

①角色:當前玩家的游戲身份,AmongUs 中不同的角色對應不同的行動目標和行動策略

②目標:根據游戲身份的不同,游戲的目標也不同。船員的游戲目標是找出并投票出背叛者,而背叛者則需要成功殺死足夠多的船員。

③知識:即游戲規則,比如,常見的游戲規則有:

  1. 飛船上會有一定數量的船員和背叛者。
  2. 船員需要找出藏身于眾人中的背叛者,背叛者有兩種獲得游戲的勝利方式:第一種是不斷搞破壞,讓玩家所乘坐的飛船故障,不能順利返航;第二種則是不斷地殺死船員,直到剩余船員數量小于或等于背叛者數量。
  3. 當發現被殺死的船員尸體后,游戲進入發言投票環節。所有成員開啟演技和邏輯的較量,投出自己認為的兇手。
  4. 死亡玩家不會出局,而是繼續存在游戲中,可以修理或破壞飛船,也可以與存活玩家進行交流。

④策略:即游戲戰術,這些策略可以從游戲社區中獲取和總結。以船員為例,常見的策略有:

  • 時刻注意其他玩家的行為和動向,特別是當有可疑玩家靠近時,要保持警惕,以避免被背叛者攻擊。
  • 如果發現有背叛者攻擊或發現尸體時,立即開啟緊急會議,并投票淘汰可疑的玩家,以避免被背叛者淘汰。
  • 快速完成所有任務并在完成任務過程中盡可能靠近其他玩家,防止獨自行動被殺。?充分利用地圖中的障礙物、管道等元素,以避免被背叛者攻擊。

⑤記憶:上面 4 種背景信息可以在游戲開始前提前預置在外部知識庫中,但是記憶模塊中的內容則是在游戲過程中實時產生的。記憶模塊主要記錄游戲進程中的主要事件,比如:玩家死亡事件,任務執行事件,會議召開事件等。這些事件信息可以幫助大模型分析和推理出哪些玩家是船員,哪些是背叛者。

⑥行動集:即可采取的原子行動,這些原子行動包括:角色移動、常規任務、特殊任務、召開會議等。我們需要提供單個原子行動的描述以及必要信息(比如:行動名稱、行動描述、重要性、位置等)

有了這些大模型進行決策所需要的信息以及環境信息后,我們便需要構建 Prompt 提示通過大模型推理獲得當前狀態的行動列表。這里,為了讓智能體能獲得更準確和智能地在模擬環境中推理和行動,我們采用了Yao 等人提出的 ReAct 提示工程技術。

ReAct的靈感來自“行動”(Acting)和“推理”(Reasoning)之間的協同作用,通過把行動(Act,通常使用工具)獲取的外部知識,反饋給LLM幫助推理(Reason)并做出下一步的行動決策。思維鏈(CoT)提示顯示了LLM執行推理軌跡的能力,以生成涉及算術和常識推理等任務的問題的答案(Wei 等人,2022 年)。

但是,由于無法進入外部世界或無法更新其知識,可能會導致事實幻覺和錯誤傳播等問題。ReAct則基于思維鏈改進了這一點,它是一種通用范式,它將推理和行動與LLM相結合。

簡單來說,ReAct 針對任務目標顯示引導 LLM 生成完成該任務的思考(Thought)、行動(Action)和觀察(Observation),同時,提供可獲得的當前狀態以及行動列表以提供給 LLM 作為參考。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

各種操作的反應分解

ReAct Prompt必須包含以下四個關鍵信息:

  1. 任務指令(Instruction):Prompt必須為 LLM 提供主指令(任務目標),幾乎每個提示框架都需要,目標可以讓模型理解我們真正希望它做什么。
  2. 反應步驟(ReAct steps):指定推理和行動計劃的步驟?!癐nterleaving thought, action, and observation steps”是ReAct 提示中使用的推理序列,也可以將其明確指定為 LLM 響應回復的格式。
  3. 推理(Reasoning):使用通用指令(例如“思考可以推理當前情況”)或者一系列思維提示(例如“我們逐步來思考這個問題”),啟用推理功能。這可以與小樣本提示框架相結合,以提供將推理與行動聯系起來的確切示例。
  4. 行動(Actions):最后一個關鍵信息是一組行動列表,LLM 可以從中選擇一個來響應推理思考。在上面的示例中,”Search[entity],” “Lookup[keyword],” 和 “Finish[answer]”是行動命令。

一個符合ReAct的行動流程里,包含多次Thought-Act-Obs的迭代,也就是思考-行動-觀察/分析的反復過程。

Thought(思考):反映了LLM大模型的思考過程,這體現出了LLM的“大腦“的作用。LLM根據輸入或者外部環境反饋生成本次迭代需要完成的行動。

Act(行動):根據思考的結果采取的具體行動,這個具體的行動最終體現到某個外部工具的使用,實現與外部環境的交互并獲得結果。

Obs(觀察):從外部行動獲取到的反饋信息,用于LLM做出下一步的行動決策。

通過這樣的循環過程,最終完成任務?;?ReAct 思想,我們可以提供游戲環境的背景和玩家狀態并指定可執行的行動,然后通過推理將任務目標和采取行動關聯起來,完成對應的任務。

這里我們首先指定了LLM 需要扮演的角色并設定了任務目標(RoleGoal),然后我們提供了它可以參考的信息(Game Background、Game Rules、Role Strategies、Executed Tasks、Extra Info、Your Status),以及可以選擇的行動列表(Action List),最后給定了一些特殊的限制條件(Constraint Rule)以幫助其更好的完成目標,最后指定了 LLM 的回復格式(Response Format)。

3、行動實施

在智能體根據目前的環境、狀態利用大模型推理獲得所需要采取的行動列表后,我們便需要開始實施行動了。根據我們對不同的行動類型進行了如下4類:角色移動,常規任務、特殊任務和開展會議。我們將對應的每個原子行動進行了封裝(相當于智能體框架中的工具),當目標任務出現在行動列表時,智能體則依次執行每個任務的行動流。

(1)角色移動

角色移動是一個最常見的行動,通常包含在任務執行中,如果任務中不包含位置信息,游戲智能體則會閑逛。在智能體行為決策的輸出中通常只包含角色移動目標點信息,獲得這些信息后,角色移動的行動流程為:

  • 獲取當前起始點和目標點的圖位置坐標
  • 使用迪杰斯特拉算法規劃出移動路徑
  • 將移動路徑依次映射為游戲手柄模擬中的移動控件,驅動角色進行移動

需要注意的是,角色移動過程中需要實時監聽感知環境,以應對緊急事件的發生。

(2)常規任務

常規任務也叫做任務欄任務,主要是船員來執行。AmongUs 中存在許多任務欄任務,每一個常規任務都被封裝成獨立的行動流,方便任務執行過程中進行簡潔的調用。AmongUs中存在大量的任務欄任務,需要一一構建行動流,其中會使用到許多其他 AI 技術。以電路修復(Fix Wiring)任務為例,其執行步驟為:

  1. 尋找電線:任務要求修復一些斷開的電線。不同的電線具有不同的顏色。我們需要使用一個簡單的圖像識別模型來識別游戲中出現的電路圖案和對應的顏色,以判斷斷開的線路。
  2. 連接電線:基于識別出的電路信息,利用圖像匹配算法判斷需要連接電路的起止位置,然后使用Python 包pyautogui模擬鼠標控制,依次將斷開的電線連接起來。在游戲中,需要將電線的兩個端點拖動到正確的位置,使它們連接在一起。根據任務列表上的指示,連接所有需要修復的電線。
  3. 完成任務:一旦將所有電線連接好,Fix Wiring任務就會被標記為完成。便可以退出該任務,繼續完成其他行動列表中的任務或活動。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

(3)特殊任務

特殊任務主要是背叛者需要執行的任務,這類任務比較簡單,通常為殺人和破壞設施,只需要在對應玩家和設施旁模擬鼠標點擊便可以直接執行。

(4)開展會議

會議開展的目的是為了討論和展開投票,以找出背叛者。船員可以利用會議的時間來分享自己的觀察和懷疑,并與其他船員進行討論。通過投票淘汰懷疑對象,船員可以一步步接近找出真正的背叛者。在會議中,船員可以通過聊天功能與其他船員進行交流。船員可以分享自己的懷疑對象、提供觀察到的行為和線索,并與其他船員進行思維碰撞。船員可以提出問題,尋找矛盾之處,并通過邏輯推理和投票找出可能的背叛者。在會議末尾,船員將通過投票的方式淘汰懷疑對象。每個船員都有一票,被投票最多的人將被認定為懷疑對象,淘汰出局。投票是船員們找出背叛者的關鍵步驟,需要慎重考慮,不能隨意投票。

由此可見,會議的過程可以充分利用大模型的對話能力以及邏輯推理能力,在我們的實現中,會議的行動流即是一個小型智能體,在該場景下我們唯一需要感知以及能夠感知的信息只有玩家之間的聊天信息。

在會議智能體的行為決策階段,我們需要提供給大模型提供的決策信息包括:

  • 角色玩法:主要包括當前游戲智能體的身份(船員還是背叛者),不同身份對應的玩法規則。
  • 角色策略:不同的角色身份需要提前預定義對應的游戲策略,可以參考網上玩家提供的策略。
  • 游戲事件:主要是智能體在游戲過程中經歷的事件,包括所見玩家、會議召開者、召開歷史、以及其他玩家狀態。
  • 角色狀態:告知大模型目前正在進行會議,并提示他遵循角色定位,進行擬人化回復。
  • 對話歷史:監聽會議過程中的聊天信息,以及最后的投票結果。

最終,會議智能體的輸出即是它對應的發言,實際場景下,我們需要將會議智能體的發言輸入到對話框與其他玩家參與討論。這里,我們采用的是Python提供的keyboard包模擬文字輸入,然后識別發送按鈕和其他玩家交流。

4、游戲解說

當游戲智能體可以自主的玩游戲之后,如何與虛擬人進行聯動呢?這里我們想到了一個好玩的經典場景,即虛擬人游戲解說。人工智能的優勢在于不同的行為可以同步進行,我們可以讓虛擬人一邊玩游戲,一邊進行解說,該過程是完全 AI 驅動的,低成本的。

當虛擬人學會玩“狼人殺”:一次由大模型帶來的智能體變革

虛擬人想要解說游戲,我們需要能實時了解游戲的對局情況,幸運的是,當我們構建了以上的游戲智能體之后,通過在不同的模塊中監聽,我們可以及時地獲取游戲情況。這里的監聽信息主要分為三類:

  1. 世界信息:比如游戲過程中,觀察到的緊急事件或玩家事件,比如玩家死亡、緊急事件的召開、船艙氧含量等等。
  2. 思考決策:游戲智能體的思考決策過程,這里可以使用ReAct行為決策過程中的 Observation 和 Thinking 結果。
  3. 行為狀態:當前執行的任務名,行動流描述等等。

然后,我們將這些監聽消息封裝為一類名為 GameDecisionEvent 獨特的event,這類 event 會攜帶有關游戲解說所需的信息,主要包括游戲背景(game name,role,map等)和實時事件信息(task,action,thought,observation 等)。這類消息在監聽后會發送到多虛擬人交互框架中介紹的全局 Event Queue 中,然后由 World Sandobox分發給對應的虛擬人進行處理。

虛擬人 AI Agent 發現這類消息后會進入游戲解說流進行單獨處理,游戲解說流中的特殊之處在于我們在遵循虛擬人角色性格設定的同時,加強了解說場景的限制(Prompt 中進行規則設定),從而讓解說流程更加準確、生動。

GameDecisionEvent類中我們引入了專門的優先級,這主要是為了防止消息累積,因此游戲智能體在游戲進程中會產生大量用于游戲解說的消息,但是虛擬人智能體在處理和解說過程中是需要時間的,隨著游戲運行可能會造成消息積累,導致游戲進程和解說進程不同步。

然后我們對這類消息在消息隊列中施加一些策略進行管理。比如 :某些緊急事件會被設定為最高優先級,比如玩家死亡、緊急會議等,這類事件出現后需要立即解說,因此它們會插隊中優先級事件,以及清空隊列中的低優先級事件。

四、總結與展望

總的來說,虛擬人技術是一項多技術融合的復雜工程。在本文中,主要聚焦于如何利用大模型來驅動虛擬人,并結合 AI 智能體的概念和技術進行架構設計。LLM 的快速發展推動了虛擬人領域的進步,這主要是因為 LLM 為虛擬人提供了更加流暢的對話體驗,同時借助于LLM 優秀的推理能力以及智能體技術的引入使得整體技術框架得以簡化。
但是,虛擬人是極其依賴于互動體驗和角色表現力,這需要我們在考慮智能的同時,加強語音和角色動作等方面的能力。情緒飽滿的語音和流暢、豐富的肢體動作能給觀眾帶來最直觀的感知。

在游戲智能體方面,如何讓 LLM 進行更準確的行動決策依賴于我們對環境全方位的感知,可感知的信息越多,行動決策越準確、游戲目標達成的成功率就越高,這方面我們仍在繼續探索。

當然 LLM 在響應時延方面仍然有一定的局限性,這一點非常影響虛擬人的實時交互,無論是從模型還是從流程上都需要進一步的優化,也將是是否能為實時虛擬人領域真正帶來技術突破的關鍵。

參考文獻

[1] Yao, Shunyu, et al. “ReAct: Synergizing Reasoning and Acting in Language Models.”The Eleventh International Conference on Learning Representations. 2022.

[2] Wei, Jason, et al. “Chain-of-thought prompting elicits reasoning in large language models.”Advances in Neural Information Processing Systems35 (2022): 24824-24837.

[3] Wu, Qingyun, et al. “AutoGen: Enabling Next-Gen LLM Applications via Multi-Agent Conversation Framework.”arXiv e-prints(2023): arXiv-2308.

[4] Gosling, Tear, and Alpin Dale. “PIPPA: A Partially Synthetic Conversational Dataset.”arXiv preprint arXiv:2308.05884(2023).

作者:andreihuang,騰訊IEG應用研究員

來源公眾號:騰訊大講堂(ID:TX_DJT ),聚焦前沿,打造互聯網人的高光時刻

本文由人人都是產品經理合作媒體 @騰訊大講堂 授權發布,未經許可,禁止轉載。

題圖來自 Unsplash,基于 CC0 協議

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!