81 lines
5.9 KiB
Markdown
81 lines
5.9 KiB
Markdown
Markdown
|
|
|
|
# **توضیح جامع سیستم RAG مدولار**
|
|
|
|
## **معرفی**
|
|
|
|
این سیستم RAG (Retrieval Augmented Generation) مدولار برای بازیابی اطلاعات از اسناد PDF و وب طراحی شده است. سیستم ابتدا در اسناد موجود جستجو میکند و در صورت عدم یافتن پاسخ، به صورت خودکار وب را برای یافتن اطلاعات مرتبط خزش میکند.
|
|
|
|
## **ویژگیهای اصلی**
|
|
|
|
* **بازیابی دو مرحلهای:**
|
|
* ابتدا در اسناد PDF بارگذاری شده جستجو میکند.
|
|
* در صورت عدم یافتن پاسخ در اسناد، به صورت خودکار وب را خزش میکند.
|
|
* **ذخیرهسازی خودکار:**
|
|
* تمام اسناد و نتایج جستجوی وب در مسیر نسبی `./rag_data` ذخیره میشوند.
|
|
* اسناد به فرمت `pickle` و نتایج وب به فرمت `JSON` ذخیره میگردند.
|
|
* **جستجوی کلیدواژهای:**
|
|
* از الگوریتم `BM25` برای یافتن مرتبطترین اسناد استفاده میکند.
|
|
* بهترین ۳ سند مرتبط را بازیابی میکند.
|
|
* **خزش وب پیشرفته:**
|
|
* از موتور جستجوی DuckDuckGo استفاده میکند.
|
|
* خزش بازگشتی (Recursive) با قابلیت دنبال کردن لینکها انجام میدهد.
|
|
* پارامترهای عمق خزش، تعداد لینکها و تعداد پاراگرافها قابل تنظیم هستند.
|
|
* **پشتیبانی از زبان فارسی:**
|
|
* تمام پیامهای خطا و خروجیها به زبان فارسی نمایش داده میشوند.
|
|
|
|
## **نحوه استفاده**
|
|
|
|
برای استفاده از سیستم، کافی است تابع `get_context` را با پرسش خود فراخوانی کنید:
|
|
|
|
```python
|
|
result = get_context("شاه عباس که بود؟")
|
|
این تابع یک دیکشنری (Dictionary) با ساختار زیر برمیگرداند:
|
|
|
|
Python
|
|
|
|
{
|
|
"has_context": True, # آیا اطلاعاتی یافت شده است یا خیر
|
|
"context": "متن مرتبط با پرسش شما...", # متن بازیابی شده
|
|
"source": "documents" یا "web", # منبع اطلاعات (اسناد داخلی یا وب)
|
|
"sources": ["url1", "url2", ...], # فهرست منابع (فقط در صورت استفاده از نتایج وب)
|
|
"language": "fa" # زبان پاسخ (همیشه فارسی)
|
|
}
|
|
پارامترهای قابل تنظیم
|
|
میتوانید پارامترهای مربوط به خزش وب را هنگام فراخوانی تابع get_context به صورت زیر تنظیم کنید:
|
|
|
|
Python
|
|
|
|
result = get_context("شاه عباس که بود؟", crawl_params={
|
|
'max_depth': 3, # حداکثر عمق خزش (تعداد لینکهای دنبال شده)
|
|
'max_links_per_page': 10, # حداکثر تعداد لینکهای استخراج شده از هر صفحه
|
|
'max_paragraphs': 8, # حداکثر تعداد پاراگرافهای استخراج شده از هر صفحه
|
|
'num_search_results': 15 # تعداد نتایج اولیه جستجو از DuckDuckGo
|
|
})
|
|
ساختار فایلها
|
|
سیستم از ساختار پوشه زیر برای ذخیرهسازی دادهها استفاده میکند:
|
|
|
|
./rag_data/
|
|
├── documents/ # پوشه اسناد PDF بارگذاری شده
|
|
│ └── docs.pkl # فایل ذخیرهسازی اسناد پردازش شده
|
|
└── web_results/ # پوشه نتایج خزش وب
|
|
└── web.json # فایل ذخیرهسازی نتایج وب
|
|
توضیح توابع اصلی
|
|
load_pdf: بارگذاری، پردازش و تقسیمبندی محتوای فایلهای PDF.
|
|
search_duckduckgo: انجام جستجو در موتور جستجوی DuckDuckGo.
|
|
crawl_page: استخراج محتوای متنی و لینکهای موجود در یک صفحه وب.
|
|
crawl_web: ترکیب جستجو و خزش صفحات وب برای یافتن اطلاعات مرتبط.
|
|
build_retriever: ساخت و آمادهسازی بازیاب (Retriever) بر اساس الگوریتم BM25 برای جستجوی کلیدواژهای در اسناد.
|
|
get_relevant_documents: یافتن مرتبطترین اسناد موجود با پرسش کاربر.
|
|
extract_context_from_documents: استخراج متن مرتبط با پرسش از اسناد یافتشده.
|
|
extract_context_from_web: استخراج متن مرتبط با پرسش از نتایج خزش وب.
|
|
get_context: تابع اصلی و رابط کاربری سیستم که فرآیند جستجو در اسناد و یا خزش وب را مدیریت کرده و نتیجه نهایی را برمیگرداند.
|
|
نکات مهم
|
|
برای افزودن اسناد PDF جدید به سیستم، از تابع load_pdf استفاده کنید:
|
|
Python
|
|
|
|
rag = ModularRAG()
|
|
rag.load_pdf("path/to/your/document.pdf")
|
|
سیستم به صورت خودکار اسناد پردازششده و نتایج وب را ذخیره و در اجراهای بعدی مجدداً بارگذاری میکند تا از پردازش تکراری جلوگیری شود.
|
|
این سیستم تنها وظیفه بازیابی متن مرتبط را بر عهده دارد و برای تولید پاسخ نهایی نیازی به فراخوانی مستقیم یک مدل زبانی بزرگ (LLM) توسط کاربر ندارد (هرچند خروجی آن میتواند به عنوان ورودی به LLM داده شود).
|
|
برای استفاده از این سیستم در پروژههای دیگر، کافی است فایل پایتون مربوطه را وارد (import) کرده و تابع get_context را فراخوانی نمایید. |