یه سیستم مثل ChatGPT بساز! (خیلی راحت!) آموزش RAG پیشرفته با llama_index

یه سیستم مثل ChatGPT بساز! (خیلی راحت!) آموزش RAG پیشرفته با llama_index42:18

اطلاعات دانلود و جزئیات ویدیوی یه سیستم مثل ChatGPT بساز! (خیلی راحت!) آموزش RAG پیشرفته با llama_index

آپلود کننده:

tarfandoon

تاریخ انتشار:

۱۴۰۳/۱۲/۱۸

بازدیدها:

7.3K

رونویسی ویدیو

توی این ویدیو میخوایم یکی از روشهای پیشرفته ساخته یک سیستم رگ حرفی رو یاد بگیریم که من تمام تلاشم اینه که بتونم خیلی ساده توضیح بدم و برای این که طول ویدیو زیاد نشه سعی کردم از یک کوده آماده استفاده بکنم و خط به خط با هم تریس بکنیم که بفهمید دقیقا چه اتفاقی داره

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

بسازم که بتونید ازش استفاده بکنید کتاب خونه که امروز میخواییم ازش استفاده بکنیم برای ساخته سیستم رک کتاب خونه لاما ایندکس هست که خیلیاتون احتمالا باشه اشنا هستید قابلیت های فوقلاده زیادی داره اللم های مختلفی رو پوشش میده چه افرادی که کلید ای پی آی از اوپن ای آی دارن نمیدونم گروگ دارن و دیپ سیک دارن یا هر چیز دیگری

و همین که افرادی که یک علم رو به صورت لوکال اجرا میکنن مثلا اولام ها دارن از علم ستودیو استفاده میکنن و غیره او غیره خیلی سیستم جالبیه و خیلی دیدتون رو باز میکنه نسبت به سیستم رک که چجوری اصلا کار میکنه و چجوری میاد پاسخه رو به شما

میده بار پردازشی رو بسیار کم میکنه این روش برخلاف سایر روش های داشتن یک سیستم رگ که مثلا توی روش های قدیمی وقتی که شما یک سوالی رو از سیستم رگتون میکردید اون باید کل سند رو میگشت تا اون سوال رو براتون پیدا بکنه فرض کنید مثلا شما یک پی دی افی دارید که چهار ازار صفحه است

و اگر LLM بخواد اون 4000 صفه رو بگرده اگر کلید API داشته باشید که خیلی هزینهاتون بالا میره و همین که زمان زیادی رو ازتون میگیره به خاطر اینکه سخت افزار خیلی قدرتمند نمیخواد که شما بتونید یک جواب خیلی کتاه رو از توی یک PDF 4000 صفه استقرار بکنید این روش تقریبا تمام این چالش ها رو بگوشش میده و خیلی میتونه بهتون کمک بکنه که یک سیستم خیلی سبک، هرفهی و جذاب ب

خب کاری که میخواییم امروز بکنیم اینه که ما از لاما ایندکس استفاده میکنیم و برای این که بتونیم این سیستم رگ رو پیاده سازی بکنیم چند تا کتاب خونه رو باید نسب بکنیم یکیش نست ایسینک هایوه چون سیستمی که

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

ساده میکنه پس من بلاک بی بلاک کود رو میان پایین توضیحات رو میدم و تلاشم اینه که بتونم خیلی ساده توضیح بدم که شما هم بتونید کامل اون رو یاد بگید خب پس اولین کاری که میکنیم ما یک کلب نوتبوک داریم که به صورت رایگان هم شما میتونید اون رو روی جی پی او تی فور رانش بکنید حالا نسخه های پولی هم اگر داشته باشید که جی پی او ای هاندریت هم بهتون میده و حتی تی پی او که میت

خیلی بالاتری داشته باشه پس من روی کانکت میزنم روی کلاب و سب میکنم تا کانکت بشه با نوتبوک من پس من بلاک به بلاک کود رو ران میکنم اولین کاری که میکنم کتاب کنه نست ایسینک آی او رو نست میکنم ایمپورت نست ایسینک آی او و نست ایسینک آی او دات اپلای که میشه گفتش توی پروژمون اپلای بشه سیستم ایسینک آی او یا ایسینکورونوس اوکی

کتاب خونه بعدی که باید نصب بکنیم کتاب خونه لاما ایندکسه که با دستور پیپ اینستال لاما ایندکس میتونیم نصبش بکنیم که میاد و برامون این کتاب خونه رو خیلی کامل نصب میکنه باید بریم سراغ مبحث اکسترکت ما میخواییم یک پی دی افی رو بهش بدیم که دیتا رو از توی اون پی دی اف برای ما اکسترکت بکنه توی بخش فایل ها ما باید یک نیو فولر بسازیم به اسم دیتا چون اینج

توی کودمون بهش slash content data رو دادیم یعنی که بره داخل دیتا و هر چیزی که داخل دیتا هست رو بخونه from lamaindex.core import simple directory reader هر پی دی افی که

شما بریزید توی دیتا اون براتون میخونه فرقی نمی کنه یه دونه پی دی افه یا هزار تا پی دی اف خب من یک فایلی رو دانلود کردم میشه گو مقاله دیپسیک وی تیری رو دانلود کردم و میخواییم با این پی دی اف کار بکنیم امروز

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

خب from lemmaindex.core import simple directory reader docs متاویه simple directory reader که اینجا فرخانیش کرده بودیم یه input directory میگیره که منظورش هینه که خب دیتای شما کجاست یا اون حجم از اصنادت یا حالا به اصلاح توی زبان NLP بهش میگن کارپس شما کجاست من میگم اقا توی فولدر دیتای ما هرچی پی دی اف داریم یا سند داریم کلن اونجاست اوکی

و اینجا آدرسش رو بهش میدیم با فارامتر ایمپود دی آی آر و دات لود دیتا این کار برامون

