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-запросов.
Тарифы из текущего каталога
Сейчас не удалось загрузить планы. Смотрите актуальные тарифы на странице цен.