Как стать автором
Обновить

Prompt-инженерия: уменьшение сложности промпта

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров3.5K

Часто, сталкиваясь с нестабильностью LLM, компании ошибочно пытаются «задавить» проблему, переходя на более дорогие модели. Это распространённое, но крайне неэффективное решение. Даже самая продвинутая LLM будет давать непредсказуемый результат, если ей «скормить» сложный промпт.

Я хочу поделиться фреймворком того, как смотреть на промпт, чтобы добиваться стабильности и качества без лишних затрат.

Что же такое промпт? Кратко

Промпт — это набор идей. Эти идеи несут в себе информацию о:

  • том, что есть;

  • том, что с этим делать.

Вот переписка с клиентом, найди в ней все вопросы клиента.

Мне сейчас так грустно, посоветуй кино на вечер.

Как ты думаешь, как люди будут жить на Марсе?

Любой ответ от LLM всегда находится на шкале от 0% до 100%, где:

  • 100% - ответ максимально похож на то, что мы хотели получить;

  • 0% - максимально не похож.

На то, где по этой шкале будет находиться ответ, влияет сложность и количество идей в промпте. И чем ближе ответ к 100%, тем он более правильный. Также помним о том, что LLM не телепат, и если ему в принципе не сказать о том, что нужно, он этого и не даст.

Сложность идей

Сложность промпта складывается из вложенной и следственной сложности.

Сложность вложенная

Определяется идеями, которые сразу присутствуют в промпте. Это:

  • Размер

  • Понятность

  • Знакомость

  • Подобность

Размер — самая простая метрика, размер передаваемой в промпт информации. Чем больше контекста, тем больше вероятность, что LLM что-то сделает не так.

Понятность — метрика, оценивающая, насколько понятно изложены идеи в промпте. Это включает в себя:

  • порядок изложения идей;

  • структуру изложения (сгруппированы по абзацам и т. д.);

  • формулировки (точные и прямые или образные и с ошибками);

  • вариативность идей (будет раскрыто ниже).

Знакомость — метрика, оценивающая, насколько LLM знакома с этими идеями.

Например:

Если спросить, какая 22-ая буква алфавита, любая LLM безошибочно назовёт нужную букву. А если спросить, какая 22-ая буква в bpzdmhtcypwaaxzwcgdfuqezafigir, то в большинстве случаев LLM даст неверный ответ. Всё потому, что алфавит — очень знакомая идея, а случайный набор букв — нет. Также потому, что LLM не умеют считать, но об этом в другой раз.

Подобность — метрика, оценивающая уровень подобия идей в промпте.

Например:

Вот у нас много текста по физике — сделай автореферат.

Уровень подобности высокий, потому что вся информация находится в одном научном домене, и автореферат — это научный способ краткого изложения.

Вот у нас много текста по физике — придумай песню про часть с протонами, сделай таблицу с уровнями энергий и переведи часть про фотоны на суахили.

Уровень подобности значительно ниже из-за того, что:

  • домены песен, табличных данных и суахили очень слабо связаны между собой;

  • мы просим сразу выполнить три абсолютно разные задачи.

Сложность следственная

Определяется идеями, которые требуются для выполнения поставленной перед LLM задачи.

Например:

Напиши историю в стиле Джека Лондона

Имеет высокую следственную сложность, потому что для выполнения этой задачи LLM будет использовать знания о стиле написания Джека Лондона, и это само по себе потребует ресурс его внимания. Внимание в LLM — это отдельная большая тема, об этом в другой раз.

Вот описание стиля, напиши в нём историю: мужественный, суровый, реалистичный, часто сфокусированный на выживании в экстремальных условиях. Персонажи сильные духом, сталкивающиеся с безжалостной природой или жестоким обществом. Язык прямой, лаконичный, без излишней сентиментальности, но с яркими описаниями борьбы.

Имеет следственную сложность ниже, потому что мы изначально предоставили LLM описание требуемого стиля. В определённом смысле мы выполнили эту умственную работу за LLM, тем самым теперь ему проще думать.

