آموزشمدل‌های زبانی بزرگ (LLM)

درس ۶۲ از ۸۵، هوش مصنوعی، حدود ۲۰ دقیقه خواندن

RAG چیست: جواب از روی منبع

جواب کوتاه

RAG، کوتاه‌شده‌ی Retrieval-Augmented Generation، یعنی «تولید با کمک بازیابی»: مدل زبانی پیش از جواب دادن، توی یه دسته سند مشخص بگرده، مرتبط‌ترین‌ها رو پیدا کنه، و از روی همون‌ها جواب بده؛ مثل امتحان کتاب‌باز. دو مرحله داره: از قبل، سندها تمیز و تکه‌تکه و به بردار تبدیل می‌شن؛ و موقع هر سوال، توی اون‌ها گشته می‌شه، بهترین تکه‌ها کنار سوال توی پرامپت می‌شینن و مدل جواب می‌ده. گشتن سه جوره (کلمه‌ای، معنایی، ترکیبی)، و خود RAG سه نسل داره (ساده، پیشرفته، ماژولار) و جورهای خاص مثل گرافی، ایجنتی و چندحالته. این‌طوری اطلاعات تازه و داخلی که مدل هیچ‌وقت ندیده به کار میاد، توهم کمتر می‌شه، و منبع کنار جواب میاد. ولی اگه سند درست پیدا نشه، مدل بد بخونتش، یا سندها مسموم باشن، هنوز خطا پیش میاد.

یعنی چی

به‌جای اینکه مدل از حافظه جواب بده، اول توی دفترچه‌ی شما بگرده.

امتحان کتاب‌باز رو یادتونه؟ لازم نیست همه چی رو حفظ باشید؛ سوال رو می‌خونید، صفحه‌ی مرتبط رو توی کتاب پیدا می‌کنید، و از روی همون جواب می‌دید. RAG همین کار رو با مدل زبانی می‌کنه. اسمش کوتاه‌شده‌ی Retrieval-Augmented Generation هست، یعنی «تولید با کمک بازیابی». Retrieval یعنی بازیابی، همون پیدا کردن سند مرتبط؛ Augmented یعنی کمک‌گرفته یا تقویت‌شده؛ Generation یعنی تولید، همون نوشتن جواب.

توی ایستگاه قبل دیدیم مدل چیزهایی رو که هیچ‌وقت ندیده یا فقط یه بار دیده، خوب نمی‌دونه و ممکنه توهم کنه؛ و هر چیزی بعد از تاریخ برش دانشش رو اصلا نمی‌دونه. ساعت کار نونوایی شما، قیمت امروزش، قانون داخلی شرکتتون، هیچ‌کدوم توی داده‌ی آموزش نبودن. RAG اونا رو همون لحظه جلوی مدل می‌ذاره. توی همه‌ی این درس با یه نونوایی ساختگی جلو می‌ریم، و هر جور RAG رو روی همون یادداشت‌های نونوایی می‌بینیم.

جاهایی که امروز RAG به کار میاد زیاده. چت‌بات پشتیبانی یه فروشگاه که از روی راهنمای محصول‌ها جواب می‌ده؛ دستیار داخلی یه شرکت که از روی آیین‌نامه‌ها و نامه‌ها جواب می‌ده؛ دستیاری که توی وب می‌گرده و کنار جوابش پیوند منبع می‌ذاره؛ و حتی پزشکی، که ویکی‌پدیا می‌گه پژوهش‌ها هنوز درباره‌ی سنجش و قابل اعتماد بودنش توی کار بالینی حرف دارن.

دو مرحله

RAG دو تا مرحله‌ی جدا داره. مرحله‌ی اول از قبل و فقط یه بار انجام می‌شه؛ بهش نمایه‌سازی (Indexing) می‌گن، یعنی فهرست‌دار کردن کتاب پیش از امتحان. سندهایی که به هر شکلی هستن، PDF، صفحه‌ی وب، فایل Word یا متن ساده، اول تمیز می‌شن و همه به متن ساده تبدیل می‌شن. بعد چون مدل نمی‌تونه یه کتاب کامل رو یه‌جا بخونه، متن به تکه‌های کوچیک‌تر بریده می‌شه. بعد هر تکه با یه مدل امبدینگ به یه بردار، یعنی یه ردیف عدد که معنی تکه رو نشون می‌ده، تبدیل می‌شه و همه توی یه پایگاه مخصوص، پایگاه برداری (Vector Database)، نگه داشته می‌شن.

