Техники промптинга

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

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

Общие промпты / Zero-shot

Zero-shot [5] (от англ. «нулевой выстрел» или промптинг без примеров) — это самый простой тип промпта. Он содержит только описание задачи и некоторый текст, с которого LLM должна начать работу. Этим вводом может быть что угодно: вопрос, начало истории или инструкция. Название zero-shot означает «без примеров».

Воспользуемся Vertex AI Studio (раздел Language) в Vertex AI [6], где есть «песочница» для тестирования промптов. В Таблице 1 показан пример zero-shot промпта для классификации отзывов о фильмах.

Формат таблицы, использованный ниже — отличный способ документирования промптов. Ваши промпты, скорее всего, пройдут через множество итераций, прежде чем попадут в финальный код, поэтому важно отслеживать работу по промпт-инжинирингу дисциплинированным и структурированным образом. Подробнее об этом табличном формате, важности отслеживания работы и процессе разработки промптов рассказано ниже в разделе «Лучшие практики» («Документируйте различные попытки составления промптов»).

Температуру модели следует установить на низкое значение, так как креативность здесь не требуется. Мы используем стандартные значения top-K и top-P для gemini-pro, которые фактически отключают эти настройки (см. раздел «Конфигурация вывода LLM»). Обратите внимание на сгенерированный результат. Слова disturbing (тревожный) и masterpiece (шедевр) могут усложнить предсказание, так как оба слова использованы в одном предложении.

Название: 1_1_movie_classification

ЦельКлассифицировать отзывы о фильмах как положительные, нейтральные или отрицательные.
Модельgemini-pro
Температура0.1Лимит токенов5
Top-KN/ATop-P1
ПромптClassify movie reviews as POSITIVE, NEUTRAL or NEGATIVE. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. I wish there were more movies like this masterpiece. Sentiment:

Вывод: POSITIVE

Таблица 1. Пример zero-shot промптинга.

Когда zero-shot не срабатывает, вы можете предоставить демонстрации или примеры в промпте, что приводит нас к техникам «one-shot» и «few-shot».

One-shot и few-shot

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

One-shot промпт (промптинг с одним примером) содержит один пример, отсюда и название. Идея в том, что у модели есть образец, которому она может подражать для наилучшего выполнения задачи.

Few-shot промпт [7] (промптинг с несколькими примерами) предоставляет модели несколько примеров. Этот подход показывает модели шаблон, которому необходимо следовать. Идея схожа с one-shot, но наличие нескольких примеров желаемого паттерна повышает шансы на то, что модель будет ему следовать.

Количество примеров, необходимых для few-shot промптинга, зависит от нескольких факторов, включая сложность задачи, качество примеров и возможности используемой модели генеративного ИИ. В качестве общего правила стоит использовать от трех до пяти примеров. Однако для сложных задач может потребоваться больше, а иногда меньше — из-за ограничений длины входных данных вашей модели.

В Таблице 2 показан пример few-shot промпта. Будем использовать те же настройки конфигурации gemini-pro, что и раньше, увеличив лишь лимит токенов для размещения более длинного ответа.

Цель: Разобрать заказы пиццы в формат JSON

Модельgemini-pro
Температура0.1Лимит токенов250
Top-KN/ATop-P1

Промпт: Parse a customer's pizza order into valid JSON:

EXAMPLE:

I want a small pizza with cheese, tomato sauce, and pepperoni. JSON Response:

{
  "size": "small",
  "type": "normal",
  "ingredients": [["cheese", "tomato sauce", "peperoni"]]
}

Промпт: EXAMPLE:

Can I get a large pizza with tomato sauce, basil and mozzarella

{
  "size": "large",
  "type": "normal",
  "ingredients": [["tomato sauce", "bazel", "mozzarella"]]
}

Now, I would like a large pizza, with the first half cheese and mozzarella. And the other tomato sauce, ham and pineapple.