Количество следственных идей нарастает очень быстро, если не следить за этим.

Как увеличивать вероятность правильного ответа?

Уменьшая сложность и количество идей.

Если результат ответа LLM слабо похож на ожидаемый, то нужно проанализировать промпт на предмет сложности и количества находящихся в нём идей. Далее представлены способы уменьшения каждой из описанных выше сложностей.

Размер

Основная задача уменьшения размера — увеличить вероятность того, что фокус внимания LLM будет правильно распределён во время решения нашей задачи. И пускай размер — достаточно понятная метрика, его уменьшение не является тривиальной задачей. Но существует только два способа это сделать:

Логическое дробление

Это подходит для случаев, когда от LLM просили сделать несколько не связанных друг с другом задач за раз. Будет намного корректнее разделить это на отдельные запросы, тем самым уменьшив размер контекста каждого из них. По-простому — разбить на несколько запросов к LLM, каждый из которых будет более сфокусирован на меньшем количестве задач.

Дистилляция контекста

Это подходит для случаев, когда мы предоставляем LLM больше информации, чем действительно нужно для выполнения задачи. Например, для задачи "Определить тему диалога" вместо того чтобы отправлять весь диалог в LLM, может быть достаточно только первой половины диалога или только вопросов, которые задавал клиент.

Уменьшение контекста можно делать через:

  • код (который отфильтрует, обрежет, вытащит по ключевым словам и так далее);

  • дополнительный запрос к LLM (который вытащит только нужные части текста, суммирует и т. д.).

По-простому — убрать лишний шум из контекста, чтобы он не путал LLM. Таким образом, до запроса к LLM, который выполняет реальную задачу, дойдёт меньший контекст, более сфокусированный на выполняемой задаче.

Понятность

Основная задача увеличения понятности — увеличить вероятность того, что предоставленные идеи максимально удобны для переваривания LLM. Сама понятность, хоть и абстрактная вещь, но на неё влияют достаточно понятные штуки:

Порядок изложения

Идеи должны быть предоставлены в порядке, который упрощает формирование контекста, а именно понимания, что вообще происходит. Чаще всего хорошо работает формула:

  • Goal — задача, которую нужно выполнить;

  • Return format — в каком виде нужно получить результат;

  • Warnings — предостережения о том, чего не делать;

  • Context — весь остальной контекст.

Структура изложения

Чем в более понятные/логичные группы объединены идеи внутри промпта, тем проще будет LLM понять, где что происходит. Зачастую достаточно помнить начальную школу и правила формирования абзацев и названий глав в тексте.

Формулировки идей

В этот пункт включено несколько подпунктов:

  • Чёткость донесения

    Изложенные идеи должны использовать максимально прямой язык, имеющий минимальное количество интерпретаций. Чем больше вольных и абстрактных формулировок, тем меньше вероятность получения ожидаемого результата.

  • Грамотность

    Правильно составленные предложения и отсутствие ошибок также увеличивает вероятность того, что запрос будет верно интерпретирован. И также уменьшат уровень требуемого додумывания.

Вариативность идей

Этот пункт больше всего касается того, в каком виде нам нужен результат работы LLM.

Плохой пример:

Если X, то напиши одно, а если Y, то нужно будет написать другое, но только если Z не попадался больше двух раз.

Нужно стремиться к тому, чтобы одно логическое действие LLM имело минимальное количество влияющих на него переменных. В данном случае одним из примеров с меньшей вариативностью было бы два запроса к LLM:

Найди: есть ли X? есть ли Y? сколько раз встречается Z?

И второй запрос, который в зависимости от наличия X, Y и количества Z (меньше ли двух), имеет промпт для написания одного либо промпт для написания другого.

Знакомость

Основная задача увеличения знакомости — увеличить вероятность того, что LLM имеет представление об обсуждаемых идеях. Увеличение знакомости достигается через:

Перевод на общепринятый язык

