DALL-E 3, новая версия модели для генерации изображений от OpenAI, стала доступна публично через ChatGPT в октябре 2023 года и сразу стала очень популярной благодаря существенно лучшему качеству генерируемых изображений, по сравнению с предыдущими версиями модели.

До DALL-E 3 главным и, по сути, единственным серьёзным игроком в этой области была компания Midjourney, которая обзавелась целой армией фанатов ещё в 2022 году. Однако теперь ситуация изменилась и конкуренция стала гораздо более ощутимой.

Генерировать изображения в Midjourney можно только в чат-боте Discord, у продукта нет своего приложения или веб-сайта, нет программного доступа через API. Это ограничивает способы использования генератора изображений. У DALL-E 3 таких ограничений нет.

Добавляем DALL-E 3 в чат-бот Telegram

ВНИМАНИЕ!
Это продолжение туториала, начало здесь: Свой ChatGPT бот в Telegram в 2023.

Облачная функция

Всё, что нам нужно сделать, это добавить новый метод в нашу облачную функцию, чтобы генерировать изображения. Мы введём новую команду /image и будем пользоваться ей так:

/image описание изображения, которое надо сгенерировать

Открываем консоль Яндекс.Облака, идём в раздел Cloud Functions, заходим в нашу функцию и переходим во вкладку "Редактор".

Здесь в файле index.py сразу после метода clear_history и обязательно перед методом echo_message добавляем код нового метода:

@bot.message_handler(commands=["image"])
def image(message):
    prompt = message.text.split("/image")[1].strip()
    if len(prompt) == 0:
        bot.reply_to(message, "Введите запрос после команды /image")
        return

    try:
        response = openai.Image.create(
            prompt=prompt, n=1, size="1024x1024", model="dall-e-3"
        )
    except:
        bot.reply_to(message, "Произошла ошибка, попробуйте позже!")
        return

    bot.send_photo(
        message.chat.id,
        response["data"][0]["url"],
        reply_to_message_id=message.message_id,
    )

Это должно выглядеть вот так:

Жмём кнопку "Сохранить изменения" и смотрим, как функция собирается.

Список команд Telegram-бота

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

Для этого идём в BotFather, в котором мы изначально создавали наш бот и начинаем с команды /mybots

Вы увидите список ваших ботов, выбираем нужный бот и жмём "Edit Bot".

Затем "Edit Commands".

И посылаем такой список:

new - Очистка истории переписки
image - Генерация изображений. Введите описание изображения после команды

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


На этом всё. Теперь наш бот умеет не только отвечать на текстовые сообщения, но и генерировать изображения!

Сделаем быструю проверку:

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


  1. not_hacker
    14.11.2023 07:10

    Я так понял, что после обработки исключения, бот все равно попытается отправить изображение?


    1. fettgesicht Автор
      14.11.2023 07:10

      Там же return


      1. not_hacker
        14.11.2023 07:10

        Все, увидел


  1. NicknameAa11
    14.11.2023 07:10

    А добавлять детали к созданному изображению можно как нибудь?


    1. fettgesicht Автор
      14.11.2023 07:10

      В DALL-E 3 через API пока нет такого


  1. Anuke
    14.11.2023 07:10

    Почему если поменять n=1 или size="1024x1024" на другие значения бот не будет генерировать фото?


    1. fettgesicht Автор
      14.11.2023 07:10

      Не проверял специально, но вообще должен. Только при n>1 надо код переписать, чтобы перебирал изображения и отправлял в тг каждое