مرحله‌ی دوم موقع هر سوال انجام می‌شه و سه قدم داره که هر کدوم یه تیکه از اسم RAG هست. اول بازیابی: سوال با همون مدل امبدینگ بردار می‌شه و چند تا تکه که بیشتر از همه شبیهش هستن پیدا می‌شن؛ معمولا بهشون می‌گن k تکه‌ی برتر (top-k). دوم افزودن: اون تکه‌ها کنار سوال توی پرامپت گذاشته می‌شن؛ ویکی‌پدیا به این کار «پر کردن پرامپت» (Prompt stuffing) هم می‌گه، چون اطلاعات مرتبط اول پرامپت میاد تا مدل اون رو به دانسته‌های قبلی خودش ترجیح بده. سوم تولید: مدل از روی سوال و تکه‌ها جواب می‌نویسه. اگه گفت‌وگو چند نوبتیه، تاریخچه‌ی گفت‌وگو هم توی همین پرامپت میاد.

قدم دوم همون کاریه که توی درس کم کردن توهم گفتیم: سند بدید و بگید فقط از روی سند جواب بده. RAG فقط این کار رو خودکار می‌کنه، تا لازم نباشه هر بار خودتون سند مرتبط رو پیدا کنید.

سه جور گشتن

قلب RAG گشتنه: از بین هزاران تکه، کدوم مرتبطه؟ بیاید ساده‌ترین بازیاب ممکن رو بسازیم. برای هر یادداشت نونوایی می‌شمره چند تا کلمه با سوال مشترک داره.

«سنگک تا ساعت ۱۱ صبح پخته می‌شه» سه کلمه‌ی مشترک داشت و برنده شد. ولی یه چیز رو ببینید: «بربری از ساعت ۴ عصر داریم» دو امتیاز گرفت، فقط چون «ساعت» و «داریم» توش بود، در حالی که به سوال ربطی نداره. این همون جستجوی کلمه‌ای (Keyword Search) هست؛ به برداری که این‌جور جستجوها می‌سازن بردار پراکنده (Sparse Vector) می‌گن، چون برای هر کلمه یه خونه داره و بیشتر خونه‌هاش صفره. ویکی‌پدیا می‌گه بردار پراکنده خود کلمه رو نگه می‌داره، نه معنیش رو.

جور دوم جستجوی معنایی (Semantic Search) هست که با بردار فشرده (Dense Vector) کار می‌کنه: هر تکه و سوال به یه بردار معنی تبدیل می‌شن و نزدیک‌ترین‌ها پیدا می‌شن؛ درس جستجوی برداری این رو کامل باز کرده. اگه کسی بپرسه «نون سنتی تا کی هست؟»، هیچ کلمه‌ی مشترکی با «سنگک» نداره و جستجوی کلمه‌ای چیزی پیدا نمی‌کنه، ولی جستجوی معنایی می‌فهمه این دو تا به هم نزدیکن. برعکسش هم هست: برای یه کد یا اسم دقیق، مثل کد تخفیف ساختگی NAN20، جستجوی کلمه‌ای دقیق‌تره و جستجوی معنایی ممکنه بین چیزهای شبیه گمش کنه.

برای همین جور سوم به وجود اومد: جستجوی ترکیبی (Hybrid Search). هر دو جستجو با هم انجام می‌شن و فهرستشون با هم ادغام می‌شه، با یه حساب امتیاز یا با رتبه‌بندی دوباره. ویکی‌پدیا و مرور ۲۰۲۳ که بیش از ۱۰۰ پژوهش RAG رو کنار هم گذاشته، هر دو این روش رو جزو بهبودهای اصلی RAG می‌شمرن. سندها هم لازم نیست همیشه متن باشن: داده‌ی نیمه‌ساختاریافته مثل PDF با جدول، و داده‌ی ساختاریافته مثل جدول پایگاه داده یا گراف دانش (Knowledge Graph) هم گشته می‌شن.

