Несколько недель назад мы с коллегой сделали ChatGPT-proxy бота в Telegram, который помогал в наших рабочих чатах и просто развлекал нас. Он написан на TypeScript и потрясающем фреймворке Grammy, использует Open AI API, а именно модель gpt3.5-turbo, которая используется в оригинальном ChatGPT.
Telegram-бот ChatGPT
Бот поддерживает групповые чаты
Мы добавили много дополнительного функционала, например, боту можно отправить ссылку на любой сайт/статью, или даже YouTube-видео и задать вопрос, на который бот ответит, добавив в контекст субтитры или контент сайта, который бот получает, рендеря его в Puppeteer. В обоих случаях приходится мириться с ограничением контекста в 4096 токенов в GPT-3.5. В качестве решения нашёлся npm-пакет ts-textrank, который позволил нам суммаризировать содержимое текста до нужной длины, теряя при этом минимум информации, насколько это возможно.
Бот умеет смотреть видео на YouTube
Бот умеет ходить по ссылкам и читать статьи
Бот может общаться голосом
Также мы добавили возможность распознавания голоса через 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 потрясающе рисует котов и собак
Много чего ещё было добавлено в процессе. Например, настройка креативности ответов бота, набор готовых инструкций, которые задают роль бота в чате (Copilot, интервьювер, генератор бизнес идей, гопник и куча других), можно даже самому написать такую инструкцию через команду /prompt.
Через неделю мы купили рекламу в Telegram-паблике на 3.7 млн. подписчиков и ~800 тысяч просмотров постов. Это принесло нам ещё 22000 пользователей.
Есть подозрения, что кто-то убедил нашего бота прислать такой ответ, на который можно легко пожаловаться. Проблема в том, что мы не можем наложить никаких ограничений на ответы бота, поскольку это чёрный ящик и в данный момент существует огромное множество jailbreak-ов для обхода встроенной цензуры ChatGPT. Да, есть Moderation API, но, к сожалению, оно поддерживает только английский язык.
Telegram-бот ChatGPT
Немного о самом боте
Сам по себе бот является простым мостом между Telegram и ChatGPT, при этом он помнит предыдущие сообщения в чате, используя их в качестве контекста очередного вопроса. Кроме того, бот поддерживает групповые чаты. Причём у нас включен Privacy Mode в группах, так что бот видит только те сообщения, которые содержат команду /ask.Бот поддерживает групповые чаты
Мы добавили много дополнительного функционала, например, боту можно отправить ссылку на любой сайт/статью, или даже YouTube-видео и задать вопрос, на который бот ответит, добавив в контекст субтитры или контент сайта, который бот получает, рендеря его в Puppeteer. В обоих случаях приходится мириться с ограничением контекста в 4096 токенов в GPT-3.5. В качестве решения нашёлся npm-пакет ts-textrank, который позволил нам суммаризировать содержимое текста до нужной длины, теряя при этом минимум информации, насколько это возможно.
Бот умеет смотреть видео на YouTube
Бот умеет ходить по ссылкам и читать статьи
Бот может общаться голосом
Также мы добавили возможность распознавания голоса через 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 потрясающе рисует котов и собак
Много чего ещё было добавлено в процессе. Например, настройка креативности ответов бота, набор готовых инструкций, которые задают роль бота в чате (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 в месяц.
Реклама
В первые дни мы получили около 5000 пользователей, купив пару постов в Telegram-пабликах, а также настроив таргет в яндексе. Спрос на этого бота у людей огромный. Те, кто купил подписку, пользовались им буквально каждый день.Через неделю мы купили рекламу в Telegram-паблике на 3.7 млн. подписчиков и ~800 тысяч просмотров постов. Это принесло нам ещё 22000 пользователей.
Фиаско
Спустя чуть больше суток, бот просто пропал, будто его никогда и не существовало. В BotFather он тоже исчез. На саппорт Telegram можно не расчитывать, так как у месенджера его, как известно, просто не существует. Сейчас мы находимся в полном непонимании что нам делать дальше, как можно вообще развивать какие-то проекты в Telegram, если в какой-то момент твой бизнес может просто исчезнуть, без каких-либо предупреждений и объяснений. В данный момент мы запустили бота по новому адресу gpt_askbot, надеемся что вернём доступ к первоначальному GPTaskBot.Есть подозрения, что кто-то убедил нашего бота прислать такой ответ, на который можно легко пожаловаться. Проблема в том, что мы не можем наложить никаких ограничений на ответы бота, поскольку это чёрный ящик и в данный момент существует огромное множество jailbreak-ов для обхода встроенной цензуры ChatGPT. Да, есть Moderation API, но, к сожалению, оно поддерживает только английский язык.
Telegram удалил нашего ChatGPT-бота на 27,000 пользователей без объяснения причин
Несколько недель назад мы с коллегой сделали ChatGPT-proxy бота в Telegram, который помогал в наших рабочих чатах и просто развлекал нас. Он написан на TypeScript и потрясающем фреймворке Grammy,...
habr.com