Не секрет, что ChatGPT это очень эффективный инструмент, который помогает как в обычной жизни, например, чтобы узнать рецепт борща, так и в профессиональной сфере: от копирайтеров и инста‑блоггеров до программистов. Вместе с тем, аналогов ChatGPT не так много, а её доступность в России ограничена. Более того, подписка на ChatGPT Plus и вовсе платная, стоит, кстати, довольно ощутимых денег (20$ в месяц ~ 2000 рублей). Plus-подписка обещает нам доступ к GPT-4, ускоренные ответы и доступ к плагинам, так стоит ли переплачивать? Я и мои коллеги подумали, что нет и сделали свою ChatGPT Plus.
![То, как мы с коллегами видим план ChatGPT Plus То, как мы с коллегами видим план ChatGPT Plus](https://habrastorage.org/getpro/habr/upload_files/076/a35/18f/076a3518ff8aff800da37803c7f27c82.png)
Вводная
Начнём с того, что у нас уже был аккаунт OpenAI с возможностью оплачивать приходящие счета. Также, некоторое время назад мы зарегистрировались в листе ожидания GPT-4 и успешно получили доступ. Более того, у нас в запасе был небольшой сервер, где можно бы было развернуть всё это дело, чтобы доступ был не только у одного человека, а у всего коллектива. Задача стояла следующим образом: сделать ChatGPT максимально доступным в использовании для повседневных нужд завернув его в Telegram бота, добавить менеджмент баланса токенов для того, чтобы люди, находящие бота, не пользовались им безлимитно а мы за это платили, внедрить "нестандартные" функции: распознавание голоса, чтение PDF-файлов, просмотр видео на YouTube. Давайте начнём наш обзор по порядку.
Архитектура ChatGPT бота в Телеграм
Архитектура нашего проекта проста до безобразия, она состоит из клиента (Telegram Bot), серверной части (отвечает за управление балансом), и БД, в которой хранится информация о пользователе и кол-ве токенов, которое он может использовать. К сожалению или к счастью, основная логика бота написана в клиентской части (например, он же общается с OpenAI API) т.к. мы не видели смысла переносить это куда-либо ещё, да и делалось всё для себя. Ниже на картинке приводим примерную схему архитектуры нашего бота.
![Архитектура нашего ChatGPT Plus Архитектура нашего ChatGPT Plus](https://habrastorage.org/getpro/habr/upload_files/228/445/27d/22844527d66b7717f08b976dc38445db.jpg)
Клиент и сервер написаны на 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 и её объяснением. Для этого напишем такой промпт: Напиши функцию факториала на питоне и объясни её (кратко).
![Сравнение моделей на задаче написания функции факториала Сравнение моделей на задаче написания функции факториала](https://habrastorage.org/getpro/habr/upload_files/b5c/bb5/9ca/b5cbb59ca66fa8776b69f34ecff9bb38.jpg)
Очевидно что обе эти имплементации имеют место быть. К слову сказать, GPT-3.5 при ответе на этот промпт тоже иногда использует рекурсивный подход. Также, заметно, что GPT-4 лучше структурирует свой ответ, однако, это довольно таки простая задача для такого сравнения.
Пример использования: просмотр YouTube
Что если вам лень смотреть всё видео целиком, а хочется узнать только самые ключевые моменты из него? В этом вам поможет функция просмотра YouTube. Давайте проверим как она работает на простом примере: мы зададим специфический вопрос к видео и посмотрим, что ответит модель.
![Пример того, как бот смотрит YouTube Пример того, как бот смотрит YouTube](https://habrastorage.org/getpro/habr/upload_files/9b0/bb0/4b2/9b0bb04b27ef0dfa2ea73f1af80dc093.png)
Данный пример показывает, что бот на основе ChatGPT реально может сэкономить ваше время и сгенерирует исчерпывающий ответ на вопрос по данному видео. Конечно, эта функция не сработает с видео длиной в несколько часов т.к. размер контекста модели не так велик.
Пример использования: голосовые сообщения
Как-то раз я решил спросить у нашего бота, как перевести слово "не прорезавшийся (зуб)" на немецкий. Вот результат.
![Коммуникация с ботом голосовым вводом Коммуникация с ботом голосовым вводом](https://habrastorage.org/getpro/habr/upload_files/696/244/e15/696244e15da3f11ddd552b4f254d9f8b.png)
За точность перевода ручаться не могу, но моё намерение было распознано правильно, а по сему, расцениваю это как положительный пример.
Пример использования: чтение PDF
Иногда, чтение документов надоедает. А что если отправить пресловутую PDF-ку ChatGPT боту? В этом примере я отправил боту своё резюме и спросил, какими языками программирования я владею.
![Пример функции чтения PDF Пример функции чтения PDF](https://habrastorage.org/getpro/habr/upload_files/72c/467/fe9/72c467fe9d9287d0cd7f0d2c686aaeb6.png)
Бот, в целом, ответил правильно. Но я бы исключил SPARQL и SQL, так как это языки запросов.
Итоги
Данным ботом, написанным нами, я пользуюсь каждый день. В основном он решает мои рутинные технические задачи, которые мне лень "гуглить" (напр. поменять конфиг файл для nginx). В быту, бот помогает разрешать мелкие споры, например, как переводится то или иное слово. Однако, нужно подходить с опаской к вопросам, касающимся фактологических данных (даты, события, здоровье, и т.д.), желательно приводить источник инофрмации как контекст.
Присылайте в комментарии свои примеры взаимодействия с ботом, ссылка тут: https://t.me/gpt_rubq_bot. Будем рады обратной связи.
PS. Если кто-то хочет создать себе аккаунт OpenAI, советую пользоваться этим гайдом. VPN для смены локации тут.