Ini adalah komponen proyek penelitian yang dikembangkan di bawah bimbingan Dr. Zachary Ives. Tujuan awalnya adalah untuk mengembangkan lapisan grafik di atas database PennSieve dan memungkinkan pembelajaran mesin melalui ekstraksi data yang efektif dari data medis dari format file yang kompleks dan serbaguna. Komponen ini memungkinkan interaksi bahasa alami dengan database.
Catatan : Semua metode diimplementasikan pada grafik yang mendasari yang dibangun di Neo4j menggunakan repositori lain yang akan ditautkan setelah dipublikasikan. Proyek ini siap digunakan di luar kotak, namun, tanpa grafik yang mendasari Anda tidak akan mendapatkan hasil apa pun.
__init__.py : Menginisialisasi paket aplikasi.config.py : Menangani variabel konfigurasi dan lingkungan.database.py : Mengelola koneksi database NEO4J.setup_neo4j_graph() Mengembalikan grafik neo4j yang dikonfigurasi dengan URL, nama pengguna, dan kata sandi yang disediakan dalam file .env .setup_neo4j_graph() Mengembalikan pembungkus basis data Langchain Neo4J. Metode penting yang digunakan: query() dan refresh_schema() . Dokumentasi Langchain Neo4Jgraphmain.py : Titik masuk aplikasi. Lewati kueri pengguna dan ambil hasilnya dengan menelepon run_query(user_query: str) dari qa_chain.py . Ini mengabstraksi semua kompleksitas dan menyediakan antarmuka sederhana untuk berinteraksi dengan sistem.dataguide.py : mengekstrak jalur dataguide dari database dan memformatnya ke jalur cypher.extract_dataguide_paths(graph: Neo4jGraph) : mengekstrak jalur dataguide dari root ke daun menggunakan kueri cypher.format_paths_for_llm(results: List[Dict[str, Any]]) : Format hasil dari extract_dataguide_paths ke jalur cypher yang valid untuk kueri kecocokan.test.py : Menguji koneksi dengan grafik neo4j, ekstraksi jalur dataguide, dan memformatnya. Menghasilkan waktu yang dibutuhkan untuk setiap bagian.prompt_generator.py : Modul ini bertanggung jawab untuk membuat dan menggabungkan sistem Langchain dan permintaan manusia ke langchain.prompts.ChatPromptTemplate . Ini adalah bagian penting dari proyek karena mendefinisikan bagaimana prompt disusun dan digunakan dalam kerangka kerja Langchain.get_cypher_prompt_template() : Metode ini mengembalikan instance ChatPromptTemplate yang dibuat dalam file ini. Ini menggabungkan sistem dan permintaan manusia ke dalam satu templat yang dapat digunakan untuk menghasilkan kueri cypher dari GraphCypherQAChain di qa_chain.py .input_variables , yang menentukan variabel yang akan dimasukkan dalam prompt, dan template , yang mendefinisikan teks prompt.prompt , yang mendefinisikan teks pesan sistem.prompt , yang mendefinisikan teks pesan manusia.from_messages() , yang mengambil daftar templat pesan dan menggabungkannya menjadi prompt obrolan.qa_chain.py : Menentukan fungsi run_query(user_query: str) , yang mengintegrasikan semua komponen proyek dan menjalankan GraphCypherQAChain pada kueri pengguna.ChatOpenAI dengan azurechatopenai jika diperlukan.__init__.py : Menginisialisasi paket aplikasi.generate_descriptions.py : Menentukan prompt sistem untuk menghasilkan deskripsi dari llms untuk jalur cypher.generate_path_descriptions(all_paths: List[str]) : Menghasilkan deskripsi untuk jalur yang diberikan menggunakan LLM. Mengeluarkan daftar deskripsi.generate_embedding(path_description: str) : Menghasilkan embeddings untuk deskripsi jalur yang diberikan menggunakan Openai Embeddings API.random_path_generator.py : Menyediakan metode untuk menghasilkan jalur acak dari database dan memformatnya ke jalur cypher.vectorDB_setup.py : Menyediakan metode untuk memulai wadah milvus, terhubung dengan itu, menentukan skema pengumpulan, membuat pengumpulan, memasukkan data, dan melakukan pencarian kesamaan vektor.main.py : Fungsi pembungkus yang menggabungkan semua fungsi dari direktori ini. Misalnya, get_similar_paths_from_milvus digunakan dalam app/qa_chain.py untuk melakukan pencarian kesamaan vektor dengan kueri pengguna.test.py : Metode untuk menguji berbagai fungsi. Saat ini dikomentari.write_read_data.py : Metode tulis dan baca sederhana untuk menyimpan jalur dan deskripsi cypher yang dihasilkan dari panggilan API.fill_collection_with_random_paths di paths_vectorDB/main.py menuliskan jalur dan deskripsi yang dihasilkan dari panggilan API ke data.txt .env.sample : Buat salinan ini di direktori root proyek Anda dan ganti namanya menjadi .env . Isi nilainya..gitignore : Menentukan file dan direktori yang harus diabaikan oleh git.README.md : Dokumentasi Proyek.docker-compose.yml : File Docker untuk Milvus DB. Jika ada versi baru, ganti file ini. Pastikan dinamai docker-compose.yml dan ditempatkan di direktori root.requirements.txt : Ketergantungan Python dan versi kompatibelnya yang digunakan untuk pengembangan. Catatan: File requirements.txt dibuat melalui pipenv . Memulai proyek ini sederhana. Anda dapat mengikuti langkah -langkah di bawah ini:
Klon Repositori :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootCatatan: Pastikan Anda berada di direktori Root Proyek sebelum melanjutkan dengan langkah selanjutnya.
Instal dependensi :
pip install -r requirements.txtMengatur variabel lingkungan :
env.sample dan ganti nama file ke .env dan isi nilai yang diperlukan.Siapkan desktop neo4j :
.env dengan detail koneksi NEO4J (URL, nama pengguna, kata sandi). Nilai default telah diisi.Jalankan App/Main.py :
app dan jalankan main.py Pastikan kueri pengguna yang Anda inginkan dilewati sebagai argumen ke fungsi run_query(user_query) .docker-compose.yml di direktori root. Saat Anda menjalankan app/main.py, wadah Milvus akan mulai secara otomatis dengan menjalankan perintah terminal. Lihat paths_vectorDB/vectorDB_setup.py untuk informasi lebih lanjut.volumes . Folder berisi 3 subfolder: milvus , minio , dan etcd . Catatan : Untuk klarifikasi lebih lanjut dari output yang diharapkan saat Anda menjalankan app/main.py , saya melampirkan 2 PDF output yang dihasilkan dari sistem di folder yang disebut output yang diharapkan .
first_output.pdf menunjukkan apa yang diharapkan ketika pengguna menjalankan app/main.py untuk pertama kalinya dalam sesi baru dengan nilai default. (Saat Anda menjalankannya untuk pertama kalinya, mungkin perlu waktu untuk mengunduh semuanya)regular_output.pdf menunjukkan apa yang diharapkan ketika pengguna menjalankan app/main.py dalam sesi reguler dengan nilai default. app dan paths_vectorDB dapat secara signifikan meningkatkan kinerja LLM. Saya menyaksikan bahwa contoh kualitas tinggi dalam sistem prompt akan meningkatkan kualitas generasi deskripsi untuk jalur. Prompt sistem juga secara signifikan mempengaruhi jawaban akhir dari LLM.search_similar_vectors di dalam paths_vectorDB/vectorDB_setup.py untuk hasil yang lebih baik.app/main.py.