Чем более знакомые названия и формулировки, тем проще LLM понять, о чём речь. Тут хорошо помогает правило: если это нужно объяснять LLM, значит, стоит поискать другую формулировку. Например:

Найди все конфликтогены менеджера.

Менее распространено чем

Найди все нарушения менеджера.

Конечно, LLM не "дурак" и знает, что такое "конфликтоген", и, конечно, бывают случаи, когда более специфичное слово помогает тоньше настроить фокус LLM, но зачастую чем проще и понятнее язык, тем лучше результат.

Можно заметить, что увеличение знакомости также увеличивает и понятность, так как действительно делает идеи более понятными для LLM. Но разница между понятностью и знакомостью в том, что знакомость фокусируется на том, чтобы как можно больше идей были уже известны LLM, в то время как понятность фокусируется на удобном для работы изложении.

Подобность

Основная задача увеличения подобности — увеличить общность вещей, о которых нужно думать LLM при выполнении задачи. Также как и человеку будет сложно одновременно:

  • играть на трубе одной рукой;

  • перемешивать суп другой рукой;

  • высчитывать квадратный корень из 99182 в уме.

Так и LLM даёт намного более ожидаемый результат, если её думание имеет общее направление. Увеличение подобности достигается через шаги, идентичные описанным в уменьшении размера. Но только тут фокус на том, чтобы каждый отдельный запрос к LLM имел максимально похожие идеи.

Уменьшение следственной сложности

Для определения уровня следственной сложности нужно задать ряд себе вопросов:

  • Как много вещей нужно уже знать, чтобы решить эту задачу?

  • Насколько эти вещи известны? Как много информации о них может быть у LLM?

Конечно, если думать максимально глубоко про пример с Джеком Лондоном, то более развёрнутая версия тоже имеет много вещей, которые нужно знать, чтобы написать историю. Нужно знать, что такое мужественность, суровость, сила духа и так далее. Но это всё же куда более распространённые идеи. Поэтому, чтобы не утонуть в процессе раскрывания смысла каждого слова в промпте, стоит всегда предпринимать действия, только если по результату работы LLM видно, что она слабо знакома с этой идеей.

Общие правила

Если задача найти все упоминания об X в тексте, не нужно

  • просить LLM написать “нет” если упоминаний нет

  • просить LLM написать “да” если попадания есть и дополнительным полем перечислить все упоминания

Достаточно просто вернуть все найденные упоминания если они есть.

Если задача дать оценку по N категориям, не нужно

  • просить вернуть json c полем “категории”, в котором N категорий

Достаточно просто вернуть результат анализа.

Если задача определить тему\категорию диалога или звонка, не нужно

  • просить вернуть тему json-ном с полем тема или result

Достаточно просто вернуть название темы\категории.

Стоит также помнить, что разные LLM имеют разные знания, на которых они были обучены, и разные представления о, например, как написать продающую статью. Поэтому, если просить:

напиши как топ продажник

У нас будет плавающий результат с низким уровнем контроля над результатом.

В то время как при использовании гайдлайнов выше можно собрать флоу запросов к LLM, которые независимо от моделей будут давать контролируемый и предсказуемый результат. Что значительно упростит проверку гипотез, тестирование других моделей и возможность тонко настраивать логику на каждом отдельном шаге.

Также хороший промпт лишён «мусора» в виде скобок, кавычек и caps‑lock текста.

ОСОБЕННО стоит избегать таких формулировок, как «будь внимателен», «анализируй точно», «не допускай ошибок». Если ловите себя на том, что пишете подобные фразы, это прямой сигнал к тому, что нужно уменьшать сложность промпта. А если у вас в одном промпте сразу несколько подобных выражений, то вероятнее всего результат его работы очень далёк от правильного.

Если обобщить, то задача промпт-инженера — помочь LLM сфокусироваться на том, что важно для решения задачи, через:

  • перевод из абстрактного в точное;

  • уменьшение шума и лишней информации.

Поэтому всегда стоит помнить: логичный промпт — логичный результат.

Теги:
Хабы:
+6
Комментарии5

Публикации

Ближайшие события