VPS с самостоятельным администрированием

Как ограничить расходы AI-бота в Telegram

Небольшой VPS поддерживает Telegram-бота онлайн, а удалённый API выполняет модель. Расход состоит из двух частей: аренды сервера и inference. Готовый пример ограничивает пользователей и число вызовов, но не является сервисом точного денежного бюджета.

Считайте две части отдельно

Месячная сумма = тариф VPS + входные токены + выходные токены. Берите фактическую цену VPS при заказе и текущие цены токенов выбранной текстовой модели. Почасовые цены GPU не заменяют месячный тариф VPS. Остановка бота не отменяет аренду и не возвращает предоплаченный период.

Условные 20 ответов в день за 30 дней со средними 1000 входных токенов, включая историю, и 300 выходными токенами на ответ дают:

  • 600 запросов;
  • 0,6 миллиона входных токенов;
  • 0,18 миллиона выходных токенов.

Если P_in и P_out — цены за миллион токенов в одной валюте, оценка inference равна 0.6 × P_in + 0.18 × P_out. Добавьте цену VPS в той же валюте; конвертацию учитывайте отдельно. Это предполагаемая нагрузка, не измеренный счёт. Реальную сумму определяют фактические токены, ошибки и правила тарификации провайдера.

Используйте реализованные ограничения

Настройка По умолчанию Что ограничивает
ALLOWED_TELEGRAM_USER_IDS 0 при первом запуске Кто может вызвать AI в личном чате
MAX_REQUESTS_PER_DAY 20 Общие попытки AI-вызовов, не лимит каждого пользователя
MAX_INPUT_CHARS 2000 Длину сообщения до обращения к API
MAX_OUTPUT_TOKENS 512 Значение max_tokens в запросе к модели
HISTORY_TURNS 4 Число сохранённых пар вопрос–ответ для контекста

Дневной лимит обновляется в 00:00 UTC и переживает обычный restart благодаря SQLite. Неудачные попытки обращения к модели тоже учитываются. Команды, запрещённые пользователи и слишком длинный ввод не вызывают inference. После правки .env пересоздайте контейнер: restart не загружает новые значения.

Не представляйте «20 запросов» как фиксированную сумму. Символы не равны токенам, история увеличивает prompt, токенизация зависит от языка, а обработка лимита ответа — от модели и API. До приглашения пользователей выберите текстовую модель, совместимую с Chat Completions этого примера.

Не превращайте неопределённый результат в двойное списание

Перед inference бот сохраняет обновление и попытку. Платный вызов не повторяется автоматически. При сетевом таймауте модель уже могла отработать и списать деньги. Если готовый ответ не доставлен в Telegram, выполненная работа провайдера не отменяется.

Пользователь может осознанно отправить вопрос снова: это новая попытка с возможным новым списанием. Слепые перезапуски, восстановление старых баз и повтор сообщений не являются возвратом оплаты. Старый бэкап способен откатить курсор и бюджет: см. состояние бота.

Проверяйте расходы без лишних вызовов

Начните со своего ID в allowlist и отдельного API-ключа. Сначала проверьте /id — он не обращается к модели. Затем намеренно отправьте один короткий вопрос и сопоставьте ответ с использованием API в аккаунте. Открывайте доступ другим после проверки endpoint, модели и поведения. Удаление ID и пересоздание контейнера запрещает новые запросы от него, но не отменяет уже отправленные задания.

В примере нет сверки счетов или отдельного billing dashboard. Используйте существующие данные об использовании API. Жёсткий денежный потолок требует отдельной реализации с учётом тарификации и usage конкретного провайдера; счётчик из инструкции такого обещания не даёт.

Далее: запуск и диагностика ошибок авторизации, квоты и таймаутов. Mini App для проверки личности вообще не делает inference-запросов.

Тарифы из текущего каталога

Сейчас не удалось загрузить планы. Смотрите актуальные тарифы на странице цен.