پرامپتش چه شکلیه

چیزی که آخر سر به مدل می‌رسه یه پرامپت معمولیه، فقط چند تا تکه سند بالاش نشسته. سه تا جمله توش خیلی مهمه. اول، «فقط از روی منبع‌ها جواب بده»؛ راهنمای Claude هم صریحا همین رو برای کم کردن توهم می‌گه. دوم، «اگه جواب توشون نبود، بگو نمی‌دونم»؛ وگرنه مدل جای خالی رو با حدس پر می‌کنه. سوم، «کنار هر جمله شماره‌ی منبعش رو بنویس»؛ این‌طوری خودتون و کاربرتون می‌تونید ببینید هر ادعا از کجا اومده. شماره‌دار کردن تکه‌ها برای همین کاره.

چرا خوبه

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

اسم RAG از یه پژوهش ۲۰۲۰ اومد. اون پژوهش گفت مدل دانش رو توی پارامترهاش نگه می‌داره، ولی دسترسی دقیق به اون، گفتن منبعش و به‌روز کردنش سخته. پس یه حافظه‌ی بیرونی بهش اضافه کردن: یه نمایه‌ی برداری از ویکی‌پدیا که موقع جواب گشته می‌شد. دو شکل هم امتحان کردن: توی یکی، برای کل جواب از همون چند تا سند استفاده می‌شد؛ توی اون یکی، هر کلمه‌ی جواب می‌تونست از یه سند دیگه کمک بگیره. نتیجه توی سه کار پرسش و پاسخ بهترین نتیجه‌ی اون روز بود، و متنی که می‌ساخت مشخص‌تر، متنوع‌تر و درست‌تر بود. اون موقع بازیاب و مدل با هم آموزش می‌دیدن. مرور ۲۰۲۳ می‌گه بعد از اومدن مدل‌های گفت‌وگوی بزرگ، تمرکز پژوهش‌ها رفت سراغ اینکه سند فقط موقع جواب توی پرامپت گذاشته بشه، و بعدها دوباره با فاین‌تیون هم ترکیب شد.

سه نسل RAG

حالا بریم سراغ انواع. مرور ۲۰۲۳ همه‌ی RAGها رو توی سه نسل می‌چینه، که هر کدوم برای رفع ایرادهای قبلی اومده.

نسل اول RAG ساده (Naive RAG) هست، همون چیزی که تا الان دیدیم: سندها تکه و بردار می‌شن، با سوال گشته می‌شن، و k تا تکه‌ی برتر کنار سوال میاد. بهش «بگرد، بخون» (Retrieve-Read) هم می‌گن. ارزون و ساده‌ست، ولی مرور ۲۰۲۳ سه دسته ایراد براش می‌شمره. گشتنش گاهی تکه‌ی بی‌ربط میاره یا تکه‌ی مهم رو جا می‌ندازه؛ نوشتنش هنوز ممکنه توهم داشته باشه؛ و کنار هم گذاشتن تکه‌ها گاهی جواب تکراری یا ناجور می‌سازه. برای سوال پیچیده هم یه بار گشتن با خود سوال کافی نیست.

نسل دوم RAG پیشرفته (Advanced RAG) هست. همون زنجیره‌ی ساده‌ست، ولی پیش و بعد از گشتن چند تا ترفند اضافه می‌کنه تا سند بهتری به مدل برسه. فصل بعد این ترفندها رو یکی‌یکی می‌بینیم.

نسل سوم RAG ماژولار (Modular RAG) هست. اینجا دیگه یه زنجیره‌ی ثابت نداریم؛ یه جعبه‌ابزار داریم که تیکه‌هاش رو می‌شه جابه‌جا کرد، عوض کرد یا اضافه کرد. مثلا یه مسیریاب (Routing) که تصمیم می‌گیره این سوال رو کجا بگرده: توی سندها، توی وب، یا توی یه جدول پایگاه داده، که اون‌جا مدل خودش یه پرس‌وجو به زبان پایگاه داده می‌نویسه. یا یه حافظه که گفت‌وگوهای قبلی رو نگه می‌داره. یا اینکه مدل اول خودش یه متن بسازه و بعد بگرده. و مهم‌تر از همه، گشتن می‌تونه چند بار و هر وقت لازم بود انجام بشه، نه فقط یه بار اول کار.