JSON Response:

Вывод: ```json { “size”: “large”, “type”: “half-half”, “ingredients”: [[“cheese”, “mozzarella”], [“tomato sauce”, “ham”, “pineapple”]] }


Таблица 2. Пример few-shot промптинга.

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

Если вы стремитесь к тому, чтобы вывод был устойчив к различным входным данным, важно включать в примеры пограничные случаи (*edge cases*). Пограничные случаи — это необычные или неожиданные входные данные, которые модель всё равно должна уметь обрабатывать.

## Системные, контекстные и ролевые промпты

Системные, контекстные и ролевые промпты — это техники, используемые для направления генерации текста, но они фокусируются на разных аспектах:

*   **Системный промптинг** (System prompting) задает общий контекст и цель для языковой модели. Он определяет «общую картину» того, что модель должна делать, например: переводить текст, классифицировать отзывы и т.д.
*   **Контекстный промптинг** (Contextual prompting) предоставляет конкретные детали или фоновую информацию, релевантную текущему разговору или задаче. Это помогает модели понять нюансы запроса и адаптировать ответ соответствующим образом.
*   **Ролевой промптинг** (Role prompting) назначает модели определенного персонажа или личность. Это помогает генерировать ответы, соответствующие назначенной роли, ее знаниям и манере поведения.

Между этими типами промптов может быть значительное пересечение. Например, промпт, назначающий роль системе, может также содержать контекст.

Тем не менее, каждый тип служит своей основной цели:
*   Системный промпт: определяет фундаментальные возможности и общую цель модели.
*   Контекстный промпт: предоставляет немедленную, специфичную для задачи информацию для формирования ответа. Он динамичен и жестко привязан к текущей задаче.
*   Ролевой промпт: задает стиль и голос вывода. Он добавляет уровень специфичности и индивидуальности.

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

Давайте подробно разберем эти три вида промптов.

## Системный промптинг

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

Цель: Классифицировать отзывы о фильмах как положительные, нейтральные или отрицательные.

| Модель | gemini-pro | | |
| :---- | :---- | :---- | :---- |
| Температура | 1 | Лимит токенов | 5 |
| Top-K | 40 | Top-P | 0.8 |
| Промпт | `Classify movie reviews as positive, neutral or negative. Only return the label in uppercase. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. It's so disturbing I couldn't watch it. Sentiment:` | | |

Вывод: NEGATIVE 

Таблица 3. Пример системного промптинга.

Системные промпты могут быть полезны для генерации вывода, соответствующего конкретным требованиям. Название «системный промпт» фактически означает «предоставление системе дополнительной задачи». Например, вы можете использовать системный промпт для генерации фрагмента кода, совместимого с определенным языком программирования, или для возврата данных в определенной структуре. Посмотрите на Таблицу 4, где я возвращаю результат в формате JSON.

Цель: Классифицировать отзывы о фильмах как положительные, нейтральные или отрицательные, вернуть JSON.

| Модель | gemini-pro | | |
| :---- | :---- | :---- | :---- |
| Температура | 1 | Лимит токенов | 1024 |
| Top-K | 40 | Top-P | 0.8 |
| Промпт | `Classify movie reviews as positive, neutral or negative. Return valid JSON: Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. It's so disturbing I couldn't watch it. Schema:` <br> ``` MOVIE: { "sentiment": String "POSITIVE" | "NEGATIVE" | "NEUTRAL", "name": String } MOVIE REVIEWS: { "movie_reviews": [MOVIE] } ``` <br> `JSON Response:` | | |

Вывод: ```json
{
  "movie_reviews": [
    {
      "sentiment": "NEGATIVE",
      "name": "Her"
    }
  ]
}

Таблица 4. Пример системного промптинга с форматом JSON.

