斯坦福小鎮二創來了!8個智能體生活交友,爆火AI Town人人可搭,網友整活「貓貓小鎮」|附教程
前幾天,斯坦福開源了爆火的25個智能體小鎮,而就在爆火的斯坦福小鎮開源一周后,有人就開始“二創”了,并搭建起了人工智能模擬小鎮AI Town。一起來看看本文的解讀和分析。
斯坦福AI智能體小鎮二創來了!
就在剛剛,有團隊基于斯坦福Smallville項目,搭建出了一個真正的「西部世界」AI Town被搭建了起來。
而且,人人都可以在線試玩。
項目地址:https://www.convex.dev/ai-town
前幾天,斯坦福正式開源了爆火的25個智能體小鎮,GitHub狂攬9.9k星。
沒想到,還沒過去一周,知名風投公司便親自下場,復刻出了一個活靈活現的西部世界!
正如英偉達高級研究科學家Jim Fan所說:
當一個風投公司急于組建一個團隊去復制一個AI論文,并開放平臺的時候,你就知道這個想法已經達到了巔峰的受歡迎程度!
很快,我可以想象整個世界,包括像素藝術和地圖,都可以由AI生成。新角色將自動產生,甚至游戲內的物理規則也可能即時重寫。永遠不要低估整個開源軟件社區的創造力。
一、8個智能體,都在聊什么?
接下來,就介紹下,這個小鎮的居民都有誰?他們今天都聊了什么?
一身黑色西裝,滿頭金發的男生是Alex。
他比較喜歡繪畫、編程和閱讀科幻書籍。他很善良,但也會用調侃的方式表達觀點。還有一點,他這個人特別不喜歡重復回答同樣的問題。
Alice是一位杰出的科學家,憑借自己的智慧和洞察力,發現了宇宙中無人能解的奧秘。
當她解釋自己的發現時,常常會使用較為抽象的語言。她給人的印象是,不知所云,容易健忘。
Peter是一個虔誠的教徒,傾向于從宗教角度解釋世界萬物。
在與人交談時,他經常會表達自己對信仰的熱忱,或者警告別人應當遵循正道,遠離罪惡。
頭發花白的老爺爺是Bob。
他的性格有些孤僻,所以喜歡園藝這項獨處的活動。當別人與他交談時,他會有所回應,但不太愿意長時間交流。在他內心深處,他對自己沒上過大學有些介意。
黑色小人是Kurt。因為一件曾經發的事,讓他至今難以啟齒,時常縈繞在心頭。他擔心別人會注意到,自己在刻意規避這個話題,而備受折磨。
雖然這段經歷給他的生活帶來了一定困擾,但他一直在努力慢慢走出陰影,重新開始。
Kurt的對面是Kira。她表面上看起來開朗活潑,經常談論一些快樂的話題來掩飾內心的痛苦。但在她一個人獨處時,經常會無法抑制內心的悲傷而淚流滿面。
她一直在努力處理這些負面情緒,但有時還是難以完全釋懷,看起來心事重重。
粉色頭發的女生是Stella。從不值得信任,她總是想方設法騙人,通常是騙人錢,或做讓自己盈利的事。她擁有非凡的魅力,并且不介意利用這一優勢來達到自己的目的。
穿著藍色上衣,銀灰色頭發的男生是Lucky。
他這個人的性格正如名字一樣,性格開朗活潑,對世界充滿好奇心。他喜歡閱讀科學歷史,也夢想自己能夠乘坐宇宙飛船探索銀河。他善于交流,親切友好。
如上,便是AI Town中所有人物的設定,真的像極了西部世界游樂場。
那么,這8位居民都在聊什么?他們是如何生活,交友?
Lucky和Bob
Lucky剛剛完成一場太空探索之旅。他基本上見到人都在談自己的體驗。脾氣暴躁的Bob還是只鐘情于修剪草木。
– 嘿,Bob!好久不見 最近怎么樣?
– 一如既往,只是忙著園藝
– 原來這樣??!我最近參加了一次神奇的太空探險!我探索了一個遙遠的星球,真是不可思議
– 真不錯,不過我不是很感興趣,我得回去種花了。
– 沒問題,Bob。如果你感興趣,我們隨時可以再聊聊這次探險。
– 再見了,朋友,我去忙著修剪了。
Kira和Alex
– 嘿,Alex!我們好久沒見面了。最近還好嗎?
– 嘿,Kira!我很好,謝謝你的關心。我還在畫畫和編程。你呢?
– 很高興聽到你這么說。我一直忙于練習瑜伽和探索新食譜。這有助于讓我忘掉煩惱。你最近有什么令人興奮的冒險經歷嗎?
– 并沒有什么令人興奮的冒險。只是目前的繪畫和編程項目讓我忙得不可開交。不過,通過書籍尋找內心的平靜是一種好方法,有什么特別感興趣的類型嗎?
– 嗯,書籍一直是我逃避現實的好幫手。我喜歡沉浸在科幻和奇幻的世界里,那里的一切都與現實大相徑庭。這就像是對一切的暫時喘息。
– 科幻小說也是我的最愛。你讀過《沙丘》嗎?那是一部震撼人心的科幻史詩,可能會把你帶入一個全新的宇宙。
可以看到,每個人的交流內容與個人性格喜好最相關。人物設定已經決定了他們如何生活、甚至如何交友的方式。
不足的是,這些人的對話內容雖然有些老套,但聽起來足夠真實。
二、AI Town,人人可搭
AI Town是一個虛擬小鎮,AI角色在這里生活、聊天和社交。
這一項目是一個可部署的JavaScript入門工具包,用于輕松構建和定制你自己的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」。
此外,還有網友打算做個品牌的智能體小鎮。
有網友表示,人工智能生成的智能體是新的流行趨勢,就連風險投資公司也認識到了這一點。
這個開放源代碼庫允許任何人建立一個「數字西部世界」,人工智能智能體在其中生活并相互交流,而不知道自己生活在一個模擬環境中。
這標志著人工智能生成內容的新時代的開始。不僅限于游戲和娛樂。
想象一下,你可以模擬人們如何在工作空間中互動,模擬銀行的數字資產托管業務,甚至是衛星指揮和控制中心的業務。
四、項目教程
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協議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
感覺很有意思,能夠讓人參與進來,又能了解學習到新領域的知識