Не секрет, что ChatGPT это очень эффективный инструмент, который помогает как в обычной жизни, например, чтобы узнать рецепт борща, так и в профессиональной сфере: от копирайтеров и инста‑блоггеров до программистов. Вместе с тем, аналогов ChatGPT не так много, а её доступность в России ограничена. Более того, подписка на ChatGPT Plus и вовсе платная, стоит, кстати, довольно ощутимых денег (20$ в месяц ~ 2000 рублей). Plus-подписка обещает нам доступ к GPT-4, ускоренные ответы и доступ к плагинам, так стоит ли переплачивать? Я и мои коллеги подумали, что нет и сделали свою ChatGPT Plus.

Вводная
Начнём с того, что у нас уже был аккаунт OpenAI с возможностью оплачивать приходящие счета. Также, некоторое время назад мы зарегистрировались в листе ожидания GPT-4 и успешно получили доступ. Более того, у нас в запасе был небольшой сервер, где можно бы было развернуть всё это дело, чтобы доступ был не только у одного человека, а у всего коллектива. Задача стояла следующим образом: сделать ChatGPT максимально доступным в использовании для повседневных нужд завернув его в Telegram бота, добавить менеджмент баланса токенов для того, чтобы люди, находящие бота, не пользовались им безлимитно а мы за это платили, внедрить "нестандартные" функции: распознавание голоса, чтение PDF-файлов, просмотр видео на YouTube. Давайте начнём наш обзор по порядку.
Архитектура ChatGPT бота в Телеграм
Архитектура нашего проекта проста до безобразия, она состоит из клиента (Telegram Bot), серверной части (отвечает за управление балансом), и БД, в которой хранится информация о пользователе и кол-ве токенов, которое он может использовать. К сожалению или к счастью, основная логика бота написана в клиентской части (например, он же общается с OpenAI API) т.к. мы не видели смысла переносить это куда-либо ещё, да и делалось всё для себя. Ниже на картинке приводим примерную схему архитектуры нашего бота.

Клиент и сервер написаны на Python. Клиент использует библиотеку python-telegram-bot для имплементации бота. Сервер использует FastAPI. И клиент и сервер крутятся в Docker и разворачиваются с помощью Gitlab CI/CD.
Коммуникация с OpenAI производится посредством их библиотеки. Распознавание речи для голосовых сообщений работает на основе модели Whisper. Для "просмотра" видео на YouTube мы вытягиваем название, описание, и субтитры (если есть). Для чтения PDF мы просто конвертируем его в текст.
В целом, разработать такого рода приложение не составляет труда. Но, как известно, по правилу Парето: 70% всего кода, мы разрабатывали 30% от времени. Оставшися 70% времени мы потратили на исправление мелких "косяков", которые входят в те пресловутые 30% кода.
Пример использования: GPT-3.5 vs GPT-4
Давайте сравним, как GPT-3.5 и GPT-4 справятся с задачей написания функции вычисления факториала на Python и её объяснением. Для этого напишем такой промпт: Напиши функцию факториала на питоне и объясни её (кратко).

Очевидно что обе эти имплементации имеют место быть. К слову сказать, GPT-3.5 при ответе на этот промпт тоже иногда использует рекурсивный подход. Также, заметно, что GPT-4 лучше структурирует свой ответ, однако, это довольно таки простая задача для такого сравнения.
Пример использования: просмотр YouTube
Что если вам лень смотреть всё видео целиком, а хочется узнать только самые ключевые моменты из него? В этом вам поможет функция просмотра YouTube. Давайте проверим как она работает на простом примере: мы зададим специфический вопрос к видео и посмотрим, что ответит модель.

Данный пример показывает, что бот на основе ChatGPT реально может сэкономить ваше время и сгенерирует исчерпывающий ответ на вопрос по данному видео. Конечно, эта функция не сработает с видео длиной в несколько часов т.к. размер контекста модели не так велик.
Пример использования: голосовые сообщения
Как-то раз я решил спросить у нашего бота, как перевести слово "не прорезавшийся (зуб)" на немецкий. Вот результат.

За точность перевода ручаться не могу, но моё намерение было распознано правильно, а по сему, расцениваю это как положительный пример.
Пример использования: чтение PDF
Иногда, чтение документов надоедает. А что если отправить пресловутую PDF-ку ChatGPT боту? В этом примере я отправил боту своё резюме и спросил, какими языками программирования я владею.

Бот, в целом, ответил правильно. Но я бы исключил SPARQL и SQL, так как это языки запросов.
Итоги
Данным ботом, написанным нами, я пользуюсь каждый день. В основном он решает мои рутинные технические задачи, которые мне лень "гуглить" (напр. поменять конфиг файл для nginx). В быту, бот помогает разрешать мелкие споры, например, как переводится то или иное слово. Однако, нужно подходить с опаской к вопросам, касающимся фактологических данных (даты, события, здоровье, и т.д.), желательно приводить источник инофрмации как контекст.
Присылайте в комментарии свои примеры взаимодействия с ботом, ссылка тут: https://t.me/gpt_rubq_bot. Будем рады обратной связи.
PS. Если кто-то хочет создать себе аккаунт OpenAI, советую пользоваться этим гайдом. VPN для смены локации тут.