
Данная статья описывает моё знакомство с ChatGPT на уровне API и интеграцию с платформой создания ботов Salebot.
Давно занимаюсь сборкой ботов в Salebot и на Python, и я не мог просто пройти мимо ChatGPT и её API (модель GPT 3). Но, во время изучения API, меня понесло дальше, невозможно было остановиться на GPT 3. Вот какие задачи я себе поставил:
Доступная функциональность на ChatGPT:
Чат с ботом
Генератор изображений по нашему описанию
Редактор картинки по нашему описанию
Генератор похожих изображений
Пожалуй, интересно всё! Можно пообщаться с роботом и картинку сгенерировать, и, интересно, как ChatGPT отредактирует изображение по описанию.
Буду пробовать все-ё!? в Salebot.
Подготовка
Проходим регистрацию на https://chat.openai.com.
Получаем ключи доступа к API https://beta.openai.com/account/api-keys.
Там же находим доки https://platform.openai.com/docs/api-reference/introduction, и изучаем API.
Создаем новый проект в Salebot.
Чат с ботом
В API ChatGPT указаны все нужные нам параметры:

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

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

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

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

Создаем два блока Состояние диалога, связываем их как на схеме выше.
В первом блоке делаю запрос к 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.