TL;DR
LLM делает одни и те же ошибки при выполнении задач с конкретными правилами — не потому что не понимает задачу, а потому что в инструкциях есть скрытые пробелы. Iterative Moderation Framework — техника, которая использует саму LLM, чтобы найти эти пробелы и закрыть их через трёхшаговый анализ: объяснение паттерна ошибки → генерация правила → встраивание правила в инструкции.
Главная находка: детальные инструкции в промпте дают резкий прирост качества — модель без гайдлайнов выдаёт F1 ~0.4, с гайдлайнами ~0.7. Это разрыв в полтора раза. Дальнейшая итеративная правка гайдлайнов добавляет ещё +0.01–0.03 F1 — небольшой, но стабильный прирост. Второй инсайт: reasoning-модели (o3, Gemini с максимальным thinking, DeepSeek Reasoner) заметно лучше следуют сложным инструкциям, чем обычные. Если задача требует строгого соблюдения правил — используй именно их.
Суть метода: когда LLM нарушает ваши правила, вы не переписываете промпт вручную — вы просите саму LLM найти паттерн ошибки, сформулировать корректирующее IF/THEN-правило и встроить его в существующие инструкции. Три шага, три отдельных запроса, цикл повторяется до тех пор, пока ошибки не прекращаются.
Схема метода
ШАГ 0 (Подготовка): Пишем базовые инструкции + собираем примеры правильных ответов
ШАГ 1 (Аннотация): Даём LLM задачу + текущие инструкции → получаем ответы
ШАГ 2 (Оценка): Сравниваем с правильными примерами → выписываем ошибки одного типа
↓ Если ошибок нет или они не уменьшаются — стоп
ШАГ 3А (Объяснение паттерна):
Вход: неправильные примеры + правильные примеры
Действие: LLM ищет закономерность «чем ошибочные отличаются от правильных»
Выход: описание паттерна ошибки
ШАГ 3Б (Генерация принципа):
Вход: паттерн из 3А + текущие инструкции
Действие: LLM формулирует IF/THEN-правило с явными исключениями
Выход: одно правило в структурированном виде
ШАГ 3В (Уточнение инструкций):
Вход: правило из 3Б + текущие инструкции + примеры того, что работало правильно
Действие: LLM встраивает правило, не ломая остальное
Выход: обновлённые инструкции
→ Возврат к ШАГУ 1 с обновлёнными инструкциями
Все шаги — отдельные запросы в одном чате. Шаги 3А, 3Б, 3В можно делать последовательно за один сеанс.
Пример применения
Задача: Редактор маркетплейса Ozon настраивает LLM, чтобы та классифицировала отзывы покупателей по трём категориям: «Качество товара», «Логистика», «Работа продавца». Базовый промпт работает неплохо, но категорию «Работа продавца» LLM постоянно путает с «Логистикой» — когда покупатель пишет об опоздавшей доставке, которую обещал продавец.
Промпт:
Три запроса подряд:
Запрос 3А — Объяснение паттерна:
Я классифицирую отзывы покупателей по трём категориям: «Качество товара»,
«Логистика», «Работа продавца».
Ниже — примеры, где классификация НЕВЕРНА (предсказано → правильно):
НЕВЕРНЫЕ:
- «Продавец обещал доставку за 3 дня, прошло 10 дней» → [Логистика], должно быть [Работа продавца]
- «На сайте продавца написано — есть в наличии, прислали через месяц» → [Логистика], должно быть [Работа продавца]
ВЕРНЫЕ (для сравнения):
- «Курьер потерял посылку» → [Логистика] ✓
- «Продавец не отвечает на вопросы» → [Работа продавца] ✓
- «Товар пришёл помятым из-за плохой упаковки службы доставки» → [Логистика] ✓
Сравни два набора. Найди, какой паттерн отличает ошибочные случаи от верных.
Опиши одним абзацем: что именно является признаком неверной классификации.
Запрос 3Б — Генерация принципа:
Паттерн ошибки (из предыдущего анализа): {вставить вывод из 3А}
Текущая инструкция по классификации: {вставить текущие инструкции}
Сформулируй одно корректирующее правило в формате:
ЕСЛИ [условие]
ТО [действие — к какой категории относить]
КРОМЕ КОГДА [условие-исключение]
Правило должно быть абстрактным, не привязанным к конкретным словам из примеров.
Запрос 3В — Уточнение инструкций:
Вот мои текущие инструкции для классификации отзывов:
{вставить текущие инструкции}
Новое правило, которое нужно добавить:
{вставить правило из 3Б}
Примеры, которые должны классифицироваться верно и после изменений:
{вставить несколько заведомо правильных примеров}
Добавь новое правило в инструкции так, чтобы:
1. Сохранить структуру и формулировки оригинала
2. Ни один из примеров выше не сменил категорию
3. Вывести полный текст обновлённых инструкций
Результат: После 3А модель опишет конкретный паттерн — например, «ошибочные случаи содержат обещание продавца, а не факт действий службы доставки». После 3Б получишь чёткое IF/THEN-правило с исключением. После 3В — полные обновлённые инструкции с встроенным правилом. При повторном запуске классификации с новыми инструкциями этот тип ошибки должен исчезнуть или сократиться.
Почему это работает
Слабость LLM. Когда вы пишете инструкции, вы не можете предусмотреть все граничные случаи — особенно те, которые кажутся вам очевидными. LLM следует буквальному смыслу написанного. Там, где правило не прописано явно, модель генерирует ответ по дефолтному паттерну из обучающих данных — который может не совпадать с вашим.
Сильная сторона LLM. Модель хорошо справляется с контрастным анализом: «что есть у одной группы примеров и чего нет у другой». Это именно то, что нужно для поиска паттерна ошибки. Ещё лучше она справляется с формализацией: взять наблюдение и превратить его в структурированное правило с чёткими условиями и исключениями.
Как метод использует это. Вместо того чтобы переписывать инструкции интуитивно («добавлю-ка ещё один абзац»), метод поручает саму диагностику и правку LLM. Модель видит неправильные примеры рядом с правильными — и это контрастное сравнение гораздо эффективнее, чем просто «делай лучше». Три отдельных шага нужны потому, что каждый требует разного типа рассуждений: поиск паттерна → абстрагирование → встраивание без разрушения существующего.
Рычаги управления: - Размер набора ошибок — 5–15 примеров достаточно. Слишком много → модель теряет фокус на одном паттерне - Тип ошибок — работайте с одним типом за итерацию. Смешивать разные паттерны → размытое правило - Примеры правильных ответов в 3В — чем больше, тем безопаснее: защищаете уже работающее от случайной поломки - Reasoning-режим — для сложных инструкций с множеством правил используй o3, Gemini с максимальным thinking или DeepSeek Reasoner: они точнее следуют многоуровневым условиям
Шаблон промпта
3А — Объяснение паттерна
Я выполняю задачу: {описание задачи}.
Критерии классификации/оценки: {краткое описание критериев}
Ниже — примеры НЕВЕРНЫХ результатов (что сделала LLM → что должно быть):
{список 5-10 неверных примеров с контекстом}
Ниже — примеры ВЕРНЫХ результатов (для сравнения):
{список 5-10 верных примеров}
Сравни два набора контрастно. Найди один паттерн: чем случаи, где возникает ошибка,
отличаются от случаев, где всё верно.
Опиши паттерн одним абзацем — конкретно, без общих слов.
3Б — Генерация принципа
Паттерн ошибки: {вставить вывод из 3А}
Мои текущие инструкции: {вставить инструкции}
Сформулируй одно корректирующее правило в формате:
ЕСЛИ [условие — признак, по которому можно распознать случай]
ТО [точное действие — что делать]
КРОМЕ КОГДА [условие, при котором правило не применяется]
Требования:
— Правило должно быть абстрактным (не привязанным к словам из примеров)
— Явно укажи исключение, чтобы не создать новых ошибок
— Одно правило, не список
3В — Уточнение инструкций
Мои текущие инструкции:
{вставить полные инструкции}
Новое правило для добавления:
{вставить правило из 3Б}
Контрольные примеры — они должны давать ПРАВИЛЬНЫЙ результат и до, и после правки:
{список 5-7 заведомо верных примеров с ожидаемым результатом}
Добавь новое правило в инструкции:
— Сохрани структуру, формулировки и стиль оригинала
— Ни один контрольный пример не должен изменить результат
— Выдай полный текст обновлённых инструкций без сокращений
Плейсхолдеры:
- {описание задачи} — что классифицирует/анализирует LLM (отзывы, договоры, тексты)
- {описание критериев} — ваши текущие категории или правила
- {список примеров} — конкретные примеры с контекстом (хватит 5–10 на итерацию)
- {полные инструкции} — весь текущий промпт с правилами
🚀 Быстрый старт — вставь в чат:
Вот шаблоны трёхшагового метода Iterative Moderation Framework для улучшения
инструкций через анализ ошибок. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит про задачу, текущие инструкции и примеры ошибок — потому что без этого невозможно найти паттерн. Она возьмёт структуру из шаблона и адаптирует под вашу ситуацию.
Ограничения
⚠️ Задачи с субъективными критериями: Метод работает там, где есть "правильный ответ". Для задач "насколько хорош текст" или "нравится ли мне тон" — паттерн ошибки не найти, правило IF/THEN не сформулировать.
⚠️ Слабые модели: Исследование показало, что у небольших или менее мощных моделей итерации не дают стабильного улучшения — они нарушают уже работающие правила при добавлении новых. Метод лучше работает с топовыми моделями.
⚠️ Маленький прирост после первой итерации: Самый большой скачок качества — от "без инструкций" к "с инструкциями". Каждая следующая итерация правки добавляет меньше. Не ждите радикальных улучшений после 3–4 циклов.
⚠️ Нужны примеры правильных ответов: Для поиска паттерна нужны конкретные примеры "что должно получиться". Без них ни 3А, ни 3В не работают корректно.
Ресурсы
Работа: Refining and Reusing Annotation Guidelines for LLM Annotation
Авторы: Kon Woo Kim, Jin-Dong Kim, Akiko Aizawa
Университеты: The Graduate University for Advanced Studies (SOKENDAI), National Institute of Informatics (NII), National Institute of Genetics (NIG) — Япония
Код и данные: github.com/KonWooKim/llm-guideline-moderation
Датасеты: NCBI Disease, BC5CDR, BioRED (биомедицинская разметка)
