TL;DR
Derivation Prompting — техника, которая заставляет модель строить ответ по явным правилам вывода, а не "думать как получится". Вместо того чтобы просить модель "ответь на основе этих текстов", вы даёте ей набор правил комбинирования информации и просите применять их шаг за шагом — пока не получится финальный ответ.
Главная боль здесь: модель привирает. Вы дали ей три абзаца из договора, а она добавила от себя то, чего там нет. Или смешала факты из разных мест и выдала что-то, что "звучит правдоподобно", но неверно. Это происходит потому что у модели нет жёстких ограничений на то, как именно соединять фрагменты текста — она делает это свободно, по своему усмотрению.
Метод решает это через шесть именованных правил (Извлечь, Объединить, Конкретизировать, Скомпоновать, Уточнить, НетИнформации). Каждый шаг рассуждения — это применение одного конкретного правила к конкретным фрагментам. Весь процесс записывается в виде дерева вывода. Результат: видно, где модель ошиблась, а неверных ответов становится заметно меньше.
Схема метода
ПОДГОТОВКА: Собери фрагменты текста (гипотезы h1, h2, h3...)
+ сформулируй вопрос q
ОДИН ПРОМПТ: Модель симулирует цикл вывода:
ИТЕРАЦИЯ 1:
→ Выбрать правило из [Извлечь / Объединить / Конкретизировать /
Скомпоновать / Уточнить / НетИнформации]
→ Указать какие гипотезы использует
→ Сгенерировать промежуточный вывод c1
→ Проверить: c1 = финальный ответ? Нет → добавить c1 в гипотезы
ИТЕРАЦИЯ 2, 3... (до финального ответа)
РЕЗУЛЬТАТ: Дерево вывода + финальный ответ
Всё происходит внутри одного запроса — через few-shot примеры (примеры выполнения цикла вручную), которые задают паттерн. Модель следует паттерну и генерирует весь цикл за один раз.
Пример применения
Задача: Вы HR-менеджер. Получили вопрос от сотрудника: "Если я беру отпуск с понедельника, праздники в середине недели считаются как дни отпуска?" Под рукой — три фрагмента из Трудового кодекса и внутреннего положения об отпусках.
Промпт:
Ты — ассистент, который отвечает на вопросы строго на основе
предоставленных фрагментов текста. Ты строишь ответ через
последовательное применение правил вывода.
ПРАВИЛА ВЫВОДА:
- Извлечь(h): вытащить конкретную часть гипотезы h как вывод
- Объединить(h1, h2): объединить две НЕЗАВИСИМЫЕ гипотезы в одну
- Конкретизировать(h): применить общее правило из h к конкретному случаю вопроса
- Скомпоновать(h1, h2): объединить гипотезы, связанные ОБЩИМ элементом
- Уточнить(h): слегка переформулировать h под вопрос, не меняя смысл
- НетИнформации(): использовать если ни одна гипотеза не даёт ответа
ПРИМЕР ВЫВОДА (для другого вопроса):
Вопрос: Нужна ли виза в Германию для белорусского паспорта?
h1: "Граждане стран СНГ для въезда в страны Шенгенской зоны
обязаны оформлять шенгенскую визу"
h2: "Беларусь входит в состав Содружества Независимых Государств"
---
Шаг 1: Извлечь(h1) → c1: "Для въезда в Шенгенскую зону гражданам
СНГ нужна шенгенская виза" [не финальный]
Шаг 2: Скомпоновать(c1, h2) → c2: "Беларусь — страна СНГ, значит
гражданам белорусского паспорта нужна шенгенская виза
для въезда в Германию" [финальный]
---
ТВОЙ ВОПРОС: Если отпуск начинается с понедельника,
входят ли праздники в середине недели в дни отпуска?
ФРАГМЕНТЫ ТЕКСТА:
h1: [вставь первый фрагмент из ТК или положения]
h2: [вставь второй фрагмент]
h3: [вставь третий фрагмент]
Построй вывод по аналогии с примером.
Указывай правило, гипотезы, промежуточный вывод и финальность каждого шага.
Результат: Модель покажет 2–4 шага вывода с явным указанием правила (например: "Шаг 1: Извлечь(h1) → ..."). Промежуточные выводы будут добавляться как новые гипотезы. В финале — конкретный ответ на вопрос. Если в текстах нет нужной информации — модель явно скажет об этом через правило НетИнформации, а не придумает ответ.
Почему это работает
Модель при свободном рассуждении не ограничена в том, как соединять фрагменты текста. Она может "домыслить" связь между двумя абзацами, которой нет, или добавить факт из своих обучающих данных потому что он "звучит логично". Нет правил — нет ограничений на ошибку.
Каждое из шести правил задаёт разрешённый тип операции с текстом. Нельзя применить Уточнить и при этом добавить новый факт — правило не позволяет. Нельзя применить Скомпоновать без общего элемента между гипотезами. Дерево вывода делает каждый шаг проверяемым: вы видите, на каком шаге модель "свернула не туда".
Работает это потому что few-shot примеры (образцы заполненного вывода) создают жёсткий паттерн генерации. Модель следует структуре примера — со всеми его ограничениями. Чем больше и качественнее примеры, тем строже модель держится паттерна. Поэтому метод лучше работает с мощными моделями — они точнее следуют инструкции.
Рычаги управления: - Правила → можно заменить или добавить свои. Например, для юридических задач добавить правило "Применить исключение(h1, h2)" — когда одна норма делает исключение из другой - Число few-shot примеров → больше примеров = строже следование паттерну; для простых задач хватит 1–2 - Правило НетИнформации → ключевой антигаллюцинатор. Если его не включить — модель будет пытаться ответить из "головы" - Число входных гипотез → чем больше фрагментов, тем длиннее дерево вывода; для коротких задач хватит 2–3
Шаблон промпта
Ты — ассистент, который строит ответ строго на основе предоставленных
фрагментов текста через последовательное применение правил вывода.
ПРАВИЛА ВЫВОДА:
- Извлечь(h): вытащить конкретную часть гипотезы h как вывод
- Объединить(h1, h2): объединить две независимые гипотезы в одну
- Конкретизировать(h): применить общее правило из h к конкретному
случаю из вопроса
- Скомпоновать(h1, h2): объединить гипотезы через общий элемент
- Уточнить(h): слегка переформулировать h под вопрос, не меняя смысл
- НетИнформации(): если ни одна гипотеза не содержит нужных данных
ПРИМЕР (заполни вручную для своей области):
Вопрос: {пример_вопроса}
h1: "{пример_фрагмента_1}"
h2: "{пример_фрагмента_2}"
---
Шаг 1: {Правило}({аргументы}) → {промежуточный_вывод}
[финальный / не финальный]
Шаг 2: {Правило}({аргументы}) → {итоговый_вывод} [финальный]
---
ВОПРОС: {твой_вопрос}
ФРАГМЕНТЫ:
h1: "{фрагмент_текста_1}"
h2: "{фрагмент_текста_2}"
h3: "{фрагмент_текста_3}"
Построй вывод, следуя структуре примера.
Для каждого шага укажи: правило, аргументы, вывод, финальность.
Что подставлять:
- {пример_вопроса} — любой вопрос из твоей области с известным ответом
- {пример_фрагмента_1/2} — реальные куски текста, которые дают ответ
- Шаги примера заполни вручную, пройдя логику вывода сам — это и есть few-shot
- {твой_вопрос} — реальный вопрос пользователя/сотрудника
- {фрагмент_текста_1/2/3} — куски из документа, которые могут содержать ответ
🚀 Быстрый старт — вставь в чат:
Вот шаблон метода Derivation Prompting для ответов на вопросы
по документам. Адаптируй под мою задачу: {твоя задача}.
Задай вопросы, чтобы заполнить все поля, особенно few-shot пример.
[вставить шаблон выше]
LLM спросит: какая предметная область, какой пример вопроса с известным ответом, какие документы ты используешь — потому что без конкретного few-shot примера под твою задачу метод не даст нужного паттерна. Она построит пример и адаптирует шаблон под твой контекст.
Ограничения
⚠️ Слабые модели: С менее мощными моделями (уровень GPT-3.5, Haiku) метод сокращает неверные ответы, но одновременно снижает полноту — правильных полных ответов становится меньше. Используй GPT-4o, Claude Sonnet/Opus или аналоги.
⚠️ Нужен качественный few-shot пример: Без примера выполнения алгоритма метод не работает так же чётко. Придётся потратить время на его составление вручную. Примеры из исследования — на GitHub репозитория.
⚠️ Улучшает точность, не полноту: Метод снижает галлюцинации и ложные ответы, но не делает ответы более полными. Если информации в текстах не хватает — модель честно скажет НетИнформации, а не достроит ответ.
⚠️ Один кейс: Метод проверен на одной узкой задаче (вопросы студентов об административных процедурах университета, на испанском). Для других областей — нужно пилотировать и проверять самостоятельно.
⚠️ Без RAG-системы: Метод разработан для связки с поиском по документам (RAG). Без инфраструктуры извлечения нужных фрагментов вам придётся подбирать гипотезы вручную — это работает, но лишает метода масштабируемости.
Ресурсы
Работа: Derivation Prompting: A Logic-Based Method for Improving Retrieval-Augmented Generation
GitHub с промптами: https://github.com/nsuruguay05/derivation-prompting
Авторы: Ignacio Sastre, Guillermo Moncecchi, Aiala Rosá
Институт: Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Монтевидео, Уругвай
