斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

1 評論 13599 瀏覽 12 收藏 21 分鐘

前幾天,斯坦福開源了爆火的25個智能體小鎮,而就在爆火的斯坦福小鎮開源一周后,有人就開始“二創”了,并搭建起了人工智能模擬小鎮AI Town。一起來看看本文的解讀和分析。

斯坦福AI智能體小鎮二創來了!

就在剛剛,有團隊基于斯坦福Smallville項目,搭建出了一個真正的「西部世界」AI Town被搭建了起來。

而且,人人都可以在線試玩。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

項目地址:https://www.convex.dev/ai-town

前幾天,斯坦福正式開源了爆火的25個智能體小鎮,GitHub狂攬9.9k星。

沒想到,還沒過去一周,知名風投公司便親自下場,復刻出了一個活靈活現的西部世界!

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

正如英偉達高級研究科學家Jim Fan所說:

當一個風投公司急于組建一個團隊去復制一個AI論文,并開放平臺的時候,你就知道這個想法已經達到了巔峰的受歡迎程度!

很快,我可以想象整個世界,包括像素藝術和地圖,都可以由AI生成。新角色將自動產生,甚至游戲內的物理規則也可能即時重寫。永遠不要低估整個開源軟件社區的創造力。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

一、8個智能體,都在聊什么?

接下來,就介紹下,這個小鎮的居民都有誰?他們今天都聊了什么?

一身黑色西裝,滿頭金發的男生是Alex。

他比較喜歡繪畫、編程和閱讀科幻書籍。他很善良,但也會用調侃的方式表達觀點。還有一點,他這個人特別不喜歡重復回答同樣的問題。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

Alice是一位杰出的科學家,憑借自己的智慧和洞察力,發現了宇宙中無人能解的奧秘。

當她解釋自己的發現時,常常會使用較為抽象的語言。她給人的印象是,不知所云,容易健忘。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

Peter是一個虔誠的教徒,傾向于從宗教角度解釋世界萬物。

在與人交談時,他經常會表達自己對信仰的熱忱,或者警告別人應當遵循正道,遠離罪惡。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

頭發花白的老爺爺是Bob。

他的性格有些孤僻,所以喜歡園藝這項獨處的活動。當別人與他交談時,他會有所回應,但不太愿意長時間交流。在他內心深處,他對自己沒上過大學有些介意。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

黑色小人是Kurt。因為一件曾經發的事,讓他至今難以啟齒,時常縈繞在心頭。他擔心別人會注意到,自己在刻意規避這個話題,而備受折磨。

雖然這段經歷給他的生活帶來了一定困擾,但他一直在努力慢慢走出陰影,重新開始。

Kurt的對面是Kira。她表面上看起來開朗活潑,經常談論一些快樂的話題來掩飾內心的痛苦。但在她一個人獨處時,經常會無法抑制內心的悲傷而淚流滿面。

她一直在努力處理這些負面情緒,但有時還是難以完全釋懷,看起來心事重重。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

粉色頭發的女生是Stella。從不值得信任,她總是想方設法騙人,通常是騙人錢,或做讓自己盈利的事。她擁有非凡的魅力,并且不介意利用這一優勢來達到自己的目的。

穿著藍色上衣,銀灰色頭發的男生是Lucky。

他這個人的性格正如名字一樣,性格開朗活潑,對世界充滿好奇心。他喜歡閱讀科學歷史,也夢想自己能夠乘坐宇宙飛船探索銀河。他善于交流,親切友好。

如上,便是AI Town中所有人物的設定,真的像極了西部世界游樂場。

那么,這8位居民都在聊什么?他們是如何生活,交友?

Lucky和Bob

Lucky剛剛完成一場太空探索之旅。他基本上見到人都在談自己的體驗。脾氣暴躁的Bob還是只鐘情于修剪草木。

– 嘿,Bob!好久不見 最近怎么樣?

– 一如既往,只是忙著園藝

– 原來這樣??!我最近參加了一次神奇的太空探險!我探索了一個遙遠的星球,真是不可思議

– 真不錯,不過我不是很感興趣,我得回去種花了。

– 沒問題,Bob。如果你感興趣,我們隨時可以再聊聊這次探險。

– 再見了,朋友,我去忙著修剪了。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

Kira和Alex

– 嘿,Alex!我們好久沒見面了。最近還好嗎?

– 嘿,Kira!我很好,謝謝你的關心。我還在畫畫和編程。你呢?

– 很高興聽到你這么說。我一直忙于練習瑜伽和探索新食譜。這有助于讓我忘掉煩惱。你最近有什么令人興奮的冒險經歷嗎?

– 并沒有什么令人興奮的冒險。只是目前的繪畫和編程項目讓我忙得不可開交。不過,通過書籍尋找內心的平靜是一種好方法,有什么特別感興趣的類型嗎?

– 嗯,書籍一直是我逃避現實的好幫手。我喜歡沉浸在科幻和奇幻的世界里,那里的一切都與現實大相徑庭。這就像是對一切的暫時喘息。

