นี่คือองค์ประกอบของโครงการวิจัยที่พัฒนาขึ้นภายใต้คำแนะนำของดร. Zachary Ives เป้าหมายเริ่มต้นคือการพัฒนาเลเยอร์กราฟที่ด้านบนของฐานข้อมูล Pennsieve และเปิดใช้งานการเรียนรู้ของเครื่องผ่านการสกัดข้อมูลทางการแพทย์ที่มีประสิทธิภาพจากรูปแบบไฟล์ที่ซับซ้อนและหลากหลาย ส่วนประกอบนี้ ช่วยให้การโต้ตอบภาษาธรรมชาติกับฐานข้อมูล
หมายเหตุ : วิธีการทั้งหมดถูกนำไปใช้กับกราฟพื้นฐานที่สร้างขึ้นบน Neo4J โดยใช้พื้นที่เก็บข้อมูลอื่นซึ่งจะเชื่อมโยงกันเมื่อเป็นสาธารณะ โครงการนี้พร้อมที่จะใช้นอกกรอบอย่างไรก็ตามหากไม่มีกราฟพื้นฐานที่กรอกข้อมูลคุณจะไม่ได้รับผลลัพธ์ใด ๆ
__init__.py : เริ่มต้นแพ็คเกจแอปconfig.py : จัดการตัวแปรการกำหนดค่าและสภาพแวดล้อมdatabase.py : จัดการการเชื่อมต่อฐานข้อมูล Neo4Jsetup_neo4j_graph() ส่งคืนกราฟ neo4j ที่กำหนดค่าด้วย URL ชื่อผู้ใช้และรหัสผ่านที่ให้ไว้ในไฟล์. .envsetup_neo4j_graph() ส่งคืน wrapper ฐานข้อมูล langchain neo4j วิธีการสำคัญที่ใช้: query() และ refresh_schema() เอกสาร langchain neo4jgraphmain.py : จุดเข้าใช้งานของแอปพลิเคชัน ผ่านการสืบค้นผู้ใช้และดึงผลลัพธ์โดยการเรียก run_query(user_query: str) จาก qa_chain.py มันเป็นบทสรุปความซับซ้อนทั้งหมดและให้อินเทอร์เฟซอย่างง่ายเพื่อโต้ตอบกับระบบdataguide.py : แยกพา ธ Dataguide จากฐานข้อมูลและจัดรูปแบบให้เป็นเส้นทาง cypherextract_dataguide_paths(graph: Neo4jGraph) : แยกพา ธ Dataguide จากรูทถึงใบไม้โดยใช้แบบสอบถาม cypherformat_paths_for_llm(results: List[Dict[str, Any]]) : รูปแบบผลลัพธ์จาก extract_dataguide_paths ไปยังเส้นทาง cypher ที่ถูกต้องสำหรับการสืบค้นการจับคู่test.py : ทดสอบการเชื่อมต่อกับกราฟ Neo4J, การสกัดเส้นทาง Dataguide และการจัดรูปแบบ เอาท์พุทเวลาที่ใช้สำหรับแต่ละส่วนprompt_generator.py : โมดูลนี้มีหน้าที่ในการสร้างและรวม ระบบ langchain และการแจ้งเตือน ของมนุษย์ เข้ากับ langchain.prompts.ChatPromptTemplate มันเป็นส่วนสำคัญของโครงการเนื่องจากกำหนดวิธีการที่มีโครงสร้างและใช้ในกรอบ Langchainget_cypher_prompt_template() : วิธีนี้ส่งคืนอินสแตนซ์ ChatPromptTemplate ที่สร้างขึ้นในไฟล์นี้ มันรวมระบบและการแจ้งเตือนของมนุษย์เข้ากับเทมเพลตเดียวที่สามารถใช้ในการสร้างข้อความค้นหา Cypher จาก GraphCypherQAChain ใน qa_chain.pyinput_variables ซึ่งระบุตัวแปรที่จะรวมอยู่ในพรอมต์และ template ซึ่งกำหนดข้อความของพรอมต์prompt ซึ่งกำหนดข้อความของข้อความprompt ซึ่งกำหนดข้อความของมนุษย์from_messages() ซึ่งใช้รายการเทมเพลตข้อความและรวมเข้ากับพรอมต์แชทqa_chain.py : กำหนดฟังก์ชั่น run_query(user_query: str) ซึ่งรวมส่วนประกอบโครงการทั้งหมดและรัน GraphCypherQAChain บนแบบสอบถามผู้ใช้ChatOpenAI ด้วย Azurechatopenai หากจำเป็น__init__.py : เริ่มต้นแพ็คเกจแอปgenerate_descriptions.py : กำหนดพรอมต์ระบบเพื่อสร้างคำอธิบายจาก LLMs สำหรับเส้นทาง cyphergenerate_path_descriptions(all_paths: List[str]) : สร้างคำอธิบายสำหรับเส้นทางที่กำหนดโดยใช้ LLM แสดงรายการคำอธิบายgenerate_embedding(path_description: str) : สร้าง EMBEDDINGS สำหรับคำอธิบายเส้นทางที่กำหนดโดยใช้ OpenAI EMBEDDINGS APIrandom_path_generator.py : จัดเตรียมวิธีการสร้างพา ธ สุ่มจากฐานข้อมูลและจัดรูปแบบลงในเส้นทาง CyphervectorDB_setup.py : จัดเตรียมวิธีการเริ่มต้นคอนเทนเนอร์ Milvus เชื่อมต่อกับมันกำหนดสคีมาคอลเลกชันสร้างคอลเลกชันแทรกข้อมูลและดำเนินการค้นหาความคล้ายคลึงกันของเวกเตอร์main.py : ฟังก์ชั่น wrapper ที่รวมฟังก์ชันทั้งหมดจากไดเรกทอรีนี้ ตัวอย่างเช่น get_similar_paths_from_milvus ใช้ใน app/qa_chain.py เพื่อดำเนินการค้นหาความคล้ายคลึงกันของเวกเตอร์ด้วยการสืบค้นผู้ใช้test.py : วิธีการทดสอบฟังก์ชันต่าง ๆ ปัจจุบันแสดงความคิดเห็นwrite_read_data.py : วิธีการเขียนและอ่านง่าย ๆ เพื่อจัดเก็บเส้นทาง Cypher และคำอธิบายที่สร้างขึ้นจากการโทร APIfill_collection_with_random_paths ใน paths_vectorDB/main.py เขียนเส้นทางและคำอธิบายที่สร้างจากการเรียก API ลงใน data.txtenv.sample : ทำสำเนาของสิ่งนี้ในไดเรกทอรีรากโครงการของคุณและเปลี่ยนชื่อเป็น .env กรอกค่า.gitignore : ระบุไฟล์และไดเรกทอรีที่จะถูกละเว้นโดย GitREADME.md : เอกสารโครงการdocker-compose.yml : ไฟล์ Docker สำหรับ Milvus DB หากมีเวอร์ชันใหม่ให้แทนที่ไฟล์นี้ ตรวจสอบให้แน่ใจว่ามีชื่อว่า docker-compose.yml และวางไว้ในไดเรกทอรีรากrequirements.txt : การพึ่งพา Python และรุ่นที่เข้ากันได้ที่ใช้สำหรับการพัฒนา หมายเหตุ: ไฟล์ requirements.txt 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 ได้อย่างมีนัยสำคัญ ฉันเห็นว่าตัวอย่างที่มีคุณภาพสูงในการแจ้งระบบจะเพิ่มคุณภาพของการสร้างคำอธิบายสำหรับเส้นทาง พรอมต์ระบบยังส่งผลกระทบอย่างมีนัยสำคัญคำตอบสุดท้ายจาก LLMsearch_similar_vectors ภายใน paths_vectorDB/vectorDB_setup.py เพื่อผลลัพธ์ที่ดีกว่าapp/main.py.