Это компонент исследовательского проекта, разработанный под руководством доктора Захари Айвса. Первоначальная цель состоит в том, чтобы разработать слой графика в верхней части базы данных Pennsieve и обеспечить машинное обучение посредством эффективного извлечения данных медицинских данных из сложных и универсальных форматов файлов. Этот компонент обеспечивает взаимодействие естественного языка с базой данных.
ПРИМЕЧАНИЕ . Все методы были реализованы на базовом графике, построенном на NEO4J с использованием другого репозитория, который будет связан, как только он станет общедоступным. Этот проект готов к использованию из коробки, однако без заполненного графа, заполненного вами, не получит никаких результатов.
__init__.py : инициализирует пакет приложений.config.py : обрабатывает конфигурацию и переменные среды.database.py : управляет подключением базы данных NEO4J.setup_neo4j_graph() возвращает график Neo4j, настроенный с URL, именем пользователя и паролем, предоставленным в файле .env .setup_neo4j_graph() возвращает обертку базы данных Langchain Neo4j. Используются важные методы: query() и refresh_schema() . Langchain neo4jgraph документацияmain.py : точка входа приложения. Передайте пользовательский запрос и получает результат, позвонив run_query(user_query: str) из qa_chain.py . Он отказывается от всех сложностей и обеспечивает простой интерфейс для взаимодействия с системой.dataguide.py : извлекает пути DataGuide из базы данных и форматирует их в пути Cypher.extract_dataguide_paths(graph: Neo4jGraph) : извлекает пути dataaguide от корня в лист, используя запрос Cypher.format_paths_for_llm(results: List[Dict[str, Any]]) : форматы получают результаты из extract_dataguide_paths в действительные пути Cypher для соответствия запросов.test.py : тестирует соединение с графом Neo4j, извлечение путей DataGuide и форматирование их. Выводит время, затрачиваемое для каждой части.prompt_generator.py : Этот модуль отвечает за создание и объединение системы Langchain и человеческих подсказок в langchain.prompts.ChatPromptTemplate . Это важная часть проекта, поскольку он определяет, как подсказки структурированы и используются в рамках Лэнгкейна.get_cypher_prompt_template() : этот метод возвращает экземпляр ChatPromptTemplate , созданный в этом файле. Он объединяет подсказки системы и человека в единый шаблон, который можно использовать для генерации запросов цифр из GraphCypherQAChain в qa_chain.py .input_variables , в которых указываются переменные, которые должны быть включены в приглашение, и template , который определяет текст подсказки.prompt , который определяет текст системы системного сообщения.prompt , который определяет текст сообщения человека.from_messages() , который содержит список шаблонов сообщений и объединяет их в приглашение в чате.qa_chain.py : Определяет функцию run_query(user_query: str) , которая интегрирует все компоненты проекта и запускает GraphCypherQAChain в пользовательском запросе.ChatOpenAI на Azurechatopenai.__init__.py : инициализирует пакет приложений.generate_descriptions.py : определяет подсказку системы, чтобы генерировать описания из LLM для путей Cypher.generate_path_descriptions(all_paths: List[str]) : генерирует описания для данных путей, используя LLM. Выводит список описаний.generate_embedding(path_description: str) : генерирует встраивания для данного описания пути, используя API openai embeddings.random_path_generator.py : обеспечивает методы для генерации случайных путей из базы данных и форматирования их в путях Cypher.vectorDB_setup.py : предоставляет методы для запуска контейнера Milvus, подключения с ним, определить схему сбора, создавать сборы, вставить данные и провести поиск сходства вектора.main.py : оболочка, которые объединяют все функции из этого каталога. Например, get_similar_paths_from_milvus используется в app/qa_chain.py для проведения поиска сходства вектора с помощью пользовательских запросов.test.py : методы проверки различных функций. В настоящее время прокомментировал.write_read_data.py : простые методы записи и чтения для хранения путей и описаний цифр и описаний, полученных из вызовов API.fill_collection_with_random_paths в paths_vectorDB/main.py записывает пути и описания, сгенерированные из вызовов API в data.txt .env.sample : Сделайте копию этого в вашем каталоге Project Root и переименуйте в .env . Заполните значения..gitignore : определяет файлы и каталоги, которые игнорируются git.README.md : проектная документация.docker-compose.yml : Docker File для Milvus db. Если есть новая версия, замените этот файл. Убедитесь, что он называется docker-compose.yml и помещен в корневую каталог.requirements.txt : зависимости от питона и их совместимые версии, используемые для разработки. ПРИМЕЧАНИЕ. Файл requirements.txt был создан через pipenv . Начать работу с этим проектом просто. Вы можете выполнить шаги ниже:
Клонировать репозиторий :
git clone https://github.com/hussainzs/chat-with-pennsieve.git
cd project_rootПримечание. Убедитесь, что вы находитесь в каталоге Project Root, прежде чем выполнять следующие шаги.
Установить зависимости :
pip install -r requirements.txtНастройка переменных среды :
env.sample и переименуйте файл в .env и заполните требуемые значения.Настройка Neo4j Desktop :
.env с помощью деталей соединения NEO4J (URL, имя пользователя, пароль). Значения по умолчанию были заполнены.Запустить приложение/main.py :
app и запустите main.py Убедитесь, что ваш желаемый запрос пользователя передается в качестве аргумента функции run_query(user_query) .docker-compose.yml в корневом каталоге. Когда вы запускаете app/main.py, контейнеры Milvus будут автоматически запустить команды терминала. Проверьте paths_vectorDB/vectorDB_setup.py для получения дополнительной информации.volumes . Папка содержит 3 подпапки: milvus , minio и etcd . Примечание . Для дальнейшего разъяснения ожидаемого вывода при запуске app/main.py я прикрепляю 2 PDF -файла вывода, сгенерированных из системы в папке, называемых ожидаемыми выходами .
first_output.pdf показывает, что ожидается, когда пользователь запускает app/main.py впервые в новом сеансе со значениями по умолчанию. (Когда вы запускаете его в первый раз, может потребоваться некоторое время, чтобы загрузить все)regular_output.pdf показывает, что ожидается, когда пользователь запускает app/main.py в обычном сеансе со значениями по умолчанию. app , так и paths_vectorDB может значительно повысить производительность LLM. Я стал свидетелем того, что высококачественные примеры в системной подсказке повысят качество генерации описания для путей. Системная подсказка также значительно влияет на окончательный ответ от LLM.search_similar_vectors внутри paths_vectorDB/vectorDB_setup.py для лучших результатов.app/main.py.