Реализация кастомизируемого бота на основе ИИ-моделей
У нашего клиента возникла потребность в создании такого бота, который бы не только давал возможность общаться с использованием общедоступной языковой модели, но и мог демонстрировать ответы на узкоспециализированные вопросы, иметь интеграцию с кастомизируемым интерфейсом.
Вышесказанное стало заданием и мы приступили к выполнению. В качестве управляющего языковыми моделями модулями было выбрано решение Ollama. Выбор решения был продиктован конфиденциальностью хранения данных запросов и ответов, возможностью работы с языковыми модулями Lama, возможность развертывания проекта полностью локально.
Выбор Llama был продиктован открытостью проекта, его активным развитием и адекватностью генерируемых ответов.
В качестве front-end решения были использованы: чат-бот телеграмм и собственно разработанный front-end интерфейс.
Интеграция с чат-ботом телеграмм выполнялась с использованием API интерфейса Ollama и прикладного интерфейса telegramm для написания ботов.
Первым этапом, был разработан сервер для телеграмм бота.
Затем, Llama была дообучена, в нее был дозагружен размеченный текст. Этот текст расширяет языковую модель, вводя в нее поле уникальных запросов и ответов, которых нет в стандартной поставке модели. Эти тексты были предоставлены заказчиком и обработаны нами.
Также, мы ограничили спектр ответов от модели, чтобы она работала только в рамках тематики «учеба и наука». Теперь пользователь может получать как общие ответы, так и ответы в рамках дообучения модели.
Настраиваемый интерфейс представляет собой виджет для встраивания на сайт в виде iframe решения, подгружающего с центрального сервера отвечающего за back-end часть, интерфейс.
Макеты интерфейса были реалзованы в sketch, они охватывали несколько популярных разрешений экрана.
Традиционно, для мобильного разрешения была сделана полноэкранная версия для более удобного доступа ко всему интерфейсу бота с кнопкой, позволяющей сокрыть бота. В настольном разрешении бот скрывается за небольшым блоков его вызова и разворачивается в правом нижнем углу сайта. Достаточно классический, но в тоже время удобный прием размещения чат-бота.
Интерфейс решения был реализован по реактивной технологии на архитектурном стеке:
- Python Flask реализует серверную оснастку для обмена данными через запросы/ответы с telegramm api.
- Python numpy добавляет механизм работы с большими данными для обучения модели.
Технологически, построенное решение работает следующим образом:
- Python язык содержащий необходимые библиотеки и для telegram api и для взаимодействия с языковыми моделями. Использованные библиотеки: Flask, Flask-SocketIO, python-telegram-bot, Ollama, Sentence Transformers, FAISS, python-docx. Можно было бы использовать и node.js. В следующем проекте, попробуем такой стек.
- VUE.JS современная реактивная реализация js с использованием composition api. Позволило в проекте создать настраиваемые шаблоны, эффективно переключать цветовые схемы.
- vanilla js современный js дал проекту чистый функциональный код в части клиент-серверного взаимодействия.
Разработанное решение позволило широкий спектр задач:
- Реализовать общение с пользователем с использованием семантической модели языка, что позволило создать эффект присутствия.
- Дало возможности по быстрой кастомизации интерфейса. Что особенно полезно в экосистеме МГУ, в которой различные проекты имеют различное цветовое оформление.
- Позволило использовать собственную закрытую экосистему и дообучить ее в соответствии с полставленными задачами в рамках лексикона МГУ.
