成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

龍與地下城:大模型文字游戲之路

原創(chuàng) 精選
人工智能
本文作者受到一位國(guó)外博主的啟發(fā),決定嘗試使用大語(yǔ)言模型創(chuàng)建一個(gè)地下城文字游戲。通過(guò)大語(yǔ)言模型生成富有創(chuàng)意和連貫性的游戲內(nèi)容。他的游戲靈感主要來(lái)源于經(jīng)典的桌面角色扮演游戲“龍與地下城”(D&D)。

作者 | 崔皓

審校 | 重樓

摘要

本文作者受到一位國(guó)外博主的啟發(fā),決定嘗試使用大語(yǔ)言模型創(chuàng)建一個(gè)地下城文字游戲。通過(guò)大語(yǔ)言模型生成富有創(chuàng)意和連貫性的游戲內(nèi)容。他的游戲靈感主要來(lái)源于經(jīng)典的桌面角色扮演游戲“龍與地下城”(D&D)。該游戲通過(guò)對(duì)話驅(qū)動(dòng),包括兩個(gè)主要角色:故事描述者和主人公。故事描述者負(fù)責(zé)下達(dá)任務(wù)和推動(dòng)故事,而主人公負(fù)責(zé)完成任務(wù)。作者設(shè)計(jì)了一個(gè)對(duì)話模擬器,用于處理角色之間的互動(dòng)和游戲進(jìn)程。此外,作者還考慮了游戲設(shè)計(jì)中的兩個(gè)關(guān)鍵問(wèn)題:記憶機(jī)制和發(fā)言規(guī)范。

開篇

自從在短視頻平臺(tái)上看到一位國(guó)外博主通過(guò)AI創(chuàng)建了一個(gè)模擬經(jīng)營(yíng)游戲,我就被深深吸引了。在他的虛擬小鎮(zhèn)上,眾多的NPC人物因AI的賦能而擁有了各種獨(dú)特的性格,使得他們之間的互動(dòng)充滿了趣味和驚喜。這讓我有點(diǎn)癢癢,一直對(duì)游戲情有獨(dú)鐘的我,為什么不嘗試借助AI的力量,創(chuàng)造一個(gè)屬于自己的地下城文字游戲呢?然而,缺乏游戲開發(fā)經(jīng)驗(yàn)成了我面前的一道障礙。不過(guò)轉(zhuǎn)念一想,最近正在從事大語(yǔ)言模型開發(fā)的工作,而大語(yǔ)言模型本身就具備生成文字的能力。 我看到有人利用提示詞和大模型可以玩文字的冒險(xiǎn)游戲。帶著這個(gè)想法,我查找了一些資料,發(fā)現(xiàn)通過(guò)prompt的方式真的可以“催眠”大模型,讓它幫我創(chuàng)建一個(gè)游戲世界。

探索與嘗試

有了上面的想法就要付諸行動(dòng)了,說(shuō)干就干,不過(guò)在開干之前需要對(duì)游戲進(jìn)行構(gòu)思,同時(shí)還要對(duì)實(shí)施的可行性進(jìn)行評(píng)估。我的探索開始于ChatGPT,通過(guò)手動(dòng)輸入的方式我和ChatGPT玩起了文字游戲。很快,我發(fā)現(xiàn)它與流行的龍與地下城游戲有異曲同工之妙—一個(gè)基于角色扮演的奇幻世界,玩家通過(guò)解決棘手的問(wèn)題、勇敢的探險(xiǎn)和激烈的戰(zhàn)斗來(lái)推進(jìn)故事。

龍與地下城(Dungeons & Dragons, 簡(jiǎn)稱D&D)是一款源于1974年的桌上角色扮演游戲,它允許玩家在一個(gè)奇幻的中世紀(jì)環(huán)境中探險(xiǎn)和戰(zhàn)斗。玩家可以選擇不同的角色,如戰(zhàn)士、法師或盜賊,并通過(guò)擲骰子來(lái)決定行動(dòng)的結(jié)果。游戲由一名地下城主(Dungeon Master, DM)來(lái)引導(dǎo)故事和管理游戲規(guī)則。D&D不僅創(chuàng)造了桌上角色扮演游戲的標(biāo)準(zhǔn),也影響了后來(lái)的電子游戲和奇幻文學(xué)的發(fā)展。它的核心是集體講述故事、解決問(wèn)題和角色扮演,為玩家提供了一個(gè)豐富多彩、想象力驅(qū)動(dòng)的游戲體驗(yàn)。

