5-минутное руководство по созданию чат-бота с искусственным интеллектом с помощью Gradio и GPT-3

Оглавление

  1. Введение
  2. GPT-3 для серверной части
  3. Градио для интерфейса
  4. Заключение
  5. Рекомендации

Введение

ChatGPT (Chat Generative Pre-trained Transformer) — это чат-бот на базе искусственного интеллекта, созданный OpenAI, который позволяет пользователям вести очень сложные разговоры, подобные человеческим. Языковая модель способна отвечать на вопросы и помогать в различных задачах, включая написание электронных писем, эссе и кода. Благодаря дизайну диалога ChatGPT может отвечать на дополнительные вопросы, признавать ошибки, подвергать сомнению неверные предположения и отклонять неуместные запросы.

Модель ChatGPT была доработана на основе модели серии GPT-3.5, которая завершила обучение в начале 2022 года¹. ChatGPT, а также связанные модели GPT-3.5² были обучены на высокопроизводительной инфраструктуре суперкомпьютеров Azure AI.

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

Цель этой статьи — продемонстрировать создание интерфейса чат-бота, подобного ChatGPT, путем интеграции моделей OpenAI GPT-3 с пользовательским интерфейсом Gradio.

GPT-3 для серверной части

В 2020 году был представлен Generative Pre-trained Transformer 3 (GPT-3) как модель авторегрессионного языка, способная генерировать высококачественный текст, напоминающий человеческий текст. GPT-3 — это третье поколение языковых моделей GPT, доступных благодаря OpenAI.

Предоставляя начальное приглашение в качестве входных данных, GPT-3 имеет возможность создавать продолжение текста, которое следует стилю и структуре входного приглашения. Модель способна выполнять ряд задач, включая, помимо прочего, классификацию текста, ответы на вопросы, генерацию текста, суммирование текста, распознавание именованных объектов и языковой перевод³.

Реализация Python

Чтобы получить доступ к сервисам OpenAI, первым шагом является получение токена API. Если у вас еще нет учетной записи, вы можете зарегистрироваться для получения бесплатной пробной версии, посетив их страницу регистрации. Если у вас есть учетная запись, перейдите в правый верхний угол страницы и нажмите Управление учетной записью. Оттуда перейдите к Ключи API и создайте новый секретный ключ.

Установите библиотеку OpenAI Python с помощью pip: pip install openai, затем создайте новый файл блокнота Jupyter и вставьте следующий фрагмент кода в новую ячейку.

import openai
openai.api_key = sk_token # your token goes here

def get_model_reply(query, context=[]):
    # combines the new question with a previous context
    context += [query]
    
    # given the most recent context (4096 characters)
    # continue the text up to 2048 tokens ~ 8192 charaters
    completion = openai.Completion.create(
        engine='text-davinci-003', # one of the most capable models available
        prompt='\n\n'.join(context)[:4096],
        max_tokens = 2048,
        temperature = 0.0, # Lower values make the response more deterministic
    )
    
    # append response to context
    response = completion.choices[0].text.strip('\n')
    context += [response]
    
    # list of (user, bot) responses. We will use this format later
    responses = [(u,b) for u,b in zip(context[::2], context[1::2])]
    
    return responses, context

Чтобы протестировать автозаполнение GPT-3, просто вызовите функцию с запросом и без контекста. В приведенном ниже примере GPT-3 задали вопрос: «Какая самая большая по площади страна в мире?» и модель правильно вернула Россию как самую большую страну по площади, а также приблизительную общую площадь.

query = 'Which is the largest country by area in the world?'
responses, context = get_model_reply(query, context=[])

print('<USER> ' + responses[-1][0])
print('<BOT> ' + responses[-1][1])

# OUTPUT:
#
# <USER> Which is the largest country by area in the world?
# <BOT> The largest country by area in the world is Russia, with a total area of 17,098,242 square kilometers (6,601,668 square miles).

