Несколько недель назад мы с коллегой сделали ChatGPT-proxy бота в Telegram, который помогал в наших рабочих чатах и просто развлекал нас. Он написан на TypeScript и потрясающем фреймворке Grammy, использует Open AI API, а именно модель gpt3.5-turbo, которая используется в оригинальном ChatGPT.
![Telegram-бот ChatGPT Telegram-бот ChatGPT](https://habrastorage.org/getpro/habr/upload_files/f5c/891/b5d/f5c891b5dd663b8b0b87ac25a1d6b0e4.png)
UPD: Telegram разбанил нашего бота
![](https://habrastorage.org/getpro/habr/upload_files/24b/c88/ec7/24bc88ec76e89995221506724a2dcf22.png)
Немного о самом боте
Сам по себе бот является простым мостом между Telegram и ChatGPT, при этом он помнит предыдущие сообщения в чате, используя их в качестве контекста очередного вопроса. Кроме того, бот поддерживает групповые чаты. Причём у нас включен Privacy Mode в группах, так что бот видит только те сообщения, которые содержат команду /ask.
![Бот поддерживает групповые чаты Бот поддерживает групповые чаты](https://habrastorage.org/getpro/habr/upload_files/c8f/aaa/a7f/c8faaaa7f35d8b95d95377f0a31276f1.png)
Мы добавили много дополнительного функционала, например, боту можно отправить ссылку на любой сайт/статью, или даже YouTube-видео и задать вопрос, на который бот ответит, добавив в контекст субтитры или контент сайта, который бот получает, рендеря его в Puppeteer. В обоих случаях приходится мириться с ограничением контекста в 4096 токенов в GPT-3.5. В качестве решения нашёлся npm-пакет ts-textrank, который позволил нам суммаризировать содержимое текста до нужной длины, теряя при этом минимум информации, насколько это возможно.
![Бот умеет смотреть видео на YouTube Бот умеет смотреть видео на YouTube](https://habrastorage.org/getpro/habr/upload_files/f38/15c/559/f3815c559c8a692c8507fbd52d78caa8.png)
![Бот умеет ходить по ссылкам и читать статьи Бот умеет ходить по ссылкам и читать статьи](https://habrastorage.org/getpro/habr/upload_files/0a2/1e5/e2a/0a21e5e2a66e2923888ce14848a7a7d0.png)
![Бот может общаться голосом Бот может общаться голосом](https://habrastorage.org/getpro/habr/upload_files/f3e/c9d/833/f3ec9d833189f244856ebf71329cb65f.png)
Также мы добавили возможность распознавания голоса через Google Cloud Speech API, но планируем перейти на более мощный Whisper от Open AI. Кстати, эту модель можно поднять хоть у себя дома на GPU, проект лежит на GitHub. Самый большой вариант этой модели, поддерживающий все языки, занимает ~10 GB видеопамяти.
Где распознавание голоса, там и синтезация. В 2023 году такие вещи делаются очень просто, достаточно установить соответствующий npm-пакет и вызвать 1 метод. Кстати, мы планируем генерировать русский голос через Yandex Speech Kit, который даёт гораздо более качественный результат, нежели Google Cloud Text To Speech API.
В итоге наш бот с точки зрения знаний всего и вся с большим отрывом заменил Siri, Алису от Яндекса и тому подобных современных голосовых помощников, и всё это в паре строчек кода, используя 3 npm пакета!
Наконец, в какой-то момент мы научили бота генерировать картинки по текстовому описанию через DALL·E. Единственная проблема состоит в том, что этот API поддерживает только английский язык. Не беда! У нас всегда есть GPT, который может принять инструкцию на русском и подробно проинструктировать своего собрата DALL·E на английском языке. Вообще, возможности применения GPT безграничные, боюсь представить что будет в будущем.
![DALL·E потрясающе рисует котов и собак DALL·E потрясающе рисует котов и собак](https://habrastorage.org/getpro/habr/upload_files/f45/609/cbf/f45609cbfa25fcec3a442aba967a8146.png)
Много чего ещё было добавлено в процессе. Например, настройка креативности ответов бота, набор готовых инструкций, которые задают роль бота в чате (Copilot, интервьювер, генератор бизнес идей, гопник и куча других), можно даже самому написать такую инструкцию через команду /prompt.
Deploy в production
В какой-то момент мы поняли что наш бот разлетелся по чатам наших коллег и друзей, а также по их коллегам и друзьям. Мы решили попробовать монетизировать этот проект, и начали готовить всё к запуску:
Нарисовали и сверстали красивый лендинг
Подключили платёжные системы для рекуррентных платежей
Задеплоили всю инфраструктуру в Google Cloud, используя исключительно Cloud Functons, Cloud Pub/Sub, Cloud SQL и Cloud Redis
Настроили CI/CD через GitHub Actions
Подготовили бота к большой нагрузке, выполнив Deployment Checklist в документации Grammy. Очень важно использовать вебхуки вместо long-polling'a, настроить ratelimiter, чтобы нашего бота не заспамили, а также хранение сессий в Redis.
Настроили Sentry для отслеживания runtime ошибок.
Накидали дашборд в Grafana для мониторинга основных метрик — количество запросов к Open AI API, их status code, latency, и т.д.
Добавили английский язык
Реализовали несколько платных планов с разными ограничениями и функционалом
Добились повышения лимитов биллинга в Open AI до $3200 в месяц.
В целом, инфраструктура получилась очень отказоустойчивой, минималистичной, предсказуемой, масштабируемой и относительно дешёвой (на самом деле пока что Google Cloud для нас бесплатный, поскольку там всем аккаунтам дают $300 при регистрации.)
Реклама
В первые дни мы получили около 5000 пользователей, купив пару постов в Telegram-пабликах, а также настроив таргет в яндексе. Спрос на этого бота у людей огромный. Те, кто купил подписку, пользовались им буквально каждый день.
Через неделю мы купили рекламу в Telegram-паблике на 3.7 млн. подписчиков и ~800 тысяч просмотров постов. Это принесло нам ещё 22000 пользователей.
Фиаско
Спустя чуть больше суток, бот просто пропал, будто его никогда и не существовало. В BotFather он тоже исчез. На саппорт Telegram можно не расчитывать, так как у мессенджера его, как известно, просто не существует. Сейчас мы находимся в полном непонимании что нам делать дальше, как можно вообще развивать какие-то проекты в Telegram, если в какой-то момент твой бизнес может просто исчезнуть, без каких-либо предупреждений и объяснений.
Есть подозрения, что кто-то убедил нашего бота прислать такой ответ, на который можно легко пожаловаться. Проблема в том, что мы не можем наложить никаких ограничений на ответы бота, поскольку это чёрный ящик и в данный момент существует огромное множество jailbreak-ов для обхода встроенной цензуры ChatGPT. Да, есть Moderation API, но, к сожалению, оно поддерживает только английский язык.
Послесловие
Telegram разблокировал нашего бота, но подобная ситуация может случиться с каждым. Поэтому небольшая инструкция как быть, если ваш бот в Телеграме просто испарился.
1) Немедленно обратиться в официальную поддержку ботов @BotSupport подробно описав весь кейс
2) В Телеграме, через меню перейти в раздел «Ask a Question» (Задать вопрос) и продублировать туда всю доступную информацию.
3) Продублировать информацию в чат разработчиков ботов - @BotTalk
4) Если проблему не получилось решить в течении суток-двое: прийдется искать другие пути - вроде публичных постов на Хабре, VC.
Желаем удачи всем тем, кто столкнулся с подобной проблемой. Поддержка сообщила что «Произошла ошибка на стороне Телеграма, которую уже поправили, больше не должно повториться». Вероятно, это жалобы-репорты от конкурентов, другие причины тяжело себе представить.