مایندفورج

افزایش دقت مدل‌های زبان بزرگ با تکنیک‌های RAG و CAG

نگاهی عمیق به دو رویکرد RAG و CAG در مدل‌های زبان بزرگ

مقدمه

مدل‌های زبانی بزرگ (LLMs) مرزهای آنچه ماشین‌ها می‌توانند با زبان انجام دهند را جابجا کرده‌اند. آن‌ها قادرند متونی خلاقانه تولید کنند، کدهای برنامه‌نویسی بنویسند، اطلاعات را خلاصه کنند و به پرسش‌های پیچیده پاسخ دهند. اما توانایی آن‌ها در پاسخگویی دقیق و به‌روز، محدود به داده‌هایی است که در زمان آموزش دیده‌اند. دانش انسانی و اطلاعات دنیای واقعی دائماً در حال تغییر و گسترش است؛ حقایق جدید کشف می‌شوند، رویدادهای تازه رخ می‌دهند و جزئیات تخصصی در هر زمینه‌ای به‌روز می‌شوند. LLM‌ها به تنهایی نمی‌توانند با این سیل مداوم اطلاعات همگام باشند، به اطلاعات لحظه‌ای دسترسی یابند یا منابع پاسخ‌های خود را ذکر کنند – امری که برای کاربردهای نیازمند دقت بالا ضروری است.

برای اینکه LLM‌ها بتوانند فراتر از حافظه آموزشی ثابت خود عمل کنند و به اطلاعات لحظه‌ای، اختصاصی یا بسیار جدید دسترسی داشته باشند، نیاز به اتصال آن‌ها به منابع دانش خارجی حیاتی است. اینجاست که معماری‌ها و تکنیک‌هایی برای تقویت فرآیند تولید پاسخ در LLM‌ها با قابلیت دسترسی به داده‌های بیرونی مطرح می‌شوند. دو مورد از مهم‌ترین و بحث‌برانگیزترین این رویکردها، RAG (Retrieval-Augmented Generation) و CAG (Cache-Augmented Generation) هستند که هر یک با روشی متفاوت، سعی در حل این چالش دارند. هرچند نام RAG بیشتر به گوش می‌رسد، اما CAG نیز برای دسته‌ای خاص از مسائل، مزایای قابل توجهی ارائه می‌دهد. بیایید نگاهی عمیق‌تر به RAG بیندازیم.

رویکرد پرکاربرد بازیابی و تولید تقویت شده (RAG)

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

نحوه کار RAG

فرآیند RAG معمولاً شامل گام‌های زیر است:

  1. آماده‌سازی پایگاه دانش: ابتدا دانش خارجی مورد نظر (مستندات شرکت، مقالات علمی، صفحات وب و غیره) به قطعات کوچک‌تر (chunks) تقسیم شده و این قطعات با استفاده از مدل‌های Embedding به نمایش‌های عددی (وکتور) تبدیل می‌شوند. این وکتورها به همراه متن اصلی قطعه، در یک پایگاه داده وکتوری (Vector Database) یا یک شاخص (Index) قابل جستجو ذخیره می‌شوند.
  2. دریافت پرسش کاربر: کاربر پرسشی را مطرح می‌کند (مثلاً: «آخرین سیاست مرخصی شرکت چیست؟»).
  3. تبدیل پرسش به وکتور: پرسش کاربر نیز با همان مدل Embedding به یک وکتور تبدیل می‌شود.
  4. بازیابی اطلاعات مرتبط: وکتور پرسش کاربر در پایگاه داده وکتوری جستجو می‌شود تا نزدیک‌ترین و مرتبط‌ترین وکتورها (و در نتیجه قطعات متن اصلی) پیدا شوند. این فرآیند بازیابی (Retrieval) نام دارد.
  5. تقویت پرامپت: قطعات متنی بازیابی شده به عنوان کانتکس به پرامپت اصلی کاربر اضافه می‌شوند. پرامپت ارسالی به LLM چیزی شبیه به این خواهد بود: «با توجه به اطلاعات زیر: [قطعات متنی مرتبط]. لطفاً به پرسش زیر پاسخ دهید: [پرسش کاربر]».
  6. تولید پاسخ: LLM با استفاده از پرسش اصلی و کانتکس ارائه شده، پاسخ نهایی را تولید می‌کند. از آنجایی که پاسخ بر اساس اطلاعات بازیابی شده تولید می‌شود، دقیق‌تر، به‌روزتر و قابل استنادتر خواهد بود.

