《西部世界》真來了!斯坦福爆火「小鎮」開源,25個AI智能體戀愛交友|附保姆級教程

來源:“新智元”(ID:AI_era),作者:新智元

準備好,此前曾轟動整個AI社區的斯坦福智能體小鎮,現在已經正式開源!

項目地址:

在這個數字化的「西部世界」沙盒虛擬城鎮中,有學校、醫院、家庭。

25個AI智能體不僅能在這裡上班、閒聊、social、交友,甚至還能談戀愛,而且每個Agent都有自己的個性和背景故事。

不過,它們對於自己生活在模擬中,可是毫不知情。

英偉達高級科學家Jim Fan評論道——

斯坦福智能體小鎮是2023年最激動人心的AI Agent實驗之一。我們常常討論單個大語言模型的新興能力,但是現在有了多個AI智能體,情況會更複雜、更引人入勝。 一群AI,可以演繹出整個文明的演化進程。

現在,首先受到影響的,或許就是遊戲領域。

總之,前方有無限的新可能!

網友:眾遊戲廠商們,你們懂我意思吧?

很多人相信,斯坦福的這篇論文,標誌著AGI的開始。

可以想像,各種RPG和模擬類游戲都會用上這種技術。

網友們也非常激動,腦洞大開。

有想看神奇寶貝的,有想看謀殺探案故事的,還有想看戀愛綜藝的……

「我已經等不及看AI智能體之間的三角戀劇情了。」

「《動物之森》中重複、沉悶的對話,所有村民共有的一維人格系統,都太令人失望了。任天堂趕快學學吧!」

「可以讓《模擬人生》移植一下這個嗎?」

如果能在《神界》這樣的經典RPG遊戲中,看到AI在NPC上運行,整個遊戲體驗都會被顛覆! 」

有人還暢想:這項技術在企業空間中也有很多應用場景,比如員工如何和不同的工作環境/流程變化互動。

當然,也有人表示,你們激動個啥?其實我們一直都生活在這樣的模擬中,只不過我們的世界有更多的算力罷了。

是的,如果我們把這個虛擬世界放大到足夠多倍,我們肯定能看到自己。

### Karpathy:AI智能體,就是下一個前沿

此前,前特斯拉總監、OpenAI大牛Karpathy就表示,如今AI智能體才是未來最前沿的方向。

OpenAI的團隊最近5年把時間花在了別的地方,但現在Karpathy相信,「Agent代表著AI的一種未來。」

如果某篇論文提出訓練大語言模型的不同方法,OpenAI內部的Slack群組中就會有人說:「這個辦法我兩年半前嘗試過,沒什麼用。」

然而每當有AI智能體從論文出現,所有同事都會很感興趣。

Karpathy曾將AutoGPT稱為快速工程的下一個前沿

「西部世界」中的25個AI智能體

在美劇《西部世界》中,被預設了故事情節的機器人被投放到主題公園,像人類一樣行事,然後被重置記憶,在新一天再被投放進自己所在的核心故事情節。

而在今年4月,斯坦福和谷歌的研究者竟然構建出了一個虛擬小鎮,讓25個AI智能體在其中生存、從事複雜行為,簡直堪稱是《西部世界》走進現實。

論文地址:

架構

為了生成智能體,研究者提出了一種全新架構,它擴展了大語言模型,能夠使用自然語言存儲Agent的經歷。

隨著時間的推移,這些記憶會被合成為更高級別的反射,智能體可以動態檢索它們,來規劃自己的行為。

最終,用戶可以使用自然語言和全鎮的25個Agent都實現交互。

如上,生成式智能體的架構實現了一個「檢索」功能。

這一功能將智能體的當前情況作為輸入,並返回記憶流的一個子集傳遞給語言模型。

而檢索功能有多種可能的實現方式,具體取決於智能體在決定如何行動時考慮的重要因素。

生成式智能體架構面臨一個核心挑戰,就是如何管理大量必須保留的事件和記憶。

為了解決這個問題,架構的核心是記憶流(memory stream),即一個記錄智能體全部經驗的數據庫。

智能體可以從記憶流中檢索相關記憶,這有助於它規劃行動,做出正確反應,並且每次行動都會反饋記錄到記憶流中,以便遞歸地改進未來行動。

另外,研究還引入了第二種類型的記憶——反思(reflection)。反思是智能體根據最近經歷生成的高級抽象思考。

在這項研究中,反思是周期性觸發的過程,只有當智能體判斷最近一系列事件的重要性評分,累積超過設定閾值時,才會啟動反思機制。

