1. Основы моделей генерации текста
Модель генерации текста от OpenAI, обычно называемая Генеративным Предварительно Обученным Трансформером (GPT), основывается на механизме самовнимания в глубоком обучении для понимания и обработки естественного языка. Обучение модели GPT состоит из двух этапов: предварительное обучение и настройка.
Предварительное обучение
На этапе предварительного обучения модель проходит через обучение без учителя, используя крупномасштабный текстовый набор данных. В этом процессе модель обучается путем предсказания следующего слова. Например, учитывая предложение "У меня есть ручка,", видя первые несколько слов, она пытается предсказать слово "ручка". Основная цель предварительного обучения - научить модель понимать структуру и семантику языка.
Настройка
Этап настройки включает в себя надзорное обучение на конкретных задачах. На этом этапе модель настраивается для конкретных приложений, таких как системы вопросов и ответов и реферирование документов. Настройка включает дополнительное обучение модели с аннотированными наборами данных на основе предварительно обученной модели, что позволяет ей лучше адаптироваться к конкретным задачам.
2. Сценарии применения
Модель генерации текста от OpenAI может быть применена в широком спектре сценариев. Вот некоторые конкретные приложения:
- Составление документов: Помощь пользователям в быстром составлении и редактировании документов.
- Написание компьютерного кода: Генерация фрагментов кода для помощи в программировании.
- Ответы на вопросы о базе знаний: Предоставление ответов на основе хранящихся знаний.
- Анализ текста: Извлечение текстовой информации, анализ тональности и другое.
- Предоставление естественного языкового интерфейса для программного обеспечения: Позволение пользователям взаимодействовать с программным обеспечением с использованием естественного языка.
- Обучение по различным предметам: Предоставление учебного руководства по различным предметам.
- Языковой перевод: Перевод текста между разными языками.
- Симуляция персонажей для игр: Генерация диалогов и фоновых историй для игр или сценариев ролевых игр.
3. Введение в модель диалога
Модель диалога - это особый тип модели генерации текста, который понимает и генерирует естественные разговоры через предварительное обучение. Эта модель может симулировать разговор между пользователем и виртуальным ассистентом, подходящий для интерактивных приложений в реальном времени.
Использование модели диалога обычно включает многоразовые интерактивные разговоры. Например, когда пользователь задает вопрос, модель может генерировать соответствующие ответы на основе предыдущих тренировочных данных. Кроме того, модель диалога может сохранять контекстуальную информацию, учитывая предыдущее содержание разговора, чтобы генерировать более последовательные и естественные ответы.
Сценарии применения модели диалога:
- Службы поддержки клиентов: Автоматически отвечать на часто задаваемые вопросы пользователей, предоставлять помощь и советы.
- Чат-боты: Взаимодействовать в естественных разговорных интеракциях с пользователями.
- Виртуальные ассистенты: Выполнять голосовые команды пользователей, такие как планирование встреч, установка напоминаний и другое.
- Ролевые игры: Обогащать игровой опыт, предоставляя игровым персонажам уникальные диалоги и личности.
4. API модели диалога
API модели диалога позволяет разработчикам взаимодействовать с моделью GPT с использованием HTTP-запросов. В этом разделе будет представлено, как использовать curl для создания запросов и анализа возвращаемых моделью ответов.
Создание запросов
Прежде чем начать, вам нужно зарегистрироваться и получить ключ API от OpenAI, который нужно аутентифицировать через HTTP-заголовки при отправке запросов.
Вот пример использования curl для отправки запроса к API модели диалога:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "Вы - полезный ассистент."
},
{
"role": "user",
"content": "Какая команда выиграла Чемпионат мира 2020 года?"
}
]
}'
Значение параметров модели диалога
При использовании API модели диалога от OpenAI основными параметрами являются "model" и "messages", каждый из которых несет конкретные значения и влияет на производимые результаты.
Параметры модели
Параметр модели используется для указания версии модели, которая будет использоваться. Например, "model": "gpt-3.5-turbo"
указывает, что вы запрашиваете модель GPT-3.5-Turbo. Выбранная здесь версия модели будет реагировать на ввод пользователя в соответствии с ее возможностями, данными обучения и функциональными возможностями интерфейса.
Вот текущие поддерживаемые модели:
Поддерживаемые модели | Максимальный контекст | Описание модели |
---|---|---|
gpt-4-0125-preview | 128 000 токенов | ГПТ-4 Турбо предпросмотр модели, разработанный для устранения "ленивых" случаев, когда модель не может завершить задачи. |
gpt-4-turbo-preview | 128 000 токенов | В настоящее время указывает на модель gpt-4-0125-preview . |
gpt-4-1106-preview | 128 000 токенов | Модель ГПТ-4 Турбо с улучшенными возможностями выполнения инструкций, режимом JSON, воспроизводимым выводом и параллельными вызовами функций. |
gpt-4-vision-preview | 128 000 токенов | Модель ГПТ-4 с возможностью понимания изображений, в дополнение ко всем другим функциям ГПТ-4 Турбо. |
gpt-4 | 8 192 токенов | В настоящее время указывает на gpt-4-0613 . |
gpt-4-0613 | 8 192 токенов | Снимок ГПТ-4 от 13 июня 2023 года, обеспечивающий улучшенную поддержку вызова функций. |
gpt-4-32k | 32 768 токенов | В настоящее время указывает на gpt-4-32k-0613 . Эта модель не широко продвигается и предпочтительнее использование ГПТ-4 Турбо. |
gpt-4-32k-0613 | 32 768 токенов | Версия ГПТ-4 32k снимок от 13 июня 2023 года. Эта модель не широко продвигается и предпочтительнее использование ГПТ-4 Турбо. |
gpt-3.5-turbo-1106 | 16 385 токенов | Последняя модель ГПТ-3.5 Турбо с улучшенным выполнением инструкций, режимом JSON, воспроизводимым выводом и параллельными вызовами функций. |
gpt-3.5-turbo | 4 096 токенов | В настоящее время указывает на gpt-3.5-turbo-0613 . |
gpt-3.5-turbo-16k | 16 385 токенов | В настоящее время указывает на gpt-3.5-turbo-16k-0613 . |
gpt-3.5-turbo-instruct | 4 096 токенов | Функционально аналогичная моделям эпохи ГПТ-3. Совместима с традиционными конечными точками завершения, не подходит для завершения чата. |
gpt-3.5-turbo-0613 | 4 096 токенов | Снимок gpt-3.5-turbo от 13 июня 2023 года. Будет устаревать 13 июня 2024 года. |
gpt-3.5-turbo-16k-0613 | 16 385 токенов | Снимок gpt-3.5-turbo-16k от 13 июня 2023 года. Будет устаревать 13 июня 2024 года. |
gpt-3.5-turbo-0301 | 4 096 токенов | Снимок gpt-3.5-turbo от 1 марта 2023 года. Будет устаревать 13 июня 2024 года. |
Параметр сообщений
Параметр сообщений представляет собой массив, в котором каждый элемент представляет сообщение в разговоре. Каждое сообщение является объектом, содержащим два свойства: role (роль отправителя) и content (конкретное содержание сообщения).
- role: Определяет роль отправителя сообщения. Допустимые значения включают "system", "user" и "assistant".
- content: Конкретное содержание сообщения.
Типы и функции роли
Значение параметра role определяет тип и функцию сообщения. API диалога будет изменять ответ модели в зависимости от различных ролей.
Роль "система"
Системные сообщения используются для глобального указания поведения модели. Например, они могут явно указывать роль, которую играет модель (например, ассистент, переводчик и т. д.), или предоставлять конкретные инструкции, которые должны быть выполнены в разговоре. Системные сообщения имеют долгосрочное влияние на поведение модели в течение всего разговора, но обычно они являются необязательными.
Например, если вы хотите, чтобы модель участвовала в разговоре в качестве ассистента по обслуживанию клиентов, вы можете указать в системном сообщении:
{
"role": "система",
"content": "Вы являетесь ассистентом по обслуживанию клиентов."
}
Роль "пользователь"
Сообщения пользователя представляют собой вопросы, заданные пользователем. Модель отвечает на эти сообщения и предоставляет информацию, ответы или другие формы вывода. Эти сообщения являются ключевой частью рабочего процесса API диалога и обычно соответствуют реальным запросам пользователей в приложении.
Например, в запросе пользователя в приведенном выше примере curl:
{
"role": "пользователь",
"content": "Какая команда выиграла Чемпионат мира по бейсболу 2020 года?"
}
Роль "ассистент"
Сообщения ассистента обычно относятся к ответам, сгенерированным моделью, и также могут быть частью сообщений истории разговора, предоставленных разработчиком, используемых для имитации формата возвращаемых сообщений искусственным интеллектом. В запросах API сообщения роли ассистента обычно не предоставляются, если нет необходимости предварительно установить формат, в котором модель отвечает на вопросы в истории разговора, чтобы предоставить примеры вывода для модели.
Анализ ответа
Ответ модели возвращается в формате JSON. Вот пример анализа ответа:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Чемпионом Чемпионата мира по бейсболу 2020 года стали Лос-Анджелес Доджерс.",
"role": "ассистент"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}
В приведенном выше ответе можно получить ответ модели из choices[0].message.content
.
Как реализовать функцию памяти в модели диалога
Ниже приведен пример использования API завершения чата OpenAI для реализации функции памяти модели GPT, который демонстрирует, как сохранить контекст истории разговора (т.е. содержание памяти) в новом запросе API для достижения непрерывного диалога.
import requests
api_url = "https://api.openai.com/v1/chat/completions"
api_key = "Ваш ключ API OpenAI"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "gpt-3.5-turbo", # Может быть заменено на gpt-4 или другие доступные модели
"messages": [
{
"role": "system", # Системное сообщение, используемое для настройки поведения модели диалога
"content": "Вы помощник."
},
{
"role": "user", # Сообщение пользователя, на которое модель будет отвечать
"content": "Можете ли вы сказать мне основные причины изменения климата?"
},
{
"role": "assistant", # Ответ модели
"content": "Основные причины изменения климата включают выбросы парниковых газов, сжигание ископаемого топлива и вырубка лесов и т.д."
},
{
"role": "user", # Новый вопрос на основе ответа модели
"content": "Как можно снизить выбросы парниковых газов?"
}
]
}
response = requests.post(api_url, headers=headers, json=data)
if response.status_code == 200:
reply_content = response.json()['choices'][0]['message']['content']
print(f"Ответ модели => {reply_content}")
else:
print(f"Ошибка запроса: {response.status_code}")
В этом примере мы сначала симулируем запрос пользователя о основных причинах изменения климата, а затем задаем другой вопрос на основе объяснения модели. В последующих запросах мы сохраняем содержание предыдущего разговора, чтобы модель могла запомнить историю предыдущего разговора и генерировать ответ на основе этого. Этот метод достигает передачи и запоминания состояния диалога с использованием ввода и вывода предыдущего раунда разговора в качестве исторических сообщений в новом запросе.
Совет: Для реализации функции памяти диалога, поскольку у модели есть ограничение токенов, нецелесообразно вводить все исторические сообщения разговора для каждого запроса. Обычно в качестве исторических сообщений в модель вводятся сообщения, связанные с текущими вопросами, и последующие разделы покажут, как функция вложений достигает поиска сходства текста.
5. JSON Schema
JSON Schema - это функция API модели диалога, позволяющая пользователям указывать модели возвращать всегда JSON-объект, подходящий для сценариев, требующих получения ответов в формате JSON.
Использование JSON Schema
Для использования JSON Schema необходимо установить поле response_format
в { "type": "json_object" }
в теле HTTP-запроса и обеспечить, что системное сообщение указывает, что вывод модели в формате JSON. Ниже приведен пример запроса curl для включения JSON Schema:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo-1106",
"response_format": { "type": "json_object" },
"messages": [
{
"role": "system",
"content": "Вы - полезный помощник, призванный выводить JSON."
},
{
"role": "user",
"content": "Какая команда выиграла Чемпионат мира 2020 года?"
}
]
}'
Анализ ответа схемы JSON
В режиме JSON схемы ответ будет содержать полностью идеально разобранный JSON-объект. Этот режим гарантирует, что выходная модель является допустимым JSON-объектом, который можно напрямую разобрать и использовать. Ниже приведен пример ответа, который может быть возвращен с использованием JSON-схемы:
{
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
На Python вы можете использовать следующий код для извлечения содержимого из ответа:
import json
response = {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
response_content = json.loads(response['choices'][0]['message']['content'])
print(response_content)
Вывод будет:
{'winner': 'Los Angeles Dodgers'}
JSON-схема обеспечивает надежный метод для гарантированного форматирования ответов для конкретных случаев использования. Поэтому рекомендуется включать JSON-схему в сценариях, где есть конкретные требования к формату ответа API.