نقاط قوت RAG:

  • قابلیت به‌روزرسانی آسان: با تغییر یا اضافه شدن دانش جدید، کافی است پایگاه داده وکتوری به‌روزرسانی شود، بدون نیاز به آموزش مجدد مدل LLM.
  • مقیاس‌پذیری: RAG می‌تواند حجم عظیمی از دانش خارجی را مدیریت کند.
  • قابلیت استناد (Citation): از آنجایی که پاسخ بر اساس قطعات خاصی از متن تولید می‌شود، می‌توان منبع آن قطعه را نیز ارائه داد.
  • انعطاف‌پذیری: می‌توان از پایگاه‌های دانش مختلفی استفاده کرد.

رویکرد RAG به راه‌حل استاندارد بسیاری از سیستم‌های پرسش و پاسخ، چت‌بات‌های سازمانی و دستیارهای هوش مصنوعی تبدیل شده است که نیاز به دسترسی به اطلاعات زنده یا اختصاصی دارند.

رویکرد کمتر شناخته‌شده تولید تقویت‌شده با حافظه کش (CAG)

در حالی که RAG بر بازیابی در زمان کوئری تمرکز دارد، CAG یا Cache-Augmented Generation رویکرد متفاوتی را در پیش می‌گیرد. ایده اصلی CAG این است که به جای جستجو در هر بار پرسش، دانش مورد نیاز مدل پیش از شروع تعامل کاربر در حافظه مدل بارگذاری و «کش» (Cache) شود.

نحوه کار CAG:

این روش از ساختار داخلی مدل‌های ترانسفورمر، به خصوص نحوه مدیریت Attention و استفاده از KV Cache (Key-Value Cache)، بهره می‌برد. وقتی یک مدل ترانسفورمر ورودی طولانی را پردازش می‌کند، نتایج میانی محاسبات Attention برای هر توکن ورودی (Key و Value) را در حافظه‌ای به نام KV Cache ذخیره می‌کند. این کش به مدل اجازه می‌دهد تا در هنگام تولید توکن‌های بعدی خروجی، بدون نیاز به پردازش مجدد تمام ورودی قبلی، به اطلاعات آن دسترسی داشته باشد.

فرآیند CAG به این شکل است:

  1. بارگذاری دانش در حافظه: تمام دانش مورد نیاز برای یک تعامل یا یک مجموعه از وظایف (مثلاً یک سند راهنما، یک مجموعه قوانین) در قالب یک پرامپت ورودی بسیار طولانی به مدل داده می‌شود.
  2. پردازش اولیه و ذخیره در کش: مدل این پرامپت طولانی را یک بار پردازش می‌کند. در این فرآیند، اطلاعات مربوط به این دانش در KV Cache مدل ذخیره می‌شود. (این مرحله ممکن است بسته به طول ورودی زمان‌بر باشد).
  3. دریافت پرسش کاربر و تولید پاسخ: وقتی کاربر پرسش یا دستور بعدی را مطرح می‌کند، این ورودی جدید بعد از دانش اولیه در ورودی مدل قرار داده می‌شود. مدل با استفاده از اطلاعاتی که از قبل در KV Cache ذخیره شده است (یعنی دانشی که یک بار پردازش کرده)، فوراً و با سرعت بسیار بالا پاسخ را تولید می‌کند. مدل دیگر نیازی به "خواندن مجدد" تمام دانش اولیه ندارد، بلکه می‌تواند به حافظه کش شده خود رجوع کند.

نقاط قوت CAG:

  • سرعت پاسخ‌دهی بالا: مهم‌ترین مزیت CAG است. از آنجایی که مرحله بازیابی (که شامل جستجو در پایگاه داده است) حذف می‌شود، مدل می‌تواند تقریباً فوراً پاسخ دهد.
  • یکپارچگی و تداوم کانتکس: در مکالمات چندمرحله‌ای یا وظایفی که نیاز به درک کامل یک سند واحد دارند، CAG عملکرد بهتری دارد زیرا کل دانش در حافظه مدل «فعال» است و مدل در هر مرحله از تعامل به تمام آن دسترسی دارد. این باعث می‌شود پاسخ‌ها منسجم‌تر و مرتبط‌تر با کانتکس کلی باشند.
  • سادگی در پیاده‌سازی (نسبی): نیاز به مدیریت پایگاه داده وکتوری و فرآیند پیچیده بازیابی در زمان اجرا حذف می‌شود. معماری سیستم ساده‌تر می‌شود.
  • دسترسی کامل به کانتکس: مدل تمام دانش را همزمان می‌بیند، نه فقط بخش‌هایی که الگوریتم بازیابی تشخیص داده است. این می‌تواند به مدل در درک ارتباطات ظریف بین بخش‌های مختلف دانش و انجام استدلال‌های پیچیده‌تر کمک کند.

