Как интегрировать модели OpenAI GPT в ваш проект Django

Автор выбрал Программу прямой помощи для получения пожертвования в рамках программы Пиши для Благотворительности.

Введение

Модели OpenAI GPT стали популярными благодаря своему широкому использованию для создания текстового контента для различных задач, таких как написание электронных писем, ответы на часто задаваемые вопросы клиентов и перевод текстов, чтобы назвать некоторые.

Эти модели GPT обычно используются через ChatGPT, чат-бот выпущенный OpenAI, или через API и библиотеки, которые обеспечивают больший контроль. В этом руководстве вы узнаете, как использовать эти модели, используя API OpenAI в своем веб-проекте Django. Вы узнаете, как вызывать API ChatCompletion с различными параметрами и как форматировать и использовать его ответы.

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

Необходимые навыки

Для завершения этого руководства вам понадобятся:

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

  2. Учетная запись OpenAI: Перейдите на веб-сайт платформы OpenAI и найдите кнопку “Зарегистрироваться”. После регистрации вам необходимо подтвердить свой адрес электронной почты и ввести личную информацию.

  3. Ключ API OpenAI: После настройки вашей учетной записи войдите и перейдите к разделу Ключи API на вашей панели инструментов. Нажмите на кнопку “Создать новый секретный ключ”. Ваш ключ API будет сгенерирован и будет выглядеть примерно так: sk-abcdefghijklmnop. Обязательно сохраните этот ключ в безопасном месте, так как вы больше не сможете его увидеть.

  4. Пакет OpenAI для Python: Если вы следовали инструкциям в первом предварительном уроке, у вас уже должно быть активировано виртуальное окружение с именем env в каталоге с именем django-apps. Убедитесь, что ваше виртуальное окружение активно, проверив, что его имя отображается в скобках в начале вашего приглашения командной строки. Если оно не активно, вы можете активировать его вручную, запустив следующую команду:

sammy@ubuntu:$ .env/bin/activate

В вашем терминале из каталога django-apps. Как только ваше окружение активно, выполните следующее, чтобы установить пакет OpenAI для Python:

(env)sammy@ubuntu:$ pip install openai

Шаг 1 — Вызовы к OpenAI

На этом этапе вы добавите свой ключ API OpenAI в клиент OpenAI и выполните простой вызов API к API ChatCompletion. Вы также рассмотрите ответ, который вы получите от API.

Для начала откройте ваш интерпретатор Python:

(env)sammy@ubuntu:$ python

Сначала импортируйте клиент OpenAI и добавьте ваш ключ API в клиент:

from openai import OpenAI
client = OpenAI(api_key="your-api-key")

Замените "your-api-key" на фактический ключ API, который вы получили от платформы OpenAI.

Теперь давайте сделаем вызов API к API ChatCompletion. Используйте метод chat.completions.create():

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "count 1 to 10"}])

В коде выше мы указали модель для использования как gpt-3.5-turbo, добавили один объект сообщения, содержащий роль пользователя (другие варианты: система и помощник) и содержимое / подсказку считать от 1 до 10.

Чтобы увидеть ответ от вызова API, вы можете вывести сообщение ответа, которое должно содержать числа от 1 до 10 в хорошем маленьком списке:

print(response.choices[0].message.content)

Вывод:

Output
1, 2, 3, 4, 5, 6, 7, 8, 9, 10

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

Шаг 2 — Работа с параметрами

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

1. Температура: Параметр температуры определяет, насколько случайным является сгенерированный контент. Более высокое значение температуры, например, 0,8, приведет к более разнообразным и креативным ответам, в то время как более низкое значение температуры, например, 0,1, приведет к более похожим ответам. Например:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], temperature=0.1)
print(response.choices[0].message.content)
Output
1. Apple 2. Elephant 3. Sunshine 4. Adventure 5. Serenity

Давайте снова попробуем температура=0,1, чтобы увидеть новый сгенерированный текст:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], temperature=0.1)
print(response.choices[0].message.content)
Output
1. Apple 2. Elephant 3. Sunshine 4. Adventure 5. Serenity