Один из способов оценить способность модели обрабатывать последующие вопросы — вызвать ее снова, предоставив предыдущий контекст. Как показано в следующем примере, на вопрос «Какие страны имеют с ней общую границу?», имея в виду Россию, GPT-3 успешно распознал тему и дал точный ответ, перечислив 14 соседних стран.

query = 'With which countries does it share a border?'
responses, context = get_model_reply(query, context=context)

print('<USER> ' + responses[-1][0])
print('<BOT> ' + responses[-1][1])

# OUTPUT:
#
# <USER> With which countries does it share a border?
# <BOT> Russia shares a border with the following countries: Norway, Finland, Estonia, Latvia, Lithuania, Poland, Belarus, Ukraine, Georgia, Azerbaijan, Kazakhstan, Mongolia, China, North Korea, and Lithuania.

Градио для интерфейса

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

Еще одним интересным аспектом Gradio является то, что он позволяет разрабатывать и тестировать веб-приложение в ноутбуках Jupyter или Google Colab. Эта функциональность очень полезна при оценке интеграции других модулей.

Реализация Python

Начните с установки пакета Gradio Python с помощью pip: pip install gradio. Затем скопируйте и вставьте приведенный ниже фрагмент кода в новую ячейку ранее созданной записной книжки.

import gradio as gr

# defines a basic dialog interface using Gradio
with gr.Blocks() as dialog_app:
    chatbot = gr.Chatbot() # dedicated "chatbot" component
    state = gr.State([]) # session state that persists across multiple submits
    
    with gr.Row():
        txt = gr.Textbox(
            show_label=False, 
            placeholder="Enter text and press enter"
        ).style(container=False)

    txt.submit(get_model_reply, [txt, state], [chatbot, state])

# launches the app in a new local port
dialog_app.launch()

Когда dialog_app.launch() будет выполнено, Gradio откроет новый порт и запустит интерактивное приложение в блокноте. Выполнение примеров, приведенных в предыдущем разделе, должно вернуть те же ожидаемые результаты. Сообщения, введенные пользователем, будут отображаться справа, а сообщения, созданные OpenAI, будут отображаться слева.

Заключение

ChatGPT — это чат-бот на основе искусственного интеллекта, созданный OpenAI, который может вести человеческие разговоры и помогать пользователям в различных задачах, от написания эссе до написания кода. Хотя это может быть не самое эффективное решение для специализированных тем, оно обладает впечатляющими диалоговыми возможностями. В этой статье продемонстрирована интеграция модели OpenAI GPT-3 с пользовательским интерфейсом Gradio для создания аналогичного опыта работы с чат-ботом.

Полные скрипты

Вы можете получить доступ к полному сценарию, посетив мою страницу Github, или вы можете напрямую получить доступ к блокноту Google Colab, используя ссылку ниже.



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

Если вам нравится читать такие истории и вы хотите поддержать меня как писателя, подумайте о том, чтобы зарегистрироваться и стать участником Medium. Это 5 долларов в месяц, что дает вам неограниченный доступ к статьям о Python, машинном обучении и науке о данных. Если вы зарегистрируетесь по моей ссылке, я получу небольшую комиссию без каких-либо дополнительных затрат для вас.



Рекомендации

[1] Открытый ИИ. ChatGPT: оптимизация языковых моделей для диалога
https://openai.com/blog/chatgpt/

[2] Открытый ИИ. Модельный индекс для исследователей
https://platform.openai.com/docs/model-index-for-researchers

[3] Открытый ИИ. Примеры
https://platform.openai.com/examples/

[4] градио-прил. Gradio: создавайте веб-приложения для машинного обучения — на Python
https://github.com/gradio-app/gradio

[5] Абубакар Абид, Али Абдалла, Али Абид и др. Gradio: простой обмен и тестирование моделей машинного обучения в реальных условиях
arXiv:1906.02569

Подпишитесь на DDIntel Здесь.

Посетите наш сайт здесь: https://www.datadriveninvestor.com

Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate