Поиск по сайту:

Разработка мультимодальных ботов с помощью Django, GPT-4, Whisper и DALL-E


Введение

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

В этом руководстве рассматривается разработка мультимодального бота с использованием Django и модели большого языка OpenAI GPT-4 (LLM) для разговорного искусственного интеллекта, Whisper для точной транскрипции речи и DALL-E для генерации изображений. В нем описывается создание веб-приложения, генерирующего истории с сопровождающими их изображениями. Пользователи могут указать тему истории голосом или текстом, и приложение ответит сгенерированной историей, украшенной визуальными образами.

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

Разработка мультимодальных ботов с помощью Django, GPT-4, Whisper и DALL-E

  1. Интеграция OpenAI Whisper для распознавания речи
  2. Генерация текстовых ответов с помощью GPT-4
  3. Генерация изображений с помощью DALL-E
  4. Объединение модальностей для единого опыта

Предварительные условия

Чтобы выполнить это руководство, вам понадобится:

  1. Базовое понимание Python и Django. Если вы новичок в Django, рекомендуется следовать руководству «Как установить Django и настроить среду разработки».

  2. Ключ API OpenAI. В этом руководстве вам потребуется взаимодействовать с моделями OpenAI GPT-4 и DALL-E, для которых требуется ключ API от OpenAI. Вы можете получить ключ API, создав учетную запись OpenAI, а затем создав секретный ключ.

  3. Whisper: Посетите страницу OpenAI Whisper GitHub для получения подробных руководств по установке и убедитесь, что ваша установка разработки правильно настроена для Whisper.

  4. Пакет OpenAI Python: если вы следовали инструкциям в первом предварительном условии, у вас уже должна быть активная виртуальная среда с именем env в каталоге с именем django-apps.

Примечание. Убедитесь, что ваша виртуальная среда активна, убедившись, что ее имя отображается в круглых скобках в начале приглашения терминала. Если он не активен, вы можете активировать его вручную, выполнив следующую команду в своем терминале из каталога, содержащего ваше приложение Django.

sammy@ubuntu:$ .env/bin/activate

Как только ваша среда станет активной, запустите следующую команду, чтобы установить пакет OpenAI Python:

(env)sammy@ubuntu:$ pip install openai

Если вы впервые используете библиотеку OpenAI, вам следует просмотреть руководство «Как интегрировать модели OpenAI GPT в ваш проект Django».

Шаг 1 — Интеграция OpenAI Whisper для распознавания речи

На этом этапе вы настроите OpenAI Whisper в своем приложении Django, чтобы оно могло транскрибировать речь в текст. Whisper — это надежная модель распознавания речи, которая может обеспечить точную транскрипцию, что является важной функцией нашего мультимодального бота. Благодаря интеграции Whisper наше приложение сможет понимать вводимые пользователем данные посредством голоса.

Сначала убедитесь, что вы работаете в каталоге проекта Django. Следуя необходимым руководствам, у вас должен быть проект Django, готовый для этой интеграции. Откройте терминал, перейдите в каталог проекта Django и убедитесь, что ваша виртуальная среда активирована:

sammy@ubuntu:$ cd path_to_your_django_project
sammy@ubuntu:$ source env/bin/activate

Настройка Whisper в вашем приложении Django

Теперь нужно создать функцию, которая будет использовать Whisper для расшифровки аудиофайлов в текст. Создайте новый файл Python с именем whisper_transcribe.py.

(env)sammy@ubuntu:$ touch whisper_transcribe.py

Откройте whisper_transcribe.py в текстовом редакторе и импортируйте Whisper. Далее давайте определим функцию, которая принимает путь к аудиофайлу в качестве входных данных, использует Whisper для обработки файла, а затем возвращает транскрипцию:

import whisper
model = whisper.load_model("base")


def transcribe_audio(audio_path):
    result = model.transcribe(audio_path)
    return result["text"]

В этом фрагменте кода вы используете «базовую» модель транскрипции. Whisper предлагает различные модели, адаптированные к различным требованиям к точности и производительности. Не стесняйтесь экспериментировать с другими моделями в соответствии с вашими требованиями.

Тестирование транскрипции

Чтобы проверить транскрипцию, сохраните аудиофайл в каталоге проекта Django. Убедитесь, что файл имеет формат, поддерживаемый Whisper (например, MP3, WAV). Теперь измените whisper_transcribe.py, добавив внизу следующие строки:

# For testing purposes
if __name__ == "__main__":
    print(transcribe_audio("path_to_your_audio_file"))

Запустите whisper_transcribe.py с помощью Python, чтобы увидеть транскрипцию вашего аудиофайла в терминале:

