𝗪𝗵𝘆 𝗠𝘆 𝗥𝗔𝗚 𝗔𝗽𝗽 𝗞𝗲𝗽𝘁 𝗛𝗮𝗹𝗹𝘂𝗰𝗶𝗻𝗮𝘁𝗶𝗻𝗴 𝗔𝗻𝗱 𝗛𝗼𝘄 𝗜 𝗙𝗶𝘅𝗲𝗱 𝗜𝘁

چند ماه پیش، ربات پشتیبان RAG خود را نمایش دادم. به یکی از همکاران گفت که سیاست بازگشت وجه ما ۳۰ روز است. سیاست واقعی ما ۱۴ روز است. ربات تردید نکرد. نگفت که مطمئن نیست. با اعتمادبه‌نفس کامل، پاسخی از خودش ساخت.

RAG باید توهمات (hallucinations) را کاهش دهد. تنظیمات من فقط آن‌ها را جابه‌جا می‌کرد. من هنگام عیب‌یابی این سیستم، پنج درس آمدم.

۱. استفاده از تعداد کاراکتر ثابت برای تکه‌ها (chunks) را متوقف کنید من از تکه‌های ۱۰۰۰ کاراکتری با هم‌پوشانی اندک استفاده می‌کردم. این باعث بروز مشکل شد. یک تکه اغلب قوانین ارسال را با قوانین مرجوعی ترکیب می‌کرد. مدل این بخش‌های مختلف را در قالب یک پاسخ اشتباه با هم ترکیب می‌کرد. راهکار: من به سمت تکه‌بندی معنایی (semantic chunking) رفتم. داده‌ها را بر اساس عناوین و پاراگراف‌ها تقسیم کردم. این کار باعث می‌شود اطلاعات مرتبط در کنار هم باقی بمانند.

۲. شباهت به معنای مرتبط بودن نیست بازیاب (retriever) من ۳ تکه برتر را بر اساس شباهت کسینوسی (cosine similarity) استخراج می‌کرد. یک تکه می‌تواند شبیه به سوال به نظر برسد بدون اینکه حاوی پاسخ باشد. مدل فرض می‌کند هر چیزی که در متن (context) آمده، درست است. راهکار: من یک مرحله بازرتبه‌بندی (reranking) با استفاده از یک cross-encoder اضافه کردم. همچنین شروع به ثبت امتیازهای بازیابی (retrieval scores) کردم. این کار نشان می‌دهد چه زمانی سیستم فاقد پاسخ واقعی است.

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

۴. اعمال یک آستانه بازیابی وقتی بازیابی شکست می‌خورد، مدل همچنان از دانش عمومی استفاده می‌کرد. امیدوار بودم پرامپت کار کند، اما امید داشتن یک استراتژی نیست. راهکار: من یک آستانه امتیاز سخت‌گیرانه تعیین کردم. اگر بالاترین امتیاز بازیابی خیلی پایین باشد، سیستم متوقف می‌شود. به جای اینکه اجازه دهد مدل حدس بزند، یک پیام جایگزین (fallback message) برمی‌گرداند.

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

RAG توهمات را به طور کامل متوقف نمی‌کند، بلکه آن‌ها را قابل کنترل می‌کند. ربات من هنوز همه چیز را نمی‌داند. اما حالا وقتی مطمئن نیست، آن را اعلام می‌کند. این موضوع باعث می‌شود ابزار قابل استفاده باشد.

Source: https://dev.to/pallavi_sharma_10c1a6f1da/why-my-rag-app-kept-hallucinating-and-how-i-fixed-it-3i10