نقاط ضعف CAG:

  • محدودیت پنجره کانتکس (Context Window): اندازه پنجره کانتکس مدل یک محدودیت جدی است. اگرچه مدل‌های جدیدتر پنجره‌های کانتکس بزرگتری دارند (مثلاً تا ۲۰۰ هزار توکن)، اما حجم دانش قابل بارگذاری همچنان محدود است و نمی‌تواند با حجم پایگاه‌های دانش عظیمی که RAG مدیریت می‌کند، رقابت کند.
  • حساسیت به نویز: چون مدل تمام دانش بارگذاری شده را همزمان می‌بیند، وجود اطلاعات نامرتبط یا متناقض در پرامپت اولیه می‌تواند به راحتی مدل را گیج کرده و کیفیت پاسخ را کاهش دهد.
  • چالش در به‌روزرسانی دانش پویا: اگر دانش مورد نظر مرتباً به‌روز می‌شود (مثلاً هر روز یا حتی هر ساعت)، نیاز به بازسازی و کش کردن مجدد تمام دانش در حافظه مدل وجود دارد که می‌تواند پرهزینه و زمان‌بر باشد. CAG برای دانش نسبتاً ایستا مناسب‌تر است.
  • هزینه محاسباتی اولیه: بارگذاری و پردازش اولیه پرامپت طولانی برای ساخت KV Cache می‌تواند پرهزینه باشد، به خصوص اگر مدل و حجم دانش بزرگ باشند. همچنین، همه APIها و پلتفرم‌ها به طور کامل از قابلیت‌های بهینه‌سازی KV Cache مانند Prefix Caching پشتیبانی نمی‌کنند.

چه زمانی از کدام استفاده کنیم؟

انتخاب بین RAG و CAG به نیازهای خاص مورد استفاده (Use Case) بستگی دارد:

از RAG استفاده کنید اگر:

  • پایگاه دانش شما بسیار بزرگ یا دائماً در حال تغییر است.
  • نیاز به قابلیت استناد دقیق به منابع دارید.
  • نیاز به مدیریت تعداد زیادی کاربر با کوئری‌های مستقل دارید.
  • محتوا بسیار پویا است (مثلاً اخبار لحظه‌ای).

از CAG استفاده کنید اگر:

  • پایگاه دانش شما کوچک تا متوسط است.
  • دانش مورد استفاده نسبتاً ایستا و کم‌تغییر است.
  • نیاز به پاسخ‌های بسیار سریع دارید.
  • نیاز به یکپارچگی و تداوم قوی در مکالمات چندمرحله‌ای دارید.
  • هدف، ساخت دستیارها یا ربات‌های چتی است که نیاز به دسترسی مداوم و سریع به یک مجموعه دانش ثابت دارند (مانند راهنمای داخلی، کاتالوگ محصول).

ترکیب RAG و CAG: قدرت واقعی در هم‌افزایی

در بسیاری از موارد، بهترین راه‌حل انتخاب یکی از این دو روش نیست، بلکه ترکیب هوشمندانه آن‌هاست. یک رویکرد هیبریدی می‌تواند نقاط قوت هر دو را به کار گیرد:

  1. از RAG برای فیلتر کردن و بازیابی یک زیرمجموعه کوچک‌تر اما بسیار مرتبط از دانش گسترده استفاده کنید.
  2. سپس، این زیرمجموعه مرتبط را با استفاده از CAG در KV Cache یک مدل با پنجره کانتکس طولانی بارگذاری کنید.

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

آینده رویکردهای دسترسی به دانش

میدان توسعه LLMها و مکانیزم‌های دسترسی آن‌ها به دانش خارجی به سرعت در حال تحول است. نوآوری‌هایی مانند:

  • رتبه‌بندی مجدد (Re-ranking) پیشرفته: الگوریتم‌های بهتر برای مرتب‌سازی و انتخاب دقیق‌ترین و مرتبط‌ترین قطعات بازیابی شده قبل از ارسال آن‌ها به مدل.
  • خلاصه‌سازی بخش‌بندی شده (Segmented Summarization): قابلیت خلاصه‌سازی خودکار اسناد طولانی به بخش‌های کوچکتر و قابل مدیریت‌تر برای بارگذاری در کش.
  • مدل‌های هیبریدی پیشرفته‌تر: معماری‌هایی که بازیابی و پردازش کانتکس را به شکلی بومی‌تر ترکیب می‌کنند.

همگی در حال بهبود کارایی و دقت هم RAG و هم CAG و به خصوص رویکردهای ترکیبی هستند. در این میان، «هنر» آماده‌سازی، ساختاردهی و فیلتر کردن دانش مورد نظر قبل از ارسال آن به مدل (چه برای بازیابی و چه برای کش کردن) نقش فزاینده‌ای در موفقیت این سیستم‌ها پیدا می‌کند.

نتیجه‌گیری

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

ArtificialBrainimage