Вы знали, что промпт — это не просто текст, который вы вводите в строку? Каждый запрос - это почти магия, где буквально каждое слово влияет на результат. В этой статье — практическое руководство, как стать настоящим волшебником
Введение
Так в чем же заключается "магия" промптинга? На самом деле, всё сводится к тому, чтобы заставить модель думать так, как нам нужно. 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.
А если хотите самостоятельно изучить дополнительные источники, то вот список различных мануалов и курсов:
Комментарии (21)
LesnoyChelovek
12.12.2024 08:43Честно говоря, я слишком ленив, чтобы самому придумывать все эти сложные конструкции промптов. Вместо этого я просто прошу саму LLM сгенерировать мне подходящий промпт.
Как это работает? Я даю модели вводные данные (например, текст, который нужно проанализировать), описываю, что именно я хочу, чтобы она сделала (например, выделить ключевые тезисы), и какой результат ожидаю получить (например, список из 5 пунктов в виде маркированного списка). И прошу ее, исходя из всей этой информации, предложить мне наиболее эффективный промпт.
JuliaEfimka
12.12.2024 08:43верно, и у Claude есть инструмент Magic Prompt, и у GPT - Prompt Enhancer. Ибо кто, как не сама модель, знает, как её лучше наставлять, чтобы она повиновалась?)))
HomoLuden
12.12.2024 08:43Вы допустили несколько опечаток в "недействительно бесполезный".
Очень много поверхностного обзора без конкретных примеров. Например в Chain of notes. Не увидел примеров самого инжиниринга проста. Больше похоже на комбинацию Кликбэйта и Низкого технического уровня статьи.
aleks1k Автор
12.12.2024 08:43Статья действительно даёт обзорное представление и ориентирована на начинающих. Для тех, кто делает первые шаги в промпт-инженеринге, детальные технические примеры могут быть перегружающими.
Для углубления в теме есть ссылки в конце статьи
menz1
12.12.2024 08:43О кстати, как нубу давно было интересно. Вот есть некая мидджорни, у неё внутри есть определенные алгоритмы разбора запроса и формирования картинки. Те, кто пишут промпты, добыли где-то описание, как оно внутри устроено, проанализировали и теперь знают, как правильно создавать запросы так, чтобы был какой-то предсказуемый результат? Или просто миллион людей кидали свои запросы в черный ящик и эмпирически вывели, что вот так картинка будет красивее, а вот так фон добавить можно?
aleks1k Автор
12.12.2024 08:43По большей части второе, статья как раз о таких эмпирически выведеных правилах
schulzr
Простите, а только я не знаю этих слов; промптинг, промпт?
Может быть есть русские подходящие термины? Запрос, например?
Goron_Dekar
Не стоит. Мы в детстве играли в D&D и получали огромное приемущество не переводя термины - мы всегда понимали, где специализированные термин, а где кусок игрового диалога. Позже я попал в науку и программирование, и вновь термины были замечательно отделены от текста, ибо были не переведены.
А сейчас я живу и работаю в англоязычной среде. И тут полный бардак: ты не понимаешь, где запрос на сервер, где промт к AI, а где просто обращение к поисковику. Всё это звучит prompt. И надо долго объяснять контекст.
Так что цените то ,что вы не носители английского, но знаете его. Вам очень удобно жить!
schulzr
Вы предполагаете,.что все читатели знают, что такое промтинг. Это не так . Публичные тексты предполагают определенные правила манипуляции с терминологией. Лучше бы им следовать.
Hardcoin
Правила здесь соблюдены. Автор не стал изобретать «перевод», который создавал бы иллюзию понятности для тех, кому и статья-то не нужна, а использовал чёткий конкретный термин.
Missis_Pam
Лучше бы быть взрослым пользователем интернетов, который знает, что такое "поисковик", и не поучать окружающих, которые вам ничего не должны, товарищ. Если читатель полез туда, где он не знает броду, — это не проблемы автора. Вы ещё до того, что в статье для сеньоров не разжевывают всё джунам, докопались бы.
milkground
Они просто не понимают значения этого слова. При этом запрос в Google почему-то никто не называет "промптом в Google", хотя там тоже есть свой язык запросов и можно было бы тоже придумать очередную "профессию будущего" типа "промпт инженер Google". Для меня использование слова "промпт" уже как маркер домохозяйки.
Да и в целом смешно, что составление обычных текстовых запросов с некоторыми правилами, пытаются притянуть к деятельности инженера. Какая-то идиократия (фильм такой) в реальности.
Goron_Dekar
Называют, поверь.
На заре гугла это был распространённый жаргонизм, когда ещё можно было сильно поднять релевантность изменением промпта. Ушло когда выдача стала сильно персонифицирована, и смысл делиться промптами был потерян.
bundsy
Точно, были же соревнования по поиску
aleks1k Автор
"Запрос" - это как-то слишком по-канцелярски звучит, прямо как в ЖЭК бумажку писать. А "промпт" - это же целое искусство общения с искусственным интеллектом! Это как разговор с джинном из лампы - надо знать особые слова и правильный порядок, иначе вместо дворца получишь тыкву
JuliaEfimka
эти термины уже стали отраслевой нормой, как и многие другие термины, заимствованные из английского языка; слово "запрос" не совсем точно передаёт смысл - ближе было бы "инструкция", но оба эти термина слишком общие и многозначные и могут создать путаницу, когда речь идёт о больших языковых моделях
milkground
Можно ссылку на отраслевые нормы с этим словом?
Я выше писал, что Google тоже имеет язык запросов, но никто почему-то не говорит про "промпты для Google". Слово "запрос" вполне точно описывает запрос к нейросети. А по поводу инструкций - так и с помощью языка запросов Google тоже создаётся инструкция для поисковой системы. Почему эти запросы не называют промптами?
JuliaEfimka
да, конечно, пожалуйста:
1.
ТЕХНО — Промпт-инжиниринг
Подкаст от Яндекса, одной из ведущих ИТ-компаний в стране (Рейтинг 20 крупнейших IT-компаний России по итогам 2023 года — Будущее на vc.ru)
2.
1.1 Введение в промт-инжиниринг | Введение в промпт-инжиниринг | НИУ ВШЭ - смотреть онлайн в поиске Яндекса по Видео
Курс одного из ведущих вузов (ВШЭ в рейтингах – Аналитический центр – Национальный исследовательский университет «Высшая школа экономики»)
3. Prompt Engineering. Руководство по промт-инжинирингу для GigaChat API
Руководство от ведущего банка и ИТ-компании в стране ("Яндекс", "Лаборатория Касперского" и Сбер возглавили рейтинг технологичных компаний РФ)
Полагаю, что если не только обыватели, но и лидеры ИТ-отрасли и образования употребляют термины "промпт"/"промт", "промпт-инжинирнг" и используют их в публичном пространстве, то термины можно считать устоявшимся.
milkground
Ну вот, например, Яндекс на странице про свою последнюю модель везде использует слово "запрос" https://ya.ru/ai/gpt-4 Там нет никаких "промптов".
Вот новость от Яндекса же:
https://yandex.ru/company/news/01-24-10-2024
Следуя вашей же логике - "отраслевой стандарт" - это запросы, ведь Яндекс - это ведущая IT компания в РФ.
JuliaEfimka
Если вчитаться в вашу новость по ссылке плюс подключить собственный опыт тестирования и обучения LLM, то можно сказать, что обращение к языковой модели состоит из двух условных частей:
1. собственно промпт - инструкция/команда, которая задаёт общий контекст и указывает, что модель должна сделать (например: "перепиши этот текст из учебника по физике так, чтобы понял пятилетка")
2. сам текст, над которым должно производиться действие (упрощение, перефразирование, извлечение терминов и т.д. и т.п.)
И вот эти 2 части вместе и являются запросом к модели.
Под длинными запросами имеются в виду как раз тексты, требующие преобразования при помощи модели, +промпты к ним. Да, промпты сами по себе тоже бывают довольно длинными и сложными для комплексных задач, но как правило всё же не на 60 страниц.
Поэтому тут я не вижу противоречий со своим сообщением выше.
axion-1
"Запрос" больше ассоциируется с поисковиками и SQL, а в LLM промпт уже устоявшийся термин, по крайней мере пока.