Основы работы с промтами
Промт — это входные данные для генеративной модели, предназначенные для управления результатами ее работы. Промт может состоять из текста, картинки, звука или любой другой информации.
Шаблон промта — это незаконченный промт с одной или несколькими переменными, которые заменяются на какую-то информацию для создания отдельного экземпляра промта.
Например, нужно решить задачу бинарной классификации твитов. Исходный шаблон промта будет выглядеть так:
Классифицируй твит как «положительный» или «отрицательный»: {TWEET}.
Если в шаблон подставить твит из датасета, получится экземпляр промта, который можно отправить генеративной модели для предсказания результата.
Качество выходных данных модели зависит от того, насколько хорошо вы сформулируете запрос и сколько информации предоставите. Промт может содержать основные элементы: инструкция или вопрос, а также дополнительные: контекст, входные данные и примеры. Используя эти элементы, вы можете более эффективно управлять моделью и улучшать качество результатов.
Начнем с простого примера промта:
Промт
Что такое замок?
Ответ
Замок — это сложное и многофункциональное сооружение, которое обычно служит для защиты территории или имущества. Замки могут быть разных типов: средневековые, современные, военные, дворцовые и другие. Они могут включать в себя различные элементы, такие как стены, башни, ворота, рвы и мосты.
В прошлом замки были важными стратегическими объектами, которые защищали от врагов и позволяли контролировать территорию. Сегодня замки часто являются историческими памятниками и туристическими достопримечательностями.
В консоли управления
Структура промта
Обращаясь к YandexGPT через API, вы можете структурировать промт с помощью ролей. YandexGPT API поддерживает следующие роли: system
, user
и assistant
. В промт-режиме в консоли управления эти роли соответствуют полям Инструкции, Запрос и Ответ. Структурировать промт не обязательно.
Для простоты все дальнейшие примеры, если не указано иное, будут использовать только сообщение с ролью user
.
Языковая модель отвечает последовательностью токенов, которые имеют смысл в контексте «замок». Однако результат может быть неожиданным или далеким от задачи, которую вы хотите выполнить. Например, мы хотели узнать про дверной замок. Этот простой пример подчеркивает необходимость предоставления большего контекста или инструкций о том, чего именно вы хотите добиться с помощью модели.
Попробуем дополнить промт:
Промт
Что такое замок? (речь идет о дверных замках)
Ответ
Замок — это механическое, электронное или комбинированное устройство фиксации двери в закрытом состоянии. Оно предотвращает несанкционированный доступ в помещение и обеспечивает безопасность.
Дверные замки различаются по конструкции, типу установки, уровню секретности и другим характеристикам. Они могут быть врезными, накладными, навесными и др.
Замки используются для защиты жилых домов, квартир, офисов, складов и других помещений.
В данном примере мы направлем модель в необходимую нам сторону, уточняя запрос. Это и есть суть промт-инжиниринга.
Форматирование промтов
Стандартный промт имеет следующий формат:
<Вопрос>?
или
<Инструкция>
Вы можете преобразовать его в формат вопрос-ответ (QA), который является стандартным для многих задач:
Вопрос: <Вопрос>?
Ответ:
Когда вы задаете промт таким образом, обычно считается, что вы используете промтинг Zero-shot, то есть вы напрямую спрашиваете модель без каких-либо примеров или демонстраций задачи, которую хотите выполнить. Некоторые языковые модели способны выполнять промтинг Zero-shot, но результат зависит от сложности и понимания задачи, а также от примеров, на которых модель была обучена.
Few-shot prompting
Одной из популярных и эффективных техник форматирования результата является промтинг Few-shot, в котором вы предоставляете примеры (демонстрации). Вы можете форматировать Few-shot-промты следующим образом:
<Инструкция, как отвечать на вопрос>
<Вопрос>?
<Ответ>
<Вопрос>?
<Ответ>
<Вопрос>?
<Ответ>
<Вопрос>?
Версия в формате QA будет выглядеть так:
<Инструкция, как отвечать на вопрос>
Примеры:
Вопрос: <Вопрос>?
Ответ: <Ответ>
Вопрос: <Вопрос>?
Ответ: <Ответ>
Вопрос: <Вопрос>?
Ответ: <Ответ>
Вопрос: <Вопрос>?
Ответ:
Формат промтов Few-shot зависит от задачи, вы можете менять его под свои потребности. Например, таким образом можно сделать простейшую классификацию текстов:
Промт
Это потрясающе! // Положительно
Это плохо! // Отрицательно
Вау, этот фильм был классный! // Положительно
Какое ужасное шоу! //
Ответ
Отрицательно
Языковые модели способны обучаться задачам в контексте (In-Context Learning, ICL) на примерах с помощью Few-shot-промтов. Более подробную информацию о промтах Zero-shot и Few-shot см. в разделе Техники работы с промтами.