میشه گفتش که دیتای ما داخل فولدر دیتا رو لوڈ میکنه من این رو ران میکنم و این شروع میکنه این کار رو برای ما انجام دادن که حالا ممکنه طول بکشه اگر پی دی اف زیاد داشته باشید ممکنه طول بکشه اگر هم یه دونه داشته باشید مثل من که خب پدود 8 ثانیه زمان میبره تا پی دی اف رو براتون بخونه من اگر لن داکس رو بگیرم این داکس رو اینجا تعریف کرده بودیم دیگه اگر لنش ر

سفه شده.

حالا یه نکته که اینجا هست و تفاوت این سیستم رگ با بقیه سیستم های رگ اینه که میاد و از هر سفه از سند شما یک سری متا دیتا استخراج میکنه.

متا دیتا چیه؟ من الان توی خط کود بعدی که پی پیرینت رو ایمپورت کردم و داکس هم رو پی پیرینت میکنم اینجا میتونید ببینید که دقیقا متا دیتا

چه چیزی هست؟ برای هر صفحه از سند ما یا هر صفحه از پی دی اف ما یک آی دی رو در نظر می گیره اوکی امبیدین که مصابیه با نانه چون هنوز به ما پس امبیدین نرسیدیم میریم توی بخش متا دیتا میبینیم که آقایی پیج لیبل داره که شماره یکه یعنی تعداد صفحه یا شماره صفحه رو همه رو داره برای ما اینجا نشون میده یعنی به هر صفحه یک

پیج لیبلی اختصاص داده فایل نیمش چیه؟ مثلا دیپسیک وی تیری پی دی اف اسم فایلمونه فایل پد مسیری که اون فایل هست چیه؟ ببینید بچه ها یه بخشی داره که خیلی کمک کننده بیشه حالا این سیستم رک چرا انقدر محبوب و جذابه برای سال جدید؟

به خاطر اینکه ما وقتی یک سیستم رک داریم کلی اطلاعات زیادی رو ارسال میکنیم به اللم و هم ممکنه به مبحث توکن بخوریم یعنی که یک مکسیموم توکنی داره دیگه هر اللمی و همین که این روش میاد و چیزهایی که ضروری نیست رو خارج میکنه وقتی که میخواد هم امبید بکنه و هم ارسال بکنه به اللممون به خاطر همین میاد یک سری چیزها رو اکسکلود میکنه وقتی که حتی میخواد اون مبحث امبی

انجام بده یعنی بیاد متن ما رو به وکتور تبدیل بکنه اونجا هم خیلی چیزهایی که برای میشه گفت اللم ما زیاده یا اضافیه اونا رو میاد حضر میکنه ببینید توی متا دیتا ما یک بخشی داریم اکسکلود امبد متا دیتا کیز میاد میگه آقا فایل نیم فایل تایف فایل سایز کریشن دیتا نمیدونم غیر و غیر اینها رو ما دیگه امبد نمی کنیم یعنی توی سند ما نگه نمی داریم چیزهای

یه دونه هم بخش excluded LLM داره که دقیقاً این هم همون کارو میکنه اما برای قسمتی که ما میخواییم دیتامون یا اون وکترهامونو ارسال بکنیم برای یک LLM میاد توی ارسال به بخش LLM هم خیلی چیزای غیر ضروری رو حضر میکنه که این باعث میشه حجم دیتای ما کمتر بشه و هم دقت مودل ما بسیار بالاتر بره حالا این که چرا دقت سیستم رگ ما بالاتر میره این روش

یک سری پرسش و پاسخها رو خودش به صورت حوشمند از توی سند ما استخراج میکنه و بعد اونا رو درج میکنه توی دیتا بیسی که قدرت گرفته از وکتور ستوره یعنی بر پایه وکتور و ریاضیات و عدات هست.

ما بخش Excluded LLM رو هم با هم دیدیم همینطور متا دیتا تمپلیتش که اینطوریه میگه آقا متا دیتا تمپلیت من اینه مثلاً حالا توی ادامه کود باش هاشنا میشیم فقط اینجای توضیح بدم که

بیشتر بدونید میگه آقا مثلا نویسنده کیه مقدار اون اسم نویسنده توی بخش value قرار میگیره یا مثلا اسم فایل چیه value میشه نام فایل درست شد این دیگه separator هم که هیچی و میرسیم به بخش جذاب text resources که اینجا دوستان ببینید همین که embeding فیلن نانه به خاطر اینکه همدوز embedش نکردیم و یک بخشی داره به اسم text که برای هر صفحه همون textش رو استخراج میکنه دیگه توی هر pdfی که

ما داریم هر صفحهی که داره تکست هر صفحه رو استخراج میکنه و بهش یه دونه هم یونیک آیدی اختصاص داده دیگه میبینید درست شد پس ما الان میبینیم که هر صفحه از پی دی ایف ما رو اینجا استخراج کرده حالا برای اینکه بخواییم این آیدیه رو عوض بکنیم میتونیم یک کار دیگه هم بکنیم دیگه ببین من میام اینجا میگم آقا اینو من کامنت میکنم میگم داکس هم اصلا اینه ببین

این چه تفاوتی کرد؟ به جای این که ما بیاییم و یه یونیک آیدیه رو داشته باشیم، بیاییم اینجا یه پارامتر بهش میدیم، فایل نیم از آیدی، مساویه true.

این هنی چی؟ یعنی میاد اسم فایل ما رو درست شد به عنوان آیدی در نظر میگیره.

ببین، من اگر اینو الان دوباره پیرینت بکنم، دیگه اینجا میبینیم که فقط اسم فایلمون رو،

قرار داده به جای اون یونیک آیدی که حالا بسته به نوع پروژهتون انتخاب اینکه کدوم روش برای شما مناسب تره دیگه به شما بستگی داره مثلا اگر یک سیستم رگی دارید که مثلا 5-6 نوع موضوع رو پوشش میده خب استفاده از اسم فایل به عنوان آیدی خیلی میتونه کمکتون بکنه شما مثلا توی کودتون میتونید این رو در نظر بگیرید که آقا سوالی که ما بین پرسیم ببین برای کدوم موضوع هستش یا کدوم

