Привет, Хабр! VK совместно с МГТУ им. Н.Э. Баумана много лет активно развивает образовательные программы для студентов. Для этого у нас есть направление VK Education, которое помогает нам обучать студентов по широкому спектру IT и digital-специальностей. Один из совместных проектов – учебный центр для разработчиков на базе МГТУ им Н.Э. Баумана. На протяжении двух лет ребята проходили программу обучения, объединялись в команды и под руководством преподавателей и экспертов из VK создавали собственные проекты по разным направлениям — web-, ML- и Java-разработка высоконагруженных приложений.

Недавно в московском офисе VK состоялась защита выпускных работ. Экспертный совет выбрал лучшие проекты, часть из них удостоилась победы в специальной номинации –  «Выбор ментора».

В этой статье мы познакомим вас с разработками выпускников и расскажем, какие из них стали победителями. С видеопрезентациями работ можно познакомиться в сообществе VK Education ВКонтакте. 

Сервис JobRoadmap для анализа навыков соискателей

Команда 2х2

Участники: Иван Сафронов, Ольга Воронова, Владислав Мельничук, Фёдор Сафонов.

Сегодня много людей хотят попасть на стажировку или на работу в IT-компании. Молодые специалисты не всегда понимают, какие навыки для этого необходимы, как найти подходящую вакансию и как пройти собеседование. Сервис Job Roadmap помогает понять, чего работодатели ждут от соискателей на разных специальностях, исходя из доступных вакансий на платформе HeadHunter. Основные функции сервиса — анализ навыков по выбранной IT-специальности, анализ резюме по навыкам и генерация сопроводительного письма.

Анализ навыков. Указав нужную IT-специальность, в ответ можно получить карту навыков, упоминаемых в вакансиях. Для каждого навыка рассчитывается общая упоминаемость и упоминаемость по опыту работы. По клику на навык доступны его подробное описание и название полезных материалов для изучения. При поиске по стеку технологий нужно указать технологии, которыми вы владеете, и на их основе отобразятся максимально подходящие специальности. По клику мыши можно перейти с карты специальностей на карту навыков, чтобы больше узнать об интересующей специальности.

Анализ резюме по навыкам. Исходя из резюме и желаемой должности сервис определяет, какими навыками вы уже владеете, а какие нужно изучить. По каждому рекомендованному навыку вы получите список полезных ресурсов для улучшения резюме.

Генерация сопроводительного письма. Грамотно составленное сопроводительное письмо увеличивает шансы на отклик от работодателя. Сервис создаёт образец на основе резюме и желаемой вакансии. Для этого необходимо прикрепить резюме и ссылку на интересующую вакансию на HeadHunter.

Технологический стек

Сервис 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 — быстрое развёртывание инфраструктуры

Команда Killer Feature

Участники: Ильяс Нежибицкий, Наталья Скворцова, Виктор Иванов.

Huginn — это open source PaaS-решение для развёртывания инфраструктуры на собственных серверах без специальной технической подготовки. Оно позволяет быстро развернуть Kubernetes-кластер, настроить мониторинг Ingress, а также развернуть ресурсы в кластере. Проект будет интересен малому бизнесу и отдельным разработчикам. 

Развёртывание кластера

Чтобы развернуть проект в Kubernetes-кластере, необходимо развернуть веб-приложение Huginn. Это можно сделать, запустив бинарный релиз из репозитория на GitHub или через лэндинг Huginn. Веб-приложения Huginn разворачиваются на серверах клиента и не требуют внешнего сетевого взаимодействия. Это обеспечивает защиту настройки и поднятия кластера от внешнего вмешательства и повышает отказоустойчивость. 

После создания кластера подключитесь к нему с помощью kubectl и разверните свой проект. Для этого скопируйте конфигурацию kube из Huginn и вставьте в свой конфигурационный файл по пути .kube/config. Huginn автоматически настраивает контроллер ingress-nginx, который позволяет обрабатывать внешние запросы. Достаточно добавить ingress-правило, в котором нужно указать домен и сервис для своего проекта. 

Мониторинг кластера

Сервис отслеживает группы базовых метрик процессора, памяти и сети. Huginn сам настраивает Grafana, Prometheus и Node Exporter во время добавления мастер-ноды в кластер. На основном дашборде можно подробно отслеживать состояние всего кластера, наблюдая изменения показателей во времени. 

Технологический стек

Фронтенд проекта состоит из админ-панели, лендинга и общей библиотеки компонентов. Везде используется React. Для динамического обновления и представления данных использованы веб-сокеты. 

Kubernetes-кластеры развёртываются при помощи стандартной библиотеки Kebeadm. Бэкенд написан на Go, который использует стандартные решения команд Kubernetes для общения с Kube API. Для развёртывания ресурсов и приложений использован Helm Charts. Проект объединён в единый бинарный файл, который является как бэкендом, так и сервером, отдающим файлы статики. 

