العرض المباشر
انضم إلى مجتمعنا Discord: AI Stack Devs
AI Town هي مدينة افتراضية يعيش فيها شخصيات الذكاء الاصطناعي ويدردشون ويتواصلون اجتماعيًا.
هذا المشروع عبارة عن مجموعة أدوات بداية قابلة للنشر لبناء نسختك الخاصة من مدينة الذكاء الاصطناعي وتخصيصها بسهولة. مستوحاة من الورقة البحثية الوكلاء المولدون: محاكاة تفاعلية للسلوك البشري .
الهدف الأساسي لهذا المشروع، إلى جانب كونه مجرد متعة كبيرة للعمل عليه، هو توفير منصة ذات أساس قوي من المفترض أن يتم توسيعها. تدعم الواجهة الخلفية في الأصل الحالة العالمية المشتركة والمعاملات ومحرك المحاكاة ويجب أن تكون مناسبة لكل شيء بدءًا من المشروع البسيط الذي يمكن اللعب به إلى لعبة متعددة اللاعبين وقابلة للتطوير. الهدف الثانوي هو إتاحة إطار عمل JS/TS حيث أن معظم المحاكيات في هذا المجال (بما في ذلك الورقة الأصلية أعلاه) مكتوبة بلغة بايثون.
llama3
والتضمينات باستخدام mxbai-embed-large
.ملحوظة : هناك تثبيت بنقرة واحدة لفرع من هذا المشروع على Pinokio لأي شخص مهتم بتشغيله ولكن ليس تعديله؟
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
npm install
إما أن تقوم بتنزيل ملف ثنائي تم إنشاؤه مسبقًا (مستحسن)، أو أنشئه من المصدر وقم بتشغيله.
# For new Macs:
curl -L -O https://github.com/get-convex/convex-backend/releases/latest/download/convex-local-backend-aarch64-apple-darwin.zip
unzip convex-local-backend-aarch64-apple-darwin.zip
brew install just
# Runs the server
./convex-local-backend
يتم تثبيت هذا أيضًا just
(على سبيل المثال brew install just
أو cargo install just
). نحن نستخدم just
like make
لإضافة معلمات إضافية، لذا يمكنك تشغيل just convex ...
بدلاً من npx convex ...
للتطوير المحلي.
إذا كنت تقوم بتشغيل الملف الثنائي المُعد مسبقًا على نظام Mac وكان هناك تحذير من Apple، فانتقل إلى المجلد الموجود فيه وانقر فوقه بزر الماوس الأيمن ثم حدد "فتح" لتجاوزه. ومن الآن فصاعدا يمكنك تشغيله من سطر الأوامر. أو يمكنك تجميعه من المصدر وتشغيله (انظر أعلاه).
يمكنك ترك التطبيق قيد التشغيل أو تشغيل ollama serve
. سوف يحذرك ollama serve
إذا كان التطبيق قيد التشغيل بالفعل. قم بتشغيل ollama pull llama3
لتنزيل llama3
. اختبرها مع ollama run llama3
. إذا كنت تريد تخصيص النموذج الذي تريد استخدامه، فقم بضبط convex/util/llm.ts أو قم بتعيين just convex env set LLM_MODEL # model
. يمكن العثور على خيارات نموذج Olma هنا.
قد ترغب في تعيين NUM_MEMORIES_TO_SEARCH
على 1
في Constants.ts، لتقليل حجم مطالبات المحادثة، إذا رأيت بطء.
قم بمراجعة convex/config.ts
لتكوين النماذج التي سيتم عرضها على واجهة المستخدم، أو لإعدادها للتحدث مع LLM مستضاف على السحابة.
لإنشاء موسيقى خلفية يومية، قم بإنشاء حساب Replicate وإنشاء رمز مميز في صفحة API Token الخاصة بملفك الشخصي. just convex env set REPLICATE_API_TOKEN # token
لتشغيل كل من الواجهة الأمامية والخلفية:
npm run dev
ملاحظة : إذا واجهت خطأ في إصدار العقدة على الخادم المحدب عند بدء تشغيل التطبيق، فيرجى استخدام إصدار العقدة 18، وهو الأكثر استقرارًا. إحدى الطرق للقيام بذلك هي تثبيت nvm وتشغيل nvm install 18
أو nvm use 18
. قم بذلك قبل npm run dev
أعلاه والواجهة الخلفية ./convex-local-backend
في الخطوة 2.
يمكنك الآن زيارة http://localhost:5173.
إذا كنت تفضل تشغيل الواجهة الأمامية في محطة منفصلة عن Convex (الذي يقوم بمزامنة وظائف الواجهة الخلفية الخاصة بك أثناء حفظها)، فيمكنك تشغيل هذين الأمرين:
npm run dev:frontend
npm run dev:backend
راجع package.json للحصول على التفاصيل، ولكن dev:backend يعمل just convex dev
ملحوظة : ستتوقف المحاكاة مؤقتًا بعد 5 دقائق إذا كانت النافذة خاملة. سيؤدي تحميل الصفحة إلى إلغاء الإيقاف المؤقت. يمكنك أيضًا تجميد العالم وإلغاء تجميده يدويًا باستخدام زر في واجهة المستخدم. إذا كنت تريد تشغيل العالم بدون المتصفح، فيمكنك التعليق على الأمر cron "إيقاف العوالم غير النشطة" في convex/crons.ts
.
لإيقاف الواجهة الخلفية، في حالة وجود الكثير من النشاط
سيؤدي هذا إلى إيقاف تشغيل المحرك والوكلاء. لا يزال بإمكانك تشغيل الاستعلامات وتشغيل الوظائف لتصحيح الأخطاء.
just convex run testing:stop
لإعادة تشغيل الواجهة الخلفية بعد إيقافها
just convex run testing:resume
لركل المحرك في حالة عدم تشغيل محرك اللعبة أو العملاء
just convex run testing:kick
لأرشفة العالم
إذا كنت ترغب في إعادة ضبط العالم والبدء من الصفر، فيمكنك أرشفة العالم الحالي:
just convex run testing:archive
وبعد ذلك، لا يزال بإمكانك الاطلاع على بيانات العالم في لوحة المعلومات، ولكن لن يعمل المحرك والوكلاء بعد الآن.
يمكنك بعد ذلك إنشاء عالم جديد باستخدام init
.
just convex run init
لمسح كافة قواعد البيانات
يمكنك مسح جميع الجداول باستخدام وظيفة اختبار wipeAllTables
.
just convex run testing:wipeAllTables
لإيقاف نشر الواجهة الخلفية مؤقتًا
يمكنك الانتقال إلى لوحة المعلومات لإعدادات النشر الخاصة بك لإيقاف النشر مؤقتًا وإلغاء الإيقاف المؤقت. سيؤدي هذا إلى إيقاف جميع الوظائف، سواء تم استدعاؤها من العميل، أو جدولتها، أو كمهمة كرون. انظر إلى هذا كملاذ أخير، حيث توجد طرق أكثر لطفًا للتوقف أعلاه. مرة واحدة لك
قم بتعديل ملف package.json
الخاص بك لإضافة خيار --host
إلى خادم الواجهة الأمامية (Vite):
{
"name" : " ai-town " ,
"version" : " 0.0.0 " ,
"private" : true ,
"scripts" : {
"dev" : " npm-run-all --parallel dev:frontend dev:backend " ,
"build" : " tsc && vite build " ,
"lint" : " eslint . " ,
"predev" : " just convex dev --run init --until-success " ,
"dev:backend" : " just convex dev --tail-logs " ,
"dev:frontend" : " vite --host " , // <------------------------------------------ modify this line
"test" : " NODE_OPTIONS=--experimental-vm-modules jest --verbose " ,
"le" : " vite src/editor/ "
}
}
قم بتشغيل الأمر التالي لتشغيل Docker Compose:
docker-compose up --build
بمجرد الانتهاء، يمكنك إغلاق المحطة.
في محطة طرفية أخرى، لا تزال في دليل aitown
، قم بتشغيل محطة Docker تفاعلية:
docker-compose exec ai-town /bin/bash
قم بتنزيل وفك ضغط الواجهة الخلفية المحلية المحدبة:
curl -L -O https://github.com/get-convex/convex-backend/releases/download/precompiled-2024-06-28-91981ab/convex-local-backend-x86_64-unknown-linux-gnu.zip
unzip convex-local-backend-x86_64-unknown-linux-gnu.zip
تحقق من وجود ملف convex-local-backend
في الدليل، ثم قم بإزالة الملف المضغوط:
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
جعل الملف قابلاً للتنفيذ:
chmod +x /usr/src/app/convex-local-backend
قم بتشغيل خادم الواجهة الخلفية Convex:
./convex-local-backend
في محطة طرفية أخرى، في دليل aitown
، أعد تشغيل:
docker-compose exec ai-town /bin/bash
قم بتكوين socat
باستخدام عنوان IP الخاص بالمضيف:
HOST_IP=YOUR-HOST-IP # Use your host's IP address (not the Docker IP)
socat TCP-LISTEN:11434,fork TCP: $HOST_IP :11434 &
اختبار الاتصال:
curl http://localhost:11434/
إذا قيل "العلماء يركضون"، فهذا جيد!
تأكد من أن شركة Convex تعرف مكان العثور على Ollama (لتخطي خطأ عشوائي غامض...):
just convex env set OLLAMA_HOST http://localhost:11434
تحديث قائمة المتصفح:
npx update-browserslist-db@latest
إطلاق مدينة الذكاء الاصطناعي:
npm run dev
قم بتشغيل الحاوية ثم افتح محطتين في مجلد AI-town الخاص بك باستخدام docker-compose exec ai-town /bin/bash
قم بتشغيل خادم الواجهة الخلفية Convex: bash ./convex-local-backend
وفي المحطة الثانية، قم ببساطة بتكوين Socat، قم بتشغيل AI Town.
أولا، تحتاج إلى تثبيت WSL2. اتبع هذا الدليل لإعداد WSL2 على جهاز يعمل بنظام Windows. نوصي باستخدام Ubuntu كتوزيعة Linux الخاصة بك.
افتح محطة WSL (Ubuntu) وقم بتحديث حزمك:
sudo apt update
يساعد NVM (Node Version Manager) في إدارة إصدارات متعددة من Node.js. تثبيت NVM وNode.js 18 (الإصدار الثابت):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
source ~/.bashrc
nvm install 18
nvm use 18
بايثون مطلوبة لبعض التبعيات. تثبيت بايثون وبيب:
sudo apt-get install python3 python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
تثبيت unzip
و socat
:
sudo apt install unzip socat
Cargo هو مدير حزم Rust. تثبيت الصدأ والشحن:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
just
مع Cargo يستخدم just
لتشغيل الأوامر تثبيته مع البضائع:
cargo install just
export PATH="$HOME/.cargo/bin:$PATH"
just --version
socat
على Bridge Ports لـ Ollamaقم بتشغيل الأمر التالي لسد المنافذ، مما يسمح بالاتصال بين Convex وOllama:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
اختبار ما إذا كان يعمل:
curl http://127.0.0.1:11434
إذا استجابت بشكل جيد، فيمكن الوصول إلى واجهة برمجة تطبيقات Olma.
استنساخ مستودع AI Town من GitHub:
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
قم بتثبيت حزم npm الضرورية:
npm install
قم بتنزيل وتثبيت الإصدار المترجم مسبقًا من Convex:
curl -L -O https://github.com/get-convex/convex-backend/releases/download/precompiled-2024-06-28-91981ab/convex-local-backend-x86_64-unknown-linux-gnu.zip
unzip convex-local-backend-x86_64-unknown-linux-gnu.zip
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
chmod +x convex-local-backend
في محطة منفصلة، قم بتشغيل Convex:
./convex-local-backend
قم بتعيين مضيف Ollama في وضع محدب:
just convex env set OLLAMA_HOST http://localhost:11434
أخيرًا، أطلق AI Town:
npm run dev
قم بزيارة http://localhost:5173
في متصفحك لرؤية AI Town أثناء العمل.
إذا كنت بحاجة إلى إعادة تشغيل الخدمات:
تأكد من تشغيل socat
:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
إطلاق محدب:
./convex-local-backend
في محطة أخرى: 3. إطلاق AI Town:
npm run dev
ملاحظة: في كل مرة تقوم فيها بتغيير بيانات الشخصية، يجب عليك إعادة تشغيل just convex run testing:wipeAllTables
ثم npm run dev
لإعادة تحميل كل شيء إلى Convex. وذلك لأنه يتم إرسال بيانات الشخصية إلى Convex عند التحميل الأولي. ومع ذلك، احذر من أن just convex run testing:wipeAllTables
سوف يمسح جميع بياناتك.
قم بإنشاء شخصياتك وقصصك الخاصة: يتم تخزين جميع الشخصيات والقصص، بالإضافة إلى مراجع جداول البيانات الخاصة بها في Characters.ts. يمكنك البدء بتغيير أوصاف الشخصيات.
تحديث جداول البيانات المتحركة: في data/characters.ts
، سترى هذا الكود:
export const characters = [
{
name : 'f1' ,
textureUrl : '/assets/32x32folk.png' ,
spritesheetData : f1SpritesheetData ,
speed : 0.1 ,
} ,
...
] ;
يجب عليك العثور على ورقة رموز متحركة لشخصيتك، وتحديد حركة/أصول الكائنات في الملف المقابل (في المثال أعلاه، تم تعريف f1SpritesheetData
في f1.ts)
تحديث الخلفية (البيئة): يتم تحميل الخريطة بتنسيق convex/init.ts
من data/gentle.js
. لتحديث الخريطة، اتبع الخطوات التالية:
convertMap.js
لتحويل JSON إلى تنسيق يمكن للمحرك استخدامه. node data/convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>
<mapDataPath>
: المسار إلى ملف JSON المتجانب.<assetPath>
: المسار إلى صور مجموعة التجانبات.<tilesetpxw>
: عرض مجموعة البلاط بالبكسل.<tilesetpxh>
: ارتفاع مجموعة البلاط بالبكسل. يُنشئ converted-map.js
الذي يمكنك استخدامه مثل gentle.js
convex/music.ts
convex/crons.ts
عن طريق تعديل مهمة generate new background music
قم بتكوين convex/util/llm.ts
أو قم بتعيين متغيرات env هذه:
just convex env set LLM_API_HOST # url
just convex env set LLM_MODEL # model
يجب تغيير تكوين نموذج التضمينات في التعليمات البرمجية، حيث تحتاج إلى تحديد بُعد التضمينات.
بالنسبة إلى Together.ai، تفضل بزيارة https://api.together.xyz/settings/api-keys بالنسبة إلى OpenAI، تفضل بزيارة https://platform.openai.com/account/api-keys
يمكنك تشغيل الواجهة الخلفية المحدبة الخاصة بك في السحابة بمجرد التشغيل
npx convex dev --until-success --configure
وتحديث البرامج النصية package.json
لإزالة just
: تغيير just convex ...
إلى convex ...
.
ستحتاج بعد ذلك إلى تعيين أي متغيرات بيئة لديك محليًا في البيئة السحابية باستخدام npx convex env set
أو على لوحة المعلومات: https://dashboard.convex.dev/deployment/settings/environment-variables
قبل أن تتمكن من تشغيل التطبيق، ستحتاج إلى التأكد من نشر وظائف Convex في بيئة الإنتاج الخاصة به.
npx convex deploy
لنشر الوظائف المحدبة في الإنتاجnpx convex run init --prod
إذا كانت لديك بيانات موجودة تريد مسحها، فيمكنك تشغيل npx convex run testing:wipeAllTables --prod
يمكنك إضافة مصادقة كاتب مرة أخرى باستخدام git revert b44a436
. أو مجرد إلقاء نظرة على هذا الاختلاف لمعرفة ما تغير لإزالته.
إنشاء حساب كاتب
VITE_CLERK_PUBLISHABLE_KEY
و CLERK_SECRET_KEY
إلى .env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_ ***
CLERK_SECRET_KEY=sk_ ***
just convex env set CLERK_ISSUER_URL # e.g. https://your-issuer-url.clerk.accounts.dev/
vercel login
.vercel --prod
. نحن ندعم استخدام Ollama لأجيال المحادثة. لتتمكن من الوصول إليه من الويب، يمكنك استخدام Tunnelmole أو Ngrok أو ما شابه ذلك.
باستخدام Tunnelmole
Tunnelmole هي أداة نفق مفتوحة المصدر.
يمكنك تثبيت Tunnelmole باستخدام أحد الخيارات التالية:
npm install -g tunnelmole
curl -s https://tunnelmole.com/sh/install-linux.sh | sudo bash
curl -s https://tunnelmole.com/sh/install-mac.sh --output install-mac.sh && sudo bash install-mac.sh
exe
لنظام التشغيل Windows هنا وضعه في مكان ما في PATH.بمجرد تثبيت Tunnelmole، قم بتشغيل الأمر التالي:
tmole 11434
يجب أن يقوم Tunnelmole بإخراج عنوان URL فريد بمجرد تشغيل هذا الأمر.
باستخدام نجروك
Ngrok هي أداة نفق مغلقة المصدر شائعة.
بمجرد تثبيت ngrok ومصادقته، قم بتشغيل الأمر التالي:
ngrok http http://localhost:11434
يجب أن يقوم Ngrok بإخراج عنوان URL فريد بمجرد تشغيل هذا الأمر.
أضف نقطة نهاية Ollama إلى Convex
just convex env set OLLAMA_HOST # your tunnelmole/ngrok unique url from the previous step
تحديث مجالات Olma
لدى Olma قائمة بالنطاقات المقبولة. أضف مجال ngrok حتى لا يرفض حركة المرور. راجع ollama.ai لمزيد من التفاصيل.
Convex عبارة عن منصة خلفية مستضافة تحتوي على قاعدة بيانات مدمجة تتيح لك كتابة مخطط قاعدة البيانات ووظائف الخادم في TypeScript. استعلامات قاعدة البيانات من جانب الخادم تقوم تلقائيًا بتخزين البيانات والاشتراك فيها، مما يؤدي إلى تشغيل ربط useQuery
في الوقت الفعلي في عميل React الخاص بنا. هناك أيضًا عملاء لـ Python وRust وReactNative وNode، بالإضافة إلى واجهة برمجة تطبيقات HTTP المباشرة.
تدعم قاعدة البيانات المستندات بنمط NoSQL مع التحقق من صحة المخطط والعلاقات والفهارس المخصصة (بما في ذلك الحقول الموجودة في الكائنات المتداخلة).
تتمتع وظائف خادم query
mutation
بوصول للمعاملات وزمن وصول منخفض إلى قاعدة البيانات والاستفادة من وقت تشغيل v8
الخاص بنا مع حواجز الحماية الحتمية لتوفير أقوى ضمانات ACID في السوق: الاتساق الفوري والعزل القابل للتسلسل وحل التعارض التلقائي عبر التحكم المتزامن المتفائل متعدد الإصدارات (أو سي سي / إم في سي سي).
تتمتع وظائف خادم action
بإمكانية الوصول إلى واجهات برمجة التطبيقات الخارجية وتمكين الآثار الجانبية الأخرى وعدم الحتمية إما في وقت تشغيل v8
المحسن لدينا أو وقت تشغيل node
الأكثر مرونة.
يمكن تشغيل الوظائف في الخلفية عبر الجدولة ووظائف cron.
يتم التطوير على السحابة أولاً، مع عمليات إعادة التحميل السريعة لتحرير وظيفة الخادم عبر واجهة سطر الأوامر (CLI)، ومعاينة عمليات النشر، وتكامل تقارير التسجيل والاستثناءات، وهناك واجهة مستخدم للوحة المعلومات لتصفح البيانات وتحريرها، وتحرير متغيرات البيئة، وعرض السجلات، وتشغيل وظائف الخادم، والمزيد .
توجد ميزات مدمجة لترقيم الصفحات التفاعلي، وتخزين الملفات، والبحث عن النص التفاعلي، والبحث المتجه، ونقاط نهاية https (لخطافات الويب)، واستيراد/تصدير اللقطة، واستيراد/تصدير البث، والتحقق من صحة وقت التشغيل لوسيطات الوظائف وبيانات قاعدة البيانات.
يتم قياس كل شيء تلقائيًا، ويمكنك البدء مجانًا.