ترفندهای پیش و بعد از گشتن

پیش از گشتن، دو جا رو می‌شه بهتر کرد: خود سندها و خود سوال. سندها رو با تکه‌های ریزتر، تکه‌هایی که یه کم روی هم میفتن (پنجره‌ی لغزان)، و با فراداده (Metadata) مثل تاریخ، نویسنده یا بخش، بهتر می‌کنن؛ با فراداده می‌شه مثلا فقط توی سندهای امسال گشت. سوال رو هم چند جور بهتر می‌کنن. یکیش بازنویسی سوال (Query Rewriting) هست: کاربر می‌نویسه «اون نونه که صبح‌ها داره کی تموم می‌شه»، و مدل اول اون رو به یه سوال تمیزتر برای گشتن تبدیل می‌کنه. یکی دیگه چند سوال از چند زاویه‌ست (Multi-Query): یه سوال به چند سوال مختلف تبدیل می‌شه، هر کدوم جدا گشته می‌شه، و نتیجه‌ها با هم ادغام می‌شن.

یه ترفند جالب‌تر سند خیالی هست که یه پژوهش ۲۰۲۲ معرفی کرد، به اسم HyDE، کوتاه‌شده‌ی Hypothetical Document Embeddings، یعنی «امبدینگ سند فرضی». مدل اول یه جواب خیالی برای سوال می‌نویسه، که ممکنه غلط هم باشه. بعد به‌جای خود سوال، با بردار همین جواب خیالی می‌گردن. چرا؟ چون یه جواب به جواب‌های واقعی شبیه‌تره تا یه سوال. پژوهش می‌گه جزئیات غلط اون سند خیالی، موقع تبدیل به بردار، تا حد زیادی کم‌اثر می‌شن.

بعد از گشتن هم سه تا کار رایجه. اول رتبه‌بندی دوباره (Reranking): یه قاعده یا یه مدل دیگه، تکه‌هایی که پیدا شده رو دوباره کنار سوال می‌سنجه و مرتب می‌کنه؛ هم بهترها جلو میان، هم تعداد کم می‌شه. دوم فشرده کردن زمینه (Context Compression): جمله‌های بی‌ربط تکه‌ها حذف می‌شن تا فقط حرف اصلی بمونه. مرور ۲۰۲۳ صاف می‌گه این باور که «هر چی سند بیشتر، بهتر» اشتباهه؛ سند زیاد نویز میاره و حواس مدل رو پرت می‌کنه. سوم، مهم‌ترین تکه‌ها رو اول و آخر پرامپت بذارید، نه وسط؛ چرا، توی فصل «کجا خطا می‌کنه» می‌بینیم.

الگوهای گشتن

معمولی‌ترین RAG فقط یه بار می‌گرده. ولی بعضی سوال‌ها با یه بار گشتن جواب نمی‌گیرن. مثلا فرض کنید بپرسن «نونوایی‌ای که سنگکش زودتر تموم می‌شه، جمعه‌ها بازه؟». اول باید بفهمیم کدوم نونوایی، بعد بریم سراغ جمعه‌اش. برای همین چند الگوی دیگه به وجود اومده.

توی گشتن تکراری (Iterative Retrieval)، مدل یه تیکه جواب می‌نویسه، با همون تیکه دوباره می‌گرده، و همین‌طور نوبتی جلو می‌ره؛ این‌طوری هر بار زمینه‌ی کامل‌تری داره، ولی ممکنه چیزهای بی‌ربط هم کم‌کم جمع بشن. توی گشتن بازگشتی (Recursive Retrieval)، سوال کم‌کم دقیق‌تر می‌شه یا به چند سوال کوچیک‌تر شکسته می‌شه و هر کدوم جدا گشته می‌شه؛ برای سندهای خیلی بلند هم اول خلاصه‌ی بخش‌ها گشته می‌شه و بعد توی همون بخش. به گشتنی که از یه سند به سند بعدی می‌پره تا جواب رو کنار هم بذاره، چندپرشی (Multi-hop) می‌گن.

