Данная статья описывает моё знакомство с ChatGPT на уровне API и интеграцию с платформой создания ботов Salebot.

Давно занимаюсь сборкой ботов в Salebot и на Python, и я не мог просто пройти мимо ChatGPT и её API (модель GPT 3). Но, во время изучения API, меня понесло дальше, невозможно было остановиться на GPT 3. Вот какие задачи я себе поставил:

Доступная функциональность на ChatGPT:

  • Чат с ботом

  • Генератор изображений по нашему описанию

  • Редактор картинки по нашему описанию

  • Генератор похожих изображений

Пожалуй, интересно всё! Можно пообщаться с роботом и картинку сгенерировать, и, интересно, как ChatGPT отредактирует изображение по описанию.

Буду пробовать все-ё!???? в Salebot.

Подготовка

  1. Проходим регистрацию на https://chat.openai.com.

  2. Получаем ключи доступа к API https://beta.openai.com/account/api-keys.

  3. Там же находим доки https://platform.openai.com/docs/api-reference/introduction, и изучаем API.

  4. Создаем новый проект в Salebot.


Чат с ботом

В API ChatGPT указаны все нужные нам параметры:

Все они на экране и думаю нет необходимости их перечислять, отмечу только, что здесь имеется возможность выбора модели и ЯП:

Я остановился на модели text-davinci-003, в рамках знакомства, мне этого будет достаточно. Вы же, можете использовать непосредственно модель ChatGPT (на текущий момент, это: gpt-3.5-turbo). В исходниках есть обе модели.

Портируем все параметры в Salebot (справка по API Salebot):

  1. Переходим в наш проект Salebot.

  2. Создаем новый блок Первостепенная проверка условия (светло-зеленый).

Это будет меню бота

Меню будет отображаться при старте бота или по команде /menu
Меню будет отображаться при старте бота или по команде /menu
  1. Создаем ещё один блок Первостепенная проверка условия.

Здесь разместим условие запуска: "Поболтать с ботом" и начальный текст для пользователя:

Теперь, когда пользователь нажмёт Поболтать с ботом, он пойдет в этот блок. От него дальше будем писать запрос к API.

Общая схема проекта должна получиться примерно такой:

Схема бота в конструкторе воронок Salebot
Схема бота в конструкторе воронок Salebot
  1. Создаем два блока Состояние диалога, связываем их как на схеме выше.

В первом блоке делаю запрос к API:

URL запроса: https://api.openai.com/v1/completions

Сохраняемые значения: choices|0|text->text;

Заголовок запроса: {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "Bearer YOUR_API_KEY_HERE"}

JSON параметры: {"model": "text-davinci-003", "prompt": "#{question}", "max_tokens": 2000, "temperature": 1}

Во втором блоке показываем результат: #{text}.

Переходим к тестированию:

Я немного схитрил, указав разные единицы измерения.
К сожалению, бот это не посчитал важным и ответ выдал не верный.
Я немного схитрил, указав разные единицы измерения. К сожалению, бот это не посчитал важным и ответ выдал не верный.

Обмениваемся парой фраз с ботом, бот решает задачу. Значит, всё работает, иду дальше, к генерации изображения.


Генератор изображений по нашему описанию

Дублирую 3 связанных между собой блока из схемы выше.

В условии запуска ставлю условие: Придумай картинку.

Смотрю API для генерации изображения:

И подставляю параметры в скопированный блок:

URL запроса: https://api.openai.com/v1/completions

Сохраняемые значения: data|0|url->picture_url;

Заголовок запроса: {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "Bearer YOUR_API_KEY_HERE"}

JSON параметры: {"prompt": "#{question}", "n": 1, "size": "512x512"}

Во втором блоке во вложении просто указываю URL картинки: picture_url.

Готово. Тестируем.

Справился на отлично! Дальше сложнее.


Редактор картинки по нашему описанию

Иду уже в привычный API ChatGPT в раздел Images->Create image edit, смотрим:

Если я правильно понял смысл, то здесь мы передаем картинку и описание того, что на ней нужно изменить/добавить/убрать и нейросеть корректирует изображение и отдает результат.

Чтож, делаю всё по аналогии с предыдущими действиями:

Копирую блоки и корректирую запрос:

URL запроса: https://api.openai.com/v1/images/edits