پیدا بکنه و پرسش و پاسخهایی که ایجاد کرده رو از داخلش استخراج بکنه این روش حالا روشیه که میتونید به جای گذین بکنید با اون بحث یونیک آیدی اما چیزی که ما ازش استفاده میکنیم توی این روش هست روش یونیک آیدی هستش که برای هر صفحه از سند ما یک آیدی مشخصی رو در نظر میگیره خب یه زر بریم جلوتر اینجا تکست و اینها رو هم که دیدیم در ادامه هم میشه گفتش که یک

مثلا آیا تصویری داره نمیدونم غیر و غیره همه اینا رو اینجا برای ما نمایش میده پس ما الان با متادیتا اشنا شدیم دیدیم که متادیتا یعنی چی؟ یعنی جزئیات پایه ای از یک فایل یا یک سند یا یک به صلاح

بخش از داده ما درست شد خب من اگر الان این رو پرینت بکنم ما با دستور داکس صفر یعنی اومدیم صفحه صفر رو فراخانی کردیم که میشه این آیدی درست شد یعنی در اصل میشه صفحه یکمون و با دستور دیکت میتونیم این همین میشه گفت بخشها رو خیلی کامپکتر یا میشه گفت جمع جورتری ببینیم از صفحه یک پی دی افمون حالا شما مثلا میخوای تحلیل بکنید صفحه سه پی دی افتون رو میت

سه یا چهار پی دی اف تونس خواهیم میکنم.

ایندکس ها از صف شروع میشه پس ایندکس صف میشه صفحه یک سند ما.

ایندکس یک میشه صفحه دو سند ما و الى آخر.

پس الان راجع به صفحه یک ما میگه که آقا این فایل نیم فایل پد سایزش غیره و غیره همش اینه.

یک بخش تکس ریسورسز داره که این متن صفحه یه میشه گفت اول سند شماستی.

خب خیلی هم عالی پس ما الان با این بخش آشنا شدیم که متا دیتا دقیقا چه کاری رو انجام میده خب اینجا هم بچه ها یک میشه گفتش که سمپل یا نمونه خیلی ساده از روش کار کرده این متا دیتا ها به اموم میده که من بذارید این رو ران بکنم

این که چجوری کار میکنه و اونجا که بهتون گفتم کی و ولیو چجوری کار میکنه اینجا میخواییم یه ذره بازش بکنیم و اکسپلین بکنیم که بتونید کامل درکش بکنید خب from lamaindex.core import document که برای اینه که ما بتونیم یک سند رو واقعاوی بکنیم یا بتونیم یک سری دیتا ها یا متدیتا ها رو ازش به صورت ریز

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

خب این خواد باز بکنه که وقتی شما یک سندی رو میدید به لاما ایندکس از طریق اون دایرکتوری ریدره اون چجوری میفهمه اون سند رو میاد تکسی که توی صفحه شما هست رو اینجا قرار میده یه متا دیتا میذاره که متا دیتا شامل همون چیزه بود که دیدید مثل فایل نیم این که کتگوریش چی هست نبیسندش کی هست پاله برای اون مقاله یا هر چیزی که هست

و در نهایت هم میاد میگه آقا exclude LLM metadata keys مصابیه با کتگوری میگه آقا کتگوری رو ارسال نکن مثلا به بخش وکتورایز درست شد یا ارسال نکن به بخش LLM کتگوریه خیلی مهم نیست گرچه برای یک سیار از پروژه ها مبحث کتگوری بسیار مهمه گفتم

فرض کنید ده بیستا موضوع دارید و وقتی میخواد للم بگرده و اون موضوع رو پیدا بکنه خب کتگوریه خیلی میتونه بهش کمک بکنه اول روی کتگوریه سرچی میکنه و ببینه که سوالی که پرسیدید مربوط به کدوم کتگوریه و خیلی راحت بره اون رو

میشه گفتش که پیدا بکنه و یه متا دیتا تمپلیت هم داره که همون کی ولیوی بود که به صورت پیشورز اون رو میشه گفت قرار میده و اینم تکست تمپلیتیه چیزیه که در اصل اللم ما میبینه میگه آقا متا دیتا سند اینه درست شد یعنی همین توضیحاتی که بالاتر دادیم فایلش چیه اسمش چیه کتگوریش چیه و میاد یه خط پایین تر میگه آقا کانتنت هم همینه کانتنت در اصل میشه همون تکستی که

قرار داره درست شد پس یه پرینتم کرده اینجا که خیلی راحت میگه LLM اینو میبینه LLM چی میبینه یه متا دیتا میبینه که شامل فایل نیم نویسنده و غیره ببین من اگر این کتگوری رو

کامنت بکنم و یک بار دیگه رانش بکنم میبینیم که اینجا یک کتگوری فایننس هم گرفته چون وقتی ما اینجا حضبش کردیم آقای کتگوری رو هم ارسال بکن برای LLM ما میتونیم حتی برایش کتگوری هم تعریف کنیم من مثلا میگم آقای این یک دیپسیک مثلا در خصوص دیپسیکه من یک بار دیگه اگه این رو ران بکنم به LLM من میگه کتگوری این سند یا این فایل مربوط به دیپسیکه درسته یا نویسند

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

میتونید با این روش ساختار بدید به دیسه هایی که دارید حالا HTML, PDF, Word هر چیزی که هست میتونید با این روش بهش یک ساختاری هم بدید این رو اگر کلن هم کامنت بکنیم هیچ تغییری توی پروژه ما به وجود نمیاد صرفا فقط برای این بود که شما

بدونید که این متا دیتایی چجوری کار میکنه درست شد حالا یه بخش هم اینجا داریم ببینید من اگر این رو ار پیریند کامنت بکنم و این یکی رو پیریند بکنم چیزی که امبیدینگ ها میبینن هم همینی یعنی اون تکس ما که قرار امبید بشه یا به وکتور تبدیل بشه هم یه همچین چیزی میبینه یعنی همچین چیزی زخیره میشه توی دیتا بیس وکتور ما این دوتر هم حالا گفتم بهتون توضی

