Боты
Как запустить Telegram-бота с нейросетью
Коротко
Telegram-бот с нейросетью запускается так же, как любой другой бот: вы загружаете код в Netrun, платформа сама собирает проект и держит бота включённым. Ключ от API модели при этом кладут не в код, а в секреты: платформа спросит его при настройке, хранит зашифрованным и подставляет боту при запуске. Доступ к самой нейросети платформа не выдаёт: ключ вы получаете у поставщика модели сами и токены оплачиваете ему же. Бот не засыпает, будить его некому, поэтому на бесплатном тарифе ему дано три дня работы, а для постоянной нужен тариф Pro.
Telegram-бот с нейросетью снаружи выглядит как магия, а внутри это обычный бот: он принимает сообщение, отправляет его в API модели, ждёт ответ и пересылает его человеку. Всё сложное начинается там же, где и у любого бота — его надо где-то держать включённым круглосуточно. Обычно это значит арендовать сервер, поставить туда Python, настроить автозапуск, следить, чтобы процесс не упал, и отдельно волноваться, чтобы ключ от платной модели не утёк вместе с кодом.
В Netrun вы загружаете папку с кодом, платформа сама понимает язык, ставит зависимости, запускает бота и перезапускает его при сбое, а ключ спрашивает отдельно и хранит зашифрованным. Одну вещь важно сказать честно сразу: доступ к нейросети мы не даём. Netrun не прокси и не VPN, ключей от моделей не выдаёт и трафик к ним не открывает — мы отвечаем за то, чтобы ваш бот работал, а ключ и оплата токенов остаются между вами и поставщиком модели.
Уберите ключ от нейросети из кода#
Это самый важный шаг, и он же самый частый провал. Ключ от API модели — это доступ к деньгам: попав в публичный репозиторий или в архив, он находится чужими людьми за часы, и токены тратят за ваш счёт. Читайте ключ из переменной окружения, а само значение введите при настройке проекта в Netrun: платформа хранит его зашифрованным и подставляет боту при запуске, в коде его не будет.
Задайте адрес API той же настройкой#
У большинства библиотек для работы с моделями базовый адрес API задаётся переменной окружения или параметром клиента. Если вы ходите не в стандартный сервис, а через совместимый шлюз или к другому поставщику, это настройка вашего кода: прочитайте адрес из окружения так же, как ключ, и введите его в секретах. Тогда сменить поставщика можно будет без правки кода, просто изменив значение.
Увеличьте таймауты и покажите статус «печатает»#
Ответ нейросети идёт секунды, а иногда десятки секунд, и стандартных таймаутов часто не хватает — запрос обрывается, бот молчит, пользователь думает, что всё сломалось. Поднимите таймаут запроса к модели и таймаут HTTP-клиента вашей библиотеки для Telegram, а сразу после получения сообщения отправляйте статус «печатает». Это ничего не ускоряет, но человек видит, что бот жив, и не жмёт кнопку пять раз подряд.
Сохраните историю диалога в постоянную папку#
Чтобы бот помнил предыдущие сообщения, историю надо где-то держать. Обычный словарь в памяти процесса выглядит рабочим ровно до первого перезапуска: после обновления кода или сбоя бот забывает всех. Пишите историю в постоянную папку проекта /data — она переживает публикацию новой версии и перезапуск. Готовой базы данных платформа не предлагает: если диалогов много и нужен поиск по ним, поднимите базу своим файлом docker-compose рядом с приложением или возьмите внешнюю.
Загрузите код и заберите работающего бота#
Принесите проект ZIP-архивом или импортом репозитория с GitHub, в том числе приватного. Netrun определит язык, поставит зависимости, спросит токен бота от BotFather и ключ модели, запустит бота и будет следить, чтобы он не лежал после сбоя. Логи видны в кабинете в реальном времени, поэтому ошибку вроде неверного ключа видно сразу, а не по молчанию бота.
Следите за расходом токенов и сроком бесплатного тарифа#
Каждое сообщение пользователя — это платный запрос к модели, и оплачиваете его вы напрямую поставщику: в стоимость платформы токены не входят. Поставьте лимит расхода в личном кабинете поставщика модели и ограничьте длину истории, которую отправляете в каждый запрос. И помните про режим работы: бот не засыпает, поэтому на бесплатном тарифе ему дано три дня, за сутки до выключения придёт предупреждение, а для постоянной работы нужен тариф Pro.
В итоге бот с нейросетью — это обычный бот с двумя особенностями: чужой платный ключ, который нельзя держать в коде, и долгие ответы, к которым надо подготовить и таймауты, и пользователя. Всё остальное берёт на себя платформа: сборку, запуск, перезапуск при сбое и постоянную папку для истории диалога. Актуальные тарифы и лимиты видны в кабинете. Попробовать Netrun.
Частые вопросы
Даёт ли Netrun доступ к ChatGPT или другой нейросети?
Нет. Netrun запускает ваш код, но не является ни прокси, ни VPN и не выдаёт ключи от моделей. Ключ вы получаете сами в личном кабинете поставщика модели, а платформе передаёте его как секрет, чтобы бот мог им пользоваться.
Что будет, если ключ от нейросети попадёт в репозиторий?
Его почти наверняка найдут: публичные репозитории регулярно сканируют, и утёкшие ключи начинают тратить в тот же день. Если это уже случилось, отзовите ключ у поставщика модели и выпустите новый, а новое значение введите в секреты проекта, а не в код.
Почему бот долго молчит после вопроса?
Скорее всего он ждёт ответ модели: генерация занимает секунды, а на длинном контексте и дольше. Отправляйте статус «печатает» сразу после получения сообщения и увеличьте таймауты запроса — иначе запрос успевает оборваться и пользователь не получает вообще ничего.
Как сделать, чтобы бот помнил предыдущие сообщения?
Храните историю переписки не в памяти процесса, а в постоянной папке /data: в памяти она живёт до первого перезапуска, а он случается при обновлении кода и после сбоя. Если диалогов много, вместо папки берут базу данных — свою, поднятую файлом docker-compose рядом с приложением, или внешнюю. Заодно ограничьте, сколько последних сообщений отправляете в модель: длинная история дорожает с каждым запросом.
Сколько стоит работа нейросети в боте?
Это отдельные расходы: за токены вы платите поставщику модели по его тарифам, и в стоимость платформы они не входят. Реальный счёт зависит от числа пользователей, длины сообщений и длины истории, которую вы отправляете в каждый запрос, поэтому лимит расхода лучше выставить заранее.
Можно ли использовать не OpenAI, а другого поставщика модели?
Да, если ваша библиотека умеет ходить к нему. Многие клиенты позволяют задать базовый адрес API переменной окружения, так что достаточно указать нужный адрес и ключ в секретах проекта. Со стороны платформы это обычный бот, который ходит во внешний сервис.
Можно ли разместить Telegram-бота?
Да. Загрузите код бота и укажите токен от BotFather (его выдаёт сам Telegram при создании бота) — Netrun запустит бота, VPS и ручная настройка не нужны. На бесплатном тарифе бот работает 3 дня, чтобы вы всё проверили; чтобы он работал круглосуточно, подключите тариф Pro.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Что будет с ботом через 3 дня на бесплатном тарифе?
Бот выключится, но код, настройки и секреты останутся на месте — мы ничего не удаляем. За сутки до выключения мы пришлём предупреждение. Подключите тариф Pro, и бот запустится с того же места и будет работать круглосуточно. Новый бот, загруженный после этого, тоже соберётся, но работать не начнёт: бесплатное время считается на аккаунт, а не на каждый проект.
Сохранятся ли данные при обновлении кода?
Да, если данные лежат в постоянном хранилище. У обычного проекта это папка /data: всё, что приложение туда сохранило, остаётся при обновлении кода и перезапуске, а посмотреть и скачать файлы можно на вкладке «Данные». Если вы описали сервисы сами в docker-compose, постоянное хранилище — это именованные тома из вашего файла, и папки /data у такого проекта нет. Файлы, записанные мимо хранилища, при следующей публикации создаются заново. Ссылка проекта в любом случае остаётся прежней.