توی گشتن تطبیقی (Adaptive Retrieval)، خود مدل تصمیم می‌گیره کی لازمه بگرده و کی بس کنه. مثلا یه روش ۲۰۲۳ وقتی می‌بینه مدل به کلمه‌هایی که داره می‌سازه مطمئن نیست، یعنی احتمالشون از یه حد پایین‌تره، می‌گرده. یه پژوهش دیگه‌ی ۲۰۲۳ به اسم Self-RAG، یعنی «RAG خودسنج»، به مدل یاد داد خودش تصمیم بگیره کی بگرده و با یه سری نشانه‌ی مخصوص، سندها و حتی جواب خودش رو نقد کنه.

و آخر، RAG اصلاحی (Corrective RAG) که یه پژوهش ۲۰۲۴ معرفی کرد. بعد از گشتن، یه سنجنده‌ی سبک می‌سنجه سندهایی که پیدا شدن چقدر به درد می‌خورن. اگه خوب بودن، همون‌ها استفاده می‌شن؛ اگه بد بودن، جستجوی وب هم اضافه می‌شه. بعد سندها به تیکه‌های کوچیک شکسته می‌شن و فقط تیکه‌های مهم نگه داشته می‌شن.

RAG گرافی، ایجنتی و چندحالته

RAG معمولی برای سوال‌هایی که جوابشون توی یکی دو تا تکه‌ست عالیه. ولی اگه بپرسید «کلا این یادداشت‌ها درباره‌ی چیه؟» یا «مهم‌ترین موضوع‌های این هزار تا نامه چیه؟»، جواب توی هیچ تکه‌ای نیست؛ باید کل مجموعه رو دید.

RAG گرافی (GraphRAG) که یه پژوهش ۲۰۲۴ معرفی کرد، برای همین ساخته شد. از قبل، مدل از سندها آدم‌ها، جاها و چیزها رو، و رابطه‌ی بینشون رو درمیاره و یه گراف دانش می‌سازه؛ مثلا «سنگک» به «نونوایی محل» و به «ساعت ۱۱ صبح» وصله. بعد چیزهایی که بیشتر به هم وصلن گروه می‌شن و برای هر گروه از قبل یه خلاصه نوشته می‌شه. موقع یه سوال کلی، هر خلاصه یه تیکه جواب می‌ده و تیکه‌ها با هم جمع می‌شن. پژوهش روی مجموعه‌هایی حدود یک میلیون توکن نشون داد جواب‌ها از RAG معمولی خیلی کامل‌تر و متنوع‌ترن. ساختن خود گراف هم با مدل زبانی انجام می‌شه.

RAG ایجنتی (Agentic RAG) جایه که RAG به ایجنت می‌رسه. یه مرور ۲۰۲۵ می‌گه اینجا ایجنت‌ها توی خود مسیر RAG می‌شینن: تصمیم می‌گیرن کجا و چطور بگردن، چیزی که پیدا شده رو می‌سنجن و بهترش می‌کنن، و اگه لازم بود دوباره می‌گردن. همون الگوهای ایجنت‌ها اینجا هم هستن: بازتاب، یعنی سنجیدن کار خودش؛ برنامه‌ریزی، یعنی شکستن کار به قدم‌ها؛ استفاده از ابزار، مثل جستجوی وب یا پایگاه داده؛ و چند ایجنت که با هم کار می‌کنن.

RAG چندحالته (Multimodal RAG) هم فقط متن نمی‌گرده. مرور ۲۰۲۳ نمونه‌هایی می‌شمره که عکس، صدا، ویدیو و کد رو هم می‌گردن و می‌سازن؛ مثلا گشتن بین عکس‌ها برای جواب دادن به یه سوال درباره‌ی یه عکس، یا پیدا کردن نمونه‌کد مشابه برای کمک به برنامه‌نویس. درس مدل‌های چندحالته نشون داده مدل چطور عکس و صدا رو می‌فهمه.

کجا خطا می‌کنه