Возврат объектов JSON из промпта, извлекающего данные, имеет свои преимущества. В реальном приложении мне не нужно вручную создавать этот формат JSON, я уже могу получить данные в отсортированном порядке (очень удобно при работе с объектами datetime), но самое главное — запрос формата JSON заставляет модель придерживаться структуры и ограничивает риск галлюцинаций.

Системные промпты также очень полезны для обеспечения безопасности и предотвращения токсичности. Чтобы контролировать вывод, просто добавьте в промпт строку вроде: «Ваш ответ должен быть вежливым и уважительным».

Ролевой промптинг

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

Например, вы можете попросить модель быть редактором книг, воспитателем детского сада или мотивационным оратором. Как только роль назначена, вы можете давать промпты, специфичные для этой роли. Например, можно попросить учителя составить учебный план. Посмотрите на Таблицу 5, где модель берет на себя роль гида.

Цель: Выступить в роли гида и предложить 3 варианта для путешествия

Модельgemini-pro
Температура1Лимит токенов1024
Top-K40Top-P0.8
ПромптI want you to act as a travel guide. I will write to you about my location and you will suggest 3 places to visit near me. In some cases, I will also give you the type of places I will visit. My suggestion: "I am in Amsterdam and I want to visit only museums." Travel Suggestions:

Вывод:

  1. Рейксмюсеум (Rijksmuseum): всемирно известный музей, знаменитый шедеврами голландских мастеров, такими как «Ночной дозор» Рембрандта. Не пропустите невероятную коллекцию картин и артефактов, демонстрирующих голландское искусство и историю.
  2. Музей Ван Гога: погрузитесь в пленительные работы Винсента Ван Гога. В музее хранится крупнейшая коллекция его картин и рисунков, включая «Звездную ночь» и «Подсолнухи».
  3. Музей Стеделейк (Stedelijk Museum Amsterdam): откройте для себя современное искусство со всего мира. В коллекции музея — работы Пикассо, Кандинского и Ритвельда, размещенные в ярком современном здании.

Таблица 5. Пример ролевого промптинга.

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

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

Вот некоторые стили, которые я считаю эффективными: Конфронтационный, Описательный, Прямой, Формальный, Юмористический, Влиятельный, Неформальный, Вдохновляющий, Убеждающий.

Давайте изменим наш промпт в Таблице 6, добавив юмористический и вдохновляющий стиль.

Промпт: I want you to act as a travel guide. I will write to you about my location and you will suggest 3 places to visit near me in a humorous style.

My suggestion: "I am in Manhattan."

Travel Suggestions:

Вывод:

  1. Созерцайте «Empire State of Mind»: поднимитесь на головокружительную высоту Эмпайр-стейт-билдинг и погрейтесь в лучах славы горизонта Манхэттена. Приготовьтесь почувствовать себя Кинг-Конгом на вершине Большого Яблока, только без гигантского банана размером с обезьяну!
  2. Окультурьтесь в MoMA: пробудите в себе ценителя искусства в Музее современного искусства (MoMA). Взирайте на шедевры, которые взорвут ваш мозг и заставят усомниться в том, имеют ли ваши рисунки «палка-палка-огуречик» хоть какую-то художественную ценность.
  3. Шопинг до упаду на Пятой авеню: побалуйте себя шопинг-терапией на легендарной Пятой авеню. Приготовьтесь к ценовому шоку, разглядывая витрины (или заходя внутрь) дизайнерских бутиков, которые заставят ваш кошелек рыдать. Но эй, вы же на Манхэттене, так что наслаждайтесь роскошью!

Таблица 6. Пример ролевого промптинга с юмористическим тоном и стилем.

Контекстный промптинг

Предоставляя контекстные промпты, вы помогаете сделать взаимодействие с ИИ максимально бесшовным и эффективным. Модель быстрее поймет ваш запрос и сможет сгенерировать более точные ответы, как показано в Таблице 7.

Цель: Предложить темы для блога о ретро-играх

