هل تعلم؟ في فيلم Ragatouille ، لا يعد Rish Remy هو في الواقع راتاتويل ، ولكنه نسخة راقية من الطبق يسمى "Confit Byaldi".

Byaldi هو مشروع أخت Ragatouille Mini. إنه غلاف بسيط حول مستودع كولبالي لجعله من السهل استخدام نماذج متعددة الوسائط المتأخرة مثل الكولبالي مع واجهة برمجة تطبيقات مألوفة.
أولاً ، تحذير: هذه مكتبة قبل الإصدار ، باستخدام فهارس غير مضغوطة وتفتقر إلى أنواع أخرى من التحسينات.
حاليًا ، ندعم جميع النماذج المدعومة بمحرك الكولباليين الأساسي ، بما في ذلك نقاط تفتيش Colqwen2 الأحدث والأفضل ، مثل vidore/colqwen2-v1.0 . على نطاق واسع ، الهدف من ذلك هو لدعم جميع نماذج COLVLM.
سيتم دعم الخلفية الإضافية في التحديثات المستقبلية. نظرًا لوجود Byaldi لتسهيل اعتماد المسترجعين متعدد الوسائط ، فإننا نعتزم أيضًا إضافة دعم لنماذج مثل Visrag.
في النهاية ، سنضيف آلية فهرسة HNSW ، التجميع ، ومن يدري ، ربما كمية 2 بت؟
سيتم تحديثه مع تطور النظام الإيكولوجي متعدد الوسائط!
لتحويل PDF إلى صور برخصة ودية ، نستخدم مكتبة pdf2image . تتطلب هذه المكتبة تثبيت poppler على نظامك. من السهل جدًا تثبيت Poppler باتباع الإرشادات الموجودة على موقعه على الويب. TL ؛ DR هو:
ماكوس مع homebrew
brew install popplerديبيان/أوبونتو
sudo apt-get install -y poppler-utilsتستخدم Gemma إصدارًا حديثًا من اهتمام الفلاش. لجعل الأمور تعمل بسلاسة قدر الإمكان ، نوصي بتثبيتها بعد تثبيت المكتبة:
pip install --upgrade byaldi
pip install flash-attnيستخدم Colpali نماذج المعلمات بمليارات مليار لترميز المستندات. نوصي باستخدام وحدة معالجة الرسومات للعمليات السلسة ، على الرغم من أن وحدات معالجة الرسومات الضعيفة/القديمة جيدة تمامًا! سيعاني ترميز مجموعتك من ضعف الأداء على وحدة المعالجة المركزية أو النواب.
byaldiتم تصميم Byaldi إلى حد كبير بعد Ragatouille ، مما يعني أن كل شيء مصمم لاتخاذ أقل عدد من خطوط التعليمات البرمجية ، بحيث يمكنك البناء بسرعة كبيرة بدلاً من قضاء الوقت في معرفة كيفية إنشاء خط أنابيب استرجاع.
تحميل نموذج مع byaldi واضح للغاية:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )إذا كنت قد حصلت بالفعل على فهرس ، وترغب في تحميله مع النموذج اللازم للاستعلام عنه ، يمكنك القيام بذلك بنفس السهولة:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll look for the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_index ( "your_index_name" ) إنشاء فهرس مع byaldi بسيط ومرن. يمكنك فهرسة ملف PDF واحد ، أو ملف صورة واحد ، أو دليل يحتوي على مضاعفات من هذه . إليك كيفية إنشاء فهرس:
from byaldi import RAGMultiModalModel
# Optionally, you can specify an `index_root`, which is where it'll save the index. It defaults to ".byaldi/".
RAG = RAGMultiModalModel . from_pretrained ( "vidore/colqwen2-v1.0" )
RAG . index (
input_path = "docs/" , # The path to your documents
index_name = index_name , # The name you want to give to your index. It'll be saved at `index_root/index_name/`.
store_collection_with_index = False , # Whether the index should store the base64 encoded documents.
doc_ids = [ 0 , 1 , 2 ], # Optionally, you can specify a list of document IDs. They must be integers and match the number of documents you're passing. Otherwise, doc_ids will be automatically created.
metadata = [{ "author" : "John Doe" , "date" : "2021-01-01" }], # Optionally, you can specify a list of metadata for each document. They must be a list of dictionaries, with the same length as the number of documents you're passing.
overwrite = True # Whether to overwrite an index if it already exists. If False, it'll return None and do nothing if `index_root/index_name` exists.
) وهذا كل شيء! سيبدأ النموذج في الغزل وإنشاء الفهرس الخاص بك ، وتصدير جميع المعلومات اللازمة إلى القرص عند الانتهاء. يمكنك بعد ذلك استخدام طريقة RAGMultiModalModel.from_index("your_index_name") المقدمة أعلاه لتحميلها كلما لزم الأمر (لا تحتاج إلى القيام بذلك بشكل صحيح بعد إنشائها - تم تحميلها بالفعل في الذاكرة وعلى استعداد للذهاب!).
القرار الرئيسي الذي يجب عليك اتخاذه هنا هو ما إذا كنت تريد تعيين store_collection_with_index إلى صواب أم لا. إذا تم ضبطه على TRUE ، فسيؤدي ذلك إلى تبسيط سير العمل الخاص بك بشكل كبير: سيتم إرجاع الإصدار المصنوع من BASE64 من المستندات ذات الصلة كجزء من نتائج الاستعلام ، حتى تتمكن من تنشيطه على الفور إلى LLM. ومع ذلك ، فإنه يضيف متطلبات ذاكرة وتخزين كبيرة إلى الفهرس الخاص بك ، لذلك قد ترغب في تعيينه على خطأ (الإعداد الافتراضي) إذا كنت قصيرًا في هذه الموارد ، وإنشاء الإصدارات المشفرة BASE64 بنفسك كلما دعت الحاجة.
بمجرد إنشاء فهرس أو تحميله ، يمكنك البدء في البحث عن المستندات ذات الصلة. مرة أخرى ، إنه أمر واحد واضح ومباشر:
results = RAG . search ( query , k = 3 ) ستكون النتائج قائمة بكائنات Result ، والتي يمكنك أيضًا التعامل معها كقواميس طبيعية. كل نتيجة ستكون في هذا التنسيق:
[
{
"doc_id" : 0 ,
"page_num" : 10 ,
"score" : 12.875 ,
"metadata" : {},
"base64" : None
},
...
] page_num يتم فحصها 1 ، في حين أن DOC_IDs معقدة 0. هذا هو جعل العمل أكثر بساطة للعمل باستخدام أدوات معالجة PDF الأخرى ، حيث تكون الصفحة الأولى عمومًا الصفحة 1. page_num للصور و PDF من صفحة واحدة ستكون دائمًا 1 ، إنها مفيدة فقط لـ PDFs أطول.
إذا كنت قد اجتازت بيانات التعريف أو ترميزها مع العلامة لتخزين إصدارات BASE64 ، فسيتم ملء هذه الحقول. يتم فرز النتائج حسب النتيجة ، لذلك سيكون البند 0 من القائمة دائمًا أكثر المستندات صلة ، وما إلى ذلك ...
نظرًا لأن الفهارس في الذاكرة ، فهي صديقة للإضافة! إذا كنت بحاجة إلى تناول بعض ملفات PDF جديدة ، فما عليك سوى تحميل الفهرس الخاص بك مع from_index ، ثم اتصل على add_to_index ، مع معلمات مماثلة إلى طريقة index() :
RAG . add_to_index ( "path_to_new_docs" ,
store_collection_with_index : bool = False ,
...
)