– 科幻小說也是我的最愛。你讀過《沙丘》嗎?那是一部震撼人心的科幻史詩,可能會把你帶入一個全新的宇宙。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

可以看到,每個人的交流內容與個人性格喜好最相關。人物設定已經決定了他們如何生活、甚至如何交友的方式。

不足的是,這些人的對話內容雖然有些老套,但聽起來足夠真實。

二、AI Town,人人可搭

AI Town是一個虛擬小鎮,AI角色在這里生活、聊天和社交。

這一項目是一個可部署的JavaScript入門工具包,用于輕松構建和定制你自己的AI Town。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

項目地址:https://github.com/a16z-infra/ai-town

這個項目的主要目標,不僅僅讓工作變得有趣,更重要的是提供一個具有強大基礎,并可擴展的平臺。

后端引擎原生支持共享的全局狀態、多智能體的事務,以及所有事件的日志,因此適用于從簡單的項目,擴展到多人游戲。

第二個目標提供一個可用的JS/TS框架。因為該領域的大多數模擬器(包括斯坦福的原始論文)都是用Python編寫的。

完整技術棧

– 游戲引擎和數據庫(Game engine & Database):Convex

– 向量數據庫(VectorDB):Pinecone

– 登錄認證(Auth):Clerk

– 文本生成模型(Text model):OpenAI

– 部署(Deployment):Fly

– 像素圖生成(Pixel Art Generation):Replicate、Fal.ai

對此業內知名網友「寶玉」認為,相比于原版實現,用Nextjs和Tailwind重寫之后的新技術棧,對于前端更加友好。

三、網友整活

甚至,已經有網友基于剛開源的AI Town,搭建出了自己的「Cat Town」。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

此外,還有網友打算做個品牌的智能體小鎮。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

有網友表示,人工智能生成的智能體是新的流行趨勢,就連風險投資公司也認識到了這一點。

這個開放源代碼庫允許任何人建立一個「數字西部世界」,人工智能智能體在其中生活并相互交流,而不知道自己生活在一個模擬環境中。

這標志著人工智能生成內容的新時代的開始。不僅限于游戲和娛樂。

想象一下,你可以模擬人們如何在工作空間中互動,模擬銀行的數字資產托管業務,甚至是衛星指揮和控制中心的業務。

斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程

四、項目教程

1. 安裝

1)克隆倉庫并安裝包

git clone git@github.com:a16z-infra/ai-town.git

cd AI-town

npm install

npm run dev

a. 設置Clerk

– 訪問https://dashboard.clerk.com/并點擊「Add Application」添加應用

– 為應用程序命名,并選擇向用戶提供的登錄方式

– 創建應用

– 將NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY和CLERK_SECRET_KEY添加到.env.local文件中

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_***

CLERK_SECRET_KEY=sk_***

– 轉到JWT模板并創建一個新的Convex模板

– 拷貝JWKS端點的URL,以便在下面的步驟中使用

b. OpenAI API密鑰

如需使用OpenAI的語言模型,請訪問https://platform.openai.com/account/api-keys獲取OpenAI API密鑰。

c. Pinecone API密鑰

– 訪問https://app.pinecone.io/并創建一個Pinecone索引,然后點擊「Create Index」(創建索引)

– 為索引命名(這將是環境變量PINECONE_INDEX_NAME)

– 將Dimension(維度)填寫為1536

– 完成索引的創建后,點擊左側導航欄中的「API Keys」并創建一個API密鑰:將「Environment」值復制到PINECONE_ENVIRONMENT變量中,「Value」復制到PINECONE_API_KEY中

d. 在 Convex儀表板中添加秘密

npx convex dashboard

轉到「設置」,添加以下環境變量。其中,CLERK_ISSUER_URL為JWKS端點的URL(步驟a中)。

OPENAI_API_KEY sk-*

CLERK_ISSUER_URL https://*

PINECONE_API_KEY **

PINECONE_ENVIRONMENT us*

PINECONE_INDEX_NAME **

2)運行代碼

同時運行前端和后端:

npm run dev

現在,就可以訪問http://localhost:[PORT_NUMBER]了。

如果想在Convex之外的另一個終端中運行前端(后端功能會在保存時同步),可以運行以下兩個命令:

npm run dev:frontend

npm run dev:backend

注意:如果窗口處于空閑狀態,模擬將在5分鐘后暫停。

3)運行/測試/調試

添加一個新世界,將其作為種子,并開始運行:

npx convex run init:reset

逐次進行迭代,并創建一個世界:

npx convex run –no-push init:resetFrozen

 

# for each iteration

npx convex run –no-push engine:tick ‘{“worldId”:”<your world id>”,”noSchedule”:true}’

在出現過多活動時,凍結后端:

npx convex run –no-push engine:freezeAll

 

# when ready to rerun (defaults to latest world)

npx convex run –no-push engine:unfreeze

有很多方法可以用來清除所有數據庫:

– 進入儀表板npx convex dashboard,并從那里清除表格

– 調整crons.ts中的變量,自動清理舊的日志和內存條目