Модельgemini-pro
Температура1Лимит токенов1024
Top-K40Top-P0.8
ПромптContext: You are writing for a blog about retro 80's arcade video games. Suggest 3 topics to write an article about with a few lines of description of what this article should contain.

Вывод:

  1. Эволюция дизайна аркадных автоматов: Эта статья исследует эволюцию корпусов аркадных автоматов, от ранних деревянных и металлических конструкций 1970-х годов до изящных неоновых дизайнов 1980-х и последующих лет.
  2. Привет из прошлого: легендарные аркадные игры 80-х: Статья вкратце расскажет об истории, влиянии и наследии некоторых самых знаковых и влиятельных аркадных игр 1980-х, подчеркивая их инновации, популярную механику и непреходящее очарование.
  3. Расцвет и ретро-возрождение пиксель-арта: Материал углубится в эволюцию пиксель-арта как определяющего визуального стиля ранних аркад, проследит его корни, изучит технику и обсудит возрождение пиксель-арта в современных играх и цифровом искусстве.

Таблица 7. Пример контекстного промптинга.

Step-back промптинг

Step-back промптинг [8] (промптинг с «шагом назад») — это техника повышения производительности путем предварительного запроса к LLM рассмотреть общий вопрос, связанный с конкретной задачей, и последующей передачи ответа на этот общий вопрос в основной промпт. Этот «шаг назад» позволяет LLM активировать релевантные фоновые знания и процессы рассуждения перед тем, как приступать к решению конкретной проблемы.

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

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

Давайте рассмотрим примеры, чтобы понять, как step-back промптинг улучшает результаты. Сначала разберем обычный промпт (Таблица 8), а затем сравним его со step-back промптом (Таблица 9).

Цель: Написать сюжетную линию для уровня видеоигры в жанре шутера от первого лица (FPS).

Модельgemini-pro
Температура1Лимит токенов1024
Top-K40Top-P0.8
ПромптWrite a one paragraph storyline for a new level of a first person shooter video game that is challenging and engaging.

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

Таблица 8. Традиционный промпт перед сравнением со step-back промптом.

Когда вы устанавливаете температуру на 1, вы можете получить самые разные творческие сюжеты, но они часто бывают случайными и шаблонными. Сделаем «шаг назад»:

Промпт: Based on popular first-person shooter action games, what are 5 fictional key settings that contribute to a challenging and engaging level storyline in a first-person shooter video game?

Вывод:

  1. Заброшенная военная база: разросшийся постапокалиптический военный комплекс, кишащий солдатами-мутантами и вышедшими из строя роботами, идеально подходит для сложных перестрелок.
  2. Киберпанк-город: залитая неоном футуристическая городская среда с высокими небоскребами и тесными переулками, кибернетически модифицированными врагами и механикой хакинга.
  3. Корабль пришельцев: огромный инопланетный сосуд, застрявший на Земле, с жуткими коридорами, зонами с нулевой гравитацией и встречами с внеземными существами.
  4. Город, наводненный зомби: опустевший город, захваченный ордами агрессивных зомби, требующий напряженного ближнего боя и решения головоломок для поиска безопасного пути.
  5. Подводный исследовательский центр: глубоководная лаборатория, затопленная водой, полная мутировавших морских обитателей и требующая скрытности и навыков подводного исследования для выживания.

Таблица 9. Пример промпта для получения контекста (шага назад).

Темы выглядят отлично для шутера! Теперь вернемся к оригинальному запросу, но включим ответ от «шага назад» в качестве контекста.