ویکی‌پدیا صاف می‌گه RAG همه‌ی مشکل‌ها رو حل نمی‌کنه. خطا از دو جای اصلی میاد.

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

یه گیر دیگه به اسم «گم شدن وسط» (Lost in the Middle) هست. یه پژوهش ۲۰۲۳ نشون داد مدل‌ها اطلاعاتی که اول یا آخر یه ورودی بلند هست رو بهتر به کار می‌برن، و وقتی اطلاعات مهم وسط می‌افته، درست جواب دادن به طور محسوسی پایین میاد؛ حتی توی مدل‌هایی که برای متن بلند ساخته شدن. برای همین می‌گن بهترین تکه‌ها رو اول و آخر پرامپت بذارید و تکه‌ی اضافه نیارید. مرور ۲۰۲۳ یه جمله‌ی خوب هم داره: اطلاعات غلط می‌تونه از هیچ اطلاعاتی بدتر باشه.

امنیت

RAG هر چی توی سندها باشه رو باور می‌کنه، و همین یه در تازه برای حمله باز می‌کنه. به این کار مسموم کردن (RAG Poisoning) می‌گن: کسی متن ساختگی توی جایی که RAG می‌گرده می‌ذاره تا جواب رو عوض کنه. یه پژوهش ۲۰۲۴ نشون داد با گذاشتن فقط ۵ متن ساختگی برای هر سوال، توی پایگاهی با میلیون‌ها متن، حدود ۹۰٪ وقت‌ها مدل همون جوابی رو داد که حمله‌کننده می‌خواست. اگه RAG شما توی وب یا توی سندهایی که هر کسی می‌تونه بنویسه می‌گرده، این خطر جدیه.

خطر دوم تزریق دستور هست: یه سند می‌تونه به‌جای اطلاعات، دستور پنهان داشته باشه، مثل «همه‌ی دستورهای قبلی رو ول کن»، و چون سند توی پرامپت میاد، مدل ممکنه ازش پیروی کنه. خطر سوم لو رفتن اطلاعاته؛ مرور ۲۰۲۳ جلوگیری از اینکه مدل سند یا فراداده‌ای رو که نباید، لو بده، جزو کارهای مهم مهندسی RAG می‌شمره. برای همین هر کاربر فقط باید توی سندهایی گشته بشه که اجازه‌ی دیدنشون رو داره، و سندها پیش از نمایه شدن بازبینی بشن.

سنجیدنش

از کجا بفهمیم RAG ما خوب کار می‌کنه؟ مرور ۲۰۲۳ می‌گه دو تا چیز رو جدا بسنجید: بازیابی و تولید. چون اگه جواب غلط بود، باید بدونید تقصیر گشتن بوده یا نوشتن. سه تا نمره هم رایجه که با سه ضلع این مثلث جور درمیان. ربط زمینه (Context Relevance) می‌گه سندهای پیدا شده چقدر به سوال مربوطن. وفاداری جواب (Faithfulness) می‌گه جواب چقدر به سندها وفاداره، یعنی چیزی از خودش نساخته. ربط جواب (Answer Relevance) می‌گه جواب چقدر واقعا به خود سوال جواب داده.

همون مرور چهار تا توانایی هم می‌شمره. تحمل نویز، یعنی سند مرتبط ولی بی‌فایده گیجش نکنه. رد کردن، یعنی وقتی جواب توی سندها نیست، بگه نمی‌دونم. کنار هم گذاشتن، یعنی از چند سند یه جواب درست بسازه. و نادیده گرفتن غلط، یعنی اگه یه سند اطلاعات غلط داشت، فریبش رو نخوره. یه روش ۲۰۲۳ به اسم Ragas نشون داد خیلی از این‌ها رو می‌شه بی جواب درست از قبل نوشته‌شده هم، با خود مدل‌ها سنجید. درس سنجش مدل زبانی راه کلی سنجیدن رو گفته.

در برابر فاین‌تیون و زمینه‌ی بلند