(env)sammy@ubuntu:$ python whisper_transcribe.py

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

Шаг 2. Генерация текстовых ответов с помощью GPT-4

На этом этапе вы будете использовать LLM GPT-4 для генерации текстовых ответов на основе ввода пользователя или транскрипции речи, полученной на предыдущем шаге. GPT-4 с его большой языковой моделью может генерировать последовательные, контекстуально релевантные ответы, что делает его идеальным выбором для нашего мультимодального бот-приложения.

Прежде чем продолжить, убедитесь, что пакет OpenAI Python установлен в вашей виртуальной среде, как описано в предварительных требованиях. Для доступа к модели GPT-4 требуется ключ API, поэтому убедитесь, что он у вас готов. Вы можете добавить ключ OpenAI API в переменные среды, чтобы не добавлять его непосредственно в файл Python:

(env)sammy@ubuntu:$ export OPENAI_KEY="your-api-key"

Настройка завершения чата

Перейдите в каталог вашего приложения Django и создайте новый файл Python с именем chat_completion.py. Этот скрипт будет обрабатывать связь с моделью GPT-4 и генерировать ответы на основе входного текста.

import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_KEY"])

def generate_story(input_text):
    # Call the OpenAI API to generate the story
    response = get_story(input_text)
    # Format and return the response
    return format_response(response)

Этот фрагмент кода сначала устанавливает ключ API, необходимый для аутентификации в сервисах OpenAI. Затем он вызывает отдельную функцию get_story для вызова API OpenAI для получения истории, а затем другую функцию format_response для форматирования ответа API.

Теперь давайте сосредоточимся на функции get_story. Добавьте следующее в конец файла chat_completion.py:

def get_story(input_text):
    # Construct the system prompt. Feel free to experiment with different prompts.
    system_prompt = f"""You are a story generator.
    You will be provided with a description of the story the user wants.
    Write a story using the description provided."""
    # Make the API call
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": input_text},
        ],
        temperature=0.8
    )

    # Return the API response
    return response

В этой функции вы сначала настраиваете системное приглашение, которое информирует модель о задаче, которую ей необходимо выполнить, а затем запрашиваете API ChatCompletion для создания истории с использованием введенного пользователем текста.

Наконец, вы можете реализовать функцию format_response. Добавьте следующее в конец файла chat_completion.py:

def format_response(response):
    # Extract the generated story from the response
    story = response.choices[0].message.content
    # Remove any unwanted text or formatting
    story = story.strip()
    # Return the formatted story
    return story

Тестирование сгенерированных ответов

Чтобы протестировать генерацию текста, измените chat_completion.py, добавив несколько строк внизу:

# For testing purposes
if __name__ == "__main__":
    user_input = "Tell me a story about a dragon"
    print(generate_story(user_input))

Запустите chat_completion.py с помощью Python, чтобы увидеть сгенерированный ответ в вашем терминале:

(env)sammy@ubuntu:$ python chat_completion.py

Основываясь на подсказке, вы должны увидеть творчески сгенерированный ответ от GPT-4. Поэкспериментируйте с различными входными данными, чтобы увидеть различные ответы.

На следующем этапе вы добавите изображения в созданные истории.

Шаг 3 — Создание изображений с помощью DALL-E

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

Создайте новый файл Python с именем image_generation.py в своем приложении Django. Этот скрипт будет использовать модель DALL-E для генерации изображения:

(env)sammy@ubuntu:$ touch image_generation.py

Давайте создадим функцию в image_generation.py, которая отправляет запрос в DALL-E и получает сгенерированное изображение:

import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_KEY"])

def generate_image(text_prompt):
    response = client.images.generate(
        model="dall-e-3",
        prompt=text_prompt,
        size="1024x1024",
        quality="standard",
        n=1,
    )
    image_url = response.data[0].url
    return image_url

Эта функция отправляет запрос модели DALL-E, определяя текстовое приглашение, количество генерируемых изображений (n=1) и размер изображений. Затем он извлекает и возвращает URL-адрес сгенерированного изображения.

Тестирование сценария

Чтобы проиллюстрировать использование этой функции в вашем проекте Django, вы можете добавить следующий пример внизу вашего файла image_generation.py:

# For testing purposes
if __name__ == "__main__":
    prompt = "Generate an image of a pet and a child playing in a yard."
    print(generate_image(prompt))

Запустите image_generation.py с помощью Python, чтобы сгенерировать изображение на основе заданной подсказки:

(env)sammy@ubuntu:$ python image_generation.py

Если скрипт запустится успешно, вы увидите URL-адрес сгенерированного изображения в терминале. Затем вы можете просмотреть изображение, перейдя по этому URL-адресу в веб-браузере.

