Il s'agit de la composante du projet de recherche développée sous la direction du Dr Zachary Ives. L'objectif initial est de développer une couche de graphe au-dessus de la base de données Pennsieve et d'activer l'apprentissage automatique grâce à une extraction efficace de données de données médicales à partir de formats de fichiers complexes et polyvalents. Ce composant permet une interaction en langage naturel avec la base de données.
Remarque : Toutes les méthodes ont été implémentées sur le graphique sous-jacent construit sur Neo4j à l'aide d'un autre référentiel qui sera lié une fois public. Ce projet est prêt à être utilisé par la boîte, cependant, sans le graphique sous-jacent rempli, vous n'obtiendrez aucun résultat.
__init__.py : initialise le package d'application.config.py : gère les variables de configuration et d'environnement.database.py : gère la connexion de la base de données NEO4J.setup_neo4j_graph() renvoie un graphique NEO4J configuré avec URL, nom d'utilisateur et mot de passe fourni dans le fichier .env .setup_neo4j_graph() renvoie le wrapper de base de données Langchain Neo4j. Méthodes importantes utilisées: query() et refresh_schema() . Documentation Langchain Neo4jgraphmain.py : point d'entrée de l'application. Passez la requête de l'utilisateur et récupère le résultat en appelant run_query(user_query: str) de qa_chain.py . Il résume toutes les complexités et fournit une interface simple pour interagir avec le système.dataguide.py : extrait les chemins de données de Dataguide à partir de la base de données et les formats en chemins de cypher.extract_dataguide_paths(graph: Neo4jGraph) : extrait les chemins de données de la racine à la feuille à l'aide d'une requête Cypher.format_paths_for_llm(results: List[Dict[str, Any]]) : formats les résultats de extract_dataguide_paths dans des chemins de cypher valides pour les requêtes de correspondance.test.py : teste la connexion avec le graphique Neo4j, l'extraction des chemins de données et les formatant. Sorte le temps pris pour chaque partie.prompt_generator.py : Ce module est responsable de la création et de la combinaison du système Langchain et des invites humaines dans langchain.prompts.ChatPromptTemplate . Il s'agit d'une partie cruciale du projet car il définit comment les invites sont structurées et utilisées dans le cadre de Langchain.get_cypher_prompt_template() : Cette méthode renvoie l'instance ChatPromptTemplate créée dans ce fichier. Il combine le système et les invites humaines dans un seul modèle qui peut être utilisé pour générer des requêtes Cypher à partir de GraphCypherQAChain dans qa_chain.py .input_variables , qui spécifient les variables à inclure dans l'invite et template , qui définit le texte de l'invite.prompt , qui définit le texte du message système.prompt , qui définit le texte du message humain.from_messages() , qui prend une liste de modèles de messages et les combine dans une invite de chat.qa_chain.py : définit la fonction run_query(user_query: str) , qui intègre tous les composants du projet et exécute un GraphCypherQAChain sur la requête utilisateur.ChatOpenAI par Azurechatopenai si nécessaire.__init__.py : initialise le package d'application.generate_descriptions.py : définit l'invite du système pour générer des descriptions à partir de LLMS pour les chemins de cypher.generate_path_descriptions(all_paths: List[str]) : génère des descriptions pour les chemins donnés à l'aide du LLM. Sorte une liste de descriptions.generate_embedding(path_description: str) : génère des incorporations pour la description du chemin donné à l'aide de l'API Openai Embeddings.random_path_generator.py : fournit des méthodes pour générer des chemins aléatoires à partir de la base de données et les formater dans des chemins Cypher.vectorDB_setup.py : fournit des méthodes pour démarrer le conteneur Milvus, se connecter avec elle, définir le schéma de collecte, créer la collecte, insérer des données et effectuer des recherches de similitude vectorielle.main.py : fonctions wrapper qui combinent toutes les fonctionnalités de ce répertoire. Par exemple, get_similar_paths_from_milvus est utilisé dans app/qa_chain.py pour effectuer une recherche de similitude vectorielle avec les requêtes utilisateur.test.py : méthodes pour tester diverses fonctionnalités. Actuellement commenté.write_read_data.py : des méthodes d'écriture et de lecture simples pour stocker des chemins et descriptions cypher générés à partir d'appels API.fill_collection_with_random_paths dans paths_vectorDB/main.py écrit les chemins et descriptions générés à partir des appels d'API dans data.txt .env.sample : faites une copie de ceci dans le répertoire racine de votre projet et renommez-le à .env . Remplissez les valeurs..gitignore : spécifie les fichiers et les répertoires à ignorer par GIT.README.md : Documentation du projet.docker-compose.yml : fichier docker pour milvus db. S'il y a une nouvelle version, remplacez ce fichier. Assurez-vous qu'il est nommé docker-compose.yml et placé dans le répertoire racine.requirements.txt : dépendances Python et leurs versions compatibles utilisées pour le développement. Remarque: Le fichier requirements.txt a été créé via pipenv . Le début de ce projet est simple. Vous pouvez suivre les étapes ci-dessous:
Clone le référentiel :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootRemarque: assurez-vous que vous êtes dans le répertoire des racines du projet avant de procéder avec les étapes suivantes.
Installez les dépendances :
pip install -r requirements.txtConfigurer des variables d'environnement :
env.sample et renommez le fichier vers .env et remplissez les valeurs requises.Configurez le bureau NEO4J :
.env avec les détails de la connexion NEO4J (URL, nom d'utilisateur, mot de passe). Les valeurs par défaut ont été remplies.Exécuter app / main.py :
app et exécutez main.py Assurez-vous que la requête utilisateur souhaitée est transmise comme un argument à la fonction run_query(user_query) .docker-compose.yml dans le répertoire racine. Lorsque vous exécutez App / Main.py, les conteneurs Milvus démarreront automatiquement en exécutant les commandes de terminal. Consultez paths_vectorDB/vectorDB_setup.py pour plus d'informations.volumes . Le dossier contient 3 sous-dossiers: milvus , minio , etcd . Remarque : Pour plus de clarification de la sortie attendue lorsque vous exécutez app/main.py , je suis joint 2 PDF de sortie générés à partir du système dans le dossier appelé Sorties attendues .
first_output.pdf affiche ce qui est attendu lorsque l'utilisateur exécute l' app/main.py pour la première fois dans une nouvelle session avec des valeurs par défaut. (Lorsque vous l'exécutez pour la première fois, cela peut prendre un certain temps pour tout télécharger)regular_output.pdf montre ce qui est attendu lorsque l'utilisateur exécute l' app/main.py dans une session régulière avec des valeurs par défaut. app et paths_vectorDB peut améliorer considérablement les performances LLM. J'ai vu que des exemples de haute qualité dans l'invite du système augmenteront la qualité de la génération de description pour les chemins. L'invite du système affecte également de manière significative la réponse finale de LLM.search_similar_vectors à l'intérieur de paths_vectorDB/vectorDB_setup.py pour de meilleurs résultats.app/main.py.