متا دیتا مود چیزی رو به ما نشون میده که دقیقاً اللم ها میبینم و همینطور اون کروما دی بی که در ادامه میخواییم باش کار بکنیم و بتونیم تکس ما رو وکتور بکنیم من اگر این رو ران بکنم این چیزیه که در است داره امبیدینگ ما میبینه دات اللم هم که بذارید یعنی چیزی که اللم ما داره میبینه الان امبیدینگ ما که قراره

یک مودل اوپن سورس از هاگین فیس باشه میاد این تکس رو میگیره و این رو به ریاضی تبدیل میکنه و درج میکنه توی یک دیتا بیسی که از ریاضی پشتیبانی میکنه بهش میگن حالا وکتور دیتا بیس به طور مثال درست شد؟ این هم میاد به هر بخش از تکس ما یک عددی رو اختصاص میده که معنی و ارتباطش با سایر کلمات هم تقریبا هفت میشه

این هم یک مثال بود و قرار نیستش که اینجا توی کود ما خیلی تأثیری داشته باشه صرف هم برای اینکه بدونید ساختار به چه صورتی هستش من این رو هم هاید بکنم و همینطور این بخش رو که بپردازیم به بخش بعدی حالا با این بخش و این بخش خیلی کاری نداریم چون این ها هم اکزمپل دقیقا همین کاری که بالا کرده بودیم ما اینجا روی یک صفحه این کار رو انجام دادیم یعنی اومدیم دیدیم که

اینجا دقیقا میاد روی تمام صفحات داکیومنتمون این کار رو میکنه که به ما نشون بده که چجوری میشه گفتونو اللم ها یا بسلا سیستم امبیدینگ ما میتونه اون رو ببینه حالا سورس کود رو میذارم توی دیسکریپشن دیگه و موقع خودتون میتونید برید خیلی راحت با هاش کار بکنید و بخشاش رو تست بکنید اما موضوع مهمی که

می‌رسیم بهش موضوع LLM‌ی هست که می‌خواهیم توی پروژه‌مون استفاده بکنیم قد لما ایندکس وقتی که بدید داخل داکیومنتیشنش یک بخش LLMs داره که اگر باز بکنید به شما می‌گی که با کدوم LLMs‌ها می‌تونید کار بکنید فرقی نمی‌کنه اگر ایپیای جمینایی دارید اگر ایپیای گروگ دارید اگر می‌خوایید از مودل‌های Open Source توی Hugging Face استفاده بکنید توی هر کدوم بزنید قش

و همینطور اولاما ببینید اولاما رو هم داره میگه آقا من از اولاما که مودل لاما 3.1 رو داره هم پشتیبانی میکنم و همینطور مودل جما که برای گوگل هست توی اولاما پشتیبانی میکنم اما توی این پروژه من برای اینکه سرعت پروژه بالاتر بده از اوپن ای های استفاده کردم برای اینکه بخواییم خیلی سریع این کار رو انجام بدیم پس حالا اگر از گروگ استفاده میکنید میتونید این دستور رو این

هر کدوم رو که بزنید ببینید مثلا هاگین فیسللم رو بزنید میگه آقا بعد این دوتا دستور رو شما اجرا بکنید و این دوتا کتاب کنن رو نصب بکنید برای گروگ هم دقیقا همینه ببینید همون خط کودی که ما توی گروگمون داشتیم اینجا هم هست میبینید

یا آقا اگر میخوای از گروگ استفاده بکنی بیا و این دستور رو اجرا بکن حالا یک بخش custom llm هم داره که ما فیلماش کاری نداریم from lamaindex.llms.openai import openai من چون کلید ایپیای openai رو دارم پس این رو ران میکنم و کلید openai هم رو بهش میدم import os import getpass

پس میگم os.inviron openai api key مساویه getpast.getpast و اینجا هم چی کار میکنه وقتی من یه خط رو اجرا بکنم اینجا برای من یه کادر باز میکنه میگه آقا کلید api openai رو اینجا بزن که من ست بکنم توی پروژه اوکی پس من الان کلید openai هم رو اینجا میزنم و میرسیم به بقیه موضوع

خب، من این رو اینجا پیست بکنم، انتر بکنم، این ست میشه.

خب، ما میام یک LLMی تعریفی کنیم که قراره توی طول پروژمون به همون کمک بکنه.

اوکی، پس میام میگم یک LLM ترانسفورمیشنی دارم مساوی OpenAI که اینجا ایپورتش کردم.

مودلش GPT4OM mini باشه.

API key مساوی OS.environ OpenAI API key.

چیزی که اینجا دادم و ست شد روی پروژم.

حالا میتونید به صورت دستی بدید.

یعنی اینو اصلا هز بکن

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

لاما ایندکس سند ما رو میخونه و از توی هر صفحه از سند ما یک یا دو تا سؤال در میاره جوری که برای خودش در ادامه قابل فهم باشه که ما فقط ازش پرسیده ما اقا این سند در باره چیه بتونه خیلی سریع به همون پاسخ بده یعنی همون کار رو میکنه انگار برای خودش یک دیتا ستی از پی دی اف ما داره به صلاح درست میکنه برای خودش که بعدن بتونیم خیلی سریع بهش دسترسی داشته باشیم

حالا من کودها رو توضیح میدم.

این title extractorه میاد و بر اساس محتوی سندما یک titleی رو به عنوان metadata زخیره میکنه توی وکتوره.

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

خیلی نمیتونه دقیقه تو داشته باشه و دستور بعدی from lamaindex.core.nodeparser.import.sentence.splitter این میاد و همون چیزی که توی میشه گفت لانگچین احتمالاً دیدید میومدیم اونجا مثلاً یک recursive character text splitter تعریف میکنیم میگفتیم اقا سند ما رو یا هر صفحه از پی دی اف ما رو مثلاً به سه بخش تعریف کن هر هزار تا هزار تا جدا بکن