我可以通過(guò)龍與地下城游戲的玩法藍(lán)本,來(lái)設(shè)計(jì)我的文字游戲。由于我沒(méi)有任何的游戲設(shè)計(jì)經(jīng)驗(yàn),因此將游戲規(guī)則設(shè)計(jì)得簡(jiǎn)單明了,主要通過(guò)角色間的對(duì)話來(lái)推進(jìn)游戲進(jìn)程,以降低新手玩家的入門門檻。這里對(duì)話角色分為兩個(gè),分別是故事描述者和主人公,通過(guò)對(duì)話交互,玩家能夠逐步深入游戲的核心,挑戰(zhàn)和完成各種任務(wù),同時(shí)享受與虛擬角色交流的樂(lè)趣。

趁熱打鐵,我們來(lái)設(shè)計(jì)一下文字游戲具體完成的任務(wù)。如下圖所示,在文字游戲初始化的時(shí)候需要定義參與者,包括:主角(主人公)和故事的講述者,故事的講述者負(fù)責(zé)下達(dá)任務(wù),而主人公負(fù)責(zé)完成任務(wù)。當(dāng)然他們之間通過(guò)文字完成任務(wù)的交互,這里需要定義一個(gè)發(fā)言的規(guī)則。故事講述者下達(dá)任務(wù)之后,主角會(huì)接著發(fā)言,推進(jìn)故事,接著通過(guò)輪流發(fā)言的方式完成所有的任務(wù)。

準(zhǔn)備出發(fā)

有了思路以后就要準(zhǔn)備開發(fā)所需要的模型和工具了。模型方面我選擇了OpenAI 的GPT-3.5-Turbo的版本,另外也考慮了使用百度千帆模型庫(kù)中提供的ChatGLM2-6B-32K模型,不過(guò)在輸入字符長(zhǎng)度上前者比較有優(yōu)勢(shì),因此還是選擇了GPT,不過(guò)后面代碼的部分我會(huì)把ChatGLM2版本的代碼以remark的方式呈現(xiàn)給大家,如果大家有興趣可以自行嘗試。

有了游戲背景,接著就需要考慮文字游戲都會(huì)遇到的兩個(gè)問(wèn)題:

記憶機(jī)制

在地下城游戲中,保持對(duì)話的連貫性和角色身份的一致性至關(guān)重要。為解決這個(gè)問(wèn)題,我們?cè)O(shè)計(jì)了一個(gè)消息系統(tǒng),它可以保存參與者的背景信息,包括:身份,發(fā)言的方式,以及哪些事情應(yīng)該做,哪些事情不能做。每次提供提示給大模型時(shí),都會(huì)利用該系統(tǒng)強(qiáng)化模型的記憶,確保游戲的流暢進(jìn)行。剛好可以利用LangChain中的System Message 機(jī)制完成。

LangChain的`SystemMessage`是一個(gè)特殊的消息類型,它用于在與大語(yǔ)言模型的交互中提供上下文或指令。通過(guò)`SystemMessage`,可以向模型傳達(dá)關(guān)于游戲的背景信息或其他重要指示,幫助模型生成更符合場(chǎng)景的回應(yīng)。它是在構(gòu)建交互式應(yīng)用時(shí),提供上下文和指導(dǎo)信息的有效方式。

發(fā)言規(guī)范

為保證游戲的有序進(jìn)行,我們需要設(shè)定明確的發(fā)言順序。在這個(gè)簡(jiǎn)單的場(chǎng)景中,我們選擇了輪流發(fā)言的規(guī)則。為了未來(lái)能夠輕松擴(kuò)展到更多玩家或更復(fù)雜的交互規(guī)則,我們將發(fā)言規(guī)則獨(dú)立為一個(gè)模塊,從而為游戲提供了更多的靈活性。在實(shí)施的時(shí)候也就是通過(guò)一個(gè)取模的函數(shù)就能夠輕松搞定。如果遇到多人參與,或者存在交叉發(fā)言,玩家互相提問(wèn)的場(chǎng)景,也可以設(shè)計(jì)更加負(fù)責(zé)的發(fā)言規(guī)則。總之需要將規(guī)則的部分獨(dú)立出來(lái),做到高內(nèi)聚低耦合。

