واقعا دارم حال میکنم با کدی که دیشب تو یه روز یا در واقع ۴ یا ۵ ساعت با AI) زدیم. (منو امید)

https://github.com/RCSS-Tournament-Manager/runner/

ایده اینه که پرامت هامو میزارم ایده بگیرین.

#rcss

GitHub - RCSS-Tournament-Manager/runner: The program that runs the games and sends the results to the manager backend.

The program that runs the games and sends the results to the manager backend. - RCSS-Tournament-Manager/runner

GitHub

خوب اول تعریف مسعله:
:)) خیلی میتونم اینجا براتون خاطره جنگ بگم ولی ! شبیه سازی دوبعدی فوتبال یه محیط شبیه سازی فوتباله تو دو بعد :)) که از سال ۱۹۹۷ تا الان داره مسابقاتش برگذار میشه. یه برنامه شبیه ساز داریم. یه مانیتور داریم که بازیو نشون میده. ۱۱ تا بازیکن و یه مربی برای هر تیم که هر کدوم برنامه جدا و نباید با هم ارتباطی داشته باشند و فقط باید با سرور ارتباط داشته باشن.

مشخصه همین الان که چقدر محیط پیچیده‌ای هست برای برگذاری یک مسابقه به شکل درست.

#rcss

ما نیاز به یه برنامه جدید داشتیم که این مسابقاتمون رو منیج کنه!
اولین چیز که میخوایم یه استراکچر خوبه! استراکچر رو واقعیت رو میرو سال ها کشیدم ولی میخواستم که بهتر به ملت نشون بدمش.

۱- چیزی که با میرو ساختم
۲- چیزی که خروجی با llm هست
۳- پرامت (اصلیه نیست ولی خواستم نشون بدم چطوری میشه انجام داد)
۴- پرامتش
ابزار mermaid.live :)

#llm #rcss

خیلی مهم نیست چطوری به llm میگین که چی بسازه براتون حتی میتونین فارسی بگین یا میتونین اینگلیسی و فارسی رو قاطی بگین! من از gpt4-o مثلا استفاده کردم اینجا ولی خوب شما میتونین از بقیشونم استفاده کنین شاید باورتون نشه این مثالی که دادم تقریبا با خیلی از مدلای قدیمی تر هم به همین خوبی کار میکنه! مثلا این خروجی gp3-turbo هست که اونقدرم بد نیست! من خیلی بد توضیح پروژمو نوشتم، تر تمیز بنویسین بهتر هم میده.
پ.ن میدونستین میتونین تو گیتهاب از مرمید استفاده کنین؟
#llm
#rcss
مرحله بعدی میخواستم توضیح بدم به بچه ها چطوری میتونن یه فانکشن بنویسن استریم کنن خروجی از تو فانکشن وقتی داره مثلا داکر بیلد میکنه یا مثلا اجرا میکنه :)
برای نشون دادن و یاد دادن! محشره!
#llm #rcss
پروژه رو میخوای بیاری بالا حال نداری داکر کامپوز بنویسی سریع کارتو بکنی؟
بعله ! داکر کامپوز مینویسه هلو :)
#llm #rcss

دوست دارم که حتی کوچیک ترین چیزا رو بنویسم چون ایده میده در اینده وقتیم میخونینش‌ :)
وقتی دارین یه حوزه که کلی مفاهیم جدید داره و مفاهیمش قبلا به تفضیل داکیومنت شده رو میخونین میتونین خیلی راحت از llm ها کمک بگیرین اونا خیلی خوب میدونن و بعضا کم خیالباف میکنن (هالوسینیت اینا منظورمه)

مثلا وقتی میخواستم من کار با ربیت رو یاد بگیرم یه ویدیو ۱۰ دقیقه ای دیدم مفاهیم رو فقط عنوانشو تو نوشن نوشتم و یکی یکی از llm پرسیدم مفهومو.
#llm #rcss

بعله میتونه اسم بهتر بهتون ساجست بده! این خیلی مهمه :))) اسم فانکشن انتخاب کردن یکی از سخت ترین کاراس! البته که اخرش از اسماش استفاده نکردم چون تصمیم گرفتم همه چیزو کامل بنویسم که بعدا اشتباه نگیرنش! ولی خوب ایده میده :) و اون ایده مهمه!

#llm #rcss

خوب اونجایی که واقعا پشمامون ریخت و ساعت ها جلمون انداخت اینجا بود که دارین تو این عکس میبینین!

روند حل مسعله ما اینطوری بود:
- حدس تکنولژی‌هایی که میخوایم استفاده کنیم (ربیت)
- یادگیری اون فیلد
- ساختن داکیومنت استراکچری که میخوایم بسیازیم
- حالا کد زدن بخشی که از همه چالش
فنی بیشتری داره

این تیکش رو نه من ایده‌ای داشتم نه امید! برای جفتمونه اولین بار بود که با ربیت کار میکردیم! مرحله به مرحله خیلی ساده به llm میخوایم چیکار کنیم./