Промпт: ```text Context: 5 engaging themes for a first person shooter video game:

  1. Abandoned Military Base: A sprawling, post-apocalyptic military complex crawling with mutated soldiers and rogue robots, ideal for challenging firearm combat.
  2. Cyberpunk City: A neon-lit, futuristic urban environment with towering skyscrapers and dense alleyways, featuring cybernetically enhanced enemies and hacking mechanics.
  3. Alien Spaceship: A vast alien vessel stranded on Earth, with eerie corridors, zero-gravity sections, and extraterrestrial creatures to encounter.
  4. Zombie-Infested Town: A desolate town overrun by hordes of aggressive zombies, featuring intense close-quarters combat and puzzle-solving to find safe passage.
  5. Underwater Research Facility: A deep-sea laboratory flooded with water, filled with mutated aquatic creatures, and requiring stealth and underwater exploration skills to survive. Take one of the themes and write a one paragraph storyline for a new level of a first-person shooter video game that is challenging and engaging.

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

Таблица 10. Пример использования контекста в step-back промптинге.

Такая игра могла бы быть интересной! Используя техники step-back промптинга, вы можете значительно повысить точность и глубину ответов.

## Цепочка рассуждений (Chain of Thought, CoT)

Цепочка рассуждений (Chain of Thought, CoT) [9] — это техника улучшения логических способностей LLM путем генерации **промежуточных шагов рассуждения**. Это помогает модели выдавать более точные ответы. Коротко говоря, мы просим модель «думать вслух». CoT можно комбинировать с few-shot промптингом для получения лучших результатов в сложных задачах, требующих анализа перед ответом (что иногда бывает проблемой для zero-shot цепочек рассуждений).

У CoT много преимуществ. Во-первых, это малозатратно, но очень эффективно и отлично работает с готовыми LLM (дополнительное обучение не требуется). Вы также получаете интерпретируемость: вы видите шаги рассуждения, которые привели к ответу. Если произойдет ошибка, вы сможете понять, на каком этапе модель пошла не туда. Chain of Thought также повышает устойчивость промпта при переходе между разными версиями моделей. Конечно, есть и недостатки, но они интуитивно понятны.

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

Чтобы пояснить пример в Таблице 11, давайте сначала попробуем создать промпт без использования CoT, чтобы показать слабые стороны LLM.

Промпт: `When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner?`

Вывод: 63 years old 

Таблица 11. Пример промпта для решения математической задачи без CoT.

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

Промпт: `When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? Let's think step by step.`

Вывод:
1. Допустим, мой нынешний возраст — «x» лет.
2. Когда мне было 3 года, мой возраст составлял 3.
3. Возраст моего партнера в то время был в 3 раза больше моего, то есть 3 * 3 = 9 лет.
4. Сейчас мне 20 лет, а значит, мой возраст увеличился на 20 - 3 = 17 лет с тех пор, как мне было 3 года.
5. Поскольку моему партнеру было 9 лет, когда мне было 3 года, и мой возраст увеличился на 17 лет, возраст моего партнера также должен был увеличиться на 17 лет.
6. Следовательно, текущий возраст моего партнера составляет 9 + 17 = 26 лет.
Итак, моему партнеру 26 лет.

Таблица 12. Пример Chain of Thought промптинга (думай шаг за шагом).

Теперь ответ правильный. Это произошло потому, что мы явно велели LLM объяснять каждый шаг, а не просто выдать число. Интересно видеть, как модель прибавляет 17 лет. В уме я бы скорее вычислил разницу в возрасте и прибавил ее к текущему (20 + (9-3)). Давайте поможем модели думать немного больше в моем стиле.

Таблица 12 — это пример «zero-shot» Chain of Thought. Эта техника становится еще мощнее в сочетании с примерами (Table 13):