Тут можно посмотреть репозиторий.

StudyAI — сервис обучения алгоритмии

Команда VVT-i 4.0

Участники: Лев Барабанщиков, Роберт Хажиев, Сергей Голубев, Кирилл Каташинский.

Молодым специалистам может не хватать практики в решении алгоритмических задач. Задач в интернете много, но найти именно ту, которая нужна, бывает непросто. В результате проведенного студентами исследования выяснилось, что более 75% пользователей не могут найти релевантную задачу, а свыше 90% испытывают проблемы с решением найденной. Study AI подберёт задачи с учётом уровня знаний пользователя. Сервис учитывает код решения, количество попыток на решение конкретной задачи и оценки уровня сложности, и подберёт набор тем, которые необходимо изучить, чтобы делать задачи в смежных темах. 

StudyAI поддерживает адаптивный интерфейс. Это означает, что платформа может быть использована и на десктопе, и в мобильных устройствах. На телефоне можно искать задачи с помощью рекомендаций или напрямую с использованием фильтров. Также можно смотреть задачу и лайкать ее. На странице «Избранного» будет собрано всё, что понравилось. 

В основе сервиса лежит нейронная сеть bert.cpp, к которой добавили несколько слоёв. На вход подаётся код, который решает задачу, а сеть переводит его в 256-мерное векторное представление. Эти представления формируют что-то вроде пространства, в котором похожие задачи и решения находятся рядом. Благодаря этому сервис может рекомендовать смежные темы и задачи.

В первую очередь проект будет интересен школьникам старших классов, готовящихся к олимпиадам по программированию, а также студентам и всем, кому нравится решать задачи по алгоритмии.

Технологический стек

Бэкенд написан на Go. Он соединяет другие части проекта: ML, базу данных, тестирующую систему и интеграцию с ChatGPT. В качестве СУБД взят PostgreSQL. Для написания ML и интеграции с ChatGPT использован Python с библиотекой Fast API. Нейронная сеть реализована с помощью PyTorch, а поиск задач — с помощью FAISS. Фронтенд написан на JavaScript с использованием фреймворка Vue и библиотеки Vuetify. Для отдачи фронтенда и статики и маршрутизации запросов используется Nginx. Для поддержки актуальности проекта настроены конвейеры с автоматической сборкой новой версии образа, её выкаткой и последующими уведомлениями в Telegram-канале разработчиков.

Тут можно посмотреть репозиторий.

Health Starts Here — приложение для хранения истории болезней

Команда HeSH

Участники: Виктор Киселев, Константин Костинич, Алексей Склянный, Илья Попов.

Телемедицина — динамично развивающийся рынок. Врачи всё чаще устраивают онлайн-приёмы. Консультации, как правило, проходят в мессенджерах или социальных сетях. Чаты забиваются и отследить необходимую информацию становится всё труднее. Приложение Health Starts Here должно стать виртуальной карточкой пациента, в которой содержатся вся история болезней, рекомендации по лечению, фотографии и расшифровка аудиозаписи приёма.

В приложении есть раздел «Дневник». Записи в нём могут оставлять как врач, так и пациент. Структура раздела немного отличается в зависимости от роли. Врач помогает пациенту не забыть важную информацию о лечении. А пациент описывает состояние здоровья, чтобы врач мог отслеживать динамику заболевания. Поэтому весь анамнез хранится в структурированном виде.

Пациент также может оставлять оценки своего самочувствия. На их основе в «Дневнике» строится график, который покажет динамику состояния, а также позволит быстро переходить на нужные записи. Если пациент забыл сделать запись, приложение отправит напоминание.

Чтобы не переслушивать всю аудиозапись приёма, можно получить текстовую расшифровку, в которой гораздо проще ориентироваться. 

Пациент не всегда отправляет хорошие снимки. Решение этой проблемы — проверка качества фотографии перед отправкой при помощи нейронной сети.

Технологический стек

Серверная часть написана на Go. В качестве СУБД используется PostgreSQL. Утром отдельная go routine отправляет пациентам уведомление при помощи VK API, после чего засыпает на сутки. Все персональные данные пользователей зашифрованы как при передаче, так и на сервере. Каждая нейронная сеть запущена в отдельном микросервисе, а общение с ними происходит по gRPC. Для расшифровки аудиозаписей используется нейросеть OpenAI. Качество фотографий определяется нейросетью с архитектурой hypernetwork, что обеспечивает высокую скорость обработки без потери в качестве.

Врачи чаще всего общаются с пациентами в мессенджерах и социальных сетях. Поэтому в качестве платформы для размещения приложения команда выбрала платформу VK Mini Apps. Библиотека React-компонентов VKUI помогла сделать интерфейс адаптивным и мультиплатформенным, что позволяет быстро и гибко разрабатывать приложения как для мобильных устройств, так и для ПК. Кроме того, интерфейсы на VKUI практически неотличимы от дизайна платформ, внутри которых они открыты.

Тут можно посмотреть репозиторий.

SweetVoice — автоматическая обработка аудиозаписей речи

Команда SweetHash

Участники: Артём Волков, Нураддин Керимов, Никита Гуреев.

Речь окружает нас повсюду. Однако зачастую она неидеальна и содержит множество междометий и слов-паразитов. Дефекты речи усложняют её восприятие. В записанном материале от них можно избавиться при помощи специальных редакторов. Однако это долгий и монотонный процесс, который, кроме того, требует наличия специальных навыков. Сервис SweetVoice умеет делать это автоматически. Пользователю предоставляется результат в виде аудиодорожки с цветными маркерами и расшифровка текста. Маркерами сервис выделяет обнаруженные и обработанные дефекты речи. Для слов-паразитов жёлтый цвет, для междометий — серый. Причём маркеры продублированы на аудиодорожке и в тексте.

Благодаря встроенному аудиоредактору можно легко подкорректировать границы вырезаемых слов, добавить или удалить маркеры. Лишние слова или целые предложения можно вырезать, используя текстовый редактор. Нужный маркер добавится на аудиодорожку автоматически.

Первый этап — очистка шумов из аудио с помощью нейросети Первый этап — очистка шумов из аудио с помощью нейросети DeepFilterNet2. 

Второй этап: очищенное аудио подаётся в нейросеть Whisper, которая преобразует речь в текст. Для определения точных временных промежутков используется Wav2Vec, который размечает звуки и сопоставляет начало и конец слов. Также это помогает справиться с багами Whisper.

Некоторые слова в одном контексте могут быть словами-паразитами, а в другом — нет. Чтобы отличить первый случай от второго, используется классификатор на основе языковой модели BERT. Чтобы распознать междометия, берутся границы слов, ранее распознанные АСР-моделью, затем на промежутках между словами запускается VAD (voice active detector). В интервалах, на которых VAD показывает наличие голоса, распознаются междометия при помощи классификатора на основе аудиоэнкодера Wav2Vec. Далее, когда все ненужные фрагменты определены, сервис обрезает аудио. Чтобы склейка была более гладкой и незаметной, используется Crossfade длиной в 200 мс.

Технологический стек

В основе аудиоредактора лежат библиотека Wavesurfer и библиотека текстового редактора Summernote. Бэкенд работает на Go. Здесь реализован конвейер, через который проходит каждый аудиофайл. В нём происходит взаимодействие с моделями, анализ и обработка аудио.

Каждая ML-модель имеет свой API, благодаря чему с ними удобно взаимодействовать, включать и отключать, добавлять новую функциональность. Репозиторий.

Strawberry — сервис для написания публикаций в соцсетях

Команда Rattlessnake.

Участники: Андрей Коленков, Роман Медников, Василий Ермаков.

Сервис помогает администраторам и редакторам сообществ быстро писать посты в паблики. Приложение может сгенерировать текст для поста, удлинить, укоротить, дописать конец, заменить слова и перефразировать фрагменты. Ключевая особенность — посты генерируются с учётом тематики сообщества и прошлых постов. Нужно просто открыть приложение, выбрать нужное сообщество и функцию создания текста: «Создать готовый к публикации пост по заданной теме», «Создать пост с нуля», «Дописать текст до завершения». 

Затем можно изменить текст будущего поста, сократить его или перефразировать. Можно заменить указанные слова и фразы или автоматически исправить орфографические ошибки.

Тексты генерируются с помощью ChatGPT, для которого команда с помощью prompt engineering разработала шаблоны для генерации. Мини-приложение отправляет на сервер введённый пользователем запрос и список прошлых постов в паблике. Сервер собирает запрос к ChatGPT, нейросеть отвечает текстом поста, сервер его обрабатывает и отправляет обратно пользователю.

Технологический стек

Фронтенд реализован на платформе 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-код или идентификатор конференций (для более активного взаимодействия с докладчиком). 

Элементы соревнования не оставят зрителей равнодушными. В KindaSlides можно настраивать не только длительность викторин, но и количество начисляемых баллов за верный ответ. Также можно включить начисление дополнительных очков самым быстрым участникам.

Зрители могут отреагировать на выступление с помощью выставления разных реакций. Можно задавать вопросы докладчику, просматривать и оценивать чужие вопросы. 

Докладчики могут добавлять опросы, чтобы оценивать настрой аудитории. Это поможет вовлечь как присутствующих в зале зрителей, так и подключившихся дистанционно. В опросах 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 «Системы обработки информации и управления».

Комментарии (0)