Промпт-инжиниринг
Промпт-инжиниринг — это процесс создания эффективных и точных промптов для работы с большими языковыми моделями (LLM).
Промпт (от англ. prompt — «подсказка») — это текстовое описание задачи, которую необходимо выполнить с помощью ИИ-модели. Это запрос, который задается модели для генерации текста, изображений, кода или других видов контента.
Например, если вы хотите получить изображение в стиле картины «Звездная ночь» Ван Гога, то ваш промпт может выглядеть так: «Ты — профессиональный иллюстратор. Тебе хорошо известны стиль и манера письма популярных художников. Твоя задача — создавать изображения в манере выбранного художника. Создай изображение ночного неба в стиле Ван Гога». Модель проанализирует этот запрос и создаст изображение, соответствующее вашему запросу. О том, из каких элементов состоит промпт, мы расскажем ниже.
Задача промпт-инжиниринга
Основная задача — создавать и формулировать такие промпты для больших языковых моделей (LLM), чтобы получать от них наиболее точные и релевантные результаты. Для этого нужно:
- уметь формулировать запросы так, чтобы модель могла понять и выполнить задачу максимально точно;
- изучать особенности работы модели, ее ограничения и возможности;
- анализировать данные и требования к результату;
- иметь критерии оценки качественного промпта.
В процессе промпт-инжиниринга может быть собрана библиотека качественных промптов.
Библиотека промптов — это набор качественных промптов, которые можно использовать для обучения или тестирования языковой модели. Промпты в библиотеке могут быть сгруппированы по темам, стилям или другим параметрам, что упрощает их поиск и использование.
Применение библиотеки промптов позволяет ускорить процесс создания контента с помощью языковых моделей, а также обеспечивает более предсказуемый результат, поскольку все запросы уже были предварительно проверены. При этом нужно учитывать, что модели регулярно обновляются и будет полезно тестировать имеющиеся промпты на новых версиях.
Как создать качественный промпт
Качественный промпт — это хорошо структурированный и детализированный запрос, который точно передает намерение пользователя и дает нейросети достаточно информации для генерации корректного и релевантного ответа. Такой промпт повышает вероятность получения желаемого результата.
Для GigaChat API одновременно используются:
Системный промпт (system prompt) — специальное сообщение, используемое для управления поведением языковой модели. С помощью системного промпта пользователь передает модели контекст задачи и описывает инструкцию поведения. В системном промпте мы описываем правила и даем инструкции, которым модель должна следовать при генерации ответа. При создании чата или сохранении контекста диалога, системный промпт можно передать только один раз в самом первом сообщении.
Пользовательский промпт (user prompt) — это запрос пользователя, который должна выполнить модель, следуя инструкциям, которые описаны в системном промпте.
Вместе они составляют один запрос к нейросети.
Например:
Системный промпт
Ты — учитель русского языка, идеально знающий русский язык.
Во входных данных тебе дадут текст, который надо исправить.
Тебе требуется расставить знаки препинания в соответствии с правилами русского литературного языка: точки, запятые и знаки вопроса.
В конце повествовательного предложения обязательно ставь точку.
Ставь знак вопроса в конце предложения, если в нем есть слова, которые относятся к вопросительным или если предложение с большой долей вероятности является вопросом.
Не добавляй дополнительные слова. Не исправляй стиль текста.
В ответе верни ТОЛЬКО входной запрос с расставленными знаками препинания. Не давай объяснений, почему ты так или иначе исправил текст
Пользовательский промпт
В нутри меня бушует океан эмоций который сложно обуздать.
Я не могу панять, что со мной происходит.
Но я знаю что это не просто так
Это как-будто новый уровень жизни.
Системный промпт, как правило, включает в себя:
- Роль — специфическую функцию, которая поможет решить задачу в определенных рамках. Роль может быть как условно одушевленной, так и неодушевленной.
Примеры:
1. Ты — профессиональный копирайтер с широкими знаниями в области медицины на уровне выпускника медвуза. Ты умеешь писать как длинные, так и короткие тексты на медицинскую тему.
2. Ты — бот медицинской компании, который дает короткие ответы на вопросы о медицине.
- Входные данные — это информация для получения ответа.
В запросе пользователя (входных данных) будут указаны следующие данные:
- тема текста;
- формат (статья, эссе, заметка);
- размер текста (будет указано количество знаков);
- ключевые слова
- Задача — это четкое указание, что вы хотите получить в качестве ответа модели. Это может быть текст, анализ данных, примеры кода, краткий или развернутый ответ на вопрос и т.д.
Сгенерируй текст, используя входные данные. Используй подтвержденные медицинские источники, давай на них ссылки. Используй данные только за последние 3 года.
- Индикатор вывода — формат или тип ожидаемого ответа от модели после обработки входных данных. Также можно задать ограничения для ответа модели.
Формат ответа:
- у текста всегда есть заголовок, он соответствует заданной теме;
- если используются цитаты, то в скобках надо указать ссылки на источник, автора и название источника;
- придерживайся научного стиля, используй медицинские термины;
- пиши текст только в рамках выбранной темы;
- текст не должен превышать 1500 знаков без пробелов
Пример качественного системного промпта, который включает в себя роль, входные данные, задачу и индикатор вывода:
Ты — профессиональный копирайтер с широкими знаниями в области медицины на уровне выпускника медвуза. Ты умеешь писать как длинные, так и короткие тексты на медицинскую тему.
В запросе пользователя (входных данных) будут указаны следующие данные:
- тема текста;
- формат (статья, эссе, заметка);
- размер текста (будет указано количество знаков);
- ключевые слова.
Сгенерируй текст, используя входные данные. Используй подтвержденные медицинские источники, давай на них ссылки. Используй данные только за последние 3 года.
Формат ответа:
- у текста всегда есть заголовок, он соответствует заданной теме;
- если используются цитаты, то в скобках надо указать ссылки на источник, автора и название источника);
- придерживайся научного стиля, используй медицинские термины;
- пиши текст только в рамках выбранной темы;
- текст не должен превышать 1500 знаков без пробелов или меньше, если это указано.
Пользовательский промпт:
Сгенерируй заметку на тему «Профилактика ОРЗ в зимний период». Ключевые слова: ОРЗ, вирусы, профилактика.
Основные рекомендации для создания промптов
Создавайте однозначные запросы
В запросе не должно быть двусмысленных формулировок или противоречий.
Ты – дизайнер интерьера.
Твоя задача – разработать интерьер комнаты, который сочетает в себе минимализм и максимализм, создавая ощущение буйства цвета и фактур, но при этом он был прост и лаконичен.
Интерьер должен включать элементы обоих стилей, при этом сохраняя гармонию и функциональность пространства.
Формат ответа:
1. Описание концепции интерьера.
2. Основные элементы минимализма.
3. Основные элементы максимализма.
4. Примеры сочетаний этих элементов.
Комментарий к промпту: минимализм и максимализм — противоположные по стилю направления. Даже если в промпте есть все обязательные элементы: роль, задача и т.д., но есть противоречие, то ответ модели может быть неприменимым
Используйте актуальные данные
Модель может выдать неактуальную информацию, если промпт содержит устаревшие данные.
Ты – аналитик данных.
Твоя задача – спрогнозировать спрос на мобильные телефоны в 2023 году, основываясь на данных продаж мобильных телефонов за 2005 год.
Используй формальные методы анализа данных. Избегай сложных формулировок.
Прогноз должен учитывать изменения технологий, потребительских предпочтений и экономических условий за последние годы.
Формат вывода:
* Описание метода прогнозирования.
* Основные факторы, влияющие на спрос.
* Прогнозируемый объем продаж.
* Рекомендации по корректировке стратегии.
Комментарий к промпту: в промпте есть необходимые элементы, но из-за неактуальных данных ответ, вероятно, будет неприменим.
Приводите примеры
Добавьте в промпт примеры, которые продемонстрируют модели, как следует выполнять задания правильно. Модель будет стремиться обнаружить закономерности и связи в приведенных примерах и использовать их для формирования своего ответа. Экспериментируйте с оптимальным количеством примеров: от одного до нескольких.
Ты - руководитель отдела разработки.
Твоя задача - определить ключевые этапы работы над проектом.
Ты используешь формальный стиль. Избегай сложных формулировок.
Задачи не нумеровать, а обозначать новой строкой с дефисом перед задачей.
Входные данные будут содержать описание проекта.
Выдаваемый результат должен быть в следующем формате:
Проект: <название>.
Задачи:
- задача.
- задача.
- задача.
Пример результата:
Проект: Мобильное приложение для доставки еды.
Задачи:
- Анализ требований заказчика.
- Проектирование архитектуры приложения.
- Разработка клиентской части.
- Разработка серверной части.
- Тестирование и отладка.
- Подготовка к релизу.
Что поможет улучшить промпт
Экспериментируйте с формулировками. Создайте несколько вариантов запроса на одну тему и проанализируйте полученные результаты, чтобы выявить наиболее продуктивные подходы.
Анализируйте ответы. Используйте полученные данные для дальнейшей оптимизации промптов. Постоянный анализ ответов поможет улучшить качество запросов и, как следствие, итоговых результатов.
Учитывайте целевую аудиторию, для которой предназначен ответ. Ориентируйтесь на уровень знаний и интересы пользователей, чтобы адаптировать стиль и глубину ответа. Это особенно актуально, если ваш промпт будет использоваться для генерации контента, который должен быть понятен разным группам пользователей.
Соблюдайте этику. При использовании нейросетевой модели важно помнить о возможных этических последствиях. Нужно учитывать, каким образом созданные промпты могут повлиять на общество. Например, неправильно сформулированный промпт может привести к созданию предвзятых или дискриминационных текстов, изображений или решений. Поэтому важно разрабатывать промпты с учетом принципов справедливости, прозрачности и ответственности. Подробнее — в разделе документации GigaChat Тематические ограничения запросов.
Настройка параметров
При настройке генерации ответов на запросы к нейросети, существует несколько параметров, которые могут влиять на результат. Эти параметры помогают управлять поведением модели и получать нужный результат, будь то точное следование правилам, креативная генерация или что-то среднее. Вот основные из них:
Температура. Температура контролирует степень случайности выбора слов. При низкой температуре модель будет более предсказуемой и консервативной, выбирая наиболее вероятные слова. Высокая температура увеличивает разнообразие ответов, но может привести к менее связным текстам. Не рекомендуется использовать совместно с параметром top_p.
repetition_penalty. Количество повторений слов. Значение 1.0 — ничего не менять (нейтральное значение), от 0 до 1 — повторять уже сказанные слова, от 1 и далее стараться не использовать сказанные слова.
Топ-p. Альтернатива параметру temperature, где модель учитывает результаты токенов с вероятностной массой top_p. Таким образом, 0.1 означает, что учитываются только токены, составляющие верхнюю 10%-ную массу вероятности. Значения от 0 до 1. Не рекомендуется использовать совместно с параметром temperature.
max_tokens. Ограничение максимальной длины генерируемого текста. Это полезно для контроля объема ответа и предотвращения слишком длинных текстов.
Проблема достоверности ответов модели
Современные языковые модели (LLM) способны создавать ответы, которые выглядят логично и убедительно, но иногда они могут быть вымышленными. Чтобы повысить точность и фактическую достоверность ответов, а также уменьшить вероятность появления несогласованных или выдуманных данных, можно улучшить промпты.
Используйте примеры и шаблоны. Предоставление примеров или шаблонов может помочь модели понять, как следует формировать ответ. Это особенно полезно при работе с задачами, требующими соблюдения определенных форматов или стилей.
Ограничьте свободу интерпретации. Если модель имеет слишком большую свободу в интерпретации входных данных, это может привести к генерации выдуманных или несогласованных ответов. Ограничение свободы интерпретации помогает модели сосредоточиться на наиболее вероятных и согласованных ответах.
Добавьте проверку фактов. Внедрение механизмов проверки фактов может помочь снизить вероятность генерации ложной информации. Это может быть реализовано путем добавления внешних источников информации или использования баз данных фактов.
Обеспечьте разнообразие данных. Использование разнообразных данных из разных источников помогает модели научиться генерировать ответы, основанные на реальных фактах и примерах. Разнообразие данных способствует более точному и актуальному обучению.
Регулярно обновляйте модель. Постоянное обновление модели новыми данными и исправлениями помогает поддерживать ее актуальность и точность. Регулярные обновления способствуют генерации более точных и релевантных ответов. Модели GigaChata постоянно обновляются, подробнее можно узнать из документации.
Пройдите курс, чтобы научиться составлять наиболее эффективные промпты.
Вы также можете использовать базу знаний, чтобы изучить подробное руководство по работе с промптами и ознакомиться с тематическими примерами.