يوفر هذا المشروع تطبيق ويب بسيط يمكّن المستخدمين من تحميل مستند PDF ، وإنشاء تضمينات المتجهات من محتواه ، ثم البحث عن المعلومات داخل المستند باستخدام استعلام نصي. تُستخدم نماذج التضمين واللغة في Openai لإنشاء تضمينات المتجهات واسترجاع المعلومات.
ابتلاع مستند PDF : يمكن للمستخدمين تحميل مستند PDF من خلال واجهة الويب لاسترجاع المعلومات.
توليد تضمينات المتجهات : يتم استخراج محتوى النص من PDF وتقسيم إلى أجزاء أصغر باستخدام Langchain. يتم إنشاء التضمينات لكل قطعة باستخدام نموذج تضمين نص Openai (على سبيل المثال ، embedding-ada-002).
تخزين قاعدة بيانات Vector : قم بتخزين التضمينات المتجهة التي تم إنشاؤها في قاعدة بيانات متجه مثل Pinecone للبحث عن التشابه.
صقل استعلامات المستخدم : يتم تحسين استعلامات المستخدم باستخدام واجهة برمجة تطبيقات Openai للدردشة لتحسين دقة البحث.
ابحث عن المعلومات : يمكن للمستخدمين إدخال استعلامات نصية للبحث عن المعلومات داخل المستند الذي تم تحميله. يسترجع النظام قطع النص ذات الصلة بناءً على تشابه المتجه مع تضمين الاستعلام.
إنشاء استجابة : بناءً على قطع النص المستردة ، والسياق (الاستعلامات والاستجابات السابقة) ، واستعلام المستخدم ، يتم إنشاء استجابة باستخدام نماذج OpenAI (GPT-4O أو GPT-4 أو GPT-3.5-TURBO). يمكن للمستخدمين تحديد نموذج OpenAI من خلال واجهة الويب. يمكن أن يؤثر اختيار النموذج على نمط الاستجابة والتفاصيل والدقة.
يسرد ملف متطلبات. إليك انهيار لكل حزمة:
Flask : إطار عمل بايثون خفيف الوزن لبناء تطبيقات الويب.
Pinecone-Client : مكتبة عميل Python الرسمية للتفاعل مع Pinecone ، قاعدة بيانات المتجه المستخدمة في التطبيق الخاص بك.
Openai : مكتبة عميل Python الرسمية لـ Openai API ، تستخدم لإنشاء تضمينات نصية والتفاعل مع نماذج لغة Openai.
PYPDF2 : مكتبة بايثون نقية لاستخراج النص من ملفات PDF.
Langchain : إطار عمل لبناء التطبيقات مع نماذج لغة كبيرة ، تستخدم في طلبك لتقسيم النص و chunking.
Numpy : حزمة للحوسبة العلمية في Python ، تستخدم للعمل مع المصفوفات متعددة الأبعاد وناقلات.
لتثبيت هذه التبعيات ، يمكنك إنشاء بيئة افتراضية Python جديدة وتشغيل الأمر التالي:
PIP تثبيت -r متطلبات. txt
للاندماج مع Openai و Pinecone ، تحتاج إلى الحصول على وتكوين مفاتيح API المعنية ، ومضيف (Pinecone) معلومات لهذه المنصات. اضبط مفاتيح API Openai و Pinecone ، ومضيف Pinecone كمتغيرات بيئة في Linux. استخدم أوامر Linux التالية لتصدير هذه المتغيرات:
Export openai_api_key = 'your-openai-api-key'
تصدير pinecone_api_key = 'your-pinecone-api-key'
تصدير pinecone_host = 'your-pinecone-host'
تأكد من أن لديك حساب Openai مع مفاتيح API صالحة. يمكنك إنشاء مفاتيح API الخاصة بك أو الحصول عليها من منصة Openai (https://platform.openai.com/) وإدارتها (https://platform.openai.com/organization/api- keys). بالإضافة إلى ذلك ، تأكد من أن حسابك يحتوي على حصة كافية للاستخدام ، حيث يتطلب هذا المثال حساب OpenAI المدفوع.
بيئة Pinecone (حساب Pinecone المجاني المستخدم https://www.pinecone.io/): 1) يتم استخدام فهرس Pinecone 2) الأبعاد: 1536 3) نوع المضيف: خادم.
يتم استخدام Centos Linux إصدار 8.5.2111 كـ Linux OS. تم اختبار Linux VM السحابة مع IP عام (اختياري) لواجهة الويب. يمكن استخدام IP المحلي أيضًا. قم بإنشاء بيئة افتراضية Python (اختياري ولكن موصى بها) لعزل تبعيات المشروع.
يوفر التطبيق واجهة ويب مصممة مع Flask ، إطار عمل Python. يمكن للمستخدمين تحميل مستند PDF ، وإدخال الاستعلامات ، واختيار نموذج لغة Openai لاستخدامه (GPT-3.5-TURBO ، أو GPT-4 ، أو GPT-4O) ، وتلقي استجابات مفصلة بناءً على المعلومات المستخرجة من مستندات PDF التي تم تحميلها.
تناول وثيقة PDF وإنشاء تضمينات ناقلات
يوفر التطبيق واجهة ويب حيث يمكن للمستخدمين تحميل مستندات PDF. عند تحميل ملف PDF ، يتم استخراج محتوى النص من المستند ويقسم إلى أجزاء أصغر باستخدام Recursivecharactertextsplitter من مكتبة Langchain. تضمن عملية الانقسام هذه أن يتم تقسيم النص إلى أجزاء يمكن التحكم فيها مع الحفاظ على السياق.
بعد ذلك ، يتم إنشاء تضمينات المتجهات لكل قطعة نصية باستخدام طراز Openai Embedding -ADA-002 من Openai. هذه التضمينات عبارة عن متجهات عالية الأبعاد تلتقط المعنى الدلالي للنص ، مما يتيح البحث الفعال في التشابه.
تخزين التضمينات المتجهات في Pinecone
يتم تخزين التضمينات المتجهات التي تم إنشاؤها ، إلى جانب قطع النص المقابلة وأرقام الصفحات ، في قاعدة بيانات ناقلات Pinecone. Pinecone هي قاعدة بيانات متجه قابلة للتطوير وفعالة مصممة لتخزين المتجهات عالية الأبعاد والاستعلام عنها.
معالجة الاستعلام
عندما يقدم المستخدم استعلامًا من خلال واجهة الويب ، يقوم التطبيق بمعالجته في الخطوات التالية:
صقل الاستعلام:
يتم إرسال استعلام المستخدم إلى نموذج لغة Openai (على سبيل المثال ، GPT-3.5-TURBO ، GPT-4 ، أو GPT-4O) لتحسين الاستعلام لتحسين الدقة البحثية.
توليد تضمين الاستعلام
يتم تحويل الاستعلام المكرر إلى ناقل تم تضمينه باستخدام نموذج Openai-Embedding -AD-ADA-002.
البحث عن التشابه:
يتم استخدام تضمين الاستعلام للبحث في قاعدة بيانات ناقل Pinecone لأكثر قطع النص متشابهة بشكل دلالي استنادًا إلى تشابه المتجه.
ملاحظة : للاستعلام عن فهرس Pinecone واسترداد النتائج العليا ، يتم استخدام الكود التالي (app.py)
#adjust وقم بتجربة قيمة TOP_K بناءً على حالة الاستخدام الخاصة بك
النتائج = pinecone_index.query (vector = padded_query_vector.toList () ، top_k = 1 ، include_metadata = true)
تحدد معلمة TOP_K عدد النتائج العليا للعودة من الاستعلام. يمكن أن يؤثر ضبط قيمة TOP_K على جودة استجابات الاستعلام. قد توفر قيمة TOP_K الأعلى نتائج أكثر شمولاً ولكنها قد تقدم أيضًا بيانات أقل صلة. على العكس ، قد تسفر قيمة TOP_K المنخفضة بشكل أكثر دقة ولكن نتائج أقل. من المهم تجربة قيم TOP_K المختلفة للعثور على التوازن الأمثل لحالة الاستخدام المحددة الخاصة بك. بالإضافة إلى ذلك ، كن على دراية بأن زيادة قيمة TOP_K ستؤثر أيضًا على التكاليف ، خاصة عند استخدام نموذج Openai المدفوع لمعالجة النتائج. تؤدي قيم TOP_K الأعلى إلى إرسال المزيد من البيانات إلى النموذج ومعالجتها ، مما قد يؤدي إلى زيادة رسوم الاستخدام.
ملاحظة : تحدد معلمة Score_threshold الحد الأدنى لدرجة الأهمية المطلوبة لنتيجة يمكن مراعاتها والتي يمكن أن تؤثر على جودة استجابة الاستعلام. لذلك ، اضبط قيمة العتبة بناءً على حالة الاستخدام والتجارب (app.py).
#ضبط قيمة العتبة بناءً على حالة الاستخدام الخاصة بك
Score_threshold = 0.65
توليد الاستجابة:
يتم دمج قطع النص ذات الصلة التي تم استردادها من قاعدة البيانات مع السياق السابق (إن وجد) واستعلام المستخدم الأصلي. ثم يتم إرسال هذه المعلومات إلى نموذج لغة Openai (نفس النموذج المستخدم لتحسين الاستعلام) لإنشاء استجابة شاملة وذات صلة بالسياق.
استجابة مدركة السياق:
يحافظ التطبيق على سياق الاستفسارات والاستجابات السابقة. يتم تمرير هذا السياق إلى نموذج لغة Openai أثناء خطوة توليد الاستجابة ، مما يضمن أن الاستجابات التي تم إنشاؤها تأخذ في الاعتبار تاريخ المحادثة وتقديم معلومات دقيقة وذات صلة بالسياق.
لتشغيل التطبيق ، اتبع هذه الخطوات:
قم بتنشيط بيئة Python الظاهرية (اختياري): (VenV) [user@host project_directory]#
قم بتشغيل البرنامج النصي App.py: Python app.py
سيبدأ التطبيق في تشغيل المنفذ 5000 ، وقد ترى إخراجًا مشابهًا مثل ما يلي:
تأكد من أن التطبيق يستمع بنشاط للاتصالات الواردة على المنفذ 5000:
netstat -aullpn | GREP -I 5000 TCP 0 0 0.0.0.0:5000 0.0.0.0:* استمع 525661/Python
http://127.0.0.1:5000/ (للوصول المحلي)
http: // VM Public IP: 5000/(للوصول عن بُعد عبر الإنترنت)
ملاحظة : إذا كنت تخطط للوصول إلى التطبيق عبر IP العام ، فتأكد من السماح بحركة المرور الواردة على المنفذ 5000 من خلال جدار الحماية في VM. سيضمن ذلك السماح بالاتصال عبر IP العام ، ويمكنك الوصول إلى واجهة الويب عن بُعد.
أيضًا ، تأكد من أن المجلد الموجود على جهاز Linux الخاص بك ، والذي سيحتوي على ملف PDF الذي تم تحميله ، لا يحتوي على ملف PDF بنفس الاسم. إذا كان الملف موجودًا بالفعل ، فسيتم الكتابة فوقه.
حدد ملف PDF وقم بتحميله باستخدام زر "التحميل".
انقر على "ملف العملية" (في هذه المرحلة ، سيتم إنشاء تضمينات Vector وتخزينها في قاعدة بيانات Pinecone).
أدخل استعلام البحث الخاص بك. حدد نماذج لغة Openai من القائمة المنسدلة.
تحقق من استجابة الاستعلام. إرسال استفسارات لاحقة.
بمجرد الانتهاء ، انقر فوق "الجلسة النهائية" (سوف يؤدي إلى تنظيف - حذف الملفات التي تم تحميلها وتضمينات المتجهات في قاعدة البيانات)
على Macine Linux ، اضغط على Ctrl+C لإغلاق التطبيق (app.py).