На следующем этапе вы объедините распознавание речи с генерацией текста и изображений для унифицированного взаимодействия с пользователем.

Шаг 4. Объединение модальностей для единого опыта

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

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

Создание единого представления

Сначала убедитесь, что ваш проект Django организован и что у вас есть whisper_transcribe.py, chat_completion.py и image_generation.py в приложении Django. каталог. Теперь вы создадите представление, объединяющее эти компоненты.

Откройте файл views.py и импортируйте необходимые модули и функции. Затем создайте новое представление под названием get_story_from_description:

import uuid
from django.core.files.storage import FileSystemStorage
from django.shortcuts import render
from .whisper_transcribe import transcribe_audio
from .chat_completion import generate_story
from .image_generation import generate_image

# other views

def get_story_from_description(request):
    context = {}
    user_input = ""
    if request.method == "GET":
        return render(request, "story_template.html")
    else:
        if "text_input" in request.POST:
            user_input += request.POST.get("text_input") + "\n"
        if "voice_input" in request.FILES:
            audio_file = request.FILES["voice_input"]
            file_name = str(uuid.uuid4()) + (audio_file.name or "")
            FileSystemStorage(location="/tmp").save(file_name, audio_file)
            user_input += transcribe_audio(f"/tmp/{file_name}")

        generated_story = generate_story(user_input)
        image_prompt = (
            f"Generate an image that visually illustrates the essence of the following story: {generated_story}"
        )
        image_url = generate_image(image_prompt)

        context = {
            "user_input": user_input,
            "generated_story": generated_story.replace("\n", "<br/>"),
            "image_url": image_url,
        }

        return render(request, "story_template.html", context)

Это представление извлекает текстовый и/или голосовой ввод пользователя. Если есть аудиофайл, он сохраняет его с уникальным именем (используя библиотеку uuid) и использует функцию transcribe_audio для преобразования речи в текст. Затем он использует функцию generate_story для генерации текстового ответа и функцию generate_image для создания связанного изображения. Эти выходные данные передаются в контекстный словарь, а затем обрабатываются с помощью story_template.html.

Создание шаблона

Затем создайте файл с именем story_template.html и добавьте следующее:

<div style="padding:3em; font-size:14pt;">
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <textarea name="text_input" placeholder=" Describe the story you would like" style="width:30em;"></textarea>
        <br/><br/>
        <input type="file" name="voice_input" accept="audio/*" style="width:30em;">
        <br/><br/>
        <input type="submit" value="Submit" style="width:8em; height:3em;">
    </form>

    <p>
        <strong>{{ user_input }}</strong>
    </p>
    {% if image_url %}
        <p>
            <img src="{{ image_url }}" alt="Generated Image" style="max-width:80vw; width:30em; height:30em;">
        </p>
    {% endif %}
    {% if generated_story %}
        <p>{{ generated_story | safe }}</p>
    {% endif %}
</div>

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

Создание URL-адреса для представления

Теперь, когда у вас есть готовое представление get_story_from_description, вы должны сделать его доступным, создав конфигурацию URL-адреса.

Откройте файл urls.py в приложении Django и добавьте шаблон для представления get_story_from_description:

from django.urls import path
from . import views

urlpatterns = [
    # other patterns
    path('generate-story/', views.get_story_from_description, name='get_story_from_description'),
]

Тестирование единого опыта

Теперь вы можете посетить http://your_domain/generate-story/ в своем веб-браузере. Вы должны увидеть форму, определенную в story_template.html. Попробуйте отправить текстовую подсказку через поле ввода текста или загрузить аудиофайл с помощью поля ввода файла. После отправки ваше приложение обработает входные данные, создаст историю и сопутствующее изображение и отобразит их на странице.

Например, вот пример истории для подсказки: «Расскажите мне историю о домашнем животном и ребенке, играющих во дворе. »

Выполнив этот шаг, вы создали приложение, которое плавно обрабатывает и реагирует на вводимые пользователем данные в различных формах — тексте, голосе и изображениях.

Заключение

В этом руководстве вы успешно разработали мультимодальный бот с использованием Django с возможностями интеграции Whisper для распознавания речи, GPT-4 для генерации текста и DALL-E для генерации изображений. Теперь ваше приложение может понимать и реагировать на вводимые пользователем данные в различных форматах.

Для дальнейшего развития рекомендуется изучить альтернативные версии моделей Whisper, GPT и DALL-E, улучшить UI/UX-дизайн вашего приложения или расширить функциональность бота за счет включения дополнительных интерактивных функций.

Автор выбрал программу прямой помощи для получения пожертвования в рамках программы Write for DOnations.

Статьи по данной тематике: