Создание приложения на NodeJS с искусственным интеллектом для поиска текста и изображений
Приложение на NodeJS с ИИ для поиска текста и изображений
Векторный поиск – это мощный способ привнести магию генеративного искусственного интеллекта в ваши приложения. И если у вас есть правильные инструменты, это не обязательно сложно. Здесь я покажу вам простой способ создать приложение NodeJS с поддержкой DataStax Astra DB (и векторного поиска) с использованием stargate-mongoose и JSON API.
Я новый инженер в команде DataStax Stargate. Это своего рода традиция, что первым заданием в команде Stargate является разработка демонстрационного приложения с использованием API Stargate. Используя новый JSON API Stargate и драйвер Mongoose Stargate-Mongoose, я решил создать приложение nodeJS, используя оба из них.
Компьютеры и камеры – мои две страсти. Будь то строки кода или линии, которые кадрируют фотографию, я наслаждаюсь логикой и художественным творчеством, которые делают мою жизнь яркой. Так что, чтобы объединить мои две страсти, я решил создать сайт о фотографии как способ организации моей работы. Чтобы сделать его приложением искусственного интеллекта, я также решил включить векторный поиск с использованием возможностей векторного поиска в Astra DB.
Stargate-Mongoose и JSON API
Я не особо владею JavaScript, но создание этого приложения было относительно легким.
- Комплексный подход к повышению безопасности Интернета вещей с использованием искусственного интеллекта
- Ориентирование в будущем с помощью интеграции данных ИИ и картографирования на основе контента
- Работа с большими данными инструменты и техники
Mongoose – широко используемый инструмент для сопоставления объектов и данных, часто используемый с драйвером MongoDB, и имеет активное сообщество разработчиков на JavaScript. Открытая API-фреймворк Stargate предлагает новый драйвер Mongoose под названием stargate-mongoose. Это альтернативный драйвер для Mongoose, который основан на новом JSON API Stargate, который является автономным микросервисом для Stargate, предоставляющим доступ к данным, хранящимся в кластере Cassandra с использованием интерфейса на основе JSON-документов.
Это сотрудничество предоставляет разработчикам Mongoose открытое решение, отмечая переломный прогресс и вводя значительную фазу эволюции Apache Cassandra. Благодаря сотрудничеству stargate-mongoose с Mongoose и новым JSON API, разработчики JavaScript получают отличную модель данных, ориентированную на JSON, и возможность создавать с масштабируемостью и производительностью Cassandra.
Векторный поиск
JSON API Stargate и Stargate-Mongoose полностью поддерживают Astra Vector Search, который предоставляет возможность искусственным интеллектам находить наборы информации в коллекции, которые наиболее близки к заданному запросу. Важной частью этого процесса является возможность сохранять векторы вложения, которые представляют собой наборы чисел с плавающей запятой, используемые для представления сходства между различными объектами или сущностями. Astra DB Vector search интегрирует эту функцию в безсерверную базу данных Astra DB.
Архитектура
Демонстрационное приложение – это приложение Node.js, разработанное с использованием фреймворка веб-приложений Express. Оно сохраняет и извлекает все данные (включая векторы) из Astra DB с использованием Stargate-Mongoose в качестве драйвера Mongoose. Stargate-Mongoose полагается на JSON API Stargate для доступа к Astra DB.
Что касается части векторного поиска, приложение использует API вложения OpenAI для создания векторов вложения текста и Google MediaPipe для создания векторов вложения изображений. Подробности об этом будут обсуждаться позже.
Обзор приложения Photography-Site
Здесь я расскажу о различных операциях, поддерживаемых приложением, и покажу вам некоторые ключевые вызовы API, которые делают это возможным.
Основные функции
Приложение поддерживает основные функции, такие как просмотр изображений по категориям, изучение последних изображений, показ случайных изображений, добавление изображений и поиск изображения по имени.
Приложение отображает изображения по категориям на главной странице. Чтобы сохранять и извлекать данные в Astra DB с использованием Stargate-Mongoose, нам сначала нужно создать модель данных. Затем один простой метод find извлечет данные для вас.
После получения списка фотографий с использованием модели фото приложение может заполнить главный экран:
Нажатие на одну конкретную фотографию выведет ее подробную информацию, включая название фото, категорию фото и описание фото.
Под капотом для этого используется метод Mongoose findById
для получения целевой фотографии из Astra DB.
const photo = await Photo.findById(photoId);
Приложение позволяет добавлять фотографии, включая название фото, описание фото, категорию и само изображение фото в качестве входных данных.
Когда пользователь нажимает “Добавить фото”, приложение создает новый объект Photo и вызывает метод save; данные будут сохранены в Astra DB.
Поиск схожих текстов
Приложение позволяет искать фотографии по схожести текста. Вы можете описать, какую фотографию или сцену вы хотите найти, и использовать это описание в качестве входных данных для поиска. За кулисами функция использует векторный поиск текста и поиск по векторам Datastax.
Не забывайте, что каждый раз, когда мы добавляем фотографию, требуется описание фотографии в качестве поля модели данных. Вы берете это описание текста и вызываете API векторного представления текста OpenAI, чтобы получить соответствующий вектор представления. Аналогично, при выполнении поиска по схожести текста, вы также получаете вектор представления для текста поиска. Затем вы можете использовать векторный поиск с помощью метода find и sort для выполнения поиска по схожести.
const description_embedding = await getTextEmbedding(searchTerm); cosnt photos = await Photo.find({}).sort({ $vector: { $meta: description_embedding } }).limit(3);
На следующем скриншоте, как вы можете видеть, мы искали “место для того, чтобы коровы могли поесть”. Затем мы получили два результата фотографий. Оба они содержат траву и имеют определенных травоядных животных на них. Таким образом, результат поиска по схожести текста имеет смысл.
Поиск схожих изображений
Помимо поиска схожести текста, еще одна интересная функция, которую я создал, – это поиск схожести изображений. Сначала необходимо сгенерировать векторное представление изображения. В этот раз вы используете Google MediaPipe для генерации векторного представления изображения, а конкретная модель – mobilenet_v3_large.tflite. Для выполнения этого вы полагаетесь на python-shell для запуска скрипта Python в среде NodeJS. После получения векторов вложений изображений мы можем выполнить векторный поиск.
Здесь у нас есть изображение “машины на закате”. Мы можем найти похожие изображения.
Как вы можете видеть, у нас есть три результата. Все они имеют оттенок заката, и все они как бы следуют определенному паттерну: светлое небо сверху и темная земля снизу.