واقعا دارم حال میکنم با کدی که دیشب تو یه روز یا در واقع ۴ یا ۵ ساعت با AI) زدیم. (منو امید)
https://github.com/RCSS-Tournament-Manager/runner/
ایده اینه که پرامت هامو میزارم ایده بگیرین.
واقعا دارم حال میکنم با کدی که دیشب تو یه روز یا در واقع ۴ یا ۵ ساعت با AI) زدیم. (منو امید)
https://github.com/RCSS-Tournament-Manager/runner/
ایده اینه که پرامت هامو میزارم ایده بگیرین.
خوب اول تعریف مسعله:
:)) خیلی میتونم اینجا براتون خاطره جنگ بگم ولی ! شبیه سازی دوبعدی فوتبال یه محیط شبیه سازی فوتباله تو دو بعد :)) که از سال ۱۹۹۷ تا الان داره مسابقاتش برگذار میشه. یه برنامه شبیه ساز داریم. یه مانیتور داریم که بازیو نشون میده. ۱۱ تا بازیکن و یه مربی برای هر تیم که هر کدوم برنامه جدا و نباید با هم ارتباطی داشته باشند و فقط باید با سرور ارتباط داشته باشن.
مشخصه همین الان که چقدر محیط پیچیدهای هست برای برگذاری یک مسابقه به شکل درست.
ما نیاز به یه برنامه جدید داشتیم که این مسابقاتمون رو منیج کنه!
اولین چیز که میخوایم یه استراکچر خوبه! استراکچر رو واقعیت رو میرو سال ها کشیدم ولی میخواستم که بهتر به ملت نشون بدمش.
۱- چیزی که با میرو ساختم
۲- چیزی که خروجی با llm هست
۳- پرامت (اصلیه نیست ولی خواستم نشون بدم چطوری میشه انجام داد)
۴- پرامتش
ابزار mermaid.live :)
دوست دارم که حتی کوچیک ترین چیزا رو بنویسم چون ایده میده در اینده وقتیم میخونینش :)
وقتی دارین یه حوزه که کلی مفاهیم جدید داره و مفاهیمش قبلا به تفضیل داکیومنت شده رو میخونین میتونین خیلی راحت از llm ها کمک بگیرین اونا خیلی خوب میدونن و بعضا کم خیالباف میکنن (هالوسینیت اینا منظورمه)
مثلا وقتی میخواستم من کار با ربیت رو یاد بگیرم یه ویدیو ۱۰ دقیقه ای دیدم مفاهیم رو فقط عنوانشو تو نوشن نوشتم و یکی یکی از llm پرسیدم مفهومو.
#llm #rcss
خوب اونجایی که واقعا پشمامون ریخت و ساعت ها جلمون انداخت اینجا بود که دارین تو این عکس میبینین!
روند حل مسعله ما اینطوری بود:
- حدس تکنولژیهایی که میخوایم استفاده کنیم (ربیت)
- یادگیری اون فیلد
- ساختن داکیومنت استراکچری که میخوایم بسیازیم
- حالا کد زدن بخشی که از همه چالش
فنی بیشتری داره
این تیکش رو نه من ایدهای داشتم نه امید! برای جفتمونه اولین بار بود که با ربیت کار میکردیم! مرحله به مرحله خیلی ساده به llm میخوایم چیکار کنیم./
بولت پوینت گذاشتنه به خودمون کمک میکرد که دقیق ببینیم داریم بهش چی میگیم.
نکته مهم سریع فیل شدن هست تو پرامت نویسی این چیزا باید هی بنویسی هی فیل شی ولی نمیخواستیم خودمونو خسته کنیم (مشخصا میتونستیم بریم داکیومنت بخونیم اگه میخواستیم خسته کنیم ! :)) )
یکی از چالش های اصلی پروژه این بود که وقتی راننر داره بازی رو ران میکنه باید بتونه دستور kill رو هم پروسس کنه!
دلیلش همینه که این قضیه نان بلاکینگ رو نوشتیم.
و بعله مرحوم @Mmdreza این اون تیکس که مارو جلو انداخت! شاید پیچیده نبود ولی نوشتن این تیکه کد ۲ سال پیش نیاز به حداقل ۳ روز کار داشت (من نمیتونم تمرکز کنم و داکیومنت بخونم)
این کد کار کرد بدون هیچ مشکلی :))
جنریت کردنش چند ثانیه وقت گرفت
برای تستش شاید ۱۰ دقیقه زمان برد ولی وقتی دیدیم کار کرد قشنگ پشمامون ریخت :))
این کار(برنامه نویسی نانبلاکینگ و ایسینک با پایتون) تقریبا جدید بود برامون.
نکته دیگ این که مثلا وسطش از aiohttp استفاده کرد که ما تاحالا استفاده نکرده بودیم.
خوب حالا که میدونستیم ایده چطوری کار میکنه شروع کردیم فایل ها رو ساختن و اینا (دیگ اینجاشو بلد بودیم خودمون :)) )
و میدونستیم مثلا میخوایم استراکچرمون چطوری باشه، مثلا تو فایل اصلی میخوایم اول یه اینستنس بسازیم و بعد کانکت کنیم برای هر سرویس و اگه نتونه باید کلا خارج بشه از برنامه! کلاسامونو به این شکل ساختیم :)
@be4zad
سوال بهزاد خیلی خوبه.
تو خیلی از پروژه ها، بیشترین سختی، برای حل چالشهاست؛ ما ازش استفاده کردیم که چالشمونو حل کنیم (چیزیایی که تو پایتون بلد نبودیم مثلا) ما کد اولیهی llm رو نگه نداشتیم اصلا :)) کد پروژه رو ببین اصلا شبیه به چیزی که اون داده نبود. ولی مهم بود برامون که این چالش چطوری حل میشه! و بهمون نشون داد راهو! حالا میتونیم خودمون استراکچر درست رو بنویسیم :)) مثالشو ببین :
حل کردن چالش بخش مهمیه!
مثلا من سینگلتون میخواستم.
یه ابجکتی که یه بار ساخته شه (مثلا از دیتابیس) و همه جا بهش دسترسی داشته باشم.
میدونستم که تو پایتون میتونم:
۱- با global حلش کنم
۲- توی کلاس ابجکت و توی init اش نگه دارم اون اینستنس رو!
۳- **که مهم ترینشونه** میتونم فانکشن هامو wrap کنم یه جوری و از بالا ترین جای برنامه اینستنس رو هی پاس بدم بره پایین!
به عنوان برنامه نویس باید شرایط رو بررسی میکردم و این انتخابو میکردم. و من ۳ رو انتخاب کرده بودم.
میدونستم این شیوه رو تو دکوریتور ها استفاده کرده بودم. عکس اول رو ببینین.
مشخصه یادم میره یه چیزی- عکس ۲
بعد خوب ما میدونستیم حالا چی میخوایم ایده گرفته بودیم (عکس ۳) ایده تیکه اول عکس سه رو از پرامت قبلی گرفتیم.
و یهو امید گفت حالا چی میشه اگه فانکشنمون async نباشه! :) و خوب دوباره پرسیدیم از llm ! و ... میبینین!
نهایتش چی شد میپرسین؟/
نهایتش این شد که ما انگار یه لایبراری کوچیک مثل فرمورک های بزرگ از اول ساختیم برای پروژه خودمون.
عکسا رو ببینین متوجه میشین
حالا کافیه فانکشن هامو اینطوری بنویسم :) تو ورودیش فقط تعریف کنم که کدوم سینگلتون رو میخوام استفاده کنم.
این دیزاین پترن رو شما تو انگولار میبینین مثلا :) constructor هر سرویس یا کامپوننت میتونه سرویسای دیگ رو ورودی بگیره :) اینجام همینه! شما میتونی بگی کدوم سرویس رو میخوای استفاده کنی تو ورودی این فانکشن اگه چیزیو استفاده نمیکنی نمیخواد اسمشو حتی بیاری.
#llm #rcss