آخرین بهروزرسانی:
میخواهید چتبات سایت به سؤال «مهلت مرجوعی کالا چند روز است؟» جواب بدهد. مدل زبانی فقط چیزهایی را میداند که در دادهی آموزشش بوده و صفحهی قوانین فروشگاه شما هیچوقت در آن نبوده. پس یا میگوید نمیداند، یا بدتر، یک عدد معقول ولی ساختگی میگوید.
RAG رایجترین راهحل این مشکل است و ایدهاش ساده است: قبل از اینکه مدل جواب بدهد، متن مرتبط را از دادههای خودتان پیدا کنید و کنار سؤال به او بدهید.
RAG چیست؟#
RAG (مخفف Retrieval-Augmented Generation، یعنی تولید پاسخ با کمک بازیابی) روشی است که در آن سیستم پیش از هر پاسخ، تکههای مرتبط را از سندهای شما پیدا میکند و همراه پرسش به مدل زبانی میدهد. مدل دیگر از حافظه جواب نمیدهد؛ از روی متنی جواب میدهد که جلوی چشمش گذاشتهاید.
این تنها راه نیست. سه راه برای اینکه مدل دادهی شما را بداند وجود دارد:
| روش | چطور | مناسب برای | ضعف |
|---|---|---|---|
| همهچیز در پرامپت | کل متن را هر بار همراه سؤال بفرستید | چند صفحه متن | با رشد داده گران و کند میشود |
| RAG | فقط تکههای مرتبط را پیدا کنید و بفرستید | پایگاه دانش بزرگ و در حال تغییر | به کیفیت جستجو وابسته است |
| فاینتیون | مدل را روی دادهی خودتان دوباره آموزش دهید | لحن و قالب ثابت | برای افزودن اطلاعات تازه کارآمد نیست |
اگر همهی متنهایتان چند صفحه است، سادهترین راه گذاشتن کل متن در پرامپت است. RAG وقتی به کار میآید که داده در پنجرهی متن جا نمیشود، یا فرستادن همهاش در هر پرسش هزینهی بیدلیل دارد. یک برداشت اشتباه رایج این است که برای «یاد دادن» اطلاعات باید فاینتیون کرد؛ ولی هر تغییر قیمت یا قانون، آموزش دوباره میخواهد. در RAG کافی است سند را بهروز کنید.
RAG چطور کار میکند؟#
RAG دو بخش دارد: آمادهسازی سندها که یک بار و بعد از هر تغییر انجام میشود، و پاسخگویی که در هر پرسش تکرار میشود.
آمادهسازی#
- جمعکردن سندها: صفحهی قوانین، پرسشهای متداول، راهنمای محصول، مستندات فنی.
- تکهکردن: هر سند به بخشهای کوتاه، مثلاً در حد یکی دو پاراگراف، تقسیم میشود تا بعداً فقط بخش مرتبط فرستاده شود.
- بردارسازی (Embedding): هر تکه با یک مدل مخصوص به فهرستی از عددها تبدیل میشود که معنای آن را نشان میدهد. دو متن هممعنا عددهای نزدیک به هم میگیرند، حتی اگر کلمههایشان فرق کند.
- ذخیره: بردارها همراه متن اصلی در یک پایگاه دادهی برداری یا هر جایی که جستجوی شباهت را پشتیبانی کند ذخیره میشوند.
پاسخگویی#
- سؤال کاربر با همان مدل به بردار تبدیل میشود.
- چند تکهای که بردارشان به سؤال نزدیکتر است پیدا میشوند.
- این تکهها همراه سؤال و یک دستور مشخص به مدل زبانی فرستاده میشوند.
- مدل با تکیه بر همان تکهها جواب مینویسد و، اگر خواسته باشید، منبع را هم میگوید.
دستور قدم سوم اهمیت زیادی دارد:
فقط بر اساس متنهای زیر جواب بده. اگر جواب در این متنها نیست،
بگو «در اطلاعات من نیست» و چیزی حدس نزن.
در پایان، عنوان متنی را که جواب از آن آمده بنویس.
متنها:
[تکههای بازیابیشده]
سؤال کاربر:
[سؤال]جستجوی معنایی همیشه لازم است؟#
نه؛ برای پایگاه دانش کوچک، جستجوی متنی معمولی خیلی وقتها کافی است. جستجوی معنایی از این جهت رایج شده که «مهلت پسدادن کالا» را به «شرایط مرجوعی» وصل میکند، کاری که جستجوی کلمهای نمیکند.
برای متن فارسی، در جستجوی متنی مراقب یکسانسازی «ی» و «ک» عربی و فارسی و نیمفاصله باشید؛ این مشکل را در جستجوی فارسی در MySQL باز کردهایم. بسیاری از سیستمها هم ترکیبی کار میکنند و نتیجهی جستجوی کلمهای و معنایی را با هم میآمیزند.
RAG کجا خراب میشود؟#
تقریباً همهی مشکلات RAG از بخش بازیابی است، نه از مدل. اگر تکهی درست به مدل نرسد، بهترین مدل هم جواب درست نمیدهد. شش خطای رایج:
- بازیابی اشتباه. بازیابی را جدا بسنجید: برای بیست سؤال واقعی، تکههای درست پیدا میشوند؟
- تکهی خیلی کوچک یا خیلی بزرگ. تکهی یکخطی زمینه ندارد؛ تکهی چندصفحهای متن بیربط را هم با خودش میآورد.
- سند قدیمی. اگر قانون مرجوعی را عوض کردهاید و پایگاه دانش را نه، ربات قانون قدیمی را با اطمینان تکرار میکند.
- سندهای متناقض. دو صفحه با دو عدد مختلف، مدل را مجبور به انتخاب میکند.
- دادهی خصوصی در پایگاه دانش. هر چیزی که ایندکس کنید ممکن است در جواب به هر کاربری ظاهر شود. اطلاعات مشتری و سند داخلی را وارد پایگاه دانش عمومی نکنید.
- دستور پنهان در سند. اگر متن کاربران یا صفحههای بیرونی را ایندکس میکنید، کسی میتواند در آن دستوری برای مدل بگذارد؛ این خطر را در تزریق پرامپت در سایت توضیح دادهایم.
از کجا شروع کنیم؟#
با یک مجموعهی کوچک از پرسشهای واقعی شروع کنید، نه با انتخاب ابزار:
- بیست تا سی پرسش واقعی مشتریها را از ایمیل و تیکتها جمع کنید.
- جواب درست هرکدام را در سندهای موجود علامت بزنید. اگر جوابی در هیچ سندی نیست، اول سند را بنویسید.
- با سادهترین جستجو شروع کنید و ببینید چند پرسش به تکهی درست میرسند.
- دستور «فقط از متنها جواب بده» را اضافه کنید و جوابها را یکییکی بخوانید.
- هر جا سند را اصلاح کردید، دوباره ایندکس کنید و همان پرسشها را تکرار کنید.
این مجموعهی پرسش بعداً هم به کار میآید: بعد از هر تغییر در سیستم، دوباره با آن امتحان کنید. ساختن یک چتبات کامل روی همین پایه را در چتبات پشتیبانی برای سایت وردپرسی آوردهایم.
RAG به کجا میرود؟#
RAG از یک تکنیک تخصصی به یک امکان معمولی تبدیل میشود. بسیاری از ابزارها همین حالا اجازه میدهند چند سند را به یک پروژه یا دستیار بدهید و بازیابی را خودشان انجام میدهند. پنجرهی متن مدلها بزرگتر شده و برای دادهی کم، گاهی دیگر تکهکردن لازم نیست. ولی برای دادهی زیاد، در حال تغییر یا با سطح دسترسی متفاوت، بازیابی هدفمند همچنان لازم است. جهت دیگر، ایجنتهایی است که خودشان تصمیم میگیرند کجا و چند بار جستجو کنند.
در هر حال، کیفیت جواب به کیفیت سندها گره خورده است. برای آمادهشدن:
- هر صفحهی راهنما را دربارهی یک موضوع بنویسید، با عنوانهای روشن و بخشهایی که جدا از هم معنا دارند.
- تاریخ بهروزرسانی و مسئول هر سند را مشخص کنید و سندهای قدیمی را حذف کنید، نه فقط رها.
- سندهای عمومی و داخلی را از همین حالا جدا نگه دارید.
خلاصه#
- RAG پیش از پاسخ، تکههای مرتبط را از دادهی شما پیدا میکند و کنار سؤال به مدل میدهد.
- برای اطلاعات در حال تغییر، RAG از فاینتیون مناسبتر است؛ برای چند صفحه متن، پرامپت ساده کافی است.
- کیفیت RAG بیشتر به بازیابی و سندها بستگی دارد تا به مدل.
- به مدل صریح بگویید فقط از متنها جواب بدهد و منبع را بگوید.
- دادهی خصوصی را ایندکس نکنید و سندها را مرتب و بهروز نگه دارید.