و این دقیقا همون کار رو میکنه پس من میام سنتنس سپیلیتر رو از توی لاما ایندکس فراخانه میکنم میگم تکس سپیلیتر من مساویه با سنتنس سپیلیتر سپریتور این بخش جدا کننده بین هر چانک یعنی چی؟ یعنی هر هزار و بیس و چهار تا کرکتر توی سند من جدا میکنه و یه فاصله هم بهش میده و میره سراغه مثلا هزار و بیس و چهار تای بعدی

چانک اوورلپ هم میگه هر 128 کارکتر بیا و پوشش بده درست شد حالا راجب این موضوع اگر ویدیو مربوط به کتاب پنه لنگچین رو ببینید که توی یوتیوب من هست کامل راجب این موضوع توضیح دادم پس دیگه خیلی نیاز نیستش که راجبش توضیح بدم میام یک متغیر تایتل اکسترکتور میسازم میگم تایتل اکسترکتور من مساویه اللم من مساویه با این اللمی بود که اینجا تعریف کردم ببینید

اوکی، LLM Transformation که تعریف کردم گفتم آقا GPT-4O یه مینی باشه و یه دونه هم Questions داره این Questionsه یعنی چی؟ QA Extractor همونطور که گفتم از توی سند ما میاد و یک سری پرسش و پاسخ رو خودش استخراجی میکنه برای اینکه کار خودش رو راحت تر کنه که ما یه سوالی پرسیدیم سری بتونه اون جواب رو از توی اون پرسش و پاسخ هایی که از قبل آماده کرده به همون بده اینجا شمارش رو میتونید بزنید شمارش چیه؟

استخراج میکنه یا توی هر صفحه حالا اینو میتونید تعدادش رو بیشتر بکنید میتونید هم کمتر بکنید اگر خیلی پیچید از محتوای پی دی افتون یا هر صفحه از پی دی افتون میتونید تعدادش رو بالاتر ببرید اگر نه خیلی چیز ساده یا میتونید روی همین سه بذارید بمونه توی این بالایه هم یعنی توی تایتل اکسترکتور هم یه نودزی داره که مساویه با پنجه این نودزه در اصل می

به اصطلاح هر فایل پی دی اف من پنج تا نود ایجاد بکن پنج تا نود ایجاد بکنه یعنی چی؟ یعنی میاد اون صفحه از پی دی اف تو رو به پنج تا بخش شخصیم میکنه که خورد خورد هم پرسش و پاسخه هم تایتل ازش استخراج میکنه یعنی میاد یک آنالیز خیلی کاملی روی هر صفحه از پی دی اف شما

انجام بیده که فردا خواستید ازش ایک سوالی بپرسید دیگه خیلی سریع و با دقت خیلی بالا بهتون جوابه بخش بعدی میشه گفت ingestionه from lamaindex.core.ingestion import ingestion pipeline این ingestion pipelineه میاد این کارهایی که ما میخواییم بکنیم و هم وصل میکنه pipeline یعنی این که توی NLP یا پردازش زبان طبیعی وقتی که ما میخواییم یک متنی رو پردازش بکنیم اول توکنهایزش میکنیم بعد میبینیم ویکتورهایزش

می کنیم بعد بیاییم مثلا NLU رو روش انجام می دیم و خیلی مباعث دیگه این خطی که به صورت سیکونشیال داره اجرا می شه یعنی چند تا درخواست یا چند تا کار پشت سره هم انجام می شه بهش می گن پایپلاین اینجا هم میاد دقیقا همین کار رو می کنه می گه آقا ترانسفورمیشن من اینجوریه که اول تکست رو سپیلیت می کنی تکست ها رو به بخشه کچیک تقسیم می کنی بعد می آی تایتل ها یا اناوین اون می ش

پرسش و پاسخها رو از توشی استخراج میکنه یه ترتیبی بهش داده گفته آقا اولین کارو کن بعد این کارو کن بعد این کارو کن روی هر سند درست شد و نوز من چیه میگه آقا پایپلاین این پایپلاینی که اینجا ساخته بودیم دات ران اجراش بکن داکیومنت من مساوی داکس منه و این پارامتر داکیومنت این داکس من بود داکس من چی بود؟

اینجا ببینید گفتیم داکس ما اینه دیگه ببینید این داکس ما بود که اومد تمام محتوی فایل ما رو چکار کرد خوند پس ما اینجا داکس رو بهش میدیم این place مساوی true و show progress مساوی true این show progress هم میاد دقیقا نشون میده که روند کار به چه صورتیه من این خط کود رو اجرا می کنم همونطور که میبینید میاد و این progress دقیقا اینه که میاد میشه گفتش که به ما نشون میده که کار داره چجوری

انجام میشه بسیار عالی میبینیم که الان تموم شد و میگه آقا هفتاد تا نودز رو من عملیات پارسینگ روش رو انجام دادم یعنی اومدم پردادش کردم و الان انجام شده الان من لن نودزم رو بگیرم میگه آقا هفتاد تا نودز شده اوکی که این از پنج رو خورده ای صفحه سند ما خیلی بیشتره نشون میده که میشه گفت درک جامعه تری از سند ما به دستو برده برای اینکه ببینیم این نودز ها دقیقا چیه ا

و print نودز صفر یعنی اومدم این نودز صفری که این بالا داشتیم اولی نودزمون رو چکار کردیم؟ dot get content metadata mood مساویه metadata mood.llm یعنی metadata mood.llm یعنی این که اون مود یا اون حالتی که اللم ما میبینه رو به من نشون بده پس من این رو پیرینت میکنم این نشون میده که آقا اون نودز صفر ما

به چه صورتیه questionی که استخراج کرده از توی سند ما چیه؟ What is the total number of parameters in the DeepSeq V3 model and how many of these are activated for each tokens؟ اومده قشنگه یک یا دو تا سوال را از توی متر ما استخراج کرده و بهش هم جواب داده درست شد یک، دو، سه، اینجا سه تا تعین کرده بودیم بالاتر دیگه سه تا گفته بودیم question

