مرحبًا بك في سلسلة RAG المتقدمة: إنشاء محادثة مع نظام المستندات الخاص بك
في هذا الفيديو الأول من سلسلتنا الجديدة حول Advanced RAG (الجيل المعزز للاسترجاع)، سوف نستكشف بنية الدردشة الأساسية مع نظام المستندات الخاص بك أو مسار RAG. سنتجاوز الأساسيات ونناقش تقنيات أكثر تقدمًا لتعزيز خط الأنابيب.
أساسيات خط أنابيب RAG
لنبدأ بأساسيات خط أنابيب RAG. تتكون البنية من المكونات التالية:
- أداة تحميل المستندات: يقوم هذا المكون بتحميل المستندات، مثل ملفات PDF، التي سيتم استخدامها في نظام الدردشة.
- التقطيع: يتم تقسيم المستندات إلى أجزاء أصغر لتناسب نافذة السياق الخاصة بنموذج اللغة (LLM).
- التضمينات: يتم حساب التضمينات لكل قطعة، ثم يتم تخزينها في مخزن متجه لإنشاء فهرس دلالي.
- الاسترجاع: عندما يطرح المستخدم سؤالاً، يقوم النظام بحساب التضمينات للاستعلام وإجراء بحث دلالي في قاعدة المعرفة (مخزن المتجهات) لاسترداد المستندات أو الأجزاء ذات الصلة.
- إعادة الترتيب: تتم إعادة ترتيب المستندات أو الأجزاء المستردة بناءً على مدى ملاءمتها.
- الإنشاء: يتم إدخال السؤال والسياق (المستندات أو الأجزاء المعاد ترتيبها) في LLM لإنشاء الإجابات.
هذه نظرة عامة أساسية على كيفية عمل خط أنابيب RAG. إذا كنت مبتدئًا تمامًا، فلا تقلق! لدينا سلسلة من مقاطع الفيديو حول إنشاء خطوط أنابيب RAG التي يمكنك مشاهدتها.
تقديم البحث المختلط
في هذه السلسلة الجديدة، سنركز على تحسين خط أنابيب RAG الأساسي. الموضوع الأول الذي سنستكشفه هو البحث المختلط.
يتضمن البحث المختلط إضافة مكونين إلى مسار RAG:
- البحث المستند إلى الكلمات الرئيسية: بالإضافة إلى البحث الدلالي باستخدام التضمينات، نقوم أيضًا بإجراء بحث تقليدي يعتمد على الكلمات الرئيسية على الأجزاء المتاحة.
- المسترد المجمع: بدلاً من استخدام المسترد المعتمد على التضمين فقط، نقوم بدمج النتائج من كل من البحث المعتمد على الكلمة الرئيسية والمسترد المعتمد على التضمين. تتيح لنا مجموعة المسترد هذه تعيين أوزان مختلفة لكل طريقة بحث، مما يجعلها أكثر قوة.
الآن بعد أن أصبح لدينا نظرة عامة على البنية وإضافة البحث المختلط، فلنلقي نظرة على مثال التعليمات البرمجية.
مثال الكود
قبل أن نتعمق في التعليمات البرمجية، تأكد من تثبيت الحزم الضرورية. سوف نستخدم Rank_bm25 للبحث المختلط unstructuredIO لقراءة ملفات PDF، و com.chromaDB لإنشاء متجر المتجهات. إذا كنت تعمل مع المستندات الممسوحة ضوئيًا، فيوصى بحزم إضافية للتفاعل مع المستندات الممسوحة ضوئيًا وإجراء التعرف البصري على الأحرف (OCR).
بمجرد تثبيت الحزم، يمكننا تحميلها في الكود الخاص بنا. هنا مثال:
استيراد rank_bm25 استيراد غير منظم IO استيراد chromaDB من lchaintools استيراد ChatPromptTemplate و OutputParser و RunnablePassThrough من lchaintools استيراد EmbeddingModelAPI و LLMModelAPI
في هذا المثال، نستخدم أحدث إصدار من LChain. نقوم باستيراد الحزم والوحدات اللازمة لخط أنابيب RAG الخاص بنا، بما في ذلك قالب مطالبة الدردشة، ومحلل الإخراج، والتمرير القابل للتشغيل، وواجهة برمجة تطبيقات نموذج التضمين، وواجهة برمجة تطبيقات نموذج LLM.
بعد ذلك، نحتاج إلى تحميل ملف PDF وتحويله إلى أجزاء. هنا مثال:
pdf_loader = unstructuredIO.PDFLoader() docs = pdf_loader.load_file('data/example.pdf')chunk_size = 800 تداخل = 100 مقسم = unstructuredIO.RecursiveCharTextSplitter(chunk_size,تداخل) قطع = Splitter.process(docs)
في مقتطف الكود هذا، نستخدم أداة تحميل PDF لتحميل ملف PDF. نقوم بعد ذلك بتحديد حجم القطعة والتداخل لتقسيم المستندات إلى أجزاء. يتم استخدام مقسم نص الأحرف العودية لإنشاء القطع.
الآن، دعنا ننتقل إلى إنشاء التضمينات ومخزن المتجهات:
embedding_model = EmbeddingModelAPI ('hugging_face_token') Vector_store = chromaDB.VectorStore (embedding_model) Vector_store.create_vector_store (قطع)
في هذا المثال، قمنا بإنشاء نموذج التضمين باستخدام Hugging Face API. نستخدم بعد ذلك نموذج التضمين والأجزاء لإنشاء مخزن المتجهات.
بعد ذلك، قمنا بإعداد أدوات الاسترجاع لكل من البحث المعتمد على التضمين والبحث المعتمد على الكلمات الرئيسية:
embedding_retriever = Vector_store.create_retriever(num_chunks=3) Keyword_retriever = rank_bm25.BM25Retriever(قطع، num_chunks=3) ensemble_retriever = rank_bm25.EnsembleRetriever([embedding_retriever, key_retriever], [0.7, 0.3])
في مقتطف التعليمات البرمجية هذا، نقوم بإنشاء المستردات لكل من البحث المعتمد على التضمين والبحث المعتمد على الكلمات الرئيسية. تجمع مجموعة المستردات النتائج من كلا المستردين، مع تخصيص أوزان مختلفة لكل منهما.
وأخيرا، قمنا بإعداد نموذج LLM والقالب الفوري:
llm_model = LLMModelAPI('hugging_face_token') Prompt_template = ChatPromptTemplate( system_prompt="أنت مساعد ذكاء اصطناعي مفيد يتبع التعليمات بشكل جيد للغاية. استخدم السياق التالي للإجابة على سؤال المستخدم:"، user_prompt="ما هو ضبط التعليمات؟"، Assistant_prompt =""، ) Output_parser = OutputParser() chat_template = llm_model.create_chat_template( Prompt_template, Output_parser, Retriever=ensemble_retriever, )
في مقتطف الكود هذا، نقوم بإنشاء نموذج LLM باستخدام Hugging Face API. نقوم بعد ذلك بإعداد قالب المطالبة للدردشة، بما في ذلك مطالبة النظام ومطالبة المستخدم ومطالبة المساعد. يتم استخدام محلل الإخراج لتحليل استجابة النموذج.
بعد أن تم إعداد كل شيء، يمكننا الآن تشغيل الدردشة:
user_input = "ما هو ضبط التعليمات؟" الاستجابة = chat_template.invoc(user_input)
في هذا المثال، نقدم مدخلات المستخدم ونستدعي يستحضر وظيفة في قالب الدردشة للحصول على استجابة النموذج.
خاتمة
في هذا الفيديو، اكتشفنا بنية خط أنابيب RAG الأساسي وقدمنا مفهوم البحث المختلط. لقد قدمنا أيضًا مثالاً للتعليمات البرمجية حول كيفية تنفيذ البحث المختلط باستخدام مكتبة LChain. ومن خلال الجمع بين البحث المعتمد على الكلمات الرئيسية والبحث المعتمد على التضمين، يمكننا تحسين أداء نظام الدردشة وتقديم استجابات أكثر دقة.
إذا وجدت هذا الفيديو مفيدًا، فتأكد من الاشتراك في قناتنا لمزيد من مقاطع الفيديو في هذه السلسلة. إذا كنت بحاجة إلى مساعدة في مشاريعك الخاصة، فنحن نقدم لك خدمات استشارية. تحقق من الروابط في الوصف لمزيد من المعلومات.
شكرا لكم على المشاهدة، ونراكم في الفيديو التالي!




