Pull to refresh

Как я делал ChatGPT бота в Salebot и ничего не вышло

Reading time4 min
Views5.7K

Данная статья описывает моё знакомство с 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.

Tags:
Hubs:
Total votes 18: ↑11 and ↓7+4
Comments31

Articles