بپرس از توی سند ما اینم کل سند ماست یعنی وقتی ما یه سوالی میپرسیم اول میاد به این سوالا رجوع میکنه اگر سوال ما توی این سوالا بود درست شد جوابش رو خیلی سریع به ما برمیگردونه اگر نبود میره سراغ متن ما این باعث میشه که خیلی جوابها رو سریع تر بگیرید و اگر دقت بکنید توی هر سوال یعنی توی هر بخش از کویسچین دوتا سوال رو خودش تر کرده

یعنی سوالات جامعه ترک کرده که این برمی گرده به سیستم پروم یا معماریی که خود لاما ایندکس برای استخراج متا دیتا از توی پی دی اف ها در نظر گرفته که برای یک سیستم های رک که قراره به صورت کاستوم باشه نیازه که خیلی چیز ها تغییر بکنه اما همین هم

برای افرادی که خب دانش تخصیصی ندارن میتونه خیلی گرهگوشا باشه و میتونه خیلی بهشون کمک بکنه پس الان دیدیم که نودزای ما دقیقا چیه من اگر نودز مثلا ما الان 70 تا نودز داشتیم دیگه اگر من نودز 20 تا من بگیرم یه همچین چیزی بهم میده و میگه که محتوی صفحه چی بوده و چه سؤالاتی ازش استخراج شده موضوع بدی که بچه ها باید باش کار بکنیم ما الان همه کار رو انجام دادیم

حالا باید این مترها، این سوالات و اون متادیت های هر سند رو، فایل پد، نمیدونم تایتلش، اومده یک تایتل هم استخراج کرده دیگه، یادتونه که بالاتر گفته بودیم تایتل هم استخراج بکنه، اومده قشنگ بسته به محتوی صفحه ما، یک تایتل هم که مربوط به همین صفحه هست رو استخراج کرده، این خیلی کمک میکنه که مودل بتونه سریع تر به پاسخ برسه،

حالا کاری که باید بکنیم چیه؟ ما باید بیاییم تمام این متنهایی که اینجا هست رو میشه گفت امبیدینگ انجام بدیم یعنی بیاییم و وکتورایزشون بکنیم به اسطلاح پس با دستور پیپ این سال لاما ایندکس امبیدینگ دش هاگین فیس یک مودل اوپن سورس هاگین فیس رو میخواییم ازش استفاده بکنیم که بیاد و

محتوی هر نودز ما رو امبیدینگ بکنه یا به وکتور تبدیل بکنه درست شد؟ حالا من اینجا مودلی که میشه گفتش استفاده کردم از توی هاگین فیس آقای هیدری ای آی اگر اشتباه نکنم توسط دادن و اسم مودل امبیدینگ هم هست پرژین امبیدینگز

که برای پی دی اف هایی که فارسی هست این مودل خوبه اما اگر پی دی افتون انگلیسی یا کلن سیستم رگتون انگلیسی هستش یا ترکیبی از انگلیسی و فارسیه میتونید از مودل های امبیدینگ حجم بالا استفاده بکنید مثل برت لارج نمیدونم تی فایف و مودل های امبیدینگ دیگه ای که هستن که حالا برای این که بهترین مودل رو انتخاب بکنید یه سرچ رو ساده بکنید

که ببینید کدومش برای چه زبانهایی هست و حجمش چقدره و از نظر سرعت و اینها چطوری هست خیلی میتونه بهتون کمک بکنه گرچه توی هر میشه گفتش که مودل امبیدینگ هم داخل هاگین فریس برید یک بخش اینفرنس داره که شما میتونید همینجا هم تست بکنید ببینید چجوری اصلا مودل رو امبیدینگ کنه الان من اینو سه هزار و ست ثانیه قبل اجرا کردم ولی هنوز انجام نشده خب حالا

میریم سراغ این که ببینیم مدل امبیدینگ رو رو چه چیزی یاد انتخاب بکنیم من حالا این مدل رو چون میشه گفت برای فارسی بوده انتخاب کردم اما الان میخواییم مدلش رو عوض بکنیم چون این یک پروژه واقعیه و ما نمیخواییم که مشکلی توی پروژه همون به وجود بیاد با توجه می که رانتایم هم محدود هست خیلی نمیتونیم منتظر ببینیم هم باید سریع باشه و هم

همه چیز رو خیلی راحت انجام بده پس من مدل امبیدینگ رو عوض می کنم و بعد برمی گرم ادامه ویدیو رو با هم میریم مدل امبیدینگی که ما می خواهیم استفاده بکنیم بی جی ای اسمال این هست چون پی دی اف ما انگلیسیه دیگه درست شد گفتم حالا اگر فارسی می خواهید استفاده بکنید مدل های امبیدینگ فارسی هم داریم اما برای اینکه عمل کردش رو ببینیم اینجا پاکش بکنم می نوی

حالا من اگر این رو اجراب بکنم میبینید که چجوری این عمل میکنه الان متوجه میشید که این متنی که من بهش دادم رو این چجوری میفهمه یعنی میاد تمام این متنهایی که ما داریم رو چجوری محاسبه میکنه و چجوری درج میکنه توی میشه گفت وکتر دیتابیس ما که در ادامه قرار بخواهاش

آشنا بشیم منتظر میمونم تا مودل لود بشه و دانلود بشه چون وقتی یک مودل رو اجرامی کنید برای باره اول ممکنه دانلودش طول بکشه الان مثلا این مودل حدودا 133 مگا بایته که حجم خیلی کمی داره پس خیلی طول نمی کشه این هم درکیه که از جمعه ما داره میبینید یه سری عدد ریاضی

که بهش میگن وکتور که حالا بر اساس محاسبات کوسینوسی و غیره و غیره میاد و اون سوالی که ما پرسیم رو دیکود میکنه و در نهایت متوجه میشه که کدوم یک از این عداد یا کدوم یک از این وکتور ها یا بردار ها برای جمعه ما مناسبن و اینطوری میتونه بفهمه که دنبال چشیزی باید توی سنده ما بره پس ما الان با عمل کردش راشنا شدیم این بخشش برای تست بود اما این بخش رو در ادامه بهش نیاز داریم

