Вы знали, что промпт — это не просто текст, который вы вводите в строку? Каждый запрос - это почти магия, где буквально каждое слово влияет на результат. В этой статье — практическое руководство, как стать настоящим волшебником
Введение
Так в чем же заключается "магия" промптинга? На самом деле, всё сводится к тому, чтобы заставить модель думать так, как нам нужно. LLM - это черный ящик, но мы открыли его, чтобы понять, можно ли им управлять.
Мы прочитали и опробовали более десятка различных мануалов по написанию промптов, собрали все самое лучшее в одном месте и готовы поделиться с вами.
Классический промптинг и промпт инженеринг - это одно и то же?
Базовый промптинг - это простое задание вопроса модели или простая инструкция. Промпт инженеринг - это более сложный процесс.
Базовый промптинг | Промпт-инженеринг |
---|---|
Единичное взаимодействие с простыми запросами. | Многократные диалоги, сложные инструкции и тщательно структурированные вводные и выходные данные. |
Может быть расплывчатым или двусмысленным. | Промпты точные, оставляют мало места для неверного толкования моделью. |
Разовая итерация. | Многократное тестирование, анализ и улучшение промптов со временем. |
Как работает промпт инженер?
Создает первоначальный промпт
Для начала - определимся с конечной целью. Затем, исходя из нее, формулируем черновой вариант промпта.
Тестирует и выявляет проблемы
Проверяем, насколько хорошо промпт выполняет свою задачу. Как проверять:
Подготовить тестовые примеры, описывающие различные сценарии и крайние случаи
Запустить черновой промпт на тестовых примерах
Проанализировать результаты (про то, как вообще тестировать промпты, рассказано здесь)
Выбирает подходящую технику
Определяемся с тем, какие изменения мы хотим внести в промпт, исходя из результатов тестирования. Как определиться:
Выявить, почему возникает та или иная проблема
Изучить методы разработки промптов, которые могут решить проблему
Выбрать метод
Реализует улучшения
Улучшаем черновой промпт. Если вы обнаружили несколько проблем, для которых выбрали разные методы - изменяйте промпт поэтапно. Так вы сможете чище оценивать результаты изменений.
Итерируется и дорабатывает
Протестируйте улучшенный промпт на тех же тестовых примерах
Просмотрите, как изменились результаты и изменились ли вообще
Найдите проблемы, которые не решились, или же которые появились
Повторяйте цикл пока не получите желаемый результат
Техники промптинга
Как и в любом деле, в написании промптов уже появились некоторые устоявшиеся методы. На самом деле, техник большое множество, но мы выделили самые популярные и полезные.
Zero/Few-Shot
Zero-shot промптинг - это техника создания промпта без использования примеров. То есть, мы не используем примеры входных и выходных данных, чтобы обучить модель.
В каких случаях использовать:
Если задача ясна из инструкции
Если модель способна решить задачу самостоятельно (например, общепринятые задачи NLP - анализ тональности текста, классификация текста и т.д.)
Если примеры могут загнать модель в слишком узкие рамки
Если невозможно покрыть примерами все возможные кейсы
Few-shot промптинг - это техника создания промпта с примерами. То есть, мы используем несколько примеров входных и выходных данных, чтобы обучить модель.
В каких случаях использовать:
Если задачу невозможно четко описать инструкцией
Если желаемый результат задачи отличается от общепринятых (например, вы хотите размечать тональность текста не как положительную/отрицательную, а как нейтральную, восторженную и т.д.)
Если возможно покрыть примерами все возможные кейсы ИЛИ примеры могут быть адаптированы моделью для разных кейсов
Role based промптинг
Role based промптинг - техника создания промпта, в основе которого лежит задание роли / точки зрения и тд. модели.
Эта техника полезна, если вам необходимы ответы с конкретной перспективы.
Например:
Можно просто попросить модель описать опасность глобального потепления. Тогда мы получим ответ:
Глобальное потепление вызывает экстремальные погодные условия, повышение уровня моря, разрушение экосистем и угрозу для здоровья и безопасности людей по всему миру.
Можно попросить модель описать опасность глобального потепления, с точки зрения экономиста. Тогда мы получим ответ:
Глобальное потепление может привести к значительным экономическим потерям, включая повреждение инфраструктуры, ухудшение сельскохозяйственного производства и увеличение затрат на защиту от стихийных бедствий.
Плюсы техники:
Делает ответ более релевантным относительно вашего контекста
Помогает модели избежать ошибок и галлюцинаций, если вы хорошо задаете роль
Однако, задать правильную роль не так просто, как кажется. Очень часто, задание роли может либо путать модель, либо вообще никак не влиять на ответ. Тут важно обстоятельно протестировать промпт на разных ролях, и сделать выбор.
Chain-Of-Thought промптинг
Chain-Of-Thought промптинг - техника создания промпта, который заставляет модель думать поэтапно, шаг за шагом.
Такая техника делает размышления модели близкими к человеческим. Модель выполняет каждый шаг только после анализа предыдущего.
Все дело в том, что очевидные даже ребенку логические задачи могут быть не очевидны для модели. Например:
Мы дадим модели задачу:
На дереве висело 5 яблок, птичка унесла два, потом созрело еще одно, и червяк покусал еще два. Сколько всего яблок на дереве?
Тогда ответ модели будет:
На дереве осталось 2 яблока.
Нам с вами очевидно, что ответ неправильный, но модели - нет.
Теперь заставим модель думать шаг за шагом, просто добавив к промпту "Рассуждай шаг за шагом".
Вот какой ответ даст модель в этотм раз:
Чтобы посчитать, сколько яблок осталось на дереве, давайте разберем по шагам:
1. Изначально на дереве 5 яблок.
2. Птичка унесла 2 яблока: (5 - 2 = 3) яблока.
3. Созрело еще 1 яблоко: (3 + 1 = 4) яблока.
4. Червяк покусал 2 яблока, но не унес их, поэтому количество яблок остается тем же: 4 яблока.
Таким образом, на дереве осталось 4 яблока.
Иногда, чтобы использовать эту технику, действительно достаточно просто добавить одно предложение к промпту. Однако, в более сложных задачах, может потребоваться подробно расписать этапы, или же по какому принципу модель должна действовать.
Chain-Of-Thought сейчас является одной из самых популярных техник. От нее пошли различные вариации использования. О них тоже расскажем.
Chain-of-Verification промптинг
Chain-of-Verification промптинг - техника создания промпта, который заставляет модель проверять все предыдущие шаги перед тем, как сделать следующий.
Эта техника как бы дополняет Chain-Of-Thought, делая его более надежным. Ведь в процессе своих размышлений, модель может прийти к ложному ответу, даже если рассуждения были последовательными.
Например, в задаче про яблоки, я один раз получила такой ответ:
Чтобы посчитать, сколько яблок осталось на дереве, давайте разберем по шагам:
1. Изначально на дереве 5 яблок.
2. Птичка унесла 2 яблока: (5 - 2 = 3) яблока.
3. Созрело еще 1 яблоко: (3 + 1 = 4) яблока.
4. Червяк покусал 2 яблока, но не унес их, поэтому количество яблок остается тем же: (4 - 2 = 2) яблока.
Таким образом, на дереве осталось 2 яблока.
Модель равильно рассуждала, но последний этап был неправильным, из-за этого и сам ответ неверный. Попросим модель проверять каждый свой этап.
Получим ответ:
Давайте разберем задачу шаг за шагом и проверим каждый из них:
1. Изначально на дереве 5 яблок.
2. Птичка унесла 2 яблока: (5 - 2 = 3) яблока осталось на дереве.
3. Созрело еще 1 яблоко: (3 + 1 = 4) яблока на дереве.
4. Червяк покусал 2 яблока:
Червяк не унес яблоки, он только их повредил. Количество яблок не меняется, но поврежденные яблоки учитываются.
Поэтому на дереве все равно 4 яблока, только 2 из них повреждены.
Таким образом, на дереве осталось 4 яблока.
Очевидно, что ответ теперь правильный.
Chain-of-Note промптинг
Chain-of-Note промптинг - техника создания промпта, который заставляет модель делать так называемые "заметки" в процессе решения задачи.
Зачем модели нужны эти заметки? - Дело в том, что в процессе рассуждений, модель может делать выборы, противоречащие или не соответствующие друг другу. Заметки - это как способ зафиксировать какие-то рассуждения, чтобы модель опиралась на них в течение всего процесса решения.
Например, попросим модель решить детективную задачу. У нас есть 5 подозреваемых и факты про каждого из них. Модель должна выбрать виновного.
Допустим, один из подозреваемых - Иван. На третьем шаге, исходя из каких-то фактов, модель решает, что Иван невиновен. Однако, на седьмом шаге, модель делает выбор в пользу Ивана, получив новые факты и забыв о своих предыдущих рассуждениях. Если мы просим модель делать заметки, то что-то вроде "Иван не виновен потому что..." будет оставаться в памяти модели, и даже с учетом новых фактов, модель будет придерживаться этого вывода.
Chain-of-Knowledge промптинг
Chain-of-Knowledge промптинг - техника создания промпта, который заставляет модель использовать уже имеющиеся знания для решения задачи.
Основное отличие от Chain-Of-Thought промптинга в том, что модель, в ходе рассуждения, не делает выводы самостоятельно. Модель опирается на какие-то известные ей факты, и выстраивает из них логическую цепочку, приводящую к конкретному ответу.
Например, для решения задачи необходимо использовать законы физики. Очевидно, нельзя рассчитывать на правильность законов, которые модель попробует вывести самостоятельно. А вот попросить модель, опираясь на конкретные законы, решить задачу - вполне. Корректность ответа будет выше, чем в простом Chain-Of-Thought, ведь тут не будет искажения каких-либо фактов действительности.
Составление промпта: переходим к практике
Теперь, когда мы знаем, цикл промпта и популярные техники, пора перейти к самой практической части - непосрественному написанию промптов.
Начнем, наверное, с кнута - а именно,
что НЕ стоит делать:
Давай неясные инструкции
Не стоит писать слишком расплывчатые или широкие формулировки, это может привести к общим или нерелевантным ответам.
Давай слишком подробные инструкции
Наоборот, не стоит писать слишком подробные инструкции, это может слишком ограничивать модель
Предполагать, что модель понимает
При обращении к какой-то концепции / термину и тд. не рассчитывайте, что модель точно с ними знакома. Лучше дать более подробный контекст, чтобы избежать галлюцинаций.
Говорить образно
Модель всегда интерпретирует буквально, поэтому образный язык или метафоры могут привести к неожиданным результатам.
Противоречить самому себе
Всегда проверяйте, что ваши инструкции и примеры не могут инрепретироваться как противоречивые.
Теперь пряник - что стоит делать:
Быть четким и лаконичным
Промпт должен быть достаточно обширным и понятным. Не используйте жаргон или технические термины, которые могут запутать модель.
Повторять инструкции в конце
Некоторые модели могут быть восприимчивы к расположению инструкций в промпте. Иногда инструкции в конце промпта оказываются более значительными, чем в начале.
Использовать конкретные примеры
Конкретные примеры могут помочь модели лучше усвоить контекст задачи.
Например, если вы прости модель написать рассказ в стиле Агаты Кристи, дайте в качестве примеров пару кусков текста данного автора.
Варьировать формулировки
Использование различных формулировок может помочь модели лучше понять задание и получить более разнообразный и творческий результат. Попробуйте использовать разные стили, тона и форматы, чтобы посмотреть, как модель отреагирует.
Стандартизировать вывод
В конце промпта всегда включайте пару фраз о том, в каком формате должен быть ответ. Так ответы модели будут более предсказуемыми и легкими для анализа.
Использовать четкий синтаксис
Используйте четкий синтаксис в промпте: пунктуация, заголовки и маркеры разделов. Это сделает промпт четче и легче интерпретируемым.
Разбивать задачу на части
Если ваша задача сложная, разбивайте ее на несколько мелких шагов. Так модель будет получаеть промежуточные результаты, которые с меньшей вероятностью будут неверными.
Передавать контекст
Если ваша задача требует определенных знаний - предоставьте их модели. Иначе она будет их выдумывать.
Определять желаемый размер ответа
Всегда лучше прописать в промпте хотя бы примерный желаемый размер ответа. Иначе можно столкнуться с тем, что в одном запросе вы получите целую статью, а в другом - пару предложений.
Модель не очень хорошо работает с количеством слов в ответе, однако всегда четко выполняет запросы на количество предложений или абзацев.
А еще модель склонна выдавать минимальный ответ, поэтому если вы просите минимум 2 предложения, вы, скорее всего, получите именно 2.
Избегать двусмысленности
Всегда поясняйте термины или понятия, которые можно интерпретировать по-разному. При необходимости можно включить определения непосредственно в промпт.
Использовать положительные и отрицательные инструкции
Четко прописывайте, что вы хотите и чего не хотите, чтобы четко сформулировать ожидания. Например, «Не выдумывай никаких фактов; Используй только известные термины».
Побуждать модель к самоанализу
Прописывайте в промпте инструкции, заставляющие модель самостоятельно оценивать свои ответы. Например, дайте ей инструкцию делать пометки в части ответов, в которых она не уверена.
Раскрывать задание постепенно
Чтобы направить мыслительный процесс модели, пишите инструкции от общего к частному или наоборот.
Контролировать тон и стиль
Всегда четко указывайте желаемый тон и стиль (например, формальный, непринужденный, технический), чтобы ответ соответствовал вашим ожиданиям. При отсутствии интрукций, модель будет подстраивать стиль общения под юзера, что не всегда уместно.
Устанавливать четкие границы
Всегда пишите, что модель не должна обсуждать или генерировать. Например, «Не включать политические мнения» или «Избегать упоминания конкретных брендов».
Итерироваться и экспериментировать
После того как вы создали промпт, протестируйте его на модели и посмотрите, как она работает. Если результаты не соответствуют ожиданиям, попробуйте доработать промпт, добавив больше деталей или изменив тон и стиль.
Использовать обратную связь
Наконец, используйте отзывы пользователей или другие источники, чтобы постоянно совершенствовать свои промпты, если у вас есть такая возможность.
А вот формат промпта, который предлагают разработчики модели Gemini от Google:
Роль - определите, "кем" должна быть модель
Задача - четко сформулируйте задачу или вопрос
Контекст - предоставьте необходимый контекст
Формат - укажите формат, тон и длину ответа
Примеры - включите как положительные, так и отрицательные примеры, если это применимо
Границы - установите явные границы для содержимого
Ваш настольный чек-лист для написания промпта
Понятен ли промпт?
[ ] Можно ли понять промпт с первого прочтения, не требуя дополнительных объяснений?
[ ] Избегает ли промпт жаргона или слишком сложного языка?
Является ли промпт конкретным?
[ ] Просит ли промпт именно то, что вы хотите, не будучи слишком расплывчатым или широким?
[ ] Даны ли четкие инструкции или примеры, чтобы направить модель?
Адекватен ли контекст?
[ ] Включена ли вся необходимая дополнительная информация, чтобы модель могла понять задание?
[ ] Включает ли промпт такие важные детали, как цель задачи, требуемый тон или какие-либо конкретные ограничения?
Логичен ли порядок инструкций?
[ ] Расположена ли наиболее важная информация в начале или в конце промпта, чтобы сделать акцент?
[ ] Логично ли сгруппированы связанные инструкции?
Гибкий ли промпт?
[ ] Позволяет ли промпт модели искать творческие решения, если требуется творческий подход?
[ ] Является ли промпт достаточно открытым, чтобы не ограничивать способность модели давать разнообразные ответы?
Не содержит ли промпт предвзятости?
[ ] Избегали ли вы формулировок, которые могут внести предвзятость в ответы модели?
[ ] Является ли промпт нейтральным, не склоняющим модель к определенной точке зрения, если это не требуется намеренно?
Эффективен ли промпт?
[ ] Переходит ли промпт к делу без лишних слов и сложностей?
[ ] Сокращает ли он потребность в многократном повторении для получения правильного ответа?
Можно ли легко использовать промпт повторно?
[ ] Разработан ли промпт таким образом, чтобы его можно было адаптировать для решения аналогичных задач без существенных изменений?
[ ] Проверяли ли вы промпт в разных контекстах, чтобы убедиться в его надежности?
Протестировали ли вы промпт?
[ ] Прогнали ли вы промпт через модель и проверили результат на точность, релевантность и ясность.
[ ] Доработали ли вы промпт, основываясь на результатах, для повышения эффективности?
Последовательны ли выходные данные?
[ ] Последовательно ли модель генерирует точные и релевантные ответы при использовании этого промпта?
[ ] Стабильные ли ответы в разных прогонах?
Соответствует ли промпт целям?
[ ] Соответствует ли промпт общей цели или задаче, для которой он разработан?
[ ] Вносит ли промпт непосредственный вклад в достижение желаемого результата?
Пользуйтесь!
Промпт-инженеринг - это не просто наука, это настоящее искусство, требующее практики и постоянного совершенствования. Вооружившись знаниями из этого руководства и регулярно применяя их на практике, вы сможете создавать более эффективные промпты и получать именно те результаты, которые вам нужны.
Эта статья была подготовлена под руководством @pletinsky. Выражаем особую благодарность за помощь в создании материала.
English version of this article is available here.
А если хотите самостоятельно изучить дополнительные источники, то вот список различных мануалов и курсов: