![](https://habrastorage.org/getpro/habr/upload_files/7f4/b41/31a/7f4b4131ae213d85f043dd821aeaf6fc.jpg)
Привет, Хабр! VK совместно с МГТУ им. Н.Э. Баумана много лет активно развивает образовательные программы для студентов. Для этого у нас есть направление VK Education, которое помогает нам обучать студентов по широкому спектру IT и digital-специальностей. Один из совместных проектов – учебный центр для разработчиков на базе МГТУ им Н.Э. Баумана. На протяжении двух лет ребята проходили программу обучения, объединялись в команды и под руководством преподавателей и экспертов из VK создавали собственные проекты по разным направлениям — web-, ML- и Java-разработка высоконагруженных приложений.
Недавно в московском офисе VK состоялась защита выпускных работ. Экспертный совет выбрал лучшие проекты, часть из них удостоилась победы в специальной номинации – «Выбор ментора».
В этой статье мы познакомим вас с разработками выпускников и расскажем, какие из них стали победителями. С видеопрезентациями работ можно познакомиться в сообществе VK Education ВКонтакте.
Сервис JobRoadmap для анализа навыков соискателей
Участники: Иван Сафронов, Ольга Воронова, Владислав Мельничук, Фёдор Сафонов.
Сегодня много людей хотят попасть на стажировку или на работу в IT-компании. Молодые специалисты не всегда понимают, какие навыки для этого необходимы, как найти подходящую вакансию и как пройти собеседование. Сервис Job Roadmap помогает понять, чего работодатели ждут от соискателей на разных специальностях, исходя из доступных вакансий на платформе HeadHunter. Основные функции сервиса — анализ навыков по выбранной IT-специальности, анализ резюме по навыкам и генерация сопроводительного письма.
Анализ навыков. Указав нужную IT-специальность, в ответ можно получить карту навыков, упоминаемых в вакансиях. Для каждого навыка рассчитывается общая упоминаемость и упоминаемость по опыту работы. По клику на навык доступны его подробное описание и название полезных материалов для изучения. При поиске по стеку технологий нужно указать технологии, которыми вы владеете, и на их основе отобразятся максимально подходящие специальности. По клику мыши можно перейти с карты специальностей на карту навыков, чтобы больше узнать об интересующей специальности.
![](https://habrastorage.org/getpro/habr/upload_files/f76/528/c66/f76528c66c942320bc32a51172049317.png)
Анализ резюме по навыкам. Исходя из резюме и желаемой должности сервис определяет, какими навыками вы уже владеете, а какие нужно изучить. По каждому рекомендованному навыку вы получите список полезных ресурсов для улучшения резюме.
![](https://habrastorage.org/getpro/habr/upload_files/6e2/d12/2a4/6e2d122a4cbae3de149b52947768d4a6.png)
Генерация сопроводительного письма. Грамотно составленное сопроводительное письмо увеличивает шансы на отклик от работодателя. Сервис создаёт образец на основе резюме и желаемой вакансии. Для этого необходимо прикрепить резюме и ссылку на интересующую вакансию на HeadHunter.
![](https://habrastorage.org/getpro/habr/upload_files/ced/2f4/c70/ced2f4c7011dd0575dc24dfcb10cab85.png)
Технологический стек
Сервис Job Roadmap доступен на десктопе. Фронтенд написан на TypeScript и реализован с помощью библиотеки React. Для управления состояниями используется библиотека Redux. Карта навыков и карта специальностей реализована с помощью библиотеки D3 JS, бэкенд — на основе микросервисной архитектуры. Сервисы написаны на языке Go и Python. Для хранения данных использованы PostgreSQL и Redis. Каждый сервис запускается в отдельном Docker-контейнере. Для проксирования запросов использован Nginx. Также настроен CI/CD для удобства развёртывания изменений сервиса.
Для получения необходимой информации по выбранной IT-специальности сервис обращается к API HeadHunter. Навыки — основная сущность, с которой работает сервис. Они используются для анализа резюме, выдачи рекомендаций и поиска подходящей IT-специализации.
Для поиска по IT-специальности и стеку навыков используется семантический поиск с исправлением опечаток, обработкой синонимов, выделением наиболее подходящих по смыслу профессий или навыку соответственно. Реализован готовый к эксплуатации алгоритм ранжирования с использованием фреймворков Scikit Learn и Fast API.
Для создания персонализированного сопроводительного письма и рекомендаций по навыкам используется ChatGPT. Это позволяет получить качественный текст, связанный с конкретными резюме и вакансией, а также полное описание каждого найденного навыка.
Тут можно посмотреть репозиторий.
Huginn — быстрое развёртывание инфраструктуры
Участники: Ильяс Нежибицкий, Наталья Скворцова, Виктор Иванов.
Huginn — это open source PaaS-решение для развёртывания инфраструктуры на собственных серверах без специальной технической подготовки. Оно позволяет быстро развернуть Kubernetes-кластер, настроить мониторинг Ingress, а также развернуть ресурсы в кластере. Проект будет интересен малому бизнесу и отдельным разработчикам.
Развёртывание кластера
Чтобы развернуть проект в Kubernetes-кластере, необходимо развернуть веб-приложение Huginn. Это можно сделать, запустив бинарный релиз из репозитория на GitHub или через лэндинг Huginn. Веб-приложения Huginn разворачиваются на серверах клиента и не требуют внешнего сетевого взаимодействия. Это обеспечивает защиту настройки и поднятия кластера от внешнего вмешательства и повышает отказоустойчивость.
![](https://habrastorage.org/getpro/habr/upload_files/84a/25d/a67/84a25da677fc9faece0fe4fc4f824823.png)
![](https://habrastorage.org/getpro/habr/upload_files/9c8/3c5/63e/9c83c563eb2bf8dfbfc4d7ebc777b3af.png)
После создания кластера подключитесь к нему с помощью kubectl и разверните свой проект. Для этого скопируйте конфигурацию kube из Huginn и вставьте в свой конфигурационный файл по пути .kube/config. Huginn автоматически настраивает контроллер ingress-nginx, который позволяет обрабатывать внешние запросы. Достаточно добавить ingress-правило, в котором нужно указать домен и сервис для своего проекта.
![](https://habrastorage.org/getpro/habr/upload_files/204/8e5/bb1/2048e5bb1cbbeba5835f09b6216ef461.png)
Мониторинг кластера
Сервис отслеживает группы базовых метрик процессора, памяти и сети. Huginn сам настраивает Grafana, Prometheus и Node Exporter во время добавления мастер-ноды в кластер. На основном дашборде можно подробно отслеживать состояние всего кластера, наблюдая изменения показателей во времени.
Технологический стек
Фронтенд проекта состоит из админ-панели, лендинга и общей библиотеки компонентов. Везде используется React. Для динамического обновления и представления данных использованы веб-сокеты.
Kubernetes-кластеры развёртываются при помощи стандартной библиотеки Kebeadm. Бэкенд написан на Go, который использует стандартные решения команд Kubernetes для общения с Kube API. Для развёртывания ресурсов и приложений использован Helm Charts. Проект объединён в единый бинарный файл, который является как бэкендом, так и сервером, отдающим файлы статики.
Тут можно посмотреть репозиторий.
StudyAI — сервис обучения алгоритмии
Участники: Лев Барабанщиков, Роберт Хажиев, Сергей Голубев, Кирилл Каташинский.
Молодым специалистам может не хватать практики в решении алгоритмических задач. Задач в интернете много, но найти именно ту, которая нужна, бывает непросто. В результате проведенного студентами исследования выяснилось, что более 75% пользователей не могут найти релевантную задачу, а свыше 90% испытывают проблемы с решением найденной. Study AI подберёт задачи с учётом уровня знаний пользователя. Сервис учитывает код решения, количество попыток на решение конкретной задачи и оценки уровня сложности, и подберёт набор тем, которые необходимо изучить, чтобы делать задачи в смежных темах.
![](https://habrastorage.org/getpro/habr/upload_files/8ed/74a/a09/8ed74aa094713dc3ebbee6be90f12372.png)
![](https://habrastorage.org/getpro/habr/upload_files/fbc/e7c/4f3/fbce7c4f30b234da62e5575d752d3de3.png)
StudyAI поддерживает адаптивный интерфейс. Это означает, что платформа может быть использована и на десктопе, и в мобильных устройствах. На телефоне можно искать задачи с помощью рекомендаций или напрямую с использованием фильтров. Также можно смотреть задачу и лайкать ее. На странице «Избранного» будет собрано всё, что понравилось.
В основе сервиса лежит нейронная сеть bert.cpp, к которой добавили несколько слоёв. На вход подаётся код, который решает задачу, а сеть переводит его в 256-мерное векторное представление. Эти представления формируют что-то вроде пространства, в котором похожие задачи и решения находятся рядом. Благодаря этому сервис может рекомендовать смежные темы и задачи.
![](https://habrastorage.org/getpro/habr/upload_files/f9c/f15/2ad/f9cf152ad7b82341e0b4153bee300e33.png)
В первую очередь проект будет интересен школьникам старших классов, готовящихся к олимпиадам по программированию, а также студентам и всем, кому нравится решать задачи по алгоритмии.
Технологический стек
Бэкенд написан на Go. Он соединяет другие части проекта: ML, базу данных, тестирующую систему и интеграцию с ChatGPT. В качестве СУБД взят PostgreSQL. Для написания ML и интеграции с ChatGPT использован Python с библиотекой Fast API. Нейронная сеть реализована с помощью PyTorch, а поиск задач — с помощью FAISS. Фронтенд написан на JavaScript с использованием фреймворка Vue и библиотеки Vuetify. Для отдачи фронтенда и статики и маршрутизации запросов используется Nginx. Для поддержки актуальности проекта настроены конвейеры с автоматической сборкой новой версии образа, её выкаткой и последующими уведомлениями в Telegram-канале разработчиков.
Тут можно посмотреть репозиторий.
Health Starts Here — приложение для хранения истории болезней
Участники: Виктор Киселев, Константин Костинич, Алексей Склянный, Илья Попов.
Телемедицина — динамично развивающийся рынок. Врачи всё чаще устраивают онлайн-приёмы. Консультации, как правило, проходят в мессенджерах или социальных сетях. Чаты забиваются и отследить необходимую информацию становится всё труднее. Приложение Health Starts Here должно стать виртуальной карточкой пациента, в которой содержатся вся история болезней, рекомендации по лечению, фотографии и расшифровка аудиозаписи приёма.
В приложении есть раздел «Дневник». Записи в нём могут оставлять как врач, так и пациент. Структура раздела немного отличается в зависимости от роли. Врач помогает пациенту не забыть важную информацию о лечении. А пациент описывает состояние здоровья, чтобы врач мог отслеживать динамику заболевания. Поэтому весь анамнез хранится в структурированном виде.
![](https://habrastorage.org/getpro/habr/upload_files/103/4ca/f4d/1034caf4de078669b1bbf88b15753fea.png)
Пациент также может оставлять оценки своего самочувствия. На их основе в «Дневнике» строится график, который покажет динамику состояния, а также позволит быстро переходить на нужные записи. Если пациент забыл сделать запись, приложение отправит напоминание.
![](https://habrastorage.org/getpro/habr/upload_files/ea4/39f/98c/ea439f98c75f5a2336f907b4e6994220.png)
Чтобы не переслушивать всю аудиозапись приёма, можно получить текстовую расшифровку, в которой гораздо проще ориентироваться.
![](https://habrastorage.org/getpro/habr/upload_files/036/f56/5c7/036f565c7ebe7fae802b71cdc9899a7c.png)
Пациент не всегда отправляет хорошие снимки. Решение этой проблемы — проверка качества фотографии перед отправкой при помощи нейронной сети.
Технологический стек
Серверная часть написана на Go. В качестве СУБД используется PostgreSQL. Утром отдельная go routine отправляет пациентам уведомление при помощи VK API, после чего засыпает на сутки. Все персональные данные пользователей зашифрованы как при передаче, так и на сервере. Каждая нейронная сеть запущена в отдельном микросервисе, а общение с ними происходит по gRPC. Для расшифровки аудиозаписей используется нейросеть OpenAI. Качество фотографий определяется нейросетью с архитектурой hypernetwork, что обеспечивает высокую скорость обработки без потери в качестве.
Врачи чаще всего общаются с пациентами в мессенджерах и социальных сетях. Поэтому в качестве платформы для размещения приложения команда выбрала платформу VK Mini Apps. Библиотека React-компонентов VKUI помогла сделать интерфейс адаптивным и мультиплатформенным, что позволяет быстро и гибко разрабатывать приложения как для мобильных устройств, так и для ПК. Кроме того, интерфейсы на VKUI практически неотличимы от дизайна платформ, внутри которых они открыты.
Тут можно посмотреть репозиторий.
SweetVoice — автоматическая обработка аудиозаписей речи
Участники: Артём Волков, Нураддин Керимов, Никита Гуреев.
Речь окружает нас повсюду. Однако зачастую она неидеальна и содержит множество междометий и слов-паразитов. Дефекты речи усложняют её восприятие. В записанном материале от них можно избавиться при помощи специальных редакторов. Однако это долгий и монотонный процесс, который, кроме того, требует наличия специальных навыков. Сервис SweetVoice умеет делать это автоматически. Пользователю предоставляется результат в виде аудиодорожки с цветными маркерами и расшифровка текста. Маркерами сервис выделяет обнаруженные и обработанные дефекты речи. Для слов-паразитов жёлтый цвет, для междометий — серый. Причём маркеры продублированы на аудиодорожке и в тексте.
![](https://habrastorage.org/getpro/habr/upload_files/ac4/797/403/ac4797403c2d37bd2e9a7392e08c614b.png)
Благодаря встроенному аудиоредактору можно легко подкорректировать границы вырезаемых слов, добавить или удалить маркеры. Лишние слова или целые предложения можно вырезать, используя текстовый редактор. Нужный маркер добавится на аудиодорожку автоматически.
![](https://habrastorage.org/getpro/habr/upload_files/a0f/128/de3/a0f128de3e5ad8ac51204a186c5a4082.png)
Первый этап — очистка шумов из аудио с помощью нейросети Первый этап — очистка шумов из аудио с помощью нейросети DeepFilterNet2.
![](https://habrastorage.org/getpro/habr/upload_files/268/ec6/24a/268ec624a26741a71cfe96ef631ad666.png)
Второй этап: очищенное аудио подаётся в нейросеть Whisper, которая преобразует речь в текст. Для определения точных временных промежутков используется Wav2Vec, который размечает звуки и сопоставляет начало и конец слов. Также это помогает справиться с багами Whisper.
Некоторые слова в одном контексте могут быть словами-паразитами, а в другом — нет. Чтобы отличить первый случай от второго, используется классификатор на основе языковой модели BERT. Чтобы распознать междометия, берутся границы слов, ранее распознанные АСР-моделью, затем на промежутках между словами запускается VAD (voice active detector). В интервалах, на которых VAD показывает наличие голоса, распознаются междометия при помощи классификатора на основе аудиоэнкодера Wav2Vec. Далее, когда все ненужные фрагменты определены, сервис обрезает аудио. Чтобы склейка была более гладкой и незаметной, используется Crossfade длиной в 200 мс.
Технологический стек
В основе аудиоредактора лежат библиотека Wavesurfer и библиотека текстового редактора Summernote. Бэкенд работает на Go. Здесь реализован конвейер, через который проходит каждый аудиофайл. В нём происходит взаимодействие с моделями, анализ и обработка аудио.
Каждая ML-модель имеет свой API, благодаря чему с ними удобно взаимодействовать, включать и отключать, добавлять новую функциональность. Репозиторий.
Strawberry — сервис для написания публикаций в соцсетях
Участники: Андрей Коленков, Роман Медников, Василий Ермаков.
Сервис помогает администраторам и редакторам сообществ быстро писать посты в паблики. Приложение может сгенерировать текст для поста, удлинить, укоротить, дописать конец, заменить слова и перефразировать фрагменты. Ключевая особенность — посты генерируются с учётом тематики сообщества и прошлых постов. Нужно просто открыть приложение, выбрать нужное сообщество и функцию создания текста: «Создать готовый к публикации пост по заданной теме», «Создать пост с нуля», «Дописать текст до завершения».
![](https://habrastorage.org/getpro/habr/upload_files/a09/994/6ab/a099946ab728010f1a4957c91b4eead6.png)
Затем можно изменить текст будущего поста, сократить его или перефразировать. Можно заменить указанные слова и фразы или автоматически исправить орфографические ошибки.
![](https://habrastorage.org/getpro/habr/upload_files/af7/23b/ff1/af723bff184233ce6a68965951ec6450.png)
Тексты генерируются с помощью ChatGPT, для которого команда с помощью prompt engineering разработала шаблоны для генерации. Мини-приложение отправляет на сервер введённый пользователем запрос и список прошлых постов в паблике. Сервер собирает запрос к ChatGPT, нейросеть отвечает текстом поста, сервер его обрабатывает и отправляет обратно пользователю.
![](https://habrastorage.org/getpro/habr/upload_files/f7f/93d/375/f7f93d375c3a5469c108d73fac98d02b.png)
Технологический стек
Фронтенд реализован на платформе VK Mini Apps. При разработке в качестве инструментов использовались React JS, VKUI и VK Bridge. VKUI предоставляет готовый набор компонентов интерфейса, который реализует поведение и стилистику экосистемы VK. VK Bridge обеспечивает интеграцию с сервисами VK, благодаря которой реализуются такие функции как публикация записей, аутентификация пользователей, хранение временных данных о пользователе.
Серверная часть состоит из двух хостов. На первом запущен Nginx и Airflow, а на втором — бэкенд приложения, база данных для хранения постов и статистики и PHP MyAdmin. Бэкенд написан на Python с использованием фреймворка FastAPI.
Для генерации текста используется Open AI, GPT-3.5. Все сервисы запущены в Docker-контейнерах, настроено авторазвёртывание. Запрос пользователя приходит на первый сервер Nginx, затем проксируется в приложение на втором сервере в США. Там происходит обращение к API ChatGPT и сохранение в базу данных MariaDB.
Для управления базой данных используется PHP MyAdmin. В базе помимо постов хранится обратная связь от пользователей. Все полученные данные позже используются для регулярной аналитики, которая запускается и собирается с помощью Airflow. Система анализирует, какие методы чаще всего используют пользователи, чтобы расставить приоритеты при разработке приложений.
Тут можно посмотреть репозиторий.
KindaSlides — сервис для презентаций
Участники: Павел Калашков, Марат Гасанов, Антон Мужецкий.
KindaSlides — сервис для докладчиков, которые участвуют в очных и дистанционных конференциях. Он позволяет с помощью интерактивных презентаций давать обратную связь, ставить реакции, задавать вопросы и проводить викторины и опросы. Зрители могут подключиться к демонстрации со своих телефонов, используя QR-код или идентификатор конференций (для более активного взаимодействия с докладчиком).
![](https://habrastorage.org/getpro/habr/upload_files/d83/8ba/0a3/d838ba0a3149953bc751f0418671b27b.png)
![](https://habrastorage.org/getpro/habr/upload_files/e22/93d/85c/e2293d85cacc9bf05906f0b089974cde.png)
Элементы соревнования не оставят зрителей равнодушными. В KindaSlides можно настраивать не только длительность викторин, но и количество начисляемых баллов за верный ответ. Также можно включить начисление дополнительных очков самым быстрым участникам.
Зрители могут отреагировать на выступление с помощью выставления разных реакций. Можно задавать вопросы докладчику, просматривать и оценивать чужие вопросы.
![](https://habrastorage.org/getpro/habr/upload_files/aad/786/46c/aad78646ca2c290812d0603f05701d28.png)
Докладчики могут добавлять опросы, чтобы оценивать настрой аудитории. Это поможет вовлечь как присутствующих в зале зрителей, так и подключившихся дистанционно. В опросах KindaSlides можно настроить цвета вопросов, ответов и фона всего слайда, а также способ отображения результатов.
Технологический стек
TypeScript
React
Chart.js
D3
Go
Python
PostgreSQL
Nginx
Docker
gRPC
Репозиторий:
Кто победил?
В этом году в номинации «Выбор жюри» победили сразу две команды. Ребята, которые создали инструмент автоматизации обработки аудио SweetVoice (команда SweetHash) и команда VVT-i 4.0, которая разработала сервис для решения алгоритмических задач StudyAI. В номинации «Выбор менторов» победил PAAS-сервис Huginn, который позволяет в пару кликов разворачивать инфраструктуру для крупных интернет-сервисов (команда Killer feature).
Состав жюри
Алексей Беляев, директор по исследованиям в коммерческом департаменте VK;
Кирилл Юхин, технический директор R&D, VK Tech;
Станислав Усольцев, заместитель технического директора по системной разработке в департаменте рекламных технологий VK;
Дмитрий Плешаков, директор по продукту VK Teams;
Александр Швец, директор по информационным технологиям и защите приватности пользователей в департаменте информационных технологий VK;
Владимир Ицыксон, директор Высшей школы интеллектуальных систем и суперкомпьютерных технологий, СПБПУ;
Павел Дробинцев, директор Высшей школы программной инженерии СПБПУ;
Андрей Пролетарский, декан факультета «Информатика и системы управления», д.т.н., профессор, руководитель НУК «Информатика и системы управления» Научно-учебного комплекса ИУ;
Валерий Терехов, заведующий кафедрой ИУ5 «Системы обработки информации и управления».