程序設(shè)計(jì)

有了游戲設(shè)計(jì)思路,接著我們對(duì)基本的程序進(jìn)行設(shè)計(jì)。如下圖所示,在入口的Main函數(shù)中我們會(huì)進(jìn)行對(duì)話參數(shù)的初始化,例如:人物基本信息,背景信息的定義。然后調(diào)用DialogueSimulator 添加玩家,同時(shí)設(shè)置發(fā)言規(guī)則,以及發(fā)起任務(wù)。接下來(lái)就是通過(guò)DialogueAgent 類進(jìn)行文字消息的處理,這里只需要處理發(fā)送消息和接受消息。由于,本例中只有兩個(gè)參與者,故事描述者和主人公所以發(fā)送和介紹消息會(huì)在兩者之間輪流進(jìn)行。

代碼實(shí)踐

完成了基本的設(shè)計(jì)工作,就是寫代碼了。這里我們使用Colab作為IDE工具,以及如何在此環(huán)境中配置和使用Langchain和GPT-3.5 Turbo。

Colab,即Google Colaboratory,是一個(gè)免費(fèi)的Jupyter筆記本環(huán)境,無(wú)需進(jìn)行任何設(shè)置就可以在瀏覽器中使用。它不僅提供了可靠的計(jì)算資源,還配備了GPU和TPU,可以加速機(jī)器學(xué)習(xí)或深度學(xué)習(xí)項(xiàng)目。Colab的特點(diǎn)包括實(shí)時(shí)多人協(xié)作、免費(fèi)GPU資源、易于分享和集成Google Drive等。使用Colab的主要原因是它的便捷性和高效性。它省去了配置環(huán)境的麻煩。

首先通過(guò)如下代碼在colab中安裝包和相關(guān)依賴:

!pip install openai langchain

該命令用于安裝Python包,以支持后續(xù)的開發(fā)工作:

1. `openai`:OpenAI的Python客戶端庫(kù)。

2. `langchain`:可能是與LangChain相關(guān)的庫(kù),支持與大語(yǔ)言模型的交互。

DialogueAgent 類

一個(gè)簡(jiǎn)單的封裝器,圍繞 ChatOpenAI 模型進(jìn)行操作,通過(guò)簡(jiǎn)單地將消息作為字符串連接起來(lái),從而存儲(chǔ) dialogue_agent 角度看到的消息歷史。

它提供了兩個(gè)方法:

  • send():將 chatmodel 應(yīng)用于消息歷史,并返回消息字符串。
  • receive(name, message):將由 name 發(fā)出的消息添加到消息歷史中。
# 定義DialogueAgent類,用于表示對(duì)話中的一個(gè)代理(或參與者)
class DialogueAgent:
    # 初始化方法,用于設(shè)置代理的基礎(chǔ)屬性
    def __init__(
        self,
        name: str,  # 代理名稱:參與者,故事描述者,主人公
        system_message: SystemMessage,  # 系統(tǒng)消息對(duì)象
        model: ChatOpenAI,  # 聊天模型
    ) -> None:
        self.name = name  # 設(shè)置代理名稱
        self.system_message = system_message  # 設(shè)置系統(tǒng)消息
        self.model = model  # 設(shè)置聊天模型
        self.prefix = f"{self.name}: "  # 設(shè)置消息前綴,用于標(biāo)識(shí)消息來(lái)源
        self.reset()  # 調(diào)用reset方法初始化消息歷史

    # reset方法,用于重置或初始化消息歷史
    def reset(self):
        self.message_history = ["Here is the conversation so far."]  # 初始化消息歷史

    # send方法,用于生成并發(fā)送消息
    def send(self) -> str:
        """
        Applies the chat model to the message history
        and returns the message string
        """
        # 調(diào)用模型生成消息
        message = self.model(
            [
                self.system_message,  # 系統(tǒng)消息:背景
                HumanMessage(content="\n".join(self.message_history + [self.prefix])),  # 人類消息(包含歷史和前綴)
            ]
        )
        #message = self.model(
        #  "\n".join([
        #    str(self.system_message),
        #    str(HumanMessage(content="\n".join(self.message_history + [self.prefix])))
        #  ])
        #)
        #return message.content

        return message  # 返回生成的消息

    # receive方法,用于接收并記錄消息
    def receive(self, name: str, message: str) -> None:
        """
        Concatenates message spoken by {name} into message history
        """
        # 將接收的消息加入到消息歷史中
        self.message_history.append(f"{name}: {message}")

