Мы продолжаем адаптированный перевод статьи “The Prompt Report: A Systematic Survey of Prompt Engineering Techniques” (первую часть можно найти здесь). С переводом мне по-прежнему помогает коллега – Анастасия Тарабакина.
В этой части мы обсудим такие техники промптинга, как Chain-of-Thought и декомпозиция.
Начнем с техник промптинга, которые заставляют модель демонстрировать пользователю внутренний процесс «рассуждения» над задачей (Thought Generation).
«Цепочка рассуждений» (Chain-of-Thought или Chain-of-Thoughts, CoT) – самая распространенная техника из этой категории. Как правило, пользователь добавляет в промпт один или несколько примеров рассуждения, после чего дает модели аналогичную задачу и просит вместе с решением представить ход рассуждения (см. Рисунок 1). Такой подход повышает качество выдачи при решении математических и логических задач.
В этой вариации CoT пользователь не добавляет в промпт примеры рассуждений, но добавляет фразу, служащую триггером для размышлений, например: «Рассуждай шаг за шагом» или «Сначала подумай логически». Есть и более развернутые фразы, содержащие элементы эмоционального промптинга: «Рассуждай шаг за шагом, чтобы не допустить ошибку». Основное преимущество этих техник – они не требуют примеров и потому легко применяются при решении любой задачи.
Step-back промптинг (Step-Back Prompting) – вариация CoT без примеров. Пользователь сначала задает модели наводящие вопросы, которые активируют знания общих понятий, законов и принципов, необходимых для решения конкретной задачи (см. Рисунок 2). Далее модель использует эти понятия в рассуждениях. Эффективность такого подхода подтверждается тестированием последних моделей (PaLM-2L и GPT-4) на бенчмарках.
Промптинг «по аналогии» (Analogical Prompting) схож с техникой Self-Generated In-Context Learning, где модель используется для генерации примеров для few-shot промптов. Единственное отличие – здесь модель самостоятельно генерирует примеры рассуждений (см. Рисунок 3). Использование таких синтетических примеров повышает качество решения математических задач и задач, связанных с генерацией кода.
Промптинг «Нить рассуждения» (Thread-of-Thought Prompting, ThoT) – специфическая вариация CoT, которая предполагает использование развернутого триггера размышлений. Вместо стандартного «Размышляй шаг за шагом» используется фраза «Проанализируй всю дополнительную информацию и пошагово объясни мне решение задачи. При необходимости добавляй разъяснения и делай обобщения» (см. Рисунок 4). Использование такого триггера повышает качество ответов на вопросы и информационного поиска, особенно в тех случаях, когда решение задачи требует привлечения большого объема информации.
Табличный Chain-of-Thought (Tabular Chain-of-Thought, Tab-CoT) относится к CoT-техникам без примеров. В промпт добавляется инструкция представить рассуждение в виде таблицы markdown (см. Рисунок 5). Табличный формат помогает модели структурировать рассуждение и выдать более точный ответ.
В эту группу техник CoT-промптинга входят те, в которых модель получает несколько примеров рассуждений. Если используемые в промпте примеры рассуждений были составлены человеком, эту группу техник также называют Manual CoT или Golden CoT.
Контрастивный CoT-промптинг (Contrastive CoT) – это техника, в которой модель получает, как правильные, так и неправильные примеры рассуждения, показывающие, как размышлять не надо (см. Рисунок 6). Применение этой техники повышает качество выдачи при решении арифметических задач и поиске ответов на фактологические вопросы.
CoT с несколькими путями рассуждения (Uncertainty-Routed CoT). В этой технике модель генерирует несколько вариантов рассуждения и выбирает наиболее вероятный по принципу «большинства голосов»: какой ответ встречается чаще всего, тот и верный. При этом задается «порог встречаемости»: например, как минимум три рассуждения должны привести к одному и тому же ответу, чтобы модель выбрала его в качестве правильного. Если не один из ответов не достигает нужного порога, рассуждение строится заново – по принципу «жадной» генерации: модель каждый раз выбирает наиболее вероятный следующий токен. В качестве правильного берется ответ, полученный на основе такого рассуждения.
CoT, основанный на сложности рассуждений (Complexity-based CoT). В этой технике примеры рассуждений, которые включаются в промпт, отбираются по двум критериям:
сложность задачи (длина условия);
количество шагов решения (чем больше – тем лучше).
Получив новую задачу, модель, как и в предыдущей технике, генерирует несколько путей решения и выбирает наиболее частотный ответ. Однако здесь также учитывается длина рассуждения: чем больше шагов включает решение, тем более вероятно, что полученный ответ верный (см. Рисунок 7). По результатам тестирований на бенчмарках, данная техника повышает качество решения математических задач.
CoT с участием аннотаторов (Active Prompting). В этой технике модель получает набор тренировочных задач и для каждой из них генерирует несколько вариантов рассуждения. Далее для каждой задачи рассчитывается степень неопределенности решения. Задачи, с которыми модель испытывает наибольшие затруднения, передаются специалистам-аннотаторам, которые составляют эталонные решения (см. Рисунок 8).
CoT с памятью рассуждений (Memory-of-Thought). Модель сначала получает сет неразмеченных примеров рассуждений и предварительно обрабатывает его. Затем, получив тестовый вопрос, модель извлекает из памяти наиболее релевантные примеры рассуждений и добавляет их в промпт. На их основе генерируется ответ на тестовый вопрос (см. Рисунок 9). Данная техника помогает моделям отвечать на фактологические вопросы и решать арифметические задачи, а также задачи, основанные на обыденном знании.
Автоматический CoT (Auto-CoT). Цепочки рассуждений для типовых вопросов предварительно генерируются самой моделью. Далее, при получении тестового вопроса, модель добавляет заранее сгенерированные цепочки в промпт в качестве примеров (см. Рисунок 10).
Далее мы рассмотрим техники, основанные на декомпозиции, т.е. разделении сложных задач на небольшие подзадачи. Некоторые из этих техник очень похожи на CoT-техники, которые заставляют модель «раздробить» задачу на несколько этапов. Однако, если мы самостоятельно разобьем сложную инструкцию на последовательность простых шагов, это еще сильнее повысит качество выдачи.
Промптинг «От простого к сложному» (Least-to-Most Prompting) предполагает, что пользователь сначала просит модель разбить задачу на подзадачи. Далее модель последовательно решает каждую подзадачу, добавляя ответы, полученные на каждом этапе, к исходному промпту. Этот процесс продолжается, пока модель не придет к финальному ответу (см. Рисунок 11). Техника особенно эффективна при решении задач, связанных с символьными преобразованиями (например, требующих использования математических формул), и задач, требующих обобщения (например, создание краткого содержания текста).
В технике DECOMP (Decomposed Prompting) модель на примерах обучается вызывать различные инструменты с помощью функций. Например, модель может научиться обращаться к поисковой системе через API. Далее, когда модель получит задачу и раздробит ее на подзадачи, она сможет делегировать отдельные подзадачи разным инструментам (см. Рисунок 12). Применение этой техники позволяет получить более качественные результаты по сравнению с классическим вариантом «От простого к сложному».
Техника «Спланируй и реши» (Plan-and-Solve Prompting) – это усовершенствованная версия CoT без примеров. Здесь модели дается развернутая инструкция: «Сначала проанализируй проблему и придумай план ее решения. Затем выполни план и реши проблему шаг за шагом» (см. Рисунок 13). Тестирование на ризонинговых датасетах показывает, что эта техника позволяет получить более точные рассуждения в сравнении со стандартным CoT без примеров.
Техника «Древо мыслей» (Tree-of-Thought, ToT) предполагает, что модель составляет древовидную схему возможных решений задачи. Для исходной проблемы предлагается несколько вариантов первого шага решения и выбирается наиболее эффективный. Затем, исходя из того, какой первый шаг был выбран, генерируются варианты следующего (см. пример древа мыслей на рисунке 14). Эта техника особенно полезна для решения задач, требующих планирования.
Техника «Мысленная рекурсия» (Recursion-of-Thought) похожа на классический вариант CoT, с одним существенным отличием. Когда внутри цепочки рассуждений встречается сложная подзадача, она помещается в отдельный промпт (или отправляется в другую модель) и решается отдельно. Далее полученное решение вставляется в исходный промпт, и работа над исходной задачей возобновляется (см. Рисунок 15). Таким образом, можно решать сложные, многоступенчатые задачи, полное решение которых в пределах одного промпта было бы невозможным из-за ограничений контекстного окна. Обычно для рекурсии требуется дообучение – в «словарь» модели добавляется специальный токен, который позволяет отправить подзадачу в отдельный промпт или передать ее другой модели. Однако аналогичного эффекта можно добиться и через текстовый промптинг.
Техника Program-of-Thoughts применяется преимущественно для решения сложных математических задач и задач программирования. Она используется в моделях, обученных на задачах генерации кода (например, Codex). Модель сразу представляет подзадачи на языке программного кода, т.е. в виде соответствующей функции. Далее интерпретатор кода (например, Python) поэтапно выполняет функции, и итоговый ответ передается в модель (см. Рисунок 16). Существенный недостаток моделей, с которыми применяется эта техника, – они менее эффективно решают задачи, связанные с обработкой естественного языка.
Аналогичным образом работает техника Faithful CoT, только в ней модель параллельно рассуждает на естественном языке и на языке программного кода (см. Рисунок 17).
Техника «Скелет размышлений» (Skeleton-of-Thought) позволяет значительно ускорить процесс генерации ответа. Получив исходный запрос, модель создает «скелет» решения – выделяет основные подзадачи. Далее подзадачи обрабатываются параллельно (= одновременно), и полученные решения объединяются для генерации итогового ответа (см. Рисунок 18).
Заключительная техника в этом блоке – метакогнитивный промптинг (Metacognitive Prompting). Промпты в этой технике включают пять элементов, соответствующих тем пяти этапам, которые проходит человек, решая задачу:
уточнение вопроса;
первичное решение;
оценка первичного решения;
выбор итоговой стратегии;
оценка степени уверенности в выбранной стратегии.
Соответственно, в промпте пользователь просит модель пройти те же шаги: задать уточняющие вопросы, предложить черновой вариант решения, оценить его и выработать итоговое.
____________________
Продолжение следует. В следующих статьях цикла мы обсудим:
3. другие продвинутые техники промптинга: Ensembling и Self-Criticism;
4. мультимодальные и мультиязыковые техники;
5. техники промптинга для ИИ-агентов;
6. способы предотвращения промпт-инъекций и снижения риска галлюцинаций.
Надеемся, было полезно. Приглашаем подписаться, если вам нравится наш выбор публикаций по ИТ (стараемся выбирать и переводить терминологически насыщенные статьи, для расширения понятийного аппарата в ИТ-переводах)