هذا هو مكون المشروع البحثي الذي تم تطويره تحت إشراف الدكتور زاكاري إيفيس. الهدف الأولي هو تطوير طبقة رسم بياني أعلى قاعدة بيانات Pennsieve وتمكين التعلم الآلي من خلال استخراج البيانات الفعالة للبيانات الطبية من تنسيقات الملفات المعقدة ومتعددة الاستخدامات. يتيح هذا المكون التفاعل اللغوي الطبيعي مع قاعدة البيانات.
ملاحظة : تم تنفيذ جميع الطرق على الرسم البياني الأساسي المبني على Neo4J باستخدام مستودع آخر سيتم ربطه بمجرد أن يكون علنيًا. هذا المشروع جاهز لاستخدامه خارج المربع ، ومع ذلك ، فإن الرسم البياني الأساسي الذي تم ملؤه لن يحصل على أي نتائج.
__init__.py : تهيئة حزمة التطبيق.config.py : معالجة التكوين ومتغيرات البيئة.database.py : يدير اتصال قاعدة بيانات Neo4J.setup_neo4j_graph() بإرجاع رسم بياني neo4j الذي تم تكوينه بعنوان URL واسم المستخدم وكلمة المرور المقدمة في ملف .env .setup_neo4j_graph() إرجاع غلاف قاعدة بيانات langchain neo4j. الطرق المهمة المستخدمة: query() و refresh_schema() . Langchain Neo4Jgraph Documentationmain.py : نقطة دخول التطبيق. تمرير استعلام المستخدم واسترداد النتيجة عن طريق الاتصال run_query(user_query: str) من qa_chain.py . إنه يرفع جميع التعقيدات ويوفر واجهة بسيطة للتفاعل مع النظام.dataguide.py : يستخرج مسارات dataguide من قاعدة البيانات وتنسيقها في مسارات cypher.extract_dataguide_paths(graph: Neo4jGraph) : يستخرج مسارات dataguide من الجذر إلى الورقة باستخدام استعلام cypher.format_paths_for_llm(results: List[Dict[str, Any]]) : نتائج التنسيقات من extract_dataguide_paths في مسارات cypher صالحة للاستعلامات المطابقة.test.py : يختبر الاتصال برسم الرسم البياني neo4j ، واستخراج مسارات dataguide ، وتنسيقها. يخرج الوقت المستغرق لكل جزء.prompt_generator.py : هذه الوحدة مسؤولة عن إنشاء نظام langchain والدمج فيه والمطالبات البشرية في langchain.prompts.ChatPromptTemplate . إنه جزء حاسم من المشروع لأنه يحدد كيفية تنظيم المطالبات واستخدامها في إطار Langchain.get_cypher_prompt_template() : تقوم هذه الطريقة بإرجاع مثيل ChatPromptTemplate الذي تم إنشاؤه في هذا الملف. فهو يجمع بين النظام والمطالبات البشرية في قالب واحد يمكن استخدامه لإنشاء استعلامات Cypher من GraphCypherQAChain في qa_chain.py .input_variables ، والتي تحدد المتغيرات التي سيتم تضمينها في المطالبة ، template ، الذي يحدد نص المطالبة.prompt ، والذي يحدد نص رسالة النظام.prompt ، والذي يحدد نص الرسالة البشرية.from_messages() ، والتي تأخذ قائمة قوالب الرسائل وتجمعها في موجه الدردشة.qa_chain.py : يحدد وظيفة run_query(user_query: str) ، التي تدمج جميع مكونات المشروع وتشغيل GraphCypherQAChain على استعلام المستخدم.ChatOpenAI بـ Azurechatopenai إذا لزم الأمر.__init__.py : تهيئة حزمة التطبيق.generate_descriptions.py : يحدد موجه النظام لإنشاء أوصاف من LLMs لمسارات cypher.generate_path_descriptions(all_paths: List[str]) : إنشاء أوصاف للمسارات المحددة باستخدام LLM. يخرج قائمة الأوصاف.generate_embedding(path_description: str) : ينشئ التضمينات لوصف المسار المحدد باستخدام API Openai Operdings.random_path_generator.py : يوفر طرقًا لإنشاء مسارات عشوائية من قاعدة البيانات وتنسيقها في مسارات cypher.vectorDB_setup.py : يوفر طرقًا لبدء حاوية Milvus ، والتواصل معها ، وتحديد مخطط التجميع ، وإنشاء تجميع ، وإدراج البيانات ، وإجراء عمليات البحث عن التشابه في المتجهات.main.py : وظائف الغلاف التي تجمع بين جميع الوظائف من هذا الدليل. على سبيل المثال ، يتم استخدام get_similar_paths_from_milvus في app/qa_chain.py لإجراء بحث تشابه المتجه مع استعلامات المستخدم.test.py : طرق لاختبار وظائف مختلفة. علق حاليا.write_read_data.py : أساليب الكتابة والقراءة البسيطة لتخزين مسارات وأوصاف Cypher التي تم إنشاؤها من مكالمات API.fill_collection_with_random_paths في paths_vectorDB/main.py تكتب المسارات والأوصاف التي تم إنشاؤها من مكالمات API إلى data.txt .env.sample : قم بعمل نسخة من هذا في دليل جذر المشروع الخاص بك وقم بإعادة تسميته إلى .env . املأ القيم..gitignoreREADME.md : وثائق المشروع.docker-compose.yml : ملف Docker لـ Milvus DB. إذا كان هناك إصدار جديد ، استبدل هذا الملف. تأكد من تسمية docker-compose.yml ووضعها في دليل الجذر.requirements.txt : تبعيات بيثون وإصداراتها المتوافقة المستخدمة للتنمية. ملاحظة: تم إنشاء ملف requirements.txt من خلال pipenv . البدء في هذا المشروع بسيط. يمكنك متابعة الخطوات أدناه:
استنساخ المستودع :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootملاحظة: تأكد من وجودك في دليل جذر المشروع قبل المتابعة مع الخطوات التالية.
تثبيت التبعيات :
pip install -r requirements.txtإعداد متغيرات البيئة :
env.sample وأعد تسمية الملف إلى .env وملء القيم المطلوبة.قم بإعداد سطح المكتب Neo4J :
.env مع تفاصيل اتصال Neo4J (URL ، اسم المستخدم ، كلمة المرور). تم ملء القيم الافتراضية.تشغيل التطبيق/main.py :
app وتشغيل main.py تأكد من تمرير استعلام المستخدم المطلوب كوسيطة إلى وظيفة run_query(user_query) .docker-compose.yml في دليل الجذر. عند تشغيل التطبيق/main.py ، ستبدأ حاويات Milvus تلقائيًا عن طريق تشغيل الأوامر الطرفية. تحقق من paths_vectorDB/vectorDB_setup.py لمزيد من المعلومات.volumes . يحتوي المجلد على 3 مجلدات فرعية: milvus ، minio ، وما etcd . ملاحظة : لمزيد من التوضيح للإخراج المتوقع عند تشغيل app/main.py ، أقوم بتوصيل 2 PDFs من الإخراج المتولد من النظام في المجلد المسمى المخرجات المتوقعة .
first_output.pdf ما هو متوقع عندما يقوم المستخدم بتشغيل app/main.py لأول مرة في جلسة جديدة ذات قيم افتراضية. (عندما تقوم بتشغيله لأول مرة على الإطلاق ، قد يستغرق الأمر بعض الوقت لتنزيل كل شيء)regular_output.pdf ما هو متوقع عندما يقوم المستخدم بتشغيل app/main.py في جلسة منتظمة مع قيم افتراضية. app و paths_vectorDB إلى تحسين أداء LLM بشكل كبير. لقد شاهدت أن أمثلة عالية الجودة في مطالبة النظام ستزيد من جودة توليد الوصف للمسارات. موجه النظام أيضا يؤثر بشكل كبير على الإجابة النهائية من LLM.search_similar_vectors طريقة داخل paths_vectorDB/vectorDB_setup.py لتحسين نتائج.app/main.py.