Промпт: ```text
Q: When my brother was 2 years old, I was double his age. Now I am 40 years old. How old is my brother? Let's think step by step.
A: When my brother was 2 years, I was 2 * 2 = 4 years old. That's an age difference of 2 years and I am older. Now I am 40 years old, so my brother is 40 - 2 = 38 years old. The answer is 38.
Q: When I was 3 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? Let's think step by step.
A:

Вывод: Когда мне было 3 года, моему партнеру было 3 * 3 = 9 лет. Разница в возрасте составляет 6 лет, и партнер старше. Сейчас мне 20 лет, значит партнеру 20 + 6 = 26 лет. Ответ: 26.

Таблица 13. Пример Chain of Thought промптинга с одним примером (one-shot).

Цепочки рассуждений полезны во многих сценариях. Подумайте о генерации кода: разбиение запроса на шаги и сопоставление их со строками кода. Или о создании синтетических данных. В целом, любая задача, которую можно решить «рассуждая вслух», является хорошим кандидатом для CoT. Если вы можете объяснить шаги решения проблемы — попробуйте эту технику.

Вы можете найти более подробную информацию о CoT в блокноте [10] в репозитории GoogleCloudPlatform на GitHub.

В разделе лучших практик этой главы мы изучим советы, специфичные для Chain of Thought.

Self-consistency (Самосогласованность)

Хотя LLM демонстрируют впечатляющие успехи, их способность к рассуждению часто рассматривается как ограничение, которое нельзя преодолеть только увеличением размера модели. Как мы узнали выше, модель можно побудить генерировать шаги рассуждения. Однако CoT использует простую стратегию «жадного декодирования», что ограничивает ее эффективность. Self-consistency [11] сочетает сэмплирование и «голосование большинством» для генерации различных путей рассуждения и выбора наиболее согласованного ответа. Это повышает точность и связность ответов LLM.

Self-consistency дает псевдовероятностную оценку правильности ответа, но, разумеется, обходится дороже.

Процесс выглядит так:

  1. Генерация различных путей рассуждения: LLM получает один и тот же промпт несколько раз. Высокая температура побуждает модель генерировать разные подходы к проблеме.
  2. Извлечение ответа из каждого сгенерированного варианта.
  3. Выбор самого частого ответа.

Рассмотрим пример системы классификации писем, которая помечает письма как ВАЖНОЕ (IMPORTANT) или НЕВАЖНОЕ (NOT IMPORTANT). Промпт с zero-shot CoT отправляется модели несколько раз. Обратите внимание на дружелюбный тон, выбор слов и сарказм в письме — всё это может запутать модель.

Промпт: ```text EMAIL: Hi, I have seen you use Wordpress for your website. A great open source content management system. I have used it in the past too. It comes with lots of great user plugins. And it’s pretty easy to set up. I did notice a bug in the contact form, which happens when you select the name field. See the attached screenshot of me entering text in the name field. Notice the JavaScript alert box that I inv0k3d. But for the rest it’s a great website. I enjoy reading it. Feel free to leave the bug in the website, because it gives me more interesting things to read. Cheers, Harry the Hacker.

Classify the above email as IMPORTANT or NOT IMPORTANT. Let’s think step by step and explain why.


Вывод: Попытка 1
**Шаг 1: Определить цель письма.** Цель — проинформировать получателя о баге в контактной форме. Отправитель пишет, что ему нравится сайт и он пока оставляет баг как есть.
**Шаг 2: Оценить потенциальное влияние бага.** Баг позволяет злоумышленнику исполнять произвольный JavaScript-код на сайте. Это может привести к захвату контроля над сайтом или краже данных.
**Шаг 3: Рассмотреть надежность отправителя.** Отправитель называет себя хакером Гарри. Личность подтвердить нельзя. Это может быть как этичный хакер, так и злоумышленник.
**Заключение: ВАЖНОЕ**

Попытка 2
1. Отсутствие срочности. 2. Критичность бага не подчеркнута. 3. Отсутствие личного влияния. 4. Нет прямого запроса к действию.
**Заключение: НЕВАЖНОЕ**

Попытка 3
Баг в форме — серьезная угроза безопасности. К заявлению отправителя стоит отнестись серьезно.
**Заключение: ВАЖНОЕ**

Таблица 14. Пример промптинга для самосогласованности.