DialogueSimulator 類

DialogueSimulator 類接受一個(gè)代理列表。在每一步中,它執(zhí)行以下操作:

選擇下一個(gè)發(fā)言者。調(diào)用下一個(gè)發(fā)言者來(lái)發(fā)送消息。將消息廣播給所有其他代理。更新步驟計(jì)數(shù)器。下一個(gè)發(fā)言者的選擇可以通過(guò)任何函數(shù)來(lái)實(shí)現(xiàn),但在這種情況下,我們簡(jiǎn)單地遍歷代理。

代碼如下:

# 定義一個(gè)DialogueSimulator類來(lái)模擬對(duì)話
class DialogueSimulator:
    # 初始化方法,用于設(shè)置類的基本屬性
    def __init__(
        self,
        agents: List[DialogueAgent],  # 代理列表,包含所有對(duì)話的參與者
        selection_function: Callable[[int, List[DialogueAgent]], int],  # 選擇下一個(gè)說(shuō)話者的函數(shù)
    ) -> None:
        self.agents = agents  # 將傳入的代理列表保存為實(shí)例變量
        self._step = 0  # 初始化步數(shù)為0
        self.select_next_speaker = selection_function  # 設(shè)置選擇下一個(gè)說(shuō)話者的函數(shù)

    # 重置方法,用于重置所有代理的狀態(tài)
    def reset(self):
        for agent in self.agents:  # 遍歷每個(gè)代理
            agent.reset()  # 調(diào)用每個(gè)代理的reset方法進(jìn)行重置

    # 初始化對(duì)話的方法
    def inject(self, name: str, message: str):
        """
        Initiates the conversation with a message from a specific agent
        """
        for agent in self.agents:  # 遍歷每個(gè)代理
            agent.receive(name, message)  # 讓每個(gè)代理接收初始消息
        self._step += 1  # 增加步數(shù)計(jì)數(shù)

    # 進(jìn)行一步對(duì)話的方法
    def step(self) -> tuple[str, str]:
        # 1. 選擇下一個(gè)說(shuō)話的代理
        speaker_idx = self.select_next_speaker(self._step, self.agents)  # 使用選擇函數(shù)選擇代理
        speaker = self.agents[speaker_idx]  # 獲取選中的代理

        # 2. 讓選中的代理發(fā)送消息
        message = speaker.send()  # 獲取代理發(fā)送的消息

        # 3. 讓所有代理接收這條消息
        for receiver in self.agents:  # 遍歷所有代理
            receiver.receive(speaker.name, message)  # 讓每個(gè)代理接收消息

        # 4. 增加步數(shù)計(jì)數(shù)
        self._step += 1  # 更新步數(shù)
        
        # 返回說(shuō)話代理的名字和消息內(nèi)容
        return speaker.name, message

定義角色

在這段代碼中,定義了四個(gè)變量,用于存儲(chǔ)故事或任務(wù)的關(guān)鍵信息。

這四個(gè)變量為我們?cè)谶M(jìn)一步編寫或生成故事提供了基礎(chǔ)信息。

protagonist_name = "馬小虎"
storyteller_name = "神秘老人"
quest = "找到傳說(shuō)中的七件神器。"
word_limit = 50  

1. `protagonist_name = "馬小虎"`:這一行定義了主角(故事中的主要人物)的名字為"馬小虎"。

2. `storyteller_name = "神秘老人"`:這一行定義了講故事的人(故事的敘述者)的名字為"神秘老人"。

3. `quest = "找到傳說(shuō)中的七件神器。"`:這一行定義了主角需要完成的任務(wù)或探險(xiǎn)目標(biāo)。