موضوع بعدی یک ایندکسی باید ایجاد بکنیم برای سندمون پس میان من LamaIndex.Core Import VectorStoreIndex این دقیقا میاد کل سند ما رو اینجوری میکنه و درج میکنه توی دیتا بیسی که حالا در ادامه

با هاش کار میکنیم البته اینجا هنوز توی دیتا بیس درجه میکنه این سیستم لایوه یعنی از باله به پایین داره اجرام میشه هنوز هیچ جا ما درجش نکردیم درست شد؟ هرچی هم درج بکنه به صورت مبقتی درج میکنه با این روش پس اگر میخواید از سیستم رگتون بعدا استفاده بکنید حتما باید اون رو داخل یک ویکتور ستور زخیره بکنید و بعدا بتونید اون ویکتور ستور رو فراخانی بکنید و ازش

و from lamaindex.core ایمپورت وکتر استور ایندکس ایندکس ما سویه وکتر استور ایندکس نودز اون هفته تا نودزی که ما بالا استخراش کرده بود که شامل پرسش و پاسخ و تایتل و جزیات سند ما بود رو بهش میدیم و مودل امبد یا امبد مودل چی میشود اف اچ امبدینگی که این بالا ساختیم یعنی این مودل امبدینگ ما بود از این استفاده میکنه تا کل سند ما رو چی کار بکنه

میشه گفتش که به صورت وکتور در بیاره حالا میاییم به بخش کوئری الان این انجام شد دیگه حدودا دو ثانیه طول کشید تا انجام بشه یعنی کل سند ما رو این شکلی کردن درست شد وکتور کرد یا بردار کرد توی بخش کوئری یک LLM کوئرینگی ساختیم درست شد حالا میتونید توی پروژهتون از دوتا مودل استفاده بکنید مثلا مودل اولیتون سباک باشه برای اینکه میخواید

پرسش و پاسخ رو اجرا بکنه و یک مودل قوی تر داشته باشید که بتونه بهترین پاسخ رو پیدا بکنه براتون اما توی این پروژه من جفتش رو هم جی پی تی فروه مینی قرار دارم که حالا

مثلا اگر از علامه ها استفاده می‌کنید می‌تونید از دو تا مدل استفاده بکنید مدل اول مثلا کیوون 2.5 و نمی‌دونم سی و دو بیلیون باشه مدل دومتون مثلا لامه هفتاد بیلیون باشه درست شد پس LLM Query مساوی OpenAI که بالاتر هم نحوه تعریفش رو یاد گرفتید یک Query Engine داریم که می‌گه آقا ایندکس ایندکس ما اونجا تعریف کرده بودیم دیگه Vector Store Index میاد از این نودز هایی که

میاد و این نودس هایی که ساخته بودیم رو بهش میده و همینطور امبید میکنه درست شد و اینجا هم دوباره فراخانیش میکنه میگه آقای اندکس ما رو بگیر که شامل این نودس ها با تمام اون متا دیتا ها هست از کوئری انجین به صورت میشه گفتش که یک حالت کوئری درش بیار یعنی در اصل میاد دیکودش میکنه درست شد اللم ما ما مسابیه اللم کوئرین که این مودل دوباره ما بود حالا میتونیم از این هم هز کنیم دیگ

نمی کنه response یا پاسخی که می خواد به امون برگردونه query engine.query سوال منو ازش می پرسیم و در نهایت هم print response من اگر الان اینو اجرا بکنم الان اینجا می زنه حدودا چقدر طول کشید حدود دو ثانیه طول کشید تا جواب ما رو به امون بده اینو مقایسه بکنید با یک سیستم رگ قدیمی

که قرار بود بره توی کل سندمون توی هفتاد تا هشتاد تا ست تا دو هزار تا پیج بگرده و جواب رو برگردونه حد دقل یک تا دو دقیقه طول میکشید هرچقدر هم سخت افزارتون قدرتمند بود خیلی راحت الان برای ما این رو میشه گفتش که برگردوند حالا من فارسیش رو هم تست میکنم می نویسم ببینید من فارسیش رو هم تست میکنم می نویسم این مقاله در خصوص چیست لطفا فارسی جواب بده

ببینیم توی میشه گفت ریترایف کردن یا برگردوندن جواب فارسی هم به همون میده یا نه که قطعا میشه گفتش که به همون فارسی هم جواب بیده پس محدودیت خاصی نداریم حتی اگر میشه گفت دیتاتون انگلیسی هست میتونید موقعی ریترایف یا ریترایف یا برگردوندن جواب از توی اصناد فارسی هم ازش بپرسید پس فارسی هم مشکلی نیست حالا ریسپانس رو همین ریسپانسی که داشت

ریسپانس چی هستش درسته؟ این میشه گفت جوابی که آماده کرده برای ما اینه سورس نود به نود هایی که مراجعه کرده و تونسته اون رو به دست بیاره آیدیش اینه که بالاتر با آیدی و اینه آشنا شده بودید پیج سی و نوه از توی پیج سی و نوه سند ما اومده این رو پیدا کرده فایل نیمه من این بوده و اینم متن کلش بوده دیگه خیلی راحت الان اومد به ما جوزیات هم درست شد حالا

اگر بخواییم این رو به زخیره بکنیم توی یک وکتر ستور، ما اینجا میتونیم این کار رو انجام بدیم.

index.storagecontext.persist.persist.vectors.

ببین من میام اینجا یک نیو فولر درست میکنم.

اسمش رو میذارم وکترز.

وکتورز اوکی ببینم آره خب راست کلیک میکنم کپی پت رو میزنم میام اینجا و آدرس میشه گفتای رکتوریم رو بهش میدم که بره اینجا زخیره بکنه این سیستم رگ منو و در نهایت هم ایندکس فرام استوریج مسابیه لوڈ ایندکس فرام استوریج استوریج کانتکست که اینجا بهش پرداخته بودیم امبیت مودلمون هم که بالاتر تعریف کرده بودیم دیگه گفته بودیم امبیت مودلمون چیه؟ اینه