Вы можете попробовать этот промпт и увидеть, будет ли классификация стабильной. В зависимости от модели и температуры вы можете получать разные ответы. Генерируя много «цепочек рассуждений» и выбирая наиболее часто встречающийся ответ («ВАЖНОЕ»), мы получаем более стабильный и правильный результат.

## Древо мыслей (Tree of Thoughts, ToT)

Теперь, когда мы знакомы с CoT и самосогласованностью, разберем Древо мыслей (Tree of Thoughts, ToT) [12]. Оно обобщает концепцию CoT, позволяя LLM исследовать несколько путей рассуждения одновременно, а не следовать по одной линейной цепочке. Это показано на Рисунке 1.

![][image1]  
Рисунок 1. Визуализация Chain of Thought (слева) и Tree of Thoughts (справа).

Такой подход делает ToT особенно подходящим для сложных задач, требующих исследования вариантов. В ToT поддерживается «дерево», где каждая «мысль» — это промежуточный шаг. Модель может разветвляться из разных узлов дерева.

Более подробный разбор ToT на основе статьи «Large Language Model Guided Tree-of-Thought» [9] можно найти в соответствующем блокноте.

## ReAct (Рассуждение и действие)

ReAct (Reason and Act) [10, 13] — это парадигма, позволяющая LLM решать сложные задачи, сочетая рассуждения на естественном языке с внешними инструментами (поиск, интерпретатор кода и т.д.). Это позволяет модели выполнять действия, например обращаться к API, что является первым шагом к созданию агентов.

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

ReAct работает в цикле «мысль — действие — наблюдение». Модель сначала рассуждает и составляет план, затем выполняет действия, наблюдает за результатом и обновляет свои рассуждения. Процесс продолжается до нахождения решения.

Для демонстрации нужен код. В Snippet 1 я использую библиотеку langchain для Python вместе с Vertex AI и поиском Google. Вам понадобится API-ключ SerpAPI.

Задача для LLM: *У скольких участников группы Metallica есть дети?*

## Python

```python
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import VertexAI

prompt = "How many kids do the band members of Metallica have?"
llm = VertexAI(temperature=0.1)
tools = load_tools(["serpapi"], llm=llm)
agent = initialize_agent(tools, llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run(prompt)

Snippet 1. Создание ReAct агента с LangChain и VertexAI.

Snippet 2 показывает результат. ReAct делает цепочку из пяти поисковых запросов. Модель анализирует результаты поиска Google, выписывает имена участников, ищет информацию о детях для каждого и суммирует итог.

> Entering new AgentExecutor chain...
Metallica has 4 members.
Action: Search
Action Input: How many kids does James Hetfield have?
Observation: three children
Thought: 1/4 Metallica band members have 3 children
...
Final Answer: 10

Snippet 2. Выполнение ReAct агента в терминале.

На практике ReAct требует понимания того, что вам постоянно нужно пересылать предыдущие промпты/ответы (и обрезать лишнее). Подробный пример с входными и выходными данными LLM можно найти в репозитории GoogleCloudPlatform.

Автоматический промпт-инжиниринг (APE)

Вы уже поняли, что написание промптов — сложный процесс. Было бы здорово его автоматизировать? Для этого существует метод автоматического промпт-инжиниринга (Automatic Prompt Engineering, APE) [15]. Он не только избавляет от ручного труда, но и повышает эффективность модели.

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

Например, для обучения чат-бота интернет-магазина футболок нам нужно много вариантов того, как клиенты могут заказать товар. Мы просим gemini-pro сгенерировать 10 вариантов одного и того же запроса (Таблица 15).

Промпт: We have a band merchandise t-shirt webshop, and to train a chatbot we need various ways to order: "One Metallica t-shirt size S". Generate 10 variants, with the same semantics but keep the same meaning.

Затем мы оцениваем кандидатов (например, используя метрики BLEU или ROUGE) и выбираем лучший для использования в приложении.