生成式智能體為了創建合理的規劃,它們會自上而下遞歸生成更多的細節。

而這些規劃最初只是粗略的描述了當日所要做的事情。

在執行規劃的過程中,生成智能體會持續感知周圍環境,並將感知到的觀察結果存儲到記憶流中。

通過利用觀察結果作為提示,讓語言模型決定智能體下一步行動:繼續執行當前規劃,還是做出其他反應。

在實驗評估中,研究人員對這一框架進行了控制評估,以及端到端的評估。

控制評估是為了了解智能體能否獨立產生可信個體行為。而端到端評估,是為了了解智能體的湧現能力以及穩定性。

比如,Isabella策劃一個情人節party邀請大家來。 12個智能體中,7個人還在考慮中(3個人有了別的計劃,還有4個人沒有想法)。

這一環節與人類相處模式很相似。

### 像真人一樣交互

在這個名為Smallville的沙盒世界小鎮中,區域會被標記。根節點描述整個世界,子節點描述區域(房屋、咖啡館、商店),葉節點描述對象(桌子、書架)。

智能體會記住一個子圖,這個子圖反映了他們所看到的世界的各個部分。

研究者編寫了一段自然語言,來描述每個智能體的身份,包括它們的職業、與其他智能體的關係,作為種子記憶。

比如,智能體John Lin的種子記憶就是這樣的——

John Lin是一名藥店店主,十分樂於助人,一直在尋找使客戶更容易獲得藥物的方法。 John Lin的妻子Mei Lin是大學教授,兒子Eddy Lin正在學習音樂理論,他們住在一起,John Lin非常愛他的家人。 John Lin認識隔壁的老夫婦Sam Moore和Jennifer Moore幾年了,John Lin覺得Sam Moore是一個善良的人。 John Lin和他的鄰居山本百合子很熟。 John Lin知道他的鄰居TamaraTaylor和Carmen Ortiz,但從未見過他們。 John Lin和Tom Moreno是藥店同事,也是朋友,喜歡一起討論地方政治等等。

以下就是John Lin度過的一天早晨:6點醒來,開始刷牙、洗澡、吃早餐,在出門工作前,他會見一見自己的妻子Mei和兒子Eddy。

就這樣,當模擬開始時,每個智能體都有屬於自己的種子記憶。

這些智能體相互之間會發生社會行為。當他們注意到彼此時,可能會進行對話。

隨著時間推移,這些智能體會形成新的關係,並且會記住自己與其他智能體的互動。

一個有趣的故事是,在模擬開始時,一個智能體的初始化設定是自己需要組織一個情人節派對。

隨後發生的一系列事情,都可能存在失敗點,智能體可能不會繼續堅持這個意圖,或者會忘記告訴他人,甚至可能忘了出現。

幸運的是,在模擬中,情人節派對真實地發生了,許多智能體聚在了一起發生了有趣的互動。

保姆級教程

配置環境

在配置環境之前,首先需要生成一個包含OpenAI API密鑰的utils.py文件,並下載必要的軟件包。

步驟1. 生成Utils 文件

在reverie/backend_server文件夾中(reverie.py所在的文件夾),新建一個utils.py文件,並將下面的內容複製粘貼到文件中:

複製並粘貼您的OpenAI API 密鑰openai_api_key = ""# 輸入您的namekey_owner = ""maze_assets_loc = "../../environment/frontend_server/static_dirs /assets"env _matrix = f"{maze_assets_loc}/the_ville/matrix"env_visuals = f"{maze_assets_loc}/the_ville/visuals"fs_storage = ".. /../環境/前端_server/storage"fs_temp_storage = "../../environment/frontend_server/temp_storage"collision_block_id = "32125"# 詳細調試 = True

將替換為你的OpenAI API密鑰,將替換為你的姓名。

步驟2. 安裝requirements.txt

安裝requirements.txt文件中列出的所有內容(強烈建議先設置一個虛擬環境)。

目前,團隊已在Python 3.9.12上進行了測試。

運行模擬

要運行新的模擬,你需要同時啟動兩個服務器:環境服務器和智能體模擬服務器。

步驟1. 啟動環境服務器

由於環境是作為Django項目實現的,因此需要啟動Django服務器。

為此,首先在命令行中導航到environment/frontend_server(manage.py所在的位置)。然後運行以下命令:

python 管理.py runserver

然後,在你喜歡的瀏覽器中訪問。

如果看到「Your environment server is up and running」這個提示,意思就是服務器運行正常。確保環境服務器在運行模擬時持續運行,因此請保持這個命令行標籤打開。