Текст оказался таким же. Теперь давайте попробуем температура=0,8 дважды:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], temperature=0.8)
print(response.choices[0].message.content)
cat, apple, guitar, sky, book
response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], temperature=0.8)
print(response.choices[0].message.content)
Output
1. Apple 2. Sunshine 3. Happiness 4. Love 5. Technology

2. Максимальное количество токенов: Это позволяет вам ограничить длину сгенерированного текста. Установка определенного значения гарантирует, что ответ не превысит определенного числа токенов. Токены пропорциональны количеству слов в ответе. Например:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], max_tokens=10)
print(response.choices[0].message.content)
Output
1. Apple 2. Car

Изменение значения на 20:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], max_tokens=20)
print(response.choices[0].message.content)
Output
1. Apple 2. Car 3. Music 4. Ocean 5. Love

3. Поток: Это определяет, должны ли ответы быть переданы потоком или возвращены. Когда установлено значение True, ответ API будет передан потоком, что означает, что вы будете получать вывод порциями по мере его генерации. Это полезно для длинных разговоров или приложений в реальном времени. Чтобы включить потоковую передачу, добавьте параметр поток со значением True к вызову API. Например:

response = client.chat.completions.create(model="gpt-3.5-turbo", messages=[{"role": "user", "content": "mention five words"}], stream=True)
collected_messages = []
for chunk in response:
...   chunk_message = chunk.choices[0].delta.content
...   if chunk_message is not None:
...     collected_messages.append(chunk_message)
print(collected_messages)
Output
['', 'cat', '\n', 'book', '\n', 'computer', '\n', 'sun', '\n', 'water']

В указанном выше коде переменная chunk_message содержит содержимое сообщения в каждом фрагменте, возвращаемом API. Прежде чем добавить каждый в список collected_messages, мы проверяем, является ли фрагмент None, так как содержимое последнего фрагмента обычно None.

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

На следующем шаге мы предоставим модели некоторый контекст в виде системного приглашения.

Шаг 3 — Создание системного приглашения

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

Сначала создадим модуль Python, содержащий функцию для выполнения этой задачи. Закройте интерпретатор и создайте новый файл с именем story_generator.py в каталоге вашего проекта Django.

(env)sammy@ubuntu:$ touch ~/my_blog_app/blog/blogsite/story_generator.py

Затем вы можете добавить ключ OpenAI API к вашим переменным окружения, чтобы не добавлять его напрямую в файл Python:

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

Откройте story_generator.py и внутри него создайте клиента openai и определите функцию с именем generate_story, которая принимает коллекцию слов в качестве входных данных:

~/my_blog_app/blog/blogsite/story_generator.py
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_KEY"])
def generate_story(words):
    # Вызовите API OpenAI для генерации истории
    response = get_short_story(words)
    # Форматируйте и верните ответ
    return format_response(response)

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

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

~/my_blog_app/blog/blogsite/story_generator.py
def get_short_story(words):
    # Составьте системный запрос
    system_prompt = f"""You are a short story generator.
    Write a short story using the following words: {words}.
    Do not go beyond one paragraph."""
    # Вызов API
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[{
            "role": "user",
            "content": system_prompt
        }],
        temperature=0.8,
        max_tokens=1000
    )

    # Вернуть ответ API
    return response

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

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

~/my_blog_app/blog/blogsite/story_generator.py
def format_response(response):
    # Извлечение сгенерированной истории из ответа
    story = response.choices[0].message.content
    # Удаление ненужного текста или форматирования
    story = story.strip()
    # Возврат отформатированной истории
    return story

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

print(generate_story("cat, book, computer, sun, water"))

Теперь сохраните и закройте файл. Запустите скрипт, чтобы увидеть сгенерированный рассказ:

(env) sammy@ubuntu:$ python ~/my_blog_app/blog/blogsite/story_generator.py

Вывод:

In a cozy corner of a sunlit room, a fluffy cat named Whiskers lounged lazily next to a towering bookshelf. Amongst the rows of books, a curious computer hummed softly. As the sun streamed through the window, casting a warm glow, Whiskers noticed a small water stain on the shelf. Intrigued, the cat pawed at the book closest to the mark. As if guided by fate, the book opened to reveal a hidden compartment containing a glittering diamond necklace. With the secret now unveiled, Whiskers embarked on an unexpected adventure, where the sun, water, and the power of knowledge merged into a thrilling tale of mystery and discovery.