توی درس فاین‌تیون، RAG یا پرامپت این رو باز کردیم. مرور ۲۰۲۳ یه تشبیه خوب داره: RAG مثل اینه که یه کتاب درسی مخصوص بدید دست مدل، و فاین‌تیون مثل دانش‌آموزیه که کم‌کم درس رو یاد می‌گیره. برای دانش، یعنی اطلاعاتی که عوض می‌شه یا مال خود شماست، RAG معمولا بهتره، چون سند رو هر وقت خواستید عوض می‌کنید و منبع هم دارید؛ همون مرور می‌گه توی پژوهش‌ها RAG برای دانش تازه از فاین‌تیون بی‌نظارت بهتر بود. برای سبک و رفتار، مثل لحن یا قالب ثابت جواب، فاین‌تیون. هزینه‌ی RAG اینه که هر جواب یه کم دیرتر میاد، چون اول باید بگرده. و این دو تا با هم دشمن نیستن؛ خیلی وقت‌ها با هم به کار می‌رن.

یه سوال تازه هم پیش اومده: حالا که مدل‌ها بیش از ۲۰۰ هزار توکن پنجره‌ی زمینه دارن، چرا کل سندها رو یه‌جا ندیم؟ مرور ۲۰۲۳ دو تا دلیل می‌گه که RAG هنوز لازمه. اول اینکه دادن همه چیز، جواب رو کند و گرون می‌کنه، ولی RAG فقط تکه‌ی لازم رو می‌ده. دوم اینکه RAG معلوم می‌کنه جواب از کدوم سند اومده، ولی وقتی همه چیز رو یه‌جا بدید، معلوم نیست مدل از کجا گفته. تازه، اگه مجموعه‌ی سندهاتون از پنجره‌ی زمینه بزرگ‌تر باشه، که خیلی وقت‌ها هست، اصلا راه دیگه‌ای نیست.

ساختن یکی برای خودتون

اگه بخواید برای کسب‌وکار خودتون یه RAG بسازید، این قدم‌ها رو به ترتیب برید. هر قدم رو درست کنید، بعد برید قدم بعد.

  1. سندها رو جمع کنید و فقط اون‌هایی رو نگه دارید که درست و به‌روزن؛ سند قدیمی جواب قدیمی میاره.
  2. همه رو به متن ساده تبدیل کنید و جدول‌ها و سرتیترها رو سالم نگه دارید.
  3. متن رو تکه کنید، با یه کم هم‌پوشانی، و به هر تکه فراداده مثل اسم سند و تاریخ بدید؛ درس تکه کردن سند اندازه‌ش رو گفته.
  4. تکه‌ها رو بردار کنید و توی پایگاه برداری بذارید؛ درس جستجوی برداری طرز کارش رو گفته.
  5. جستجوی ترکیبی بذارید، که هم معنی رو بگیره هم اسم‌ها و کدهای دقیق رو.
  6. اگه نتیجه‌ها شلوغ بود، رتبه‌بندی دوباره اضافه کنید و فقط چند تا تکه‌ی بهتر رو نگه دارید.
  7. پرامپت رو با اون سه جمله بنویسید: فقط از منبع، اگه نبود بگو نمی‌دونم، و شماره‌ی منبع کنار هر جمله.
  8. یه فهرست از سوال‌های واقعی کاربرهاتون جمع کنید و هر بار که چیزی عوض کردید، بازیابی و جواب رو جدا بسنجید.

از همون RAG ساده شروع کنید و فقط وقتی سنجش نشون داد کجا گیره، ترفند همون‌جا رو اضافه کنید؛ اگه بازیابی بده، ترفندهای پیش و بعد از گشتن؛ اگه سوال‌ها چندقدمی‌ان، گشتن تکراری یا ایجنتی؛ اگه سوال‌ها درباره‌ی کل مجموعه‌ان، RAG گرافی. درس بعد اولین قدم ساختن یه RAG خوبه: تکه کردن سند.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • اول بگرد، بعد جواب بده.
  • از قبل آماده کردن، موقع سوال گشتن و نوشتن.
  • گشتن کلمه‌ای، معنایی یا ترکیبی.
  • ساده، پیشرفته، ماژولار؛ و گرافی، ایجنتی، چندحالته.
  • توهم کمتر و منبع‌دار، ولی صفر نه.
  • اول بازیابی رو بسنج، بعد جواب رو.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس

درس بعد