4. `word_limit = 50`:這一行定義了用于任務(wù)的字?jǐn)?shù)限制為50字。在進(jìn)行任務(wù)時(shí),需要設(shè)置一個(gè)字?jǐn)?shù)限制以保持焦點(diǎn)和簡(jiǎn)潔性。

故事背景描述

下面這段代碼主要用于生成一個(gè)地下城冒險(xiǎn)游戲的描述和提示。它涉及到兩個(gè)主要角色:主人公(由變量 `protagonist_name` 定義)和故事講述者(由變量 `storyteller_name` 定義)。代碼的目的是通過(guò)自然語(yǔ)言模型(在這里是 GPT-3.5 Turbo 或一個(gè)名為 "QianfanLLMEndpoint" 的模型)來(lái)生成這兩個(gè)角色的詳細(xì)描述。

game_description = f"""這是一場(chǎng)地下城冒險(xiǎn)游戲: {quest}.
        游戲中存在一名玩家: 主人公, {protagonist_name}.
        故事由故事的講述者來(lái)描述, {storyteller_name}."""

player_descriptor_system_message = SystemMessage(
    content="你可以為這場(chǎng)地下城冒險(xiǎn)游戲添加細(xì)節(jié)."
)

#主人公提示詞
protagonist_specifier_prompt = [
    player_descriptor_system_message,
    HumanMessage(
        content=f"""{game_description}
        請(qǐng)用創(chuàng)意的方式來(lái)描述主人公, {protagonist_name}, 描述字?jǐn)?shù)不超過(guò) {word_limit} 個(gè).
        并且說(shuō)出主人公的名字, {protagonist_name}.
        除此之外不要添加其他信息."""
    ),
]
#llm 生成對(duì)主人公的描述
protagonist_description = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=1.0)(
    protagonist_specifier_prompt
).content

#llm = QianfanLLMEndpoint( model="ChatGLM2-6B-32K", temperature = 1.0)
#protagonist_description= llm.generate([str(protagonist_specifier_prompt)])

#故事講述者提示詞
storyteller_specifier_prompt = [
    player_descriptor_system_message,
    HumanMessage(
        content=f"""{game_description}
        請(qǐng)用創(chuàng)意的方式來(lái)描述故事講述者, {storyteller_name}, 描述字?jǐn)?shù)不超過(guò) {word_limit} 個(gè).
        并且說(shuō)出故事講述者的名字, {storyteller_name}.
        除此之外不要添加其他信息."""
    ),
]
#llm 生成對(duì)故事描述者的描述
storyteller_description = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=1.0)(
    storyteller_specifier_prompt
).content
#storyteller_description = llm.generate([str(storyteller_specifier_prompt)])

1. 生成游戲描述: 使用前面定義的 `quest`, `protagonist_name`, 和 `storyteller_name` 變量來(lái)形成一個(gè)完整的游戲描述 (`game_description`)。

2. 創(chuàng)建系統(tǒng)消息一個(gè)名為 `SystemMessage` 的類被用來(lái)生成一個(gè)提示消息,提示玩家可以為這場(chǎng)游戲添加更多細(xì)節(jié)。

3. 生成主人公描述使用自然語(yǔ)言模型和一個(gè)特定的提示 (`protagonist_specifier_prompt`) 來(lái)生成主人公的描述 (`protagonist_description`)。

4. 生成故事講述者描述同樣地,使用自然語(yǔ)言模型和一個(gè)特定的提示 (`storyteller_specifier_prompt`) 來(lái)生成故事講述者的描述 (`storyteller_description`)。

我們將上面的信息打印出來(lái)驗(yàn)證一下:

print("Protagonist Description:")
print(protagonist_description)
print("Storyteller Description:")
print(storyteller_description)

打印內(nèi)容

Protagonist Description:
馬小虎,一個(gè)年輕而勇敢的劍士,有著黑色的蓬松頭發(fā)和劍刃一樣銳利的眼神。
Storyteller Description:
故事講述者: 神秘老人,耄耋仙人。

主角與地下城主的系統(tǒng)消息

這段代碼生成一個(gè)更具體和詳細(xì)的任務(wù)描述(`specified_quest`),該任務(wù)描述是為地下城冒險(xiǎn)游戲的主角(`protagonist_name`)準(zhǔn)備的。

