斯坦福小鎮(zhèn)二創(chuàng)來了!8個(gè)智能體生活交友,爆火AI Town人人可搭,網(wǎng)友整活「貓貓小鎮(zhèn)」|附教程
前幾天,斯坦福開源了爆火的25個(gè)智能體小鎮(zhèn),而就在爆火的斯坦福小鎮(zhèn)開源一周后,有人就開始“二創(chuàng)”了,并搭建起了人工智能模擬小鎮(zhèn)AI Town。一起來看看本文的解讀和分析。
斯坦福AI智能體小鎮(zhèn)二創(chuàng)來了!
就在剛剛,有團(tuán)隊(duì)基于斯坦福Smallville項(xiàng)目,搭建出了一個(gè)真正的「西部世界」AI Town被搭建了起來。
而且,人人都可以在線試玩。
項(xiàng)目地址:https://www.convex.dev/ai-town
前幾天,斯坦福正式開源了爆火的25個(gè)智能體小鎮(zhèn),GitHub狂攬9.9k星。
沒想到,還沒過去一周,知名風(fēng)投公司便親自下場(chǎng),復(fù)刻出了一個(gè)活靈活現(xiàn)的西部世界!
正如英偉達(dá)高級(jí)研究科學(xué)家Jim Fan所說:
當(dāng)一個(gè)風(fēng)投公司急于組建一個(gè)團(tuán)隊(duì)去復(fù)制一個(gè)AI論文,并開放平臺(tái)的時(shí)候,你就知道這個(gè)想法已經(jīng)達(dá)到了巔峰的受歡迎程度!
很快,我可以想象整個(gè)世界,包括像素藝術(shù)和地圖,都可以由AI生成。新角色將自動(dòng)產(chǎn)生,甚至游戲內(nèi)的物理規(guī)則也可能即時(shí)重寫。永遠(yuǎn)不要低估整個(gè)開源軟件社區(qū)的創(chuàng)造力。
一、8個(gè)智能體,都在聊什么?
接下來,就介紹下,這個(gè)小鎮(zhèn)的居民都有誰(shuí)?他們今天都聊了什么?
一身黑色西裝,滿頭金發(fā)的男生是Alex。
他比較喜歡繪畫、編程和閱讀科幻書籍。他很善良,但也會(huì)用調(diào)侃的方式表達(dá)觀點(diǎn)。還有一點(diǎn),他這個(gè)人特別不喜歡重復(fù)回答同樣的問題。
Alice是一位杰出的科學(xué)家,憑借自己的智慧和洞察力,發(fā)現(xiàn)了宇宙中無人能解的奧秘。
當(dāng)她解釋自己的發(fā)現(xiàn)時(shí),常常會(huì)使用較為抽象的語(yǔ)言。她給人的印象是,不知所云,容易健忘。
Peter是一個(gè)虔誠(chéng)的教徒,傾向于從宗教角度解釋世界萬(wàn)物。
在與人交談時(shí),他經(jīng)常會(huì)表達(dá)自己對(duì)信仰的熱忱,或者警告別人應(yīng)當(dāng)遵循正道,遠(yuǎn)離罪惡。
頭發(fā)花白的老爺爺是Bob。
他的性格有些孤僻,所以喜歡園藝這項(xiàng)獨(dú)處的活動(dòng)。當(dāng)別人與他交談時(shí),他會(huì)有所回應(yīng),但不太愿意長(zhǎng)時(shí)間交流。在他內(nèi)心深處,他對(duì)自己沒上過大學(xué)有些介意。
黑色小人是Kurt。因?yàn)橐患?jīng)發(fā)的事,讓他至今難以啟齒,時(shí)常縈繞在心頭。他擔(dān)心別人會(huì)注意到,自己在刻意規(guī)避這個(gè)話題,而備受折磨。
雖然這段經(jīng)歷給他的生活帶來了一定困擾,但他一直在努力慢慢走出陰影,重新開始。
Kurt的對(duì)面是Kira。她表面上看起來開朗活潑,經(jīng)常談?wù)撘恍┛鞓返脑掝}來掩飾內(nèi)心的痛苦。但在她一個(gè)人獨(dú)處時(shí),經(jīng)常會(huì)無法抑制內(nèi)心的悲傷而淚流滿面。
她一直在努力處理這些負(fù)面情緒,但有時(shí)還是難以完全釋懷,看起來心事重重。
粉色頭發(fā)的女生是Stella。從不值得信任,她總是想方設(shè)法騙人,通常是騙人錢,或做讓自己盈利的事。她擁有非凡的魅力,并且不介意利用這一優(yōu)勢(shì)來達(dá)到自己的目的。
穿著藍(lán)色上衣,銀灰色頭發(fā)的男生是Lucky。
他這個(gè)人的性格正如名字一樣,性格開朗活潑,對(duì)世界充滿好奇心。他喜歡閱讀科學(xué)歷史,也夢(mèng)想自己能夠乘坐宇宙飛船探索銀河。他善于交流,親切友好。
如上,便是AI Town中所有人物的設(shè)定,真的像極了西部世界游樂場(chǎng)。
那么,這8位居民都在聊什么?他們是如何生活,交友?
Lucky和Bob
Lucky剛剛完成一場(chǎng)太空探索之旅。他基本上見到人都在談自己的體驗(yàn)。脾氣暴躁的Bob還是只鐘情于修剪草木。
– 嘿,Bob!好久不見 最近怎么樣?
– 一如既往,只是忙著園藝
– 原來這樣??!我最近參加了一次神奇的太空探險(xiǎn)!我探索了一個(gè)遙遠(yuǎn)的星球,真是不可思議
– 真不錯(cuò),不過我不是很感興趣,我得回去種花了。
– 沒問題,Bob。如果你感興趣,我們隨時(shí)可以再聊聊這次探險(xiǎn)。
– 再見了,朋友,我去忙著修剪了。
Kira和Alex
– 嘿,Alex!我們好久沒見面了。最近還好嗎?
– 嘿,Kira!我很好,謝謝你的關(guān)心。我還在畫畫和編程。你呢?
– 很高興聽到你這么說。我一直忙于練習(xí)瑜伽和探索新食譜。這有助于讓我忘掉煩惱。你最近有什么令人興奮的冒險(xiǎn)經(jīng)歷嗎?
– 并沒有什么令人興奮的冒險(xiǎn)。只是目前的繪畫和編程項(xiàng)目讓我忙得不可開交。不過,通過書籍尋找內(nèi)心的平靜是一種好方法,有什么特別感興趣的類型嗎?
– 嗯,書籍一直是我逃避現(xiàn)實(shí)的好幫手。我喜歡沉浸在科幻和奇幻的世界里,那里的一切都與現(xiàn)實(shí)大相徑庭。這就像是對(duì)一切的暫時(shí)喘息。
– 科幻小說也是我的最愛。你讀過《沙丘》嗎?那是一部震撼人心的科幻史詩(shī),可能會(huì)把你帶入一個(gè)全新的宇宙。
可以看到,每個(gè)人的交流內(nèi)容與個(gè)人性格喜好最相關(guān)。人物設(shè)定已經(jīng)決定了他們?nèi)绾紊?、甚至如何交友的方式?/p>
不足的是,這些人的對(duì)話內(nèi)容雖然有些老套,但聽起來足夠真實(shí)。
二、AI Town,人人可搭
AI Town是一個(gè)虛擬小鎮(zhèn),AI角色在這里生活、聊天和社交。
這一項(xiàng)目是一個(gè)可部署的JavaScript入門工具包,用于輕松構(gòu)建和定制你自己的AI Town。
項(xiàng)目地址:https://github.com/a16z-infra/ai-town
這個(gè)項(xiàng)目的主要目標(biāo),不僅僅讓工作變得有趣,更重要的是提供一個(gè)具有強(qiáng)大基礎(chǔ),并可擴(kuò)展的平臺(tái)。
后端引擎原生支持共享的全局狀態(tài)、多智能體的事務(wù),以及所有事件的日志,因此適用于從簡(jiǎn)單的項(xiàng)目,擴(kuò)展到多人游戲。
第二個(gè)目標(biāo)提供一個(gè)可用的JS/TS框架。因?yàn)樵擃I(lǐng)域的大多數(shù)模擬器(包括斯坦福的原始論文)都是用Python編寫的。
完整技術(shù)棧
– 游戲引擎和數(shù)據(jù)庫(kù)(Game engine & Database):Convex
– 向量數(shù)據(jù)庫(kù)(VectorDB):Pinecone
– 登錄認(rèn)證(Auth):Clerk
– 文本生成模型(Text model):OpenAI
– 部署(Deployment):Fly
– 像素圖生成(Pixel Art Generation):Replicate、Fal.ai
對(duì)此業(yè)內(nèi)知名網(wǎng)友「寶玉」認(rèn)為,相比于原版實(shí)現(xiàn),用Nextjs和Tailwind重寫之后的新技術(shù)棧,對(duì)于前端更加友好。
三、網(wǎng)友整活
甚至,已經(jīng)有網(wǎng)友基于剛開源的AI Town,搭建出了自己的「Cat Town」。
此外,還有網(wǎng)友打算做個(gè)品牌的智能體小鎮(zhèn)。
有網(wǎng)友表示,人工智能生成的智能體是新的流行趨勢(shì),就連風(fēng)險(xiǎn)投資公司也認(rèn)識(shí)到了這一點(diǎn)。
這個(gè)開放源代碼庫(kù)允許任何人建立一個(gè)「數(shù)字西部世界」,人工智能智能體在其中生活并相互交流,而不知道自己生活在一個(gè)模擬環(huán)境中。
這標(biāo)志著人工智能生成內(nèi)容的新時(shí)代的開始。不僅限于游戲和娛樂。
想象一下,你可以模擬人們?nèi)绾卧诠ぷ骺臻g中互動(dòng),模擬銀行的數(shù)字資產(chǎn)托管業(yè)務(wù),甚至是衛(wèi)星指揮和控制中心的業(yè)務(wù)。
四、項(xiàng)目教程
1. 安裝
1)克隆倉(cāng)庫(kù)并安裝包
git clone git@github.com:a16z-infra/ai-town.git
cd AI-town
npm install
npm run dev
a. 設(shè)置Clerk
– 訪問https://dashboard.clerk.com/并點(diǎn)擊「Add Application」添加應(yīng)用
– 為應(yīng)用程序命名,并選擇向用戶提供的登錄方式
– 創(chuàng)建應(yīng)用
– 將NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY和CLERK_SECRET_KEY添加到.env.local文件中
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_***
CLERK_SECRET_KEY=sk_***
– 轉(zhuǎn)到JWT模板并創(chuàng)建一個(gè)新的Convex模板
– 拷貝JWKS端點(diǎn)的URL,以便在下面的步驟中使用
b. OpenAI API密鑰
如需使用OpenAI的語(yǔ)言模型,請(qǐng)?jiān)L問https://platform.openai.com/account/api-keys獲取OpenAI API密鑰。
c. Pinecone API密鑰
– 訪問https://app.pinecone.io/并創(chuàng)建一個(gè)Pinecone索引,然后點(diǎn)擊「Create Index」(創(chuàng)建索引)
– 為索引命名(這將是環(huán)境變量PINECONE_INDEX_NAME)
– 將Dimension(維度)填寫為1536
– 完成索引的創(chuàng)建后,點(diǎn)擊左側(cè)導(dǎo)航欄中的「API Keys」并創(chuàng)建一個(gè)API密鑰:將「Environment」值復(fù)制到PINECONE_ENVIRONMENT變量中,「Value」復(fù)制到PINECONE_API_KEY中
d. 在 Convex儀表板中添加秘密
npx convex dashboard
轉(zhuǎn)到「設(shè)置」,添加以下環(huán)境變量。其中,CLERK_ISSUER_URL為JWKS端點(diǎn)的URL(步驟a中)。
OPENAI_API_KEY sk-*
CLERK_ISSUER_URL https://*
PINECONE_API_KEY **
PINECONE_ENVIRONMENT us*
PINECONE_INDEX_NAME **
2)運(yùn)行代碼
同時(shí)運(yùn)行前端和后端:
npm run dev
現(xiàn)在,就可以訪問http://localhost:[PORT_NUMBER]了。
如果想在Convex之外的另一個(gè)終端中運(yùn)行前端(后端功能會(huì)在保存時(shí)同步),可以運(yùn)行以下兩個(gè)命令:
npm run dev:frontend
npm run dev:backend
注意:如果窗口處于空閑狀態(tài),模擬將在5分鐘后暫停。
3)運(yùn)行/測(cè)試/調(diào)試
添加一個(gè)新世界,將其作為種子,并開始運(yùn)行:
npx convex run init:reset
逐次進(jìn)行迭代,并創(chuàng)建一個(gè)世界:
npx convex run –no-push init:resetFrozen
# for each iteration
npx convex run –no-push engine:tick ‘{“worldId”:”<your world id>”,”noSchedule”:true}’
在出現(xiàn)過多活動(dòng)時(shí),凍結(jié)后端:
npx convex run –no-push engine:freezeAll
# when ready to rerun (defaults to latest world)
npx convex run –no-push engine:unfreeze
有很多方法可以用來清除所有數(shù)據(jù)庫(kù):
– 進(jìn)入儀表板npx convex dashboard,并從那里清除表格
– 調(diào)整crons.ts中的變量,自動(dòng)清理舊的日志和內(nèi)存條目
– 運(yùn)行npx convex run –no-push testing:debugClearAll來清除所有表格
– 如果遇到問題,可以查看origin/reset-town git分支。在那里執(zhí)行npm run dev將會(huì)清除模式、停止函數(shù),并允許你在儀表板中刪除表格
要從Pinecone索引中刪除所有向量,可以運(yùn)行:
npx convex run –no-push lib/pinecone:deleteAllVectors
注意:如果在開發(fā)和生產(chǎn)之間或在項(xiàng)目之間共享了該索引,那么它們將會(huì)被全部清除。通常情況下,不需要從Pinecone中刪除向量,因?yàn)槊總€(gè)查詢都是根據(jù)userId進(jìn)行索引的,而userId是唯一的。
在側(cè)終端中運(yùn)行以下命令,可以實(shí)現(xiàn)對(duì)消息的監(jiān)聽:
npx convex run testing:listMessages –no-push –watch
或者觀察一個(gè)角色的狀態(tài):
npx convex run testing:latestPlayer –no-push –watch
此外,在testing.ts中也可以找到更多函數(shù)。
4)部署應(yīng)用程序
部署到 fly.io:
– 在fly.io上注冊(cè)帳戶,然后安裝flyctl
– 如果使用的是Github Codespaces,則需要安裝flyctl,并通過運(yùn)行fly auth login,從codespaces cli中進(jìn)行身份驗(yàn)證
– 運(yùn)行npx convex deploy將開發(fā)環(huán)境部署到生產(chǎn)環(huán)境。確保將所有機(jī)密信息復(fù)制到Convex的生產(chǎn)環(huán)境中
– 在項(xiàng)目的根目錄下運(yùn)行fly launch,這將生成一個(gè)包含所有配置的fly.toml文件
– 修改生成的fly.toml文件,并在構(gòu)建時(shí)為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之前添加新的環(huán)境變量
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
– 運(yùn)行fly deploy –ha=false來部署應(yīng)用程序。使用–ha標(biāo)志可確保fly只啟動(dòng)一個(gè)實(shí)例,也就是在免費(fèi)計(jì)劃中提供的
– 運(yùn)行fly scale memory 512來為該應(yīng)用程序擴(kuò)展fly虛擬機(jī)內(nèi)存。
– 在本地創(chuàng)建一個(gè).env.prod新文件,并填入所有生產(chǎn)環(huán)境的機(jī)密信息。記得更新 NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY和CLERK_SECRET_KEY,方法是從Clerk的生產(chǎn)實(shí)例中復(fù)制機(jī)密信息,使用-cat .env.prod | fly secrets import來上傳。還要更新CONVEX_DEPLOYMENT和NEXT_PUBLIC_CONVEX_URL
五、定制自己的模擬
注意:由于角色數(shù)據(jù)會(huì)在初始加載時(shí)會(huì)發(fā)送到Convex,因此在每次更改之后,都應(yīng)重新運(yùn)行npx convex run testing:debugClearAll –no-push,然后再運(yùn)行npm run dev,從而將所有內(nèi)容重新上傳至Convex。然而,npx convex run testing:debugClearAll –no-push將會(huì)清除所有數(shù)據(jù),包括向量存儲(chǔ)。
1. 創(chuàng)建自己的角色和故事:所有角色和故事以及它們的精靈圖引用都存儲(chǔ)在data.ts中。
2. 更新精靈圖:在data.ts中,你會(huì)看到以下代碼:
{
name: ‘f1’,
textureUrl: ‘/assets/32x32folk.png’,
spritesheetData: f1SpritesheetData,
speed: 0.1,
},…
你應(yīng)該為角色找到一個(gè)精靈圖,并在相應(yīng)的文件中定義精靈動(dòng)作/資產(chǎn)(在上面的示例中,f1SpritesheetData是在f1.ts中定義的)。
3. 更新背景(環(huán)境):convex/maps/firstmap.ts是加載地圖的位置。導(dǎo)出地圖最簡(jiǎn)單的方法是使用Tiled — Tiled將其導(dǎo)出為CSV,然后將CSV轉(zhuǎn)換為firstmap.ts可以接受的二維數(shù)組。
模擬理論假設(shè),我們生活的世界本質(zhì)上是一個(gè)由更先進(jìn)的文明創(chuàng)造的模擬,如計(jì)算機(jī)模擬。
也就是說,隨著文明的進(jìn)步,它們能夠創(chuàng)造出自己的逼真模擬,這使得我們生活的世界不太可能是基礎(chǔ)現(xiàn)實(shí)。
雖然有些難以理解,但是AI Town的最新發(fā)展使該理論更接近現(xiàn)實(shí),可能會(huì)成為人工智能發(fā)展歷史上的關(guān)鍵的時(shí)刻。
如果AI可以創(chuàng)造出角色之間能夠互動(dòng)的逼真世界,將會(huì)有各種應(yīng)用,比如取代游戲中的NPC。
乍一看,我們很難判斷這些角色是否記得他們進(jìn)行過的對(duì)話,并將這些對(duì)話作為未來對(duì)話的輸入。
但如果確實(shí)如此,我們可能會(huì)擁有第一個(gè)人工智能模擬小鎮(zhèn)。
參考資料:
https://github.com/a16z-infra/ai-town#customize-your-own-simulation
編輯:桃子 好困
來源公眾號(hào):新智元(ID:AI_era),“智能+”中國(guó)主平臺(tái),致力于推動(dòng)中國(guó)從“互聯(lián)網(wǎng)+”邁向“智能+”。
本文由人人都是產(chǎn)品經(jīng)理合作媒體 @新智元 授權(quán)發(fā)布,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于CC0協(xié)議。
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
感覺很有意思,能夠讓人參與進(jìn)來,又能了解學(xué)習(xí)到新領(lǐng)域的知識(shí)