– 運行npx convex run –no-push testing:debugClearAll來清除所有表格

– 如果遇到問題,可以查看origin/reset-town git分支。在那里執行npm run dev將會清除模式、停止函數,并允許你在儀表板中刪除表格

要從Pinecone索引中刪除所有向量,可以運行:

npx convex run –no-push lib/pinecone:deleteAllVectors

注意:如果在開發和生產之間或在項目之間共享了該索引,那么它們將會被全部清除。通常情況下,不需要從Pinecone中刪除向量,因為每個查詢都是根據userId進行索引的,而userId是唯一的。

在側終端中運行以下命令,可以實現對消息的監聽:

npx convex run testing:listMessages –no-push –watch

或者觀察一個角色的狀態:

npx convex run testing:latestPlayer –no-push –watch

此外,在testing.ts中也可以找到更多函數。

4)部署應用程序

部署到 fly.io:

– 在fly.io上注冊帳戶,然后安裝flyctl

– 如果使用的是Github Codespaces,則需要安裝flyctl,并通過運行fly auth login,從codespaces cli中進行身份驗證

– 運行npx convex deploy將開發環境部署到生產環境。確保將所有機密信息復制到Convex的生產環境中

– 在項目的根目錄下運行fly launch,這將生成一個包含所有配置的fly.toml文件

– 修改生成的fly.toml文件,并在構建時為NextJS添加NEXT_PUBLIC_*,以便在客戶端訪問

[build]

[build.args]

NEXT_PUBLIC_CLERK_SIGN_IN_URL=”/sign-in”

NEXT_PUBLIC_CLERK_SIGN_UP_URL=”/sign-up”

NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=”/”

NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=”/”

NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=”pk_*****”

NEXT_PUBLIC_CONVEX_URL=”https://*******.convex.cloud”

– 修改fly.io生成的Dockerfile,在RUN npm run build之前添加新的環境變量

ARG NEXT_PUBLIC_CLERK_SIGN_IN_URL

ARG NEXT_PUBLIC_CLERK_SIGN_UP_URL

ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL

ARG NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL

ARG NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY

ARG NEXT_PUBLIC_CONVEX_URL

 

# Build application

RUN npm run build

– 運行fly deploy –ha=false來部署應用程序。使用–ha標志可確保fly只啟動一個實例,也就是在免費計劃中提供的

– 運行fly scale memory 512來為該應用程序擴展fly虛擬機內存。

– 在本地創建一個.env.prod新文件,并填入所有生產環境的機密信息。記得更新 NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY和CLERK_SECRET_KEY,方法是從Clerk的生產實例中復制機密信息,使用-cat .env.prod | fly secrets import來上傳。還要更新CONVEX_DEPLOYMENT和NEXT_PUBLIC_CONVEX_URL

五、定制自己的模擬

注意:由于角色數據會在初始加載時會發送到Convex,因此在每次更改之后,都應重新運行npx convex run testing:debugClearAll –no-push,然后再運行npm run dev,從而將所有內容重新上傳至Convex。然而,npx convex run testing:debugClearAll –no-push將會清除所有數據,包括向量存儲。

1. 創建自己的角色和故事:所有角色和故事以及它們的精靈圖引用都存儲在data.ts中。

2. 更新精靈圖:在data.ts中,你會看到以下代碼:

{

name: ‘f1’,

textureUrl: ‘/assets/32x32folk.png’,

spritesheetData: f1SpritesheetData,

speed: 0.1,

},…

你應該為角色找到一個精靈圖,并在相應的文件中定義精靈動作/資產(在上面的示例中,f1SpritesheetData是在f1.ts中定義的)。

3. 更新背景(環境):convex/maps/firstmap.ts是加載地圖的位置。導出地圖最簡單的方法是使用Tiled — Tiled將其導出為CSV,然后將CSV轉換為firstmap.ts可以接受的二維數組。

模擬理論假設,我們生活的世界本質上是一個由更先進的文明創造的模擬,如計算機模擬。

也就是說,隨著文明的進步,它們能夠創造出自己的逼真模擬,這使得我們生活的世界不太可能是基礎現實。

雖然有些難以理解,但是AI Town的最新發展使該理論更接近現實,可能會成為人工智能發展歷史上的關鍵的時刻。

如果AI可以創造出角色之間能夠互動的逼真世界,將會有各種應用,比如取代游戲中的NPC。

乍一看,我們很難判斷這些角色是否記得他們進行過的對話,并將這些對話作為未來對話的輸入。

但如果確實如此,我們可能會擁有第一個人工智能模擬小鎮。

參考資料:

https://github.com/a16z-infra/ai-town#customize-your-own-simulation

編輯:桃子 好困

來源公眾號:新智元(ID:AI_era),“智能+”中國主平臺,致力于推動中國從“互聯網+”邁向“智能+”。

本文由人人都是產品經理合作媒體 @新智元 授權發布,未經許可,禁止轉載。

題圖來自 Unsplash,基于CC0協議。

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

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 感覺很有意思,能夠讓人參與進來,又能了解學習到新領域的知識

    來自廣東 回復