Довольно интересно! Давайте удалим строку со print оператором, поскольку мы будем вызывать функцию generate_story из представления Django. Удалите выделенную строку из вашего файла story_generator.py:

print(generate_story("cat, book, computer, sun, water"))

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

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

Шаг 4 – Интеграция с back-end представлением:

Вам необходимо создать представление Django и маршрут URL для интеграции модуля story_generator в ваш проект Django. В представлении вы извлечете ожидаемые слова из запроса, вызовете функцию generate_story и вернете ответ.

Сначала откройте файл views.py в вашем каталоге приложения Django. Импортируйте необходимые модули и добавьте функцию представления под названием generate_story_from_words:

~/my_blog_app/blog/blogsite/views.py
from django.http import JsonResponse
from .story_generator import generate_story

def generate_story_from_words(request):
    words = request.GET.get('words') # Извлеките ожидаемые слова из запроса
    story = generate_story(words) # Вызовите функцию generate_story с извлеченными словами
    return JsonResponse({'story': story}) # Верните историю в виде JSON-ответа

Затем откройте файл urls.py и добавьте шаблон URL для представления generate_story_from_words:

~/my_blog_app/blog/blogsite/urls.py
urlpatterns = [
    # Другие шаблоны URL...
    path('generate-story/', views.generate_story_from_words, name='generate-story'),
]

Теперь вы можете запросить конечную точку /generate-story/. Например, чтобы протестировать с помощью curl, вы можете выполнить GET-запрос к конечной точке с ожидаемыми словами в качестве параметра запроса. Откройте ваш терминал и выполните следующую команду:

(env)sammy@ubuntu:$ curl "http://your_domain/generate-story/?words=cat,book,computer,sun,water"

Убедитесь, что заменили "http://your_domain" на фактический домен, где размещен ваш проект Django. Слова "cat,book,computer,sun,water" представляют собой ожидаемые слова, с которыми вы хотите создать историю. Вы можете изменить их на любые слова, которые предпочитаете.

После выполнения команды вы должны увидеть ответ от сервера, который будет содержать сгенерированную историю:

(env)sammy@ubuntu:$ curl "http://your_domain/generate-story/?words="cat,book,computer,sun,water"

Вывод:

{"story": "Once upon a time, in a cozy little cottage nestled amidst a dense forest, a curious cat named Whiskers sat by the window, basking in the warm rays of the sun. As Whiskers lazily flicked his tail, his eyes caught sight of a dusty book lying on a nearby shelf. Intrigued, he carefully jumped onto the shelf, causing a cascade of books to tumble down, one opening up to reveal a hidden compartment. Inside, Whiskers discovered an ancient computer, its screen flickering to life as he brushed against the power button. Mesmerized by the glowing screen, Whiskers ventured into a world of virtual landscapes, where he roamed freely, chasing digital fish and pausing to admire breathtaking waterfalls. Lost in this newfound adventure, Whiskers discovered the wonders of both the tangible and virtual worlds, realizing that true exploration knows no bounds."}

Заключение

После завершения этого урока вы научились интегрировать модели OpenAI GPT в свой проект Django, используя API OpenAI. Вы выполнили вызовы к API ChatCompletion, настроили поведение модели, работая с параметрами, такими как температура и максимальное количество токенов, и создали системный запрос для предоставления контекста модели. Вы также интегрировали модуль story_generator в свой проект Django. Теперь вы можете генерировать короткие рассказы, запрашивая конечную точку /generate-story/ с ожидаемыми словами в качестве параметра запроса.

Чтобы дополнительно улучшить ваш проект Django, вы можете исследовать дополнительные функции API OpenAI и экспериментировать с различными системными запросами и параметрами для создания уникальных и креативных рассказов.

Source:
https://www.digitalocean.com/community/tutorials/how-to-integrate-openai-gpt-models-in-your-django-project