Search
Write a publication
Pull to refresh
91.96
Cloud.ru
Провайдер облачных сервисов и AI-технологий

Чат-бот с LLM в облаке: опыт Новосибирского государственного университета и инструкция по запуску

Reading time10 min
Views1.8K

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

На связи Роман Дерунец и Иван Бондаренко (@bond005) — научные сотрудники лаборатории прикладных цифровых технологий механико-математического факультета НГУ. В статье поделимся опытом разработки нашего университетского чат-бота: расскажем, зачем он понадобился НГУ, почему мы решили создать его с нуля и что важно знать тем, кто хочет такой же. А еще — поделимся инструкцией, как запустить похожее решение в облаке.

Как в НГУ появилась идея создать своего умного чат-бота

Задачи, которые предстояло выполнять чат-боту

Архитектура чат-бота

Параметры и конфигурация ВМ, на которой разместили чат-бота НГУ

Как запустить подобного чат-бота с LLM в Telegram

Советы для тех, кто тоже хочет развернуть собственный чат-бот с LLM

Наши планы

Как в НГУ появилась идея создать своего умного чат-бота

На базе механико-математического факультета НГУ работает лаборатория прикладных цифровых технологий. Там студенты и преподаватели создают разработки на базе искусственного интеллекта. У нас был опыт работы с языковыми моделями, которые отвечают на основе информации из баз данных.

Мы поговорили с руководством университета, и оно одобрило создание такого чат-бота. А еще разработка получила грант по программе «Приоритет 2030» — она поддерживает инновационные проекты в университетах. 

Задачи, которые предстояло выполнять чат-боту

У НГУ есть внутренние базы данных, в которые подгружены все нужные сведения об университете. Цель создания чат-бота — упростить процесс поиска информации, сократить его до нескольких секунд. Для реализации этой цели чат-бот решает сразу несколько задач:

  1. Разгружает сотрудников университета. Служба поддержки быстрее находит ответы на вопросы и обрабатывает заявки от студентов и коллег: как изменить пароль от личного кабинета или получить доступ к почте. А отдел маркетинга и коммуникаций быстрее находит нужные фотографии, чтобы использовать их для постов в социальных сетях НГУ.

  2. Привлекает абитуриентов. Все, кто интересуется университетом, быстро находят ответы на вопросы по поводу поступления, обучения, кампуса, преподавательского состава. А еще такой чат-бот — дополнительный плюс в глазах абитуриентов, так как заинтересовывает технологиями, которые мы делаем.

  3. Переводит поиск по базе знаний в одно место. Наш чат-бот работает в Telegram. Чтобы что-то найти, не нужно переходить на сайт университета и искать по разным разделам. Всю нужную информацию человек может получить в одном месте.

Кроме этого, мы целенаправленно хотели сделать собственное решение — с небольшими, но заточенными именно под наши задачи моделями. Можно было бы взять Chat GPT, а не обучать собственную LLM, но при работе со своей моделью можно использовать чувствительные данные — без маскинга и опасений, что информация куда-то утечет. Еще нам было важно, чтобы модель отвечала вежливо и учитывала не зарубежные, а российские реалии.

Архитектура чат-бота

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

В ВМ размещены сами LLM: основная и несколько эмбеддеров. Языковая модель, которая лежит в основе чат-бота, разработана у нас в НГУ и выложена в открытый доступ. Эта LLM — Meno-Tiny, в ней 1,5 млрд параметров, что позволяет модели обрабатывать запросы студентов, абитуриентов и сотрудников вуза. Из всех русскоязычных моделей с аналогичным числом параметров Meno-Tiny занимает первое место в бенчмарке МЕРА как инструкционная модель. 

Основная модель генерирует ответ, может переформулировать пользовательский запрос, а также отслеживает контекст. Например, при запросе: «Кто ректор НГУ?» модель ответит: «Михаил Петрович Федорук». Если пользователь спросит: «В каком году он стал ректором?», надо переформулировать запрос, так как для модели, семантического или лексического поиска «он» — это что-то неизвестное. Именно из контекста модель понимает, кто такой «он». 

Модель запоминает диалог и знает, какой фрагмент запроса ей нужно заменить, чтобы найти информацию в БД. Часто это происходит с местоимениями. Пользователи задают уточняющие вопросы, и основная задача — восстановить контекст.

Эмбеддеры построены по другой архитектуре: они переводят запросы пользователя и тексты из базы знаний в векторы. Когда поступает запрос от пользователя, эмбеддер переводит ее в вектор и сравнивает его с векторами из БД, чтобы найти релевантный фрагмент из базы знаний. Так происходит семантический поиск.

Чат-боты — не новая технология, но раньше они работали по заранее заготовленным интентам и ответам для них. Для пользователя это не очень удобно: шаг в сторону от заготовленного интента, и модель ничего не выдаст. В векторных БД можно вести поиск не по точным совпадениям, а по смыслам, то есть производить семантический поиск. В таком случае заранее заготовленные интенты не нужны, и модель может более гибко обрабатывать запросы пользователей.

Также чат-бот способен определить, является ли запрос или ответ токсичным. Для этого задействуем вспомогательные модели и цепочки вызовов основной модели. А чтобы поддерживать актуальность, к разделам БД мы добавили даты — осталось сделать по ним дополнительную сортировку. Тогда модель сможет отделять актуальное от неактуального, выдавать пользователю только свежую информацию.

Параметры и конфигурация ВМ, на которой мы разместили чат-бота

Для размещения выбрали ВМ с GPU 4 vCPU/64 ГБ RAM/1 GPU V100 на облачной платформе Cloud.ru Evolution. Этот инструмент используют для машинного обучения, AI-проектов и обработки трехмерной графики. Мы изучили функционал, познакомились с параметрами и выбрали эту ВМ.

Также у нашего бота нелинейная нагрузка. Например, когда проходит день открытых дверей или начинается приемная кампания после ЕГЭ, нагрузка на бот возрастает — абитуриенты используют его активнее. То же самое во время других мероприятий: конференций, выездов студентов, олимпиад. У ВМ Cloud.ru Evolution есть возможность использовать ресурсы по модели pay-as-you-go, когда платишь только за потребляемые мощности.

А еще обязательно нужен был сервер с GPU — чтобы обрабатывать большие объемы данных и проводить параллельные вычисления. 

Как запустить подобного чат-бота с LLM в Telegram

В инструкции — примерный алгоритм запуска чат-бота в контейнере, созданного через Evolution Container Apps в облаке Cloud.ru. 

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

1. Подготовьте среду, если не сделали этого ранее.

2. Клонируйте или скачайте репозиторий кода c GitVerse. Это необязательный шаг. Вы можете зарегистрироваться в GitVerse, если у вас еще нет аккаунта, и познакомиться с новой системой контроля версий.

В этом репозитории находится готовый образ Telegram-бота на языке Python:

git clone https://gitverse.ru/cloudru/evo-containerapp-telegrambot-webhook-python-sample

3. Зарегистрируйте Telegram-бота:

1. В Telegram найдите BotFather.

 

2. Выполните команду /newbot.

3. Задайте имя (name) и имя пользователя (username) для бота.

Имя пользователя должно оканчиваться на ...Bot или ..._bot. В нашем случае:

  • name: new-bot

  • username: botforlabbot

В результате вы получите токен. Сохраните его — он потребуется на следующих этапах.

4. С помощью команды /setuserpic установите иконку для вашего бота:

4. Соберите образ и присвойте тег. Как создать реестр в сервисе Artifact Registry и получить ключи доступа, описано в шагах 3–5 лабораторной работы. Если реестр и ключи доступа уже есть, можно сразу переходить к сборке образа. Если нужно создать новые или их нет, пройдите шаги 3-5 из лабораторной работы.

Далее — соберите образ и присвойте ему тег, выполнив следующую команду:

docker build --tag <registry_name>.cr.cloud.ru/telegram-bot-ai-example https://gitverse.ru/cloudru/evo-containerapp-telegrambot-foundation-models-sample.git#master --platform linux/amd64

5. Загрузите Docker-образ в реестр:

1. Загрузите образ в реестр Artifact Registry, выполнив команду:

docker push <registry_name>.cr.cloud.ru/telegram-bot-example

В этой команде:

  • <registry_name> — название реестра, которое вы указывали при его создании в Artifact Registry;

  • telegram-bot-ai-example — название будущего репозитория в Artifact Registry. Название репозитория соответствует имени Docker-образа.

2. В личном кабинете перейдите в раздел «Реестры»«Репозитории»«Артефакты» сервиса Artifact Registry и убедитесь, что образ загружен.

6. Создайте и запустите контейнер:

1. Перейдите в сервис Container Apps через меню в левом верхнем углу экрана.

 2. Нажмите «Создать».

3. Укажите название контейнера и выберите его конфигурацию.

4. Выберите реестр, репозиторий и тег Docker-образа, который вы загрузили в Artifact Registry.

5. Укажите порт контейнера — 5000.

6. Перейдите на вкладку «Переменные» и добавьте несколько переменных окружения:

7. Опционально можно также настроить масштабирование контейнеров.

8. Нажмите «Создать».

9. Дождитесь, когда контейнер и ревизия перейдут в статус «Выполняется».

 

7. Добавьте вебхук в Telegram. Чтобы бот получал сообщения из Telegram, добавьте вебхук:

1. Откройте любой браузер.

2. В адресной строке введите по очереди запросы.

  • Проверьте, существуют ли вебхуки:

— https://api.telegram.org/bot{BOT_TOKEN}/getWebhookInfo

— {BOT_TOKEN} здесь и далее — токен, который был сгенерирован при регистрации бота в BotFather.

 

  • {PUBLIC_URL} — публичный URL-адрес, который был сгенерирован при создании контейнера в Container Apps.

8. Проверьте работу Telegram-бота. Вызовите бота в Telegram по имени пользователя (username) и проверьте его работу, выполнив команду /start.

Готово. Кстати, сейчас со всеми настройками и запуском ВМ помогает новый AI-помощник Клаудия. Жаль, что этой фичи еще не было, когда мы размещали своего бота.

Советы для тех, кто тоже хочет развернуть собственный чат-бот с LLM

Нюансов много: нужно подумать и об архитектуре проекта, и о том, как будет выстроена командная работа. Что можно порекомендовать исходя из нашего опыта?

Первый совет: продумать архитектуру бота, быть готовыми перенастроить ее в процессе. Надо уделить большое внимание тому, как в работу встроены базы данных, LLM и эмбеддеры, как они взаимодействуют, в одном или в разных контейнерах находятся модель и сам бот. Предусмотреть, как будут обновляться базы данных, какой контекст из них модель будет подтягивать для ответов.

Отдельно стоит подумать о масштабировании, как модель будет справляться с пиковыми нагрузками — например, во время приемной кампании после ЕГЭ или в дни открытых дверей. Лучше продумать как можно больше на этапе разработки, чем потом переписывать и рефакторить большую часть проекта.

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

Третий совет: организовать грамотный менеджмент проекта. Мы делали проект командой студентов и преподавателей: у всех разная занятость и разный опыт. Обязательно должен быть какой-то трекер и человек, который следит за процессами, но не «душит» людей контролем. 

Четвертый совет: пробовать новое и одновременно — присматриваться к существующим решениям. Не стоит изобретать велосипед там, где есть проверенные инструменты и подходы. Но и ограничиваться только ими не стоит, особенно если специфика проекта требует нестандартных решений. Важно анализировать опыт других — опубликованные решения, кейсы и статьи, — оценивать их применимость к вашей задаче, создавать адаптации или новые компоненты там, где это дает преимущество. Вот как это работало в проекте чат-бота НГУ:

1. Опора на существующее (Retrieval Augmented Generation — RAG). Мы не разрабатывали базовый механизм RAG с нуля, а взяли за основу хорошо зарекомендовавшие себя принципы и фреймворки, активно развивающиеся в сообществе. Это дало нам надежную стартовую платформу и позволило не тратить время на уже решенные задачи.

2. Улучшение готового (Reranker). Мы адаптировали и внедрили reranker — дополнительную модель, которая повысила точность подбора релевантных фрагментов из базы знаний.

3. Создание нового под свои нужды (кастомные адаптации и разработки). Стандартные подходы RAG не всегда идеально ложились на нашу специфическую базу знаний и сценарии использования. Поэтому мы пошли дальше и внедрили:

  • GraphRAG для графа знаний: адаптировали концепцию GraphRAG от исследователей из Microsoft под структуру данных НГУ — так мы превратили нашу базу в граф знаний. Это позволило модели лучше понимать связи между сущностями (факультеты, преподаватели, курсы, правила) и давать более контекстно-точные ответы.

  • Фреймворк RAGU: для эффективной работы с этим графом знаний и реализации наших идей потребовались оптимизации. Так родился наш собственный фреймворк RAGU (RAG Utilities), включающий уникальные наработки для обработки запросов и данных в контексте графа.

  • Авторские решения для обработки текста и диалога: «умный чанкер» и «переписыватель вопросов». Вместо того, чтобы разбивать текст по символам,  мы использовали smart_chunker — он делит информацию на смысловые части (чанки), что критически важно для качества поиска в RAG. А чтобы механизм поиска правильно понимал реплики пользователя в контексте (что значит «он» в следующем вопросе, или что в конкретном диалоге «ИТ» — это «Институт теплофизики», а не «информационные технологии»), мы внедрили компонент для разрешения местоименной анафоры и контекстуальной расшифровки аббревиатур. Это значительно улучшило плавность диалога.

Таким образом, стратегия «пробовать новое + использовать существующее» позволила не утонуть в разработке всего с нуля, взять лучшее из доступного и создать мощные уникальные компоненты конкретно под наши задачи.

Итоги и наши планы

Мы презентовали бота на AINL-2025 — восточноевропейской конференции по искусственному интеллекту и обработке языков. А еще — в формате научной статьи представили наработки нашей команды в области обработки модальностей, отличных от текста. Само решение доступно в тестовом режиме, если абитуриенты есть среди читателей — заходите поспрашивать чат-бота.

Сейчас мы также разрабатываем искусственного семинариста — он будет помогать студентам по разным предметам, отвечать на вопросы по точечным и узкоспециализированным темам. Еще НГУ интересует мультимодальная модерация и копирайтинг данных.

Еще мы дополнительно исследуем способ превращения неструктурированной базы данных в БД с иерархией, с графами, где расположение данных будет иметь древовидную структуру. Это сделает поиск более быстрым и оптимальным. Когда закончим с этим, библиотеку выложим в открытый доступ.

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

А как считаете вы — полезен ли для вуза такой чат-бот? Хотели бы внедрить аналогичное решение у себя?

Tags:
Hubs:
+4
Comments3

Articles

Information

Website
cloud.ru
Registered
Founded
2019
Employees
1,001–5,000 employees
Location
Россия
Representative
Елизавета