(注意:建議使用Chrome或Safari。Firefox可能會出現一些前端故障,但應該不會影響實際模擬。)

步驟2. 啟動模擬服務器

打開另一個命令行窗口(你在步驟1 中使用的仍在運行環境服務器,需要保持不動)。導航到reverie/backend_server並運行reverie.py來啟動模擬服務器:

蟒蛇遐想.py

此時,會出現一個命令行提示詢問以下內容:「Enter the name of the forked simulation: 」。

舉個例子,現在我們要啟動一個包含Isabella Rodriguez、Maria Lopez和Klaus Mueller這3個智能體的模擬,那麼就是輸入以下內容:

基地_the_ville_isabella_maria_klaus

然後,提示將會詢問:「Enter the name of the new simulation: 」。

這時只需要隨意輸入一個名稱來表示當前的模擬即可(例如「test-simulation」)。

測試模擬

保持模擬器服務器運行。此階段,它會顯示以下提示:「Enter option」

步驟3. 運行和保存模擬

在瀏覽器中訪問simulator_home,並保持標籤打開。

現在你會看到小鎮的地圖,以及地圖上活躍的智能體列表,並且可以使用鍵盤箭頭在地圖上移動。

要運行模擬,需要在提示「Enter option」的模擬服務器中輸入以下命令:

跑步

請注意,需要將上述的替換為一個整數,表示要模擬的遊戲步數。

例如,如果要模擬100步遊戲,就輸入run 100。其中,一個遊戲步驟表示遊戲中的10秒。

現在,模擬就會開始運行,你可以在瀏覽器中看到智能體在地圖上移動。

一旦運行完成,「Enter option」提示會再次出現。此時,你可以通過重新輸入run命令並指定所需的遊戲步數來繼續模擬,或者輸入exit退出但不保存,輸入fin則是保存並退出。

下次運行模擬服務器時,只要提供模擬的名稱就可以訪問已保存的模擬。這樣,你就可以從上次離開的位置重新啟動模擬。

Step 4. 重放模擬

只需運行環境服務器,並在瀏覽器中訪問到以下地址,即可重放已運行的模擬:replay//。

其中,需要將替換為重放的模擬的名稱,將替換開始重放的整數時間步。

Step 5. 演示模擬

你可能會發現,重放中所有角色的Sprite看起來都是一樣的。這是因為重放功能主要用於調試,並不優先考慮優化模擬文件夾的大小或視覺效果。

要正確演示帶有角色Sprite的模擬,首先需要壓縮模擬。為此,請使用文本編輯器打開位於reverie目錄中的compress_sim_storage.py文件。然後,執行壓縮函數,並將目標模擬的名稱作為輸入。這樣,模擬文件就會被壓縮,從而可以進行演示。

啟動演示,請在瀏覽器中打開以下地址:demo///。

注意,和與上述提到的含義相同。可用於控制演示速度,其中1表示最慢,5表示最快。

定制模擬

你有兩種可選方式來自定義模擬。

方法1:編寫並加載智能體歷史

第一種是在模擬開始時初始化具有獨特歷史記錄的智能體。

為此,你需要執行以下操作:1)使用其中一個基本模擬開始,2)編寫和加載智能體歷史記錄。

步驟1. 啟動基本模擬

存儲庫中包含兩個基本模擬:base_the_ville_n25(25個智能體)和base_the_ville_isabella_maria_klaus(3個智能體)。可以按照上述步驟加載其中一個基本模擬。

步驟2. 加載歷史文件

然後,在提示輸入「Enter option」時,需要使用以下命令加載智能體歷史記錄:

調用 -- 加載歷史記錄 the_ville/.csv

其中,需要將替換為現有歷史文件的名稱。

存儲庫中包含兩個示例歷史文件:agent_history_init_n25.csv(針對base_the_ville_n25)和agent_history_init_n3.csv(針對base_the_ville_isabella_maria _klaus)。這些文件包含了每個智能體的內存記錄列表。

步驟3. 進一步的定制

要通過編寫自己的歷史文件來定制初始化,請將文件放在以下文件夾中:environment/frontend_server/static_dirs/assets/the_ville。

自定義的歷史文件的列格式必須與附帶的示例歷史文件一致。因此,作者建議通過複製和粘貼存儲庫中已有的文件來開始該過程。

方法2:創建新的基本模擬

如果想要更深度地定制,就需要編寫自己的基本模擬文件。

最直接的方法是複制和粘貼現有的基本模擬文件夾,然後根據自己的要求進行重命名和編輯。

參考資料:

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 留言
  • 分享
留言
0/400
暫無留言
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)