Сохраняемые значения: data|0|url->picture_url;

Заголовок запроса: {"Content-Type": "application/json", "Accept": "application/json", "Authorization": "Bearer YOUR_API_KEY_HERE"}

JSON параметры: {"image": "#{image_url}", prompt:"#{question}", "n": 1, "size": "512x512"}

На тестировании получаю ответ:

{"error":{"code":null,"message":"Invalid Content-Type header (application/json), expected multipart/form-data. (HINT: If you're using curl, you can pass -H 'Content-Type: multipart/form-data')","param":null,"type":"invalid_request_error"}}

Ок, меняю заголовок на multipart/form-data.

Тестирую. Получаю ответ:

{"error":{"code":null,"message":"Additional properties are not allowed ('image' was unexpected)","param":null,"type":"invalid_request_error"}}

Дальше, какие только настройки и параметры не пробовал менять натыкался на эту или другие ошибки.

Пробовал:

Передать картинку в режиме "rb", как говорилось в референсе. В разных кодировках, с заголовками и без них - результат был один и тот же. Точнее не было его )

Надоело, перехожу в Python:

Тут получаю нормальный ответ и сгенерированное изображение.

Понимаю, что в salebot нет библиотек openai и os, но все равно пробую различные варианты этого куска кода запихать в salebot, но все безуспешно.


Генератор похожих изображений

Так как принцип запросов схож с предыдущим, то смысла пробовать не было.


Такие результаты у меня получились от знакомства с ChatGPT. Возможно, Salebot внедрит поддержку библиотеки openai в будущем и это упростит работу, но, пока этого не случилось.

Вариант интеграций на стороне я не рассматривал, так как хотелось одноплатформенное решение.

Кто хочет пощупать бота, разместил в телеграм: https://t.me/chatgpt_image_bot.

Может у вас есть какие-то замечания или свои идеи по данной теме, поделитесь, пожалуйста в комментариях. Буду рад их услышать!

В следующей статье расскажу, как я познакомился с девушкой в ChatGPT.

