Основы работы с промптами
Промпт — это входные данные для генеративной модели, предназначенные для управления результатами ее работы. Промпт может состоять из текста, картинки, звука или любой другой информации.
Шаблон промпта — это незаконченный промпт с одной или несколькими переменными, которые заменяются на какую-то информацию для создания отдельного экземпляра промпта.
Например, нужно решить задачу бинарной классификации твитов. Исходный шаблон промпта будет выглядеть так:
Классифицируй твит как «положительный» или «отрицательный»: {TWEET}.
Если в шаблон подставить твит из датасета, получится экземпляр промпта, который можно отправить генеративной модели для предсказания результата.
Качество выходных данных модели зависит от того, насколько хорошо вы сформулируете запрос и сколько информации предоставите. Промпт может содержать основные элементы: инструкция или вопрос, а также дополнительные: контекст, входные данные и примеры. Используя эти элементы, вы можете более эффективно управлять моделью и улучшать качество результатов.
Начнем с простого примера промпта:
Промпт
Что такое замок?
Ответ
Замок — это сложное и многофункциональное сооружение, которое обычно служит для защиты территории или имущества. Замки могут быть разных типов: средневековые, современные, военные, дворцовые и другие. Они могут включать в себя различные элементы, такие как стены, башни, ворота, рвы и мосты.
В прошлом замки были важными стратегическими объектами, которые защищали от врагов и позволяли контролировать территорию. Сегодня замки часто являются историческими памятниками и туристическими достопримечательностями.
В консоли управления
Структура промпта
Обращаясь к текстовым моделям Yandex AI Studio через 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 см. в разделе Техники работы с промптами.