من یک اپلیکیشن RAG ساختم، اما وقتی از آن پرسیدم چه ماشینی دوست دارم، جواب را نمی‌دانست.

من در حال ساخت یک ابزار چت با اسناد به نام Kenning هستم. این ابزار از RAG (تولید تقویت‌شده با بازیابی) استفاده می‌کند تا به کاربران اجازه دهد درباره فایل‌های آپلود شده سوال بپرسند.

من کل خط لوله (pipeline) را از ابتدا با استفاده از موارد زیر ساختم:

  • Java 21 و Spring Boot
  • Spring AI
  • PostgreSQL به همراه pgvector
  • Ollama (در حال اجرای llama3.2:3b و nomic-embed-text)
  • Docker Compose

خط لوله به این صورت عمل می‌کند: آپلود فایل ← استخراج متن ← تکه‌تکه کردن متن (Chunking) ← تبدیل تکه‌ها به بردار (vector) ← ذخیره در pgvector ← جستجو برای تکه‌های مشابه ← ارسال تکه‌ها + سوال به مدل ← دریافت پاسخ همراه با منابع.

سیستم کار می‌کرد، اما با دو شکست متفاوت مواجه شدم. آن‌ها شبیه به هم به نظر می‌رسیدند، اما دلایلشان متفاوت بود.

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

فرضیه من: مدل 3B بسیار کوچک است. داده‌های درست را بازیابی کرد اما نتوانست با اطمینان پاسخ دهد. احتمالاً یک مدل بزرگ‌تر این مشکل را حل می‌کند.

شکست دوم: مدل چیزی پیدا نکرد. من پرسیدم: "من چه برند ماشینی دوست دارم؟" در سند ذکر شده بود که من BMW دوست دارم. اما سیستم هیچ نتیجه‌ای برنگرداند. امتیاز شباهت (similarity score) برای عبور از آستانه (threshold) من بسیار پایین بود.

فرضیه من: رقیق شدن تکه‌ها (Chunk dilution). سند آزمایشی من کوتاه بود. موضوعات مختلفی مانند Spring AI، OAuth2 و علاقه من به خودرو را در یک تکه (chunk) با هم ترکیب کرده بود. بردار مربوط به آن تکه در میان تمام آن موضوعات رقیق شده بود. یک سوال مشخص درباره خودرو در برابر یک تکه گسترده، قدرت خود را از دست داد. استراتژی بهتر برای تکه‌تکه کردن (chunking) این مشکل را حل می‌کند.

درس‌های آموخته شده:

  • مدل‌های کوچک محدودیت‌های استدلالی دارند.
  • تکه‌تکه کردن ساده (Naive chunking) بر دقت بازیابی تأثیر می‌گذارد.
  • عیب‌یابیِ "چرایی" مشکل مهم‌تر از صرفاً رفع خطا است.

معماری کار می‌کند. کند است و گاهی اشتباه می‌کند، اما چرخه کامل است.

Source: https://dev.to/mido-dev/i-built-a-rag-app-then-asked-it-what-car-i-like-it-didnt-know-583n

Optional learning community: https://t.me/GyaanSetuAi