Dies ist die unter der Leitlinien von Dr. Zachary Ives entwickelte Forschungsprojektkomponente. Das ursprüngliche Ziel ist es, eine Grafikschicht auf der Pennsieve -Datenbank zu entwickeln und maschinelles Lernen durch effektive Datenextraktion medizinischer Daten aus komplexen und vielseitigen Dateiformaten zu ermöglichen. Diese Komponente ermöglicht die Interaktion der natürlichen Sprache mit der Datenbank.
Hinweis : Alle Methoden wurden in der zugrunde liegenden Grafik implementiert, die auf NEO4J mit einem anderen Repository basiert, das nach der Öffentlichkeit verknüpft wird. Dieses Projekt ist bereit, nicht aus der Schachtel zu verwenden. Ohne die zugrunde liegende Grafik erhalten Sie jedoch keine Ergebnisse.
__init__.py : Initialisiert das App -Paket.config.py : Verarbeitet Konfigurations- und Umgebungsvariablen.database.py : Verwaltet die NEO4J -Datenbankverbindung.setup_neo4j_graph() gibt ein Neo4J -Diagramm zurück, das mit URL, Benutzername und Kennwort konfiguriert ist, das in der .env -Datei bereitgestellt wird.setup_neo4j_graph() gibt den Langchain Neo4J -Datenbankwrapper zurück. Wichtige Methoden verwendete Methoden: query() und refresh_schema() . Langchain Neo4jgraph Dokumentationmain.py : Einstiegspunkt der Anwendung. Übergeben Sie die Benutzerabfrage und ruft das Ergebnis ab, indem Sie run_query(user_query: str) von qa_chain.py aufrufen. Es wird alle Komplexitäten abstrahiert und bietet eine einfache Schnittstelle, um mit dem System zu interagieren.dataguide.py : extrahiert Dataguide -Pfade aus der Datenbank und formatiert sie in Cypher -Pfade.extract_dataguide_paths(graph: Neo4jGraph) : Extrahiert Dataguide -Pfade von Root zu Blatt mithilfe einer Cypher -Abfrage.format_paths_for_llm(results: List[Dict[str, Any]]) : Formate resultieren aus extract_dataguide_paths in gültige Cypher -Pfade für Übereinstimmungsabfragen.test.py : Testen Sie die Verbindung mit dem NEO4J -Diagramm, der Extraktion von DataGuide -Pfaden und formatieren Sie sie. Gibt die Zeit für jeden Teil aus.prompt_generator.py : Dieses Modul ist für das Erstellen und Kombinieren von Langchain -Systemen und menschlichen Eingabeaufforderungen in langchain.prompts.ChatPromptTemplate verantwortlich. Es ist ein entscheidender Bestandteil des Projekts, da es definiert, wie die Eingabeaufforderungen strukturiert und im Langchain -Framework verwendet werden.get_cypher_prompt_template() : Diese Methode gibt die in dieser Datei erstellte ChatPromptTemplate -Instanz zurück. Es kombiniert System- und menschliche Eingabeaufforderungen zu einer einzelnen Vorlage, mit der Cypher -Abfragen von GraphCypherQAChain in qa_chain.py generiert werden können.input_variables , die die Variablen angeben, die in die Eingabeaufforderung enthalten sind, und template , die den Text der Eingabeaufforderung definiert.prompt , die den Text der Systemnachricht definiert.prompt , die den Text der menschlichen Nachricht definiert.from_messages() , die eine Liste von Nachrichtenvorlagen aufnimmt und sie zu einer Chat -Eingabeaufforderung kombiniert.qa_chain.py : Definiert die Funktion run_query(user_query: str) , die alle Projektkomponenten integriert und ein GraphCypherQAChain in die Benutzerabfrage ausführt.ChatOpenAI bei Bedarf durch Azurechatopenai.__init__.py : Initialisiert das App -Paket.generate_descriptions.py : Definiert die Systemaufforderung, Beschreibungen von LLMs für Cypher -Pfade zu generieren.generate_path_descriptions(all_paths: List[str]) : Erzeugt Beschreibungen für die angegebenen Pfade mit dem LLM. Gibt eine Liste von Beschreibungen aus.generate_embedding(path_description: str) : Erzeugt Einbettung für die angegebene Pfadbeschreibung unter Verwendung der OpenAI -Einbettungs -API.random_path_generator.py : Bietet Methoden, um zufällige Pfade aus der Datenbank zu generieren und sie in Cypher -Pfade zu formatieren.vectorDB_setup.py : Bietet Methoden zum Starten von Milvus -Container, verbinden Sie sich mit IT, definieren Sie das Sammlungsschema, erstellen Sie Sammeln, fügen Sie Daten ein und führen Sie Vektorähnlichkeitssuche durch.main.py : Wrapper -Funktionen, die alle Funktionen aus diesem Verzeichnis kombinieren. Beispielsweise wird get_similar_paths_from_milvus in app/qa_chain.py verwendet, um die Vektor -Ähnlichkeitssuche mit Benutzeranfragen durchzuführen.test.py : Methoden zum Testen verschiedener Funktionen. Derzeit ausgesprochen.write_read_data.py : einfache Schreib- und Lesenmethoden zum Speichern von Cypher -Pfaden und -beschreibungen, die aus API -Aufrufen generiert wurden.fill_collection_with_random_paths in paths_vectorDB/main.py schreibt die Pfade und Beschreibungen auf, die aus API -Aufrufen in data.txt generiert wurden.env.sample : Machen Sie eine Kopie davon in Ihrem Projekt Root Directory und benennen Sie sie in .env um. Füllen Sie die Werte aus..gitignore : Gibt Dateien und Verzeichnisse an, die von Git ignoriert werden sollen.README.md : Projektdokumentation.docker-compose.yml : Docker-Datei für Milvus DB. Wenn es eine neue Version gibt, ersetzen Sie diese Datei. Stellen Sie sicher, dass es docker-compose.yml heißt und in das Wurzelverzeichnis platziert wird.requirements.txt : Python -Abhängigkeiten und ihre kompatiblen Versionen, die für die Entwicklung verwendet werden. HINWEIS: Die Datei requirements.txt wurde über pipenv erstellt. Der Einstieg mit diesem Projekt ist einfach. Sie können die folgenden Schritte befolgen:
Klonen Sie das Repository :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootHinweis: Stellen Sie sicher, dass Sie sich im Projekt Root -Verzeichnis befinden, bevor Sie mit den nächsten Schritten fortfahren.
Abhängigkeiten installieren :
pip install -r requirements.txtUmgebungsvariablen einrichten :
env.sample und benennen Sie die Datei in .env um und geben Sie die erforderlichen Werte ein.Richten Sie den NEO4J -Desktop ein :
.env -Datei mit den NEO4J -Verbindungsdetails (URL, Benutzername, Passwort). Standardwerte wurden ausgefüllt.App/main.py ausführen :
app -Verzeichnis und führen Sie main.py aus. Stellen Sie sicher, dass Ihre gewünschte Benutzerabfrage als Argument an die Funktion run_query(user_query) übergeben wird.docker-compose.yml im Stammverzeichnis haben. Wenn Sie App/Main.py ausführen, starten die Milvus -Container automatisch, indem sie Terminalbefehle ausführen. Weitere Informationen finden Sie unter paths_vectorDB/vectorDB_setup.py .volumes ein neuer Ordner erstellt und erstellt. Der Ordner enthält 3 Unterordner: milvus , minio und etcd . Hinweis : Zur weiteren Klärung der erwarteten Ausgabe Wenn Sie app/main.py ausführen, füge ich 2 PDFs von Ausgabe hinzu, die aus dem System im Ordner genannt werden, den als erwarteten Ausgänge genannt werden.
first_output.pdf zeigt, was erwartet wird, wenn der Benutzer die app/main.py zum ersten Mal in einer neuen Sitzung mit Standardwerten ausführt. (Wenn Sie es zum ersten Mal ausführen, kann es eine Weile dauern, um alles herunterzuladen)regular_output.pdf zeigt, was erwartet wird, wenn der Benutzer die app/main.py in einer regulären Sitzung mit Standardwerten ausführt. app als auch in paths_vectorDB kann die LLM -Leistung erheblich verbessern. Ich habe gesehen, dass hochwertige Beispiele in der Systemaufforderung die Qualität der Beschreibung der Wege erhöhen. Die Systemaufforderung wirkt sich auch erheblich auf die endgültige Antwort von LLM aus.search_similar_vectors Methode in der paths_vectorDB/vectorDB_setup.py für bessere Ergebnisse.app/main.py.