#llm #rcss

بولت پوینت گذاشتنه به خودمون کمک میکرد که دقیق ببینیم داریم بهش چی میگیم.
نکته مهم سریع فیل شدن هست تو پرامت نویسی این چیزا باید هی بنویسی هی فیل شی ولی نمیخواستیم خودمونو خسته کنیم (مشخصا میتونستیم بریم داکیومنت بخونیم اگه میخواستیم خسته کنیم ! :)) )

یکی از چالش های اصلی پروژه این بود که وقتی راننر داره بازی رو ران میکنه باید بتونه دستور kill رو هم پروسس کنه!

دلیلش همینه که این قضیه نان بلاکینگ رو نوشتیم.

و ؟!/
#llm #rcss

و بعله مرحوم @Mmdreza این اون تیکس که مارو جلو انداخت! شاید پیچیده نبود ولی نوشتن این تیکه کد ۲ سال پیش نیاز به حداقل ۳ روز کار داشت (من نمیتونم تمرکز کنم و داکیومنت بخونم)

این کد کار کرد بدون هیچ مشکلی :))
جنریت کردنش چند ثانیه وقت گرفت
برای تستش شاید ۱۰ دقیقه زمان برد ولی وقتی دیدیم کار کرد قشنگ پشمامون ریخت :))
این کار(برنامه نویسی نانبلاکینگ و ایسینک با پایتون) تقریبا جدید بود برامون.

نکته دیگ این که مثلا وسطش از aiohttp استفاده کرد که ما تاحالا استفاده نکرده بودیم.

#llm #rcss

خوب حالا که میدونستیم ایده چطوری کار میکنه شروع کردیم فایل ها رو ساختن و اینا (دیگ اینجاشو بلد بودیم خودمون :))‌ )
و میدونستیم مثلا میخوایم استراکچرمون چطوری باشه، مثلا تو فایل اصلی میخوایم اول یه اینستنس بسازیم و بعد کانکت کنیم برای هر سرویس و اگه نتونه باید کلا خارج بشه از برنامه! کلاسامونو به این شکل ساختیم :)

#llm #rcss

@be4zad
سوال بهزاد خیلی خوبه.

تو خیلی از پروژه ها، بیشترین سختی، برای حل چالش‌هاست؛ ما ازش استفاده کردیم که چالشمونو حل کنیم (چیزیایی که تو پایتون بلد نبودیم مثلا) ما کد اولیه‌ی llm رو نگه نداشتیم اصلا :)) کد پروژه رو ببین اصلا شبیه به چیزی که اون داده نبود. ولی مهم بود برامون که این چالش چطوری حل میشه! و بهمون نشون داد راهو! حالا میتونیم خودمون استراکچر درست رو بنویسیم :)) مثالشو ببین :

#llm #rcss

حل کردن چالش بخش مهمیه!‌
مثلا من سینگلتون میخواستم.
یه ابجکتی که یه بار ساخته شه (مثلا از دیتابیس) و همه جا بهش دسترسی داشته باشم.
میدونستم که تو پایتون میتونم:
۱- با global حلش کنم
۲- توی کلاس ابجکت و توی init اش نگه دارم اون اینستنس رو!
۳- **که مهم ترینشونه** میتونم فانکشن هامو wrap کنم یه جوری و از بالا ترین جای برنامه اینستنس رو هی پاس بدم بره پایین!

به عنوان برنامه نویس باید شرایط رو بررسی میکردم و این انتخابو میکردم. و من ۳ رو انتخاب کرده بودم.

حالا ببینین چطوری کمک کرد:
#llm #rcss

میدونستم این شیوه رو تو دکوریتور ها استفاده کرده بودم. عکس اول رو ببینین.

مشخصه یادم میره یه چیزی- عکس ۲

بعد خوب ما میدونستیم حالا چی میخوایم ایده گرفته بودیم (عکس ۳) ایده تیکه اول عکس سه رو از پرامت قبلی گرفتیم.
و یهو امید گفت حالا چی میشه اگه فانکشنمون async نباشه! :) و خوب دوباره پرسیدیم از llm ! و ... میبینین!

نهایتش چی شد میپرسین؟/

#llm #rcss

نهایتش این شد که ما انگار یه لایبراری کوچیک مثل فرمورک های بزرگ از اول ساختیم برای پروژه خودمون.
عکسا رو ببینین متوجه میشین
حالا کافیه فانکشن هامو اینطوری بنویسم :) تو ورودیش فقط تعریف کنم که کدوم سینگلتون رو میخوام استفاده کنم.

این دیزاین پترن رو شما تو انگولار میبینین مثلا :) constructor هر سرویس یا کامپوننت میتونه سرویسای دیگ رو ورودی بگیره :)‌ اینجام همینه! شما میتونی بگی کدوم سرویس رو میخوای استفاده کنی تو ورودی این فانکشن اگه چیزیو استفاده نمیکنی نمیخواد اسمشو حتی بیاری.
#llm #rcss