امبیت مدل ما رو دوباره بهش دادیم که بتونه بر اساس اون امبیت مدل یک بار دیگه اون وکتورایزر رو انجام بده و این سری دیگه بریزه توی یک وکتور دیتابیس که ما بعدن هم بتونیم بهش دسترسی داشته باشیم پس من این خط کود رو اجرا می کنم و همینطور این رو حالا اینجا می بینید dot slash vectors هست همین کار رو می کنم برای اینکه بیشتر آشنا بشید من این رو اینجوری می نیبیسم که درک بهتری داشته باشید پ

یا همون question answering من index from storage از query engine کاری که اینجا کرده بودیم دیگه ببینید اینجا آمدیم دقیقا همین کار رو کردیم اوکی اینجا هم دقیقا همین کار رو کردیم منطقه فرقش اینه که اینجا زخیره میکنه توی database اونجا زخیره نمیکرد یعنی اگر من الان پروژم رو ببندم دیگه تمام این کارها رو دوباره بعد از اول انجام بدم

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

درست شد؟ خب این رو هم اجرا کردیم.

حالا ریسپانس ما مسابیه.

qa.query.

What is this؟ مثلا مودل دو یا What is... یا What is...

This article مثلا about.

این مثلا article یا این مقاله در مورد چیه و این هم دوباره میاد برامون توضیح میده که این مقاله مربوط به چه موضوعی هست.

حالا وکتر ستور رو باید زخیره بکنیم توی یک دیتا بیسه.

پشتیبان کنند از وکتر استورز مثل کروما دی بی پس می رویم پیپ اینستال کروما دی بی و پیپ اینستال لاما ایندکس وکتر استورز کروما که دقیقا این جوری می شه گفت توی لاما ایندکس نوشه شده که از کروما دی بی پشتیبانی بکنه پس این دوتا رو هم اجرا می کنم که هم کروما دی بی نصب بشه و هم لاما ایندکس وکتر استورز کروما که بیاد و تمام این نوت های ما یا تمام اون دیتا های ما رو توی دیت

دانلود بکنیم ایک سیستم رق خیلی ساده که دیتا بیسش رو هم داریم بخواییم پیاله سازی بکنیم خب اینا نصب شد ایمپورت کروما دی بی لاما ایندکس دات کر ایمپورت وکتر استور ایندکس کروما وکتر استور و همینطور استوریج کانتکس که بالاتر هم همین کارها رو کرده بودیم دیگه درست شد پس میریم اینجا میگم کروما دی بی داد پرسیستنت کلایند پتش یا اون مسیری که هستش باید یک میشه گفته

و آدرسش رو به اینجا بدم پس الان کاری که کردیم چی بود بچه ها؟ ببینید ما یک بار اومدیم تمام اونها رو به وکتور تبدیل کردیم تمام سنت های محتوامون رو و اون نوت هامون رو به وکتور تبدیل کردیم حالا میخواییم زخیرش بکنیم توی کروما دیتا بیس یعنی باید توی یک دیتا بیس باشه که بعدا میتونیم ازش استفاده بکنیم دیگه

پس دی بی مساویه کروما دی بی پرسیستن کلایند پد مساویه اون آدرس کروما دی بی که بهش داده بودیم درست شد کروما کالکشن میاد و مثلا ما اگر سی تا نمیدونم پی دی اف داریم میتونیم یه کالکشن بدیم به هر کدوم درست شد ما میمیدونیم مثلا قرار میدیم مساویه با دیپ سیک

من میگم آقا اسم این کالکشنه من دیپسیکه درست شد وکتر استورزش که بر اساس میشه گفت همون کروما کالکشنه که وکتر استورز رو بالاتر انجام داده بودیم میاد و از توی وکتر استورزی که ما داریم میاد میخونه اون محتبه ها رو و در نهایت هم توی کروما دیبیمون زخیره میکنه ایندکسش هم میشه وکتر استورز ایندکس

وکتور استور ایندکس رو اینجا ایمپورت کرده بودیم دیگه در اصل میاد این وکتور هایی که ما اینجا داشتیم رو میبره و با همون ترتیب و همون میشه گفتش که حفظ معانی و غیر و غیره توی کروما دیویمون زخیره میکنه و در نهایت هم کوئری انجینمون مساویه با ایندکس داد از کوئری انجین اللم مساویه اللم کوئرینگ همون کاری که بالاتر انجام داده بودیم رو اینجا فقط اومدیم هم وکتورش رو زخی

من اگر این رو ران بکنم چند ثانیه طولی میکشه تا کل میشه گفت محتوی من رو زخیره بکنه حدود سه ثانیه و یک بار دیگه هم میتونم اینجا ازش سوال رو بپرسم What is this article مثلا about؟

و میبینیم که همون کار رو برامون دوباره انجام میده الان اگر من برم توی ChromaDB ما یک دیتابیس Chroma داریم با فرمت SQLite 3 هستش و میتونیم این رو دانلود بکنیم و بعدا توی پروژه همون استفاده بکنیم یعنی خیلی کاره

سختی نیست مطمئن من اینجا دانلودش نمی کنم چون هدفی مود که فقط بهتون آموزش بدم این بخشون درست شد ما الان یاد گرفتیم یک سیستم رگ خیلی پیش رفته بسازیم امیدوارم که به درتون خورده باشه اگر سوالی داشتید میتونید توی کامنت ها بپرسید توی یوتیوب من حتما بهشون جواب میدم

و سعی کنید که ازش استفاده بکنید یک یا دو یا سه بار ممکنه به خطفا بخورید سعی کنید اون چالش رو برطرف بکنید تا قشنگ بتونید مسلط بشید به این موضوع و بتونید سیستم رق خودتون رو خیلی راحت توصیه بدید خیلی ممنون که تا آخر ویدیو با من همراه بودید کانال تلگرام و ویب سایت رو پراموش نکنید اونجا مطالبی رو میذارم که رایگانه و به درتون میخوره امیدوارم ک