Este es el componente del proyecto de investigación desarrollado bajo la guía del Dr. Zachary Ives. El objetivo inicial es desarrollar una capa gráfica sobre la base de datos Pennsieve y permitir el aprendizaje automático a través de la extracción de datos efectivos de datos médicos de formatos de archivo complejos y versátiles. Este componente permite la interacción del lenguaje natural con la base de datos.
Nota : Todos los métodos se implementaron en el gráfico subyacente construido en NEO4J utilizando otro repositorio que se vinculará una vez que sea público. Sin embargo, este proyecto está listo para usarse fuera de la caja, sin el gráfico subyacente completado, no obtendrá ningún resultado.
__init__.py : inicializa el paquete de aplicaciones.config.py : maneja las variables de configuración y entorno.database.py : administra la conexión de base de datos NEO4J.setup_neo4j_graph() devuelve un gráfico Neo4J configurado con URL, nombre de usuario y contraseña proporcionados en el archivo .env .setup_neo4j_graph() Devuelve el contenedor de base de datos Langchain Neo4J. Métodos importantes utilizados: query() y refresh_schema() . Documentación de Langchain Neo4JGraphmain.py : punto de entrada de la aplicación. Pase la consulta del usuario y recupera el resultado llamando run_query(user_query: str) desde qa_chain.py . Abraza todas las complejidades y proporciona una interfaz simple para interactuar con el sistema.dataguide.py : extrae rutas de Dataguide de la base de datos y las formatea en rutas Cypher.extract_dataguide_paths(graph: Neo4jGraph) : extrae rutas dataguide de raíz a hoja utilizando una consulta Cypher.format_paths_for_llm(results: List[Dict[str, Any]]) : los resultados de los formatos de extract_dataguide_paths en rutas de Cypher válidas para consultas de coincidencias.test.py : prueba la conexión con el gráfico Neo4J, la extracción de rutas dataguide y formatearlas. Emite el tiempo tomado para cada parte.prompt_generator.py : este módulo es responsable de crear y combinar el sistema Langchain y las indicaciones humanas en langchain.prompts.ChatPromptTemplate . Es una parte crucial del proyecto, ya que define cómo las indicaciones se estructuran y se usan en el marco Langchain.get_cypher_prompt_template() : este método devuelve la instancia ChatPromptTemplate creada en este archivo. Combina el sistema y las indicaciones humanas en una sola plantilla que se puede utilizar para generar consultas Cypher de GraphCypherQAChain en qa_chain.py .input_variables , que especifican las variables que se incluirán en el mensaje y template , que define el texto del aviso.prompt , que define el texto del mensaje del sistema.prompt , que define el texto del mensaje humano.from_messages() , que toma una lista de plantillas de mensajes y las combina en un mensaje de chat.qa_chain.py : Define la función run_query(user_query: str) , que integra todos los componentes del proyecto y ejecuta un GraphCypherQAChain en la consulta del usuario.ChatOpenAI con Azurechatopenai si es necesario.__init__.py : inicializa el paquete de aplicaciones.generate_descriptions.py : Define la solicitud del sistema para generar descripciones de LLM para rutas Cypher.generate_path_descriptions(all_paths: List[str]) : genera descripciones para las rutas dadas usando el LLM. Emite una lista de descripciones.generate_embedding(path_description: str) : genera incrustaciones para la descripción de la ruta dada usando la API de incrustaciones de OpenAI.random_path_generator.py : proporciona métodos para generar rutas aleatorias a partir de la base de datos y formatearlas en rutas Cypher.vectorDB_setup.py : proporciona métodos para iniciar el contenedor de Milvus, conectarse con él, definir el esquema de recolección, crear recopilación, insertar datos y realizar búsquedas de similitud vectorial.main.py : Funciones de envoltura que combinan todas las funcionalidades de este directorio. Por ejemplo, get_similar_paths_from_milvus se usa en app/qa_chain.py para realizar una búsqueda de similitud vectorial con consultas de usuario.test.py : Métodos para probar diversas funcionalidades. Actualmente comentado.write_read_data.py : métodos simples de escritura y lectura para almacenar rutas y descripciones de Cypher generadas a partir de llamadas API.fill_collection_with_random_paths en paths_vectorDB/main.py escribe las rutas y descripciones generadas a partir de llamadas API en data.txt .env.sample : haga una copia de esto en su directorio raíz de proyecto y cambie el nombre a .env . Completar los valores..gitignore : especifica archivos y directorios que serán ignorados por Git.README.md : Documentación del proyecto.docker-compose.yml : archivo Docker para Milvus DB. Si hay una nueva versión, reemplace este archivo. Asegúrese de que se denomina docker-compose.yml y se coloque en el directorio raíz.requirements.txt : dependencias de Python y sus versiones compatibles utilizadas para el desarrollo. NOTA: El archivo requirements.txt se creó a través de pipenv . Comenzar con este proyecto es simple. Puede seguir los pasos a continuación:
Clon el repositorio :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootNota: Asegúrese de estar en el Directorio Root del Proyecto antes de continuar con los próximos pasos.
Instalar dependencias :
pip install -r requirements.txtConfigurar variables de entorno :
env.sample y cambie el nombre del archivo a .env y complete los valores requeridos.Configurar el escritorio neo4j :
.env con los detalles de conexión Neo4J (URL, nombre de usuario, contraseña). Los valores predeterminados se han completado.Ejecutar app/main.py :
app y ejecute main.py Asegúrese de que la consulta de usuario deseada se pase como argumento a la función run_query(user_query) .docker-compose.yml en el directorio raíz. Cuando ejecuta App/Main.py, los contenedores de Milvus comenzarán automáticamente ejecutando comandos de terminal. Consulte paths_vectorDB/vectorDB_setup.py para obtener más información.volumes . La carpeta contiene 3 subcarpetas: milvus , minio y etcd . Nota : Para una mayor aclaración de la salida esperada cuando ejecuta app/main.py , estoy conectando 2 PDF de salida generados desde el sistema en la carpeta llamadas salidas esperadas .
first_output.pdf muestra lo que se espera cuando el usuario ejecuta la app/main.py por primera vez en una nueva sesión con valores predeterminados. (Cuando lo ejecuta por primera vez, puede llevar un tiempo descargar todo)regular_output.pdf muestra lo que se espera cuando el usuario ejecuta la app/main.py en una sesión regular con valores predeterminados. app como en paths_vectorDB puede mejorar significativamente el rendimiento de LLM. Fui testigo de que los ejemplos de alta calidad en el aviso del sistema aumentarán la calidad de la generación de descripción para las rutas. El indicador del sistema también afecta significativamente la respuesta final de LLM.search_similar_vectors dentro de paths_vectorDB/vectorDB_setup.py para obtener mejores resultados.app/main.py.