
تم تصميم هذا المشروع للفشل
(حتى لا يفعل ذلك)
أعد التشغيل حتى يعمل
يهدف هذا المشروع إلى إنشاء رمز باستخدام API Openai بطريقة تطورية. وهذا يعني أن كل جيل سيبني على الجيل السابق لجعل الكود أفضل ، أو تمديده ، أو إعادة تشكيله أو إصلاح الأخطاء.
هذا المشروع ، "Fail2" ، هو الإصدار الثاني وقد تم اشتقاقه من سابقته ، "Fail1" ، ويتضمن تحسينات وميزات إضافية.
سيتم تنفيذ الكود الذي تم إنشاؤه في المتصفح على عنصر قماش ويهدف إلى إنشاء تطبيقات ثنائية الأبعاد باستخدام JavaScript.
سوف يسير هذا الدليل خلال عملية استخدام العملية التوليدية التي تعمل بها نموذج لغة Openai GPT-3.5 لإنشاء مشاريع مبتكرة JavaScript Canvas2D. ستتعلم كيفية تثبيت التبعيات ، وإضافة مفتاح API الخاص بك ، وتشغيل الجيل الأول ، واستكشاف النتائج.
تأكد من أن لديك ما يلي مثبت على نظامك:
استنساخ المستودع إلى جهازك المحلي:
git clone [email protected]:failfa-st/fail2.gitانتقل إلى دليل المشروع:
cd fail2تثبيت التبعيات المطلوبة عن طريق التشغيل:
npm installقم بإنشاء حساب على https://platform.openai.com/signup والحصول على مفتاح API الخاص بك.
انسخ ملف .env.example إلى .env :
cp .env.example .env افتح ملف .env وأضف مفتاح Openai API:
OPENAI_API_KEY=your_api_key_hereسيتم تشغيل الرمز الذي تم إنشاؤه في خادم تطوير محلي ، لذلك لنبدأ هذا أولاً
npm run devسيؤدي هذا إلى فتح http: // localhost: 8080 في متصفحك. إذا لم يحدث ذلك ، فالرجاء فتحه بنفسك وابقيه مفتوحًا.
لبدء عملية توليد الكود ، قم بتشغيل الأمر التالي:
node base-default.js -p "<prompt>" -g <generations> -P "<persona>" -t <temperature> -c -m "<model>" -n "<negative_prompt>" -s <seed>
أو استخدم أحد الأمثلة الأساسية:
node base-default.js -p "matrix code" -g 3
node base-art.js -p "flow field" -g 10 -c -s 123456789
node base-game.js -p "arcade game asteroids" -g 5 -n "audio files, images, alert" -P "JavaScript expert, game developer, retro lover"
| خيار | الاسم المستعار | يكتب | تقصير | وصف |
|---|---|---|---|---|
--prompt | -p | string | "extend the code" | يضبط المطالبة للرمز الذي تم إنشاؤه |
--negativePrompt | -n | string | "" | يضبط المطالبة السلبية للرمز الذي تم إنشاؤه |
--generations | -g | number | 1 | يحدد عدد الأجيال للرمز الذي تم إنشاؤه |
--persona | -P | string | "JavaScript expert, performance expert" | يضبط شخصية الرمز الذي تم إنشاؤه |
--temperature | -t | number | 0.2 | يحدد درجة حرارة الرمز الذي تم إنشاؤه |
--seed | -s | number | -1 | يضبط البذور للرمز الذي تم إنشاؤه ( -1 يخلق بذرة عشوائية) |
--model | -m | string | "gpt-3.5-turbo" | يعين النموذج لاستخدامه لإنشاء الرمز |
--clean | -c | boolean | false | قم بالتعيين إلى true إذا كنت تريد إزالة أي رمز تم إنشاؤه مسبقًا |
يتحكم علامة --temperature في مستوى الإبداع في الكود الذي تم إنشاؤه ، مع نطاق من 0 إلى 2. تؤدي القيم العليا إلى المزيد من الكود المبتكرة ، ولكن أيضًا تزيد من خطر الأخطاء أو JavaScript غير الصالحة. للحصول على أفضل النتائج ، استخدم قيمة أقل من 0.5 لموازنة الإبداع مع الموثوقية. القيمة الافتراضية هي 0.2.
ينفي علامة- --negativePrompt لكل جزء مفصل للفاصلة من المطالبة مع "لا" لمنع السلوكيات غير المرغوب فيها في التعليمات البرمجية التي تم إنشاؤها. على سبيل المثال ، --negativePrompt "audio, images" "no audio, no images" . تساعد هذه الميزة في إنشاء رمز أكثر أمانًا وأفضل ولكن قد لا تقضي على جميع السلوك غير المرغوب فيه.
يمكن استخدام علامة --model لتحديد النموذج لاستخدامه لإنشاء رمز. النموذج الافتراضي هو "gpt-3.5-turbo" . ومع ذلك ، يمكنك أيضًا اختيار استخدام نموذج "gpt-4" ، والذي يوفر المزيد من الرموز المميزة ولكنه قد يؤدي إلى سلوك غير مرغوب فيه.
سيؤدي استخدام نموذج
"gpt-4"إلى زيادة الوقت بشكل كبير لإنشاء رمز لأنه أبطأ من نموذج"gpt-3.5-turbo"الافتراضي.
لمعرفة المزيد حول النماذج المتاحة وميزاتها الخاصة ، يرجى الرجوع إلى وثائق Openai.
يضبط العلم --seed مولد الأرقام العشوائية المستخدمة في توليد الكود. بشكل افتراضي ، يتم تعيين البذور على رقم عشوائي بين 0 و 100000000. إذا تم توفير بذرة مخصصة مع العلم --seed ، فسيتم استخدام هذه القيمة بدلاً من ذلك.
البذرة عبارة عن رقم عشوائي زائف ويمكن أن يولد نتائج فريدة ، ولكن لن يكون هو نفسه في كل مرة.
يأتي هذا المشروع مع ثلاثة ملفات بداية ، base-default.js (بدون واردات) ، base-art.js (noisejs واللون) و base-game.js (noisejs ، اللون والنبرة) ، والتي توفر نقطة انطلاق أساسية ومثال على كيفية إضافة التبعيات.
️ يجب أن تبدأ ملفات المبتدئين دائمًاbase-
لتجنب تكاليف الرمز المميز الإضافي ، قم بإنشاء ملف أساسي مخصص مثل
base-no-changelog.jsبدون تعليق changelog.
يقوم هذا المشروع بإنشاء رمز باستخدام API Openai ويتبع مجموعة من الإرشادات والقيود لإنتاج رمز يمكن تمديده أو إعادة تمهيده أو إصلاحه. يعتمد كل جيل من التعليمات البرمجية على واحد سابق ويهدف إلى تحسين الرمز. يستخدم المشروع أشخاصًا مختلفًا لإنشاء رمز ويمكنه إنشاء عدد محدد من أجيال التعليمات البرمجية. يتم تنسيق الرمز الذي تم إنشاؤه باستخدام أجمل وحفظه في ملفات منفصلة. يتتبع المشروع أيضًا التغييرات ويوفر Changelog. بالإضافة إلى ذلك ، يمكنه إزالة التعليمات البرمجية التي تم إنشاؤها مسبقًا. يمكن للمشروع التعامل مع الأخطاء.
تتم كتابة الرمز الذي تم إنشاؤه إلى ملف ، project/src/index.js ، والذي تم تجميعه بواسطة WebPack. يعمل خادم WebPack Dev ، مما يتيح لك عرض التغييرات المباشرة مع تطور عملية توليد الكود.
يستخدم المشروع ملفين رئيسيين:
base.js : يدير هذا الملف عملية توليد الكود باستخدام API Openai ، ويكتب الرمز الذي تم إنشاؤه إلى الملفات (بما في ذلك project/src/index.js ) ويقابض الأخطاء التي قد تحدث أثناء توليد الكود.base-*.js : هذا الملف هو نقطة الانطلاق لعملية توليد الكود. أنه يحتوي على مقتطف الكود الأولي ويضع كل شيء في الحركة لإنشاء رمز عن طريق استدعاء الوظائف اللازمة من base.js للمتابعة من جيل معين ، إما لأنك راضٍ عن ذلك أو تحتاج إلى تصحيح مشكلة ما ، استخدم التنسيق التالي: node generation-xxxx.js -g <generation + 1> -p "<prompt>"
1. إصلاح خلل في الجيل 4
في هذا المثال ، هناك مشكلة في الجيل الرابع من الجيل الإجرائي ، مما تسبب في أن تكون الخلفية مظلمة للغاية وأن لاعب اللعبة غير مرئي. لإصلاح هذه المشكلة ، يقوم المستخدم بتشغيل الأمر التالي:
node generation-0004.js -g 5 -p "fix: dark background, player invisible" -c
يبدأ هذا الأمر من الجيل 4 ( generation-0004.js ) وينتقل إلى الجيل التالي (الجيل 5) مع توفير مطالبة لإصلاح مشكلة ظلام الخلفية ووضوح اللاعب.
2. إضافة نظام تسجيل في الجيل 3
في هذه الحالة ، يكون المستخدم راضيًا عن تقدم اللعبة في الجيل الثالث ويريد إضافة نظام تسجيل. للقيام بذلك ، يديرون الأمر التالي:
node generation-0003.js -g 4 -p "feat: implement scoring" -c
يبدأ هذا الأمر من الجيل 3 ( generation-0003.js ) ويستمر إلى الجيل التالي (الجيل 4) ، ويتضمن موجهًا لتنفيذ ميزة تسجيل في اللعبة.
3. الاحتفاظ بحقل التدفق من الجيل 5 ولكن تجاهل الأجيال اللاحقة
في هذه الحالة ، يقدر المستخدم حقل التدفق الذي تم إنشاؤه في الجيل الخامس ولكنه غير راضٍ عن نتائج الأجيال اللاحقة. لتحقيق النتيجة المرجوة ، يقومون بتنفيذ الأمر التالي:
node generation-0005.js -g 10 -p "flow field" -c
يبدأ هذا الأمر من الجيل 5 ( generation-0005.js ) ويستمر حتى الجيل 10 ، مع الحفاظ على حقل التدفق من الجيل 5 وتجاهل النتائج غير المرغوب فيها للأجيال بينهما.