Комментарии (31)


  1. lair
    00.00.0000 00:00

    ChatGPT и её API (модель GPT 3).

    [...]

    Такие результаты у меня получились от знакомства с ChatGPT.

    Ммм, а вы знаете, что модели GPT-3 - это не модели ChatGPT?


    1. botdev Автор
      00.00.0000 00:00

      Спасибо, что здесь уточнили. Возможно, вам показалось, что я приравниваю эти модели, но, на самом деле, это не так. Если говорить в общем, то, конечно, всё это модели OpenAI.


      1. lair
        00.00.0000 00:00
        -1

        Мне показалось, что вы в статье неоднократно упоминаете ChatGPT, хотя вообще нигде его не используете.

        Например:

        Данная статья описывает моё знакомство с ChatGPT на уровне API

        Но вы нигде не знакомитесь с ChatGPT.


        1. botdev Автор
          00.00.0000 00:00
          -3

          От того, как вы их назовёте, сути это не изменит - дочерние от ChatGPT, родители или смежные продукты OpenAI, я объединил их в одно, более популярное название - ChatGPT. В референсе также есть и другие модели OpenAI (если вам так больше нравится), можете использовать их, никто не запрещает.


          1. lair
            00.00.0000 00:00
            +2

            От того, как вы их назовёте, сути это не изменит

            Вообще-то, как раз изменит. С другой стороны, конечно, смотря что считать сутью. Если то, что вы сделали пяток вызовов апи через конструктор ботов - то да, ничего не изменится, это как было тривиальным упражнением, так и осталось.

            я объединил их в одно, более популярное название - ChatGPT

            Это называется "кликбейт". Ну или "не разобрался", такое тоже возможно.


            1. botdev Автор
              00.00.0000 00:00
              -3

              Ещё раз. Называйте как хотите. Это всё равно, что если бы вы пришли в магазин и сказали: покажите мне вон тот ксерокс, а вам бы ответили, что это не ксерокс, а копировальный аппарат фирмы ксерокс. И я думаю, что, используя примеры, вам не составит труда заменить модель на ту, которую вы хотите.


              1. lair
                00.00.0000 00:00
                +3

                Это всё равно, что если бы вы пришли в магазин и сказали: покажите мне вон тот ксерокс, а вам бы ответили, что это не ксерокс, а копировальный аппарат фирмы ксерокс.

                То есть вы даже не понимаете разницы между GPT-3 и ChatGPT? Печально.

                И я думаю, что, используя примеры, вам не составит труда заменить модель на ту, которую вы хотите.

                Я думаю, что я смогу написать интеграцию с этим апи без ваших примеров быстрее, чем с ними.

                В частности, я думаю, что:

                • для чатов предполагается использовать не /v1/completions, как у вас, а /v1/chat/completions (прямо скажем, я подозреваю, что в /v1/completions просто нельзя запихнуть gpt-3.5-turbo*, а именно это ChatGPT-модели)

                • в /v1/image/... вообще никакая модель не передается (там зафиксирована DALL-E, если не ошибаюсь)


                1. botdev Автор
                  00.00.0000 00:00
                  -2

                  Все верно. Используйте, если вам это нужно. В боте представлена и та, и другая модель. В тексте, я описал алгоритм реализации в salebot без привлечения сторонних сервисов и использования python.


                  1. lair
                    00.00.0000 00:00
                    +1

                    В боте представлена и та, и другая модель.

                    Это где? В вашем посте этого нет. Ваш бот на прямой вопрос "какая ты модель" отвечает "Я - модель базового уровня генерации текста GPT-3".

                    В тексте, я описал алгоритм реализации

                    ...и не справились даже с отправкой мультипарта?


                    1. botdev Автор
                      00.00.0000 00:00
                      -1

                      Я - модель базового уровня генерации текста GPT-3

                      ????????‍♂️

                      ...и не справились даже с отправкой мультипарта?

                      заголовок читали?

                      Давайте вы как справитесь, сделаете публикацию и выложите исходники, так сказать поделитесь с людьми, будет о чем разговарить. А так, это неконструктивный диалог.


                      1. lair
                        00.00.0000 00:00
                        -1

                        заголовок читали?

                        Читал. Я о том и говорю, что какой смысл в вашем "алгоритме", если вы даже не смогли реализовать мало-мальски нетривиальный кусок, и не поняли, в чем же дело.

                        Давайте вы как справитесь

                        "Спервадобейся"? Спасибо, нет, я уже добился.


                      1. botdev Автор
                        00.00.0000 00:00

                        я уже добился

                        Надеюсь, это не пустые слова? - интересно было бы увидеть результат!


                      1. lair
                        00.00.0000 00:00

                        Резюме находимо через профиль.

                        Но так, развлечения ради, я еще в 2016 году делал бот для интеграции Slack-Jira-BitBucket для решения внутренних задач в разработческой компании.


                      1. botdev Автор
                        00.00.0000 00:00

                        Вы не слышите или не хотите.
                        Зачем мне ваше резюме, не понятно.

                        В статье четко написано:

                        Вариант интеграций на стороне я не рассматривал, так как хотелось одноплатформенное решение.

                        речь идет о salebot

                        Раз результат у вас уже готов, было бы кстати на него взглянуть


                      1. lair
                        00.00.0000 00:00

                        Ну, вам хотелось одноплатформенное решение, но оно у вас не работает (потому что фундаментальные ограничения платформы). А за пределами платформы, как я уже написал, ценность вашего поста стремится к нулю, потому что вы не делаете ничего за пределами базового туториала OpenAI. Так какой смысл обсуждать платформу, востребованность которой в моей жизни равна нулю, и которая не может сделать того, что вы от нее хотите?


                      1. botdev Автор
                        00.00.0000 00:00

                        Тогда зачем вы осуждаете:

                        ..и не справились даже с отправкой мультипарта?

                        Совершенно не разбираясь ни в платформе и в её возможностях? И не предлагая никаких вариантов?

                        Складывается впечатление, что трепа ради.


                      1. lair
                        00.00.0000 00:00

                        Ровно затем, что вы не справились (и платформа не справилась). И, что хуже, вы не разобрались, что же конкретно происходит, в чем конкретно причина ошибки (и, как следствие, недостаток платформы) - хотя именно эта информация представляет хоть какой-то интерес, а не "Дальше, какие только настройки и параметры не пробовал менять натыкался на эту или другие ошибки", которому место в бложике.

                        ...а не работает у вас по одной простой причине: OpenAI для images/edits хочет тело файла (бинарный поток), что хорошо видно из curl ... -F='@...' (или open(..., 'rb') в Питоне, который не про "передать картинку в режиме "rb"", а про то, чтобы открыть файл на чтение (r) как байт-поток (b)), а вы ему пытаетесь запихнуть адрес.


                      1. botdev Автор
                        00.00.0000 00:00
                        -1

                        Вы очень странно читаете, ровно до того момента, как вам выгодно для своего ответа, коим желаете утвердиться, но не ответить. Дальше я написал, про режим rb при передаче файла в python, он же -F в curl. И действия в salebot, которые не привели к результату и написал почему. А после, успешный ответ в python. Адрес же я отправлял в запросе сейлбота, которым вы не владеете, в надежде, что сейлбот подтянет сам файл.


                      1. lair
                        00.00.0000 00:00

                        Дальше я написал, про режим rb при передаче файла в python, он же -F в curl.

                        Вы не понимаете, что это совершенно разные вещи?

                        И действия в salebot, которые не привели к результату и написал почему

                        Нет, вы не написали почему.

                        Адрес же я отправлял в запросе сейлбота, которым вы не владеете, в надежде, что сейлбот подтянет сам файл.

                        А почему вдруг он должен что-то за вас сам подтягивать, и в каком формате?


                      1. lair
                        00.00.0000 00:00

                        Нет, вы не написали почему.

                        На всякий случай сохраню то, что сейчас написано в статье:

                        Тестирую. Получаю ответ:
                        {"error":{"code":null,"message":"Additional properties are not allowed ('image' was unexpected)","param":null,"type":"invalid_request_error"}}
                        Дальше, какие только настройки и параметры не пробовал менять натыкался на эту или другие ошибки.
                        Пробовал: Передать картинку в режиме "rb", как говорилось в референсе. В разных кодировках, с заголовками и без них - результат был один и тот же. Точнее не было его )
                        Надоело, перехожу в Python:
                        Тут получаю нормальный ответ и сгенерированное изображение.
                        Понимаю, что в salebot нет библиотек openai и os, но все равно пробую различные варианты этого куска кода запихать в salebot, но все безуспешно.

                        Здесь нет ответа, почему не работает (который ответ звучит так: потому что данные передаются в неправильном формате, правильный формат - такой-то, а передается - вот так-то или вот так-то).


                      1. lair
                        00.00.0000 00:00

                        Я любопытства ради проверил, на хабре упоминаний про Salebot (а за его пределами ваша статья представляет нулевую ценность) - два, оба в статьях-списках сервисов.


  1. fire64
    00.00.0000 00:00

    Бот уже не работает...

    Выдает в ответ: strip(text)


    1. botdev Автор
      00.00.0000 00:00

      Вероятно, для ответа на ваш вопрос, требуется большее количество токенов, чем разрешено использовать в API. Либо, вы исчепали лимит и появляется ошибка.


  1. blaze5
    00.00.0000 00:00

    Делал такого же бота на python, все работало замечательно, и текст генерировал и картинки и код, но закончилось бесплатное API


    1. botdev Автор
      00.00.0000 00:00

      Есть такое ) поэтому, я сделал ограничение генерации изображений 256x256 в демоверсии бота. Может надольше хватит )


      1. botdev Автор
        00.00.0000 00:00
        -4

        Кто захочет, сможет собрать своего бота и пользоваться без этих лимитов ????

        Для этого я даже опубликовал Исходники в канале телеграм (ссылка в боте). Пользуйтесь.


        1. botdev Автор
          00.00.0000 00:00
          -1

          Ок, больше исходников не будет


  1. lair
    00.00.0000 00:00
    +3

    Неловкий вопрос - а что это за цифры в ссылке на Salebot: https://salebot.pro/l/16835?


    1. botdev Автор
      00.00.0000 00:00

      Ссылка на salebot, можете использовать для бесплатного премиум доступа. По ссылке дается 7 дней, будете использовать без цифр в конце, будет 3 дня. Вот и вся разница.


      1. artemev
        00.00.0000 00:00
        +1

        Про свою выгоду вы тактично умалчиваете :)


        1. botdev Автор
          00.00.0000 00:00
          -2

          У меня здесь нет своей выгоды, разместил, чтобы вам можно было нормально попробовать, потестировать.