نهایتش این شد که ما انگار یه لایبراری کوچیک مثل فرمورک های بزرگ از اول ساختیم برای پروژه خودمون.
عکسا رو ببینین متوجه میشین
حالا کافیه فانکشن هامو اینطوری بنویسم :) تو ورودیش فقط تعریف کنم که کدوم سینگلتون رو میخوام استفاده کنم.
این دیزاین پترن رو شما تو انگولار میبینین مثلا :) constructor هر سرویس یا کامپوننت میتونه سرویسای دیگ رو ورودی بگیره :) اینجام همینه! شما میتونی بگی کدوم سرویس رو میخوای استفاده کنی تو ورودی این فانکشن اگه چیزیو استفاده نمیکنی نمیخواد اسمشو حتی بیاری.
#llm #rcss
میدونستم این شیوه رو تو دکوریتور ها استفاده کرده بودم. عکس اول رو ببینین.
مشخصه یادم میره یه چیزی- عکس ۲
بعد خوب ما میدونستیم حالا چی میخوایم ایده گرفته بودیم (عکس ۳) ایده تیکه اول عکس سه رو از پرامت قبلی گرفتیم.
و یهو امید گفت حالا چی میشه اگه فانکشنمون async نباشه! :) و خوب دوباره پرسیدیم از llm ! و ... میبینین!
نهایتش چی شد میپرسین؟/
حل کردن چالش بخش مهمیه!
مثلا من سینگلتون میخواستم.
یه ابجکتی که یه بار ساخته شه (مثلا از دیتابیس) و همه جا بهش دسترسی داشته باشم.
میدونستم که تو پایتون میتونم:
۱- با global حلش کنم
۲- توی کلاس ابجکت و توی init اش نگه دارم اون اینستنس رو!
۳- **که مهم ترینشونه** میتونم فانکشن هامو wrap کنم یه جوری و از بالا ترین جای برنامه اینستنس رو هی پاس بدم بره پایین!
به عنوان برنامه نویس باید شرایط رو بررسی میکردم و این انتخابو میکردم. و من ۳ رو انتخاب کرده بودم.
@be4zad
سوال بهزاد خیلی خوبه.
تو خیلی از پروژه ها، بیشترین سختی، برای حل چالشهاست؛ ما ازش استفاده کردیم که چالشمونو حل کنیم (چیزیایی که تو پایتون بلد نبودیم مثلا) ما کد اولیهی llm رو نگه نداشتیم اصلا :)) کد پروژه رو ببین اصلا شبیه به چیزی که اون داده نبود. ولی مهم بود برامون که این چالش چطوری حل میشه! و بهمون نشون داد راهو! حالا میتونیم خودمون استراکچر درست رو بنویسیم :)) مثالشو ببین :
خوب حالا که میدونستیم ایده چطوری کار میکنه شروع کردیم فایل ها رو ساختن و اینا (دیگ اینجاشو بلد بودیم خودمون :)) )
و میدونستیم مثلا میخوایم استراکچرمون چطوری باشه، مثلا تو فایل اصلی میخوایم اول یه اینستنس بسازیم و بعد کانکت کنیم برای هر سرویس و اگه نتونه باید کلا خارج بشه از برنامه! کلاسامونو به این شکل ساختیم :)
و بعله مرحوم @Mmdreza این اون تیکس که مارو جلو انداخت! شاید پیچیده نبود ولی نوشتن این تیکه کد ۲ سال پیش نیاز به حداقل ۳ روز کار داشت (من نمیتونم تمرکز کنم و داکیومنت بخونم)
این کد کار کرد بدون هیچ مشکلی :))
جنریت کردنش چند ثانیه وقت گرفت
برای تستش شاید ۱۰ دقیقه زمان برد ولی وقتی دیدیم کار کرد قشنگ پشمامون ریخت :))
این کار(برنامه نویسی نانبلاکینگ و ایسینک با پایتون) تقریبا جدید بود برامون.
نکته دیگ این که مثلا وسطش از aiohttp استفاده کرد که ما تاحالا استفاده نکرده بودیم.
بولت پوینت گذاشتنه به خودمون کمک میکرد که دقیق ببینیم داریم بهش چی میگیم.
نکته مهم سریع فیل شدن هست تو پرامت نویسی این چیزا باید هی بنویسی هی فیل شی ولی نمیخواستیم خودمونو خسته کنیم (مشخصا میتونستیم بریم داکیومنت بخونیم اگه میخواستیم خسته کنیم ! :)) )
یکی از چالش های اصلی پروژه این بود که وقتی راننر داره بازی رو ران میکنه باید بتونه دستور kill رو هم پروسس کنه!
دلیلش همینه که این قضیه نان بلاکینگ رو نوشتیم.
خوب اونجایی که واقعا پشمامون ریخت و ساعت ها جلمون انداخت اینجا بود که دارین تو این عکس میبینین!
روند حل مسعله ما اینطوری بود:
- حدس تکنولژیهایی که میخوایم استفاده کنیم (ربیت)
- یادگیری اون فیلد
- ساختن داکیومنت استراکچری که میخوایم بسیازیم
- حالا کد زدن بخشی که از همه چالش
فنی بیشتری داره
این تیکش رو نه من ایدهای داشتم نه امید! برای جفتمونه اولین بار بود که با ربیت کار میکردیم! مرحله به مرحله خیلی ساده به llm میخوایم چیکار کنیم./