# 定義一個(gè)名為 quest_specifier_prompt 的列表,包含 SystemMessage 和 HumanMessage 對(duì)象
quest_specifier_prompt = [
    # 系統(tǒng)消息,提示可以使任務(wù)更具體
    SystemMessage(content="你可以使任務(wù)更具體。"),
    
    # 人類消息,要求故事講述者更具體地描述任務(wù)
    HumanMessage(
        content=f"""{game_description}

        你是故事講述者,{storyteller_name}。
        請(qǐng)使任務(wù)更具體化。請(qǐng)富有創(chuàng)意和想象力。
        請(qǐng)用{word_limit}個(gè)詞或更少回復(fù)指定的任務(wù)。
        直接對(duì)主角{protagonist_name}說(shuō)話。
        不要添加其他任何內(nèi)容。"""
    ),
]

specified_quest = ChatOpenAI(model_name='gpt-3.5-turbo',temperature=1.0)(quest_specifier_prompt).content
#specified_quest = llm.generate([str(quest_specifier_prompt)])

print(f"原始任務(wù)描述:\n{quest}\n")
print(f"詳細(xì)任務(wù)描述:\n{specified_quest}\n")

1. 定義任務(wù)指定提示(`quest_specifier_prompt`)**這個(gè)列表包含兩種類型的消息對(duì)象:`SystemMessage` 和 `HumanMessage`。`SystemMessage` 提供了一種簡(jiǎn)單的提示,即"你可以使任務(wù)更具體"。`HumanMessage` 則給出了詳細(xì)的指示,包括當(dāng)前的游戲描述、故事講述者的名字,以及對(duì)任務(wù)應(yīng)如何具體化的要求。

2. 生成具體任務(wù)(`specified_quest`)**使用前面定義的 `quest_specifier_prompt` 和自然語(yǔ)言模型(在這里是 GPT-3.5 Turbo)來(lái)生成一個(gè)更具體和詳細(xì)的任務(wù)描述。

3.*輸出結(jié)果最后,代碼打印出原始的任務(wù)描述和新生成的更具體的任務(wù)描述。

打印結(jié)果如下

output
原始任務(wù)描述:
找到傳說(shuō)中的七件神器。

詳細(xì)任務(wù)描述:
馬小虎,你需要穿越一條幻想之河,進(jìn)入寒冰之洞穴。在那里,你將遇到一只被詛咒的巨龍。喚醒它的心靈,獲取神器第一件:冰霜之劍。完成任務(wù),勇士。

哈哈,此時(shí)我們的參與者(故事描述者和主角)都已經(jīng)有了,并且各自的背景都準(zhǔn)備好了,任務(wù)也隨之生成了。接下來(lái)就是執(zhí)行游戲的部分了。

主函數(shù)入口

這段代碼的主要目的是模擬一個(gè)交互式故事,其中包括兩個(gè)角色:主人公(`protagonist`)和故事講述者(`storyteller`)。這些角色在一個(gè)預(yù)定義的對(duì)話模擬器(`DialogueSimulator`)中輪流互動(dòng)。

#主人公
protagonist = DialogueAgent(
    name=protagonist_name,
    system_message=protagonist_system_message,
    model=ChatOpenAI(model_name='gpt-3.5-turbo',temperature=0.2),
    #model = llm,
)
#故事描述者
storyteller = DialogueAgent(
    name=storyteller_name,
    system_message=storyteller_system_message,
    model=ChatOpenAI(model_name='gpt-3.5-turbo',temperature=0.2),
    #model = llm,
)
#發(fā)言順序:輪流發(fā)言
def select_next_speaker(step: int, agents: List[DialogueAgent]) -> int:
    idx = step % len(agents)
    return idx

max_iters = 12
n = 0

simulator = DialogueSimulator(
    agents=[storyteller, protagonist], selection_function=select_next_speaker
)
simulator.reset()
#故事描述者 , 任務(wù)的描述
simulator.inject(storyteller_name, specified_quest)
print(f"({storyteller_name}): {specified_quest}")
print("\n")

while n < max_iters:
    name, message = simulator.step()
    print(f"({name}): {message}")
    print("\n")
    n += 1

