تصور کنید دستیاری دارید که وقتی از او درباره یک جدول پیچیده در صفحه ۴۰ یک گزارش مالی سؤال میکنید، بهجای حدس زدن، دقیقاً همان سلول از جدول را میبیند و تحلیل میکند. این همان تفاوت میان یک سیستم بازیابی ساده و یک خط لوله تولید بازیابیافزا (RAG) — شبیه دانشآموزی که قبل از جواب دادن، اول کتاب درسی را باز میکند و از آن نقل میآورد — چندوجهی است. این رویکرد در واقع تکامل همان مفهوم پایه است که در تحلیل ما درباره راهکارهای RAG برای توقف توهمات هوش مصنوعی با اتصال به دادههای خارجی به آن پرداختیم.
به نقل از آموزش منتشرشده در هفته جاری توسط Marktechpost، فلسفه مرکزی RAG-Anything این است: «یک سند، لیستی ساختاریافته از بلوکهای چندوجهی است، نه یک رشته متنی تخت». این دیدگاه باعث میشود مدل بتواند شواهد را چه در قالب متن، چه در جداول داده و چه در فرمولهای ریاضی پیچیده، با دقت مکانیابی کند. این رویکرد به توسعهدهندگان کمک میکند تا بر مانع بزرگی که اکثر آنها هنگام ساخت سیستمهای بازیابی برای درک چیدمان (Layout) فایلهای PDF با آن مواجه میشوند، غلبه کنند.
بسیاری از خط لولههای استاندارد RAG با عناصر غیرمتنی مشکل دارند؛ آنها یا تصاویر را نادیده میگیرند یا جداول را به رشتههای متنی بیمعنی تبدیل میکنند که غیرقابل استفاده هستند. همانطور که در تحلیل قبلی ما دربارهی بهینهسازی مدلهای بازمتن اشاره کردیم، این شکاف به این دلیل است که مدلهای بردار معنایی (Embedding) — مثل کارت معرفی عددی برای هر واژه که میگوید این کلمه «همسایهی» چه کلمات دیگری است — برای متن طراحی شدهاند، نه دادههای ساختاری. با این حال، با نمایهسازی (Indexing) مودالیتههای خاص — مانند LaTeX برای معادلات و مارکداون برای جداول — توسعهدهندگان میتوانند یکپارچگی منطق اصلی سند را حفظ کنند.
تنظیمات فنی و محیط عملیاتی
برای پیادهسازی این جریان کاری، از محیط Google Colab استفاده شده است. طبق مستندات این آموزش، فرآیند نصب برای اطمینان از پایداری وابستگیها، بهویژه در مورد کتابخانههای پردازش تصویر، بسیار دقیق است. وابستگیهای کلیدی مورد نیاز شامل raganything[image,text]، openai>=1.0.0، python-dotenv، reportlab، pandas، matplotlib و tabulate است.
به دلیل تداخلات نسخهها، این آموزش بهطور صریح دستور نصب مجدد pillow==11.3.0 را میدهد و ماژول PIL را از حافظه موقت سیستم (Cache) پاک میکند تا از خطاهای زمان اجرا (Runtime Errors) جلوگیری شود. همچنین، محیط از یک تابع کمکی به نام run_shell برای اجرای دستوراتی مانند pip install و مدیریت تمیز عملیات شل استفاده میکند.
پیکربندی دایرکتوری و زمان اجرا
محیط عملیاتی در یک ساختار دایرکتوری مشخص تحت مسیر /content/raganything_advanced_tutorial سازماندهی شده است که شامل پوشههای اختصاصی برای داراییها، خروجیها، لاگها و rag_storage برای سیستم بازیابی است. بهطور دقیقتر، دایرکتوریها عبارتند از:
BASE_DIR: پوشه ریشه برای پروژه.ASSET_DIR: برای ذخیره تصاویر و فایلهای PDF.OUTPUT_DIR: برای ذخیره نتایج تولید شده.WORKING_DIR: ناحیهrag_storageبرای ایندکس.LOG_DIR: برای لاگهای سیستم.
متغیرهای زمان اجرا برای مدیریت عملکرد و هزینه بهدقت تنظیم شدهاند. سیستم با CHUNK_SIZE (اندازه تکه) ۹۰۰ و CHUNK_OVERLAP_SIZE (اندازه همپوشانی) ۱۲۰ پیکربندی شده است. برای جلوگیری از اتمام زمان پاسخگویی API (Timeout)، مقدار TIMEOUT روی ۲۴۰ تنظیم شده و MAX_ASYNC برای محدود کردن درخواستهای همزمان به ۲ کاهش یافته است. سایر تنظیمات محیطی شامل SUMMARY_LANGUAGE که روی "English" تنظیم شده و ENABLE_LLM_CACHE که برای اطمینان از پردازش تازه در طول آموزش روی "false" قرار گرفته است، میباشد.
ادغام امن API
این آموزش یک روش امن برای مدیریت اعتبارنامهها از طریق ورودی getpass.getpass پیاده میکند تا کلید API OpenAI هنگام ورود پنهان بماند. یک تابع به نام clean_api_key برای پاکسازی ورودی استفاده میشود که پیشوندهای "Bearer"، علامتهای نقلقول، بکتیکها و فضاهای خالی را حذف میکند. این تابع بهطور خاص روی حذف فضاهای خالی و مدیریت رمزگذاری ASCII تمرکز دارد تا اطمینان حاصل شود که کلید پیش از استفاده کاملاً خالص است.
پیش از ورود به جریان کاری RAG، سیستم دو تست حیاتی برای تأیید API انجام میدهد:
۱. تست Chat API: سیستم یک پیام به LLM میفرستد و از آن میخواهد دقیقاً پاسخ "ok" را بدهد تا اتصال تأیید شود. این کار دسترسی به مدل gpt-4o-mini را تایید میکند.
۲. تست Embedding API: سیستم یک بردار برای رشته "RAG-Anything embedding test" تولید کرده و طول بردار حاصل را با استفاده از مدل text-embedding-3-small بررسی میکند.
معماری فنی و ساختار دادهها
معماری فنی این سیستم بر پایه فرمت content_list برای سازماندهی دادهها است. بهجای پارس کردن خام، سیستم بهطور صریح برای هر تکه داده، نوع آن را تعریف میکند:
- بلوکهای متنی: نثر استاندارد همراه با شاخصهای صفحه. برای مثال، یک بلوک مقدماتی در صفحه ۰، هدف پاسخ به سؤالاتی را تعریف میکند که شواهد آنها در مودالیتههای مختلف پراکنده شده است.
- بلوکهای جدولی: جداول با فرمت مارکداون (Markdown) که دارای عنوان (Caption) و پانوشت هستند. این بلوکها دادههای ساختاریافته را حفظ میکنند؛ مثلاً جدولی برای عملکرد ماهانه که دقت هیبریدی و حجم پرسوجوها را ردیابی میکند. در این آموزش، از یک DataFrame در
pandasبرای تولید این جدول مارکداون استفاده شده است. - بلوکهای معادله: رشتههای LaTeX که به متنهای توصیفی متصل شدهاند تا بازیابی آنها برای سیستم سادهتر شود. یک مثال، معادله امتیازدهی چندوجهی وزنی است: $Score(q,d)=\alpha \cdot Sim_{text}(q,d)+\beta \cdot Sim_{graph}(q,d)+\gamma \cdot Sim_{visual}(q,d)$. در اینجا $\alpha$ برای متن، $\beta$ برای گراف و $\gamma$ برای شباهت بصری تعریف شده است.
- بلوکهای تصویری: مسیرهای محلی به فایلهای تصویر (مانند
raganything_quality_trend.png) که همراه با شرح و پانوشت برای قابلیت ردیابی جفت شدهاند. این تصاویر با استفاده ازmatplotlibتولید شده و با کیفیت ۱۸۰ DPI ذخیره شدهاند.
برای قدرت بخشیدن به این منطق، آموزش از gpt-4o-mini OpenAI برای هر دو وظیفه چت و بینایی استفاده میکند. لایه برداری (Embedding) از مدل text-embedding-3-small با ابعاد ۱۵۳۶ استفاده میکند. این ترکیب تضمین میکند که سیستم بتواند هم متادیتا را «بخواند» و هم نمودارهای تولید شده را در طول فرآیند بازیابی «ببیند».
سازوکارهای توابع مدل
این معماری بر سه تابع ناهمگام (Asynchronous) اصلی متکی است تا شکاف بین دادههای خام و پاسخهای LLM را پر کند:
- تابع مدل LLM (
llm_model_func): این تابع اعلانهای سیستم (System Prompts) و تاریخچه چت را مدیریت میکند. این تابع از پارامترهایی مانندtemperature(دما)،top_p،max_tokensوresponse_formatبرای کنترل خروجی مدل GPT-4o-mini پشتیبانی میکند. این تابع لیستی از پیامها را میسازد که با اعلان سیستم شروع شده، با تاریخچه ادامه مییابد و با اعلان کاربر پایان مییابد. - تابع مدل بینایی (
vision_model_func): این تابع ورودیهای چندوجهی را پردازش میکند. از استراتژی کدگذاری base64 برای ارسال دادههای تصویر به مدل بینایی استفاده میکند تا مدل بتواند پیکسلها را در کنار اعلانهای متنی تحلیل کند. این تابع بهطور خاص اعلان کاربر وimage_url(به صورت رشته داده base64) را در ساختار پیامهای GPT-4o-mini قرار میدهد. - تابع برداری (
openai_embedding_func): این تابع متن را به بردار تبدیل میکند. این بخش درEmbeddingFuncمربوط به LightRAG باmax_token_sizeبرابر ۸۱۹۲ بستهبندی شده است که به RAG-Anything اجازه میدهد جستجوهای معنایی کارآمدی انجام دهد.
مقایسه حالتهای بازیابی
این خط لوله چهار حالت متمایز برای پرسوجو (Query) پشتیبانی میکند تا نیازهای اطلاعاتی مختلف را پوشش دهد:
۱. Silly/Naive: یک خط مبنای (Baseline) ساده برای بازیابی اولیه با استفاده از تطبیق معنایی استاندارد.
۲. Local: بهینهشده برای جستوجوی موجودیتهای خاص و حقایق جزئی که در تکههای (Chunks) خاص یافت میشوند.
۳. Global: طراحی شده برای شناسایی تمهای گستردهتر و خلاصههای کلی سند در کل مجموعه داده.
٤. Hybrid: پیشرفتهترین حالت که شباهت معنایی را با ناوبری روابط مبتنی بر گراف ترکیب میکند تا قطعات پراکنده شواهد را به هم پیوند دهد.
در مورد تست مصنوعی (Synthetic) ارائه شده در راهنما، حالت بازیابی ترکیبی (Hybrid) یک صعود واضح در دقت نشان داد. گزارش مصنوعی یک دوره شش ماهه (ژانویه تا ژوئن) را شبیهسازی کرد که در آن معیارهای عملکرد از ۰.۷۱ در ژانویه به ۰.۹۱ تا ژوئن افزایش یافت. بهطور همزمان، میانگین تأخیر (Latency) از ۹۸۰ میلیثانیه به ۷۳۰ میلیثانیه کاهش یافت. این موضوع ثابت میکند که سیستمهای ترکیبی بهتر میتوانند شواهدی را که در مودالیتههای مختلف پخش شدهاند، پیدا و تحلیل کنند. این رویکرد هوشمندانه به مدیریت تکههای داده شباهت دارد که در بررسی تکهبندی عاملمحور برای حذف توهمات به تحلیل دینامیک آن پرداختیم.
پیادهسازی پرسوجوهای چندوجهی
سیستم اجازه پرسوجوهای چندوجهی «صریح» را میدهد، جایی که کاربر یک جدول یا معادله خاص را در زمان پرسش ارائه میدهد. این کار توسط تابع aquery_with_multimodal مدیریت میشود. بهجای تکیه صرف به ایندکس، کاربر میتواند محتوای چندوجهی جاری را تزریق کند تا مدل روی آن استدلال کند.
نمونههایی از این پرسوجوهای با استدلال بالا عبارتند از:
- پرسوجوهای آگاه به جدول: درخواست از مدل برای شناسایی ماهی که بیشترین دقت را (بر اساس یک جدول مارکداون ارائه شده) دارد و توضیح اینکه آیا این روند از یک نتیجهگیری خاص پشتیبانی میکند یا خیر.
- پرسوجوهای آگاه به معادله: درخواست توضیح در مورد اینکه چگونه یک معادله امتیازدهی (با استفاده از ضرایب آلفا، بتا و گاما) بر بازیابی اثر میگذارد، زمانی که شواهد متنی، گرافیکی و بصری همگی مورد نیاز باشند.
- پرسوجوهای ترکیبی: مجبور کردن مدل به متصل کردن یک جدول، یک معادله و نتیجهگیری سند در یک توضیح منسجم واحد درباره کاربرد بازیابی هیبریدی.
پردازش پیشرفته سند و پارس کردن
برای کسانی که نیاز به جذب (Ingestion) کاملاً خودکار دارند، این آموزش مسیرهای اختیاری با استفاده از پارسرهای MinerU، Docling و PaddleOCR را ذکر میکند. با تنظیم RUN_FULL_DOCUMENT_PARSE = True کاربران میتوانند process_document_complete را تست کنند تا تبدیل PDFهای خام به فرمت ساختاریافته content_list را از طریق پارسر mineru خودکار کنند. این مرحلهی حیاتی از تبدیل دادههای خام به ساختارمند، یادآور ۱۵ گام کلیدی در پردازش دادههاست که از شکست سامانههای RAG جلوگیری میکند.
جزئیات ساخت گزارش مصنوعی
این آموزش نشان میدهد که چگونه میتوان با استفاده از کتابخانه reportlab یک PDF فیزیکی ایجاد کرد تا به عنوان منبع حقیقت (Ground-truth) عمل کند. این سند با چندین جزء به دقت ساخته شده است:
- سربرگ و مقدمه: عنوانی با نام "Synthetic Multimodal RAG Evaluation Report" با این فرضیه که بازیابی هیبریدی کیفیت را افزایش میدهد وقتی شواهد در مودالیتههای مختلف باشند.
- جدول ساختاریافته (جدول ۱): با عنوان "Monthly system measurements" که حجم پرسوجو (۱۲۰۰ تا ۴۱۰۰)، دقت (۰.۷۱ تا ۰.۹۱) و تأخیر (۹۸۰ میلیثانیه تا ۷۳۰ میلیثانیه) را نمایش میدهد.
- منطق ریاضی (معادله ۱): یک فرمول LaTeX برای "Weighted multimodal score" که برای تست بازیابی بر اساس منطق امتیازدهی (به جای نثر ساده) استفاده میشود.
- شواهد بصری: یک نمودار خطی تولید شده با
matplotlibکه افزایش استفاده و کاهش تأخیر را نشان میدهد. این نمودار شامل یک یادداشت خاص است: "Synthetic figure: usage rises while latency falls". - یافتههای تفسیری: یک لیست گلولهای (Bulleted list) که بیان میکند بازیابی هیبریدی، شباهت معنایی را با ناوبری روابط گراف ترکیب میکند و بر اهمیت حفظ شاخصهای صفحه و کپشنها برای قابلیت ردیابی تأکید میکند.
این تغییر معماری، صنعت را از «تکهبندی کورکورانه» متن دور میکند. با حفظ رابطه بین یک تصویر، کپشن آن و متن اطراف، سیستم یک نقشه با دقت بالا (High-fidelity) از سند ایجاد میکند. این کار از «توهم» (Hallucination) رایجی جلوگیری میکند که در آن مدل یک عدد را درست شناسایی میکند اما آن را به ستون اشتباه جدول نسبت میدهد.
برای توسعهدهندگان، این به معنای توانایی ساخت دستیارهای هوش مصنوعی است که واقعاً میتوانند دفترچههای راهنمای فنی، گزارشهای مالی و مقالات علمی را بدون از دست دادن بافت (Context) حیاتی نهفته در عناصر بصری، «بخوانند».
برای پیادهسازی این سیستم در حال حاضر، میتوانید RAGAnythingConfig را در محیط Colab پیکرهبندی کرده و گزینههای enable_image_processing (پردازش تصویر)، enable_table_processing (پردازش جدول) و enable_equation_processing (پردازش معادله) را فعال کنید تا نمایهسازی داراییهای چندوجهی ساختاریافته را آغاز کنید.
گام بعدی شما
- اگر با اسنادی سروکار دارید که جداول و فرمولهای زیادی دارند، به جای تکهبندی ساده، از ساختار بلوکی (Block-based) استفاده کنید.
- کتابخانههای MinerU یا Docling را برای تبدیل PDFها به مارکداون ساختاریافته تست کنید.
- برای کاهش هزینهها در استقرار واقعی، ترکیب gpt-4o-mini را برای استخراج ویژگیها و یک مدل بزرگتر را برای پاسخ نهایی به کار ببرید.
اما برای اینکه بدانید این دادههای ساختاریافته چگونه در پایگاههای داده برداری ذخیره میشوند، به تحلیل ما دربارهی بهینهسازی Indexing مراجعه کنید.




گفتگو