AI賦能游戲:問答機器人的設計與實現
AI發展快速,最適合的應用場景,應該是游戲了。光是NPC的問答、選項,就有很多可以操作的空間。本文從游戲行業出發,分析了問答機器人的實現原理和語料的經驗,供大家參考。
隨著AI這兩年的快速發展,游戲廠商躍躍欲試如何讓AI融入游戲。
半年前,我們也在游戲內嵌社區中,上線了一款以大語言模型為核心打造的問答機器人,旨在滿足玩家快速獲取攻略的需求。
這篇文章,將以游戲行業產品經理的角度,分享這款問答機器人的實現原理,及其語料的制作經驗。
一、為什么需要問答機器人
問答機器人所落地的游戲,是一款三國策略類游戲。游戲中玩家被隨機分到魏蜀吳中的一個國家,并通過一系列玩法攻城略地,擴展疆土。玩家可以招募各色三國英雄,并給英雄搭配不同裝備、學習不同技能以提升戰力,并可以組建不同的英雄陣容去挑戰別的玩家以及掠奪別國的城池。因此,游戲玩法的自由度給予了玩家很多策略探索的可能。
起初,我們只是搭建了一個問答社區,供用戶發表問題與分享攻略心得。隨著玩家人數增加及賽季的深入,玩家對攻略的需求日益明顯。官方發布的攻略,不一定能滿足玩家快速獲取攻略的需求。有時候玩家只想找一個答案,卻要看完一整篇攻略。因此,我們想通過智能問答機器人的形式,滿足玩家快問快答的痛點,以提升玩家的游戲體驗。
我們的智能機器人名為“諸葛先生”,以H5的形式開展對話。對用戶來說沒有復雜的功能,只要提問,機器人就會回答。
(頁面樣式這里用原型圖代替了哈)
二、機器人技術原理:大語言模型RAG的應用
在介紹問答機器人的原理前,先說一個前提,就是我們的大語言模型的語料庫中,有一種語料是QA形式的,即一問(question)一答(answer),與一般的段落形文章有所區別。關于語料庫的介紹,下邊章節會繼續細說。這里將繼續講機器人的運行原理。
如下圖,在用戶提出問題后,我們的機器人分有兩個答案輸出邏輯。首先,用戶提問的問題都會先進行內容檢索,通過檢索模型檢索出與用戶提問相關的內容。當檢索到用戶提問有匹配的QA時(即玩家提問匹配到語料庫中預設的Question),則程序會直接輸出Answer;另一種邏輯是,當檢索模型沒有檢索到匹配的QA,那程序就會繼續檢索其他內容(如文章段落),并產出一條帶內容的提示詞(prompt)輸入到大語言模型中,由大語言模型生成答案。
舉個例子,假設用戶提問了“趙云怎么培養”,則程序會通過檢索模型,先檢索是否存在與“趙云怎么培養”接近的question,存在則輸出對應answer,否則找出“趙云培養”相關的內容。我們比擬程序找到的相關內容為AABB,此時給到大語言模型的提示詞(prompt)就是:“AABB,請根據上述內容回答:趙云怎么培養?!贝笳Z言模型則根據上述提示詞生成答案。
為什么我們不直接使用大語言模型,而是前置一步加入檢索模型呢?
我們知道,大語言模型基于神經網絡模型,使用大量的語料庫進行訓練,比如互聯網上的大量文本數據。因此,大語言模型能高效準確地回答通用知識類的問題。而游戲屬于專有領域,如何讓大語言模型直接回答專有領域知識,則它給出的答案必定會差強人意(答非所問或是回答不出)。因此我們會先前置一步進行內容搜索,通過內容來約束大語言模型的生成。這樣的技術邏輯也稱為RAG(Retrieval-Augmented Generation,檢索增強生成)。
RAG其實就是對大語言模型的檢索能力及聯想能力的外擴,讓大語言模型在可控范圍內生成更準確高精的回答,尤其適用于專有領域的問答工具。RAG的原理如下圖:
圖片源自《Chatbot從0到1》(第2版),作者李佳芮、李卓桓
RAG 系統的起點一般是一個文本文檔的語料庫,簡單看起來是這樣的: 把文本分割成塊,然后把這些分塊嵌入到向量與transformer編碼器模型,把所有這些向量建立索引,從而查詢出與用戶提問相關的上下文,最后創建一個帶上下文的大語言模型提示語,讓模型回答用戶的查詢。
我們可以對比有無檢索模型對回答的差別:
大語言模型同樣是ChatGPT3.5,提問“趙云要怎么培養”,單純使用大語言模型,而沒有檢索模型的約束時,回答的內容就和游戲不沾邊(左圖)。而使用了檢索模型,讓大語言模型的回答就完全貼合游戲了(右圖)。
三、問答質量的打磨調優
為了提升機器人的回答準確率。我們的調優有幾個方面:
增強對用戶提問的理解
對于用戶的提問,除了分詞切割,我們還有錯字甄別、同義詞判定等邏輯,希望程序能盡量清晰理解用戶的意向。
增強檢索模型的召回質量
在眾多語料中如何找到最匹配玩家的內容呢?我們的檢索算法,會在對用戶提問進行分詞后,會先用BM25算法根據關鍵詞對文檔進行第一次評分,然后根據評分閾值提取top-k文檔進行第二次評分,還有問題和文檔稠密向量的相關性評分等。每一步都可能影響檢索的內容及LLM的回答結果。
選擇更智能的語言模型
機器人上線初期,使用的模型是國內的ChatGLM2.0。但通過拉取用戶的實際問答數據,我們發現答案質量并不理想,答案中存在較多答非所問、胡編亂造的問題。并且在多次調優檢索模型后(提高召回文檔的相關性),答案質量仍然不佳。
于是我們考慮更換大語言模型。我們找來了兩款智能體做對比,分別是ChatGPT3.5及Google旗下的Gemma。三者對比后我們發現,ChatGLM2.0的幻覺問題較其他兩個模型會更為明顯。意思就是,如果檢索模型召回的文檔中不存在用戶提問的相關內容(相關性低),則ChatGLM2.0會一本正經胡說八道。即便是檢索模型召回的文檔中有用戶所需的內容(相關性高),ChatGLM2.0也可能會回答失準。
最后我們選擇了ChatGPT3.5。對比下來,ChatGPT3.5在對話生成的流暢度、連貫性以及上下文理解方面的表現都更出色,能夠生成更加精準和自然的回答,對于無法回答的問題,也會更直接地告知用戶它不清楚。
四、語料的構成
如果說模型是問答機器人的肉軀,那語料就是血液。語料足夠多,覆蓋面足夠廣,問答機器人才會更具活力。
我們的語料有幾個部分構成:
- 游戲內所有呈現給玩家的文案,包括道具名稱、說明及玩法簡介。這類內容屬于短內容,只有單個句子或單一段落。
- 發布于官網、論壇的游戲攻略。這類內容屬于長內容,由多個段落構成。
- QA問答對。一問一答的固定內容。
如前所述,我們機器人分了兩個答案輸出邏輯,如果檢索模型命中QA,則會更快給玩家產出答案?;诖?,我們加大了QA問答對的產量,以提升問答效率。QA來源于玩家的真實提問,我們提取了高頻問題,以及部分刁鉆的提問,做成了問答對。
制作問答對比較費人工,因為answer都是人工寫的,有時候還要玩一下游戲驗證寫的answer是否正確。為了節約工時,我們又借用了AI工具協助我們生產問答對。這里AI工具的作用不是幫我們快速生成答案,而是提前生成玩家可能問到的問題并產出答案。我們給AI喂入上述語料中的2-攻略長內容,并讓AI根據文章內容中生成QA。不過,雖然生產速度提高了,但內容的實用性卻并不高。AI生成的問題并不像玩家的提問,更像是老師出的考題,需要再二次修改問答對的內容。因此,目前的問答對維護還是集中在人工生產。
五、問答機器人的未來創想
我們的問答機器人還有很多優化空間。目前,雖然它在提升玩家體驗方面已經取得一定成效,但仍存在一些需要改進的地方。例如尚未開發連續對話,玩家無法追問,造成對話交互不夠自然流暢。此外,隨著游戲內容的不斷更新,我們的語料庫也需要持續地維護和擴充,這也是需要不斷消耗人力的工作。
不過我相信,問答機器人將在未來的游戲世界中扮演更加重要的角色,為玩家帶來更加精彩和便捷的游戲體驗。
歡迎在評論區一起探討問答機器人的更多可能~
作者:楊桃,游戲行業B端產品經理,愛用文字記錄觀察及想法。
本文由 @楊桃 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來自 Unsplash,基于CC0協議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
請問下 從語料學習訓練到成為可用的問答機器人,大概用了多久?
從0到1的階段其實很快,一個月左右就產出模型和功能了。不過,驗證問答效果及打磨問答質量的用時就比較久,花了將近半年。
否則找出“趙云培養”相關的內容。我們比擬程序找到的相關內容為AABB,此時給到大語言模型的提示詞(prompt)就是:“AABB,請根據上述內容回答:趙云怎么培養?!边@段內容沒看懂,AABB是什么意思?能不能舉一下具體的例子,謝謝
好像是把大模型找到的相關內容,再以一個新的prompt輸入給程序,新的指令不是趙云怎么培養,而是根據AABB的內容回答趙云怎么培養
明白了,謝謝
是的,正如那位朋友說的那樣。當用戶提問“趙云怎么培養”,檢索模型會找出一段內容,然后再把這段內容加上用戶的提問,以提示詞的形式喂入大語言模型。
再舉個例子:
玩家提問:趙云怎么培養
檢索模型:找到的內容是“趙云是一個×××的英雄,他應該這樣培養:×××?!?br /> 大語言模型的提示詞:“趙云是一個×××的英雄,他應該這樣培養:×××。,請根據上述內容回答:趙云怎么培養”
明白了,謝謝