1. 初始化角色使用 `DialogueAgent` 類創(chuàng)建兩個(gè)不同的角色,其中包括他們的名字、系統(tǒng)消息和使用的模型(這里是 GPT-3.5 Turbo)。

2.選擇發(fā)言人函數(shù) `select_next_speaker` 函數(shù)用于確定在對(duì)話中哪個(gè)角色應(yīng)該接下來(lái)發(fā)言。這里使用了一個(gè)簡(jiǎn)單的輪流機(jī)制。

3.對(duì)話模擬使用 `DialogueSimulator` 類創(chuàng)建一個(gè)對(duì)話模擬器,該模擬器接受角色列表和選擇發(fā)言人的函數(shù)。

4.注入初始任務(wù)使用 `simulator.inject()` 方法將特定的任務(wù)描述(`specified_quest`)作為故事講述者的初始發(fā)言注入。

5.對(duì)話循環(huán)在一個(gè)循環(huán)中,角色輪流發(fā)言,直到達(dá)到最大迭代次數(shù)(`max_iters`)。

執(zhí)行代碼我們可以看到如下的結(jié)果,如下圖所示看來(lái)馬小虎和神秘老人的文字游戲進(jìn)展還是比較順利的,隨著他們的對(duì)話,給我們揭開了一個(gè)奇幻的游戲世界。

總結(jié)

本文展示了如何用AI技術(shù)創(chuàng)建一個(gè)簡(jiǎn)單的文字游戲,是對(duì)大語(yǔ)言模型應(yīng)用的一次嘗試。通過(guò)使用大語(yǔ)言模型,作者能夠生成復(fù)雜性的游戲內(nèi)容,從而提供了富有想象力的游戲體驗(yàn)。文章還強(qiáng)調(diào)了模塊化在游戲設(shè)計(jì)中的重要性,特別是在處理記憶和發(fā)言規(guī)范等方面。是一個(gè)非常有趣的項(xiàng)目,不僅展示了大語(yǔ)言模型在游戲開發(fā)中的應(yīng)用,也為那些對(duì)AI和游戲感興趣的人提供了啟示和經(jīng)驗(yàn)。

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。


責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2023-02-03 14:24:15

Wine 8.1Windows

2010-11-03 09:53:28

移動(dòng)網(wǎng)絡(luò)安全無(wú)邊界網(wǎng)絡(luò)思科

2009-05-20 09:10:56

2021-08-13 06:31:33

英特爾芯片納米制程

2012-07-02 10:27:52

2011-04-08 09:56:03

2024-09-02 14:30:00

數(shù)據(jù)訓(xùn)練

2023-01-01 13:35:06

工程

2024-08-16 16:32:29

2011-06-16 14:37:13

2025-01-16 09:30:00

2024-12-02 11:15:08

2023-08-11 13:54:31

AI因果

2023-03-01 08:23:11

通信模型RabbitMQ

2012-11-07 16:40:37

2015-03-18 11:01:42

移動(dòng)APP大悅城華三
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 第一福利社区1024 | 欧美freesex黑人又粗又大 | 免费观看黄色片视频 | 精品一区二区久久久久久久网精 | 日韩精品久久久 | 国产在线观看一区二区三区 | 欧美夜夜 | 亚洲激情在线 | 7777精品伊人久久精品影视 | 国产一区www| 精品日韩一区二区三区av动图 | 欧美一区二区在线观看视频 | 天天插天天操 | 成人影院一区二区三区 | 成年网站在线观看 | 国产日韩欧美一区二区 | 99只有精品 | 成人h片在线观看 | 亚洲欧美在线免费观看 | 成年人的视频免费观看 | 色婷婷综合成人av | 日韩高清三区 | 日韩av中文 | 久久久久亚洲精品 | 欧美一区二 | 在线免费观看亚洲 | 免费视频99 | 国产欧美日韩一区二区三区在线观看 | 日本午夜在线视频 | 欧美日韩国产一区二区 | av天天干 | 成人国产精品 | 日韩成人在线观看 | 国产情侣激情 | 北条麻妃99精品青青久久 | 91免费高清 | 九九综合 | 国产精品夜夜春夜夜爽久久电影 | 国产综合av | 色婷婷一区二区三区四区 | 国产精品一区二区久久 |