3,583 papers
arXiv:2605.12129 77 12 мая 2026 г. FREE

4-Stage Harness Pipeline: структура промпта важнее размера модели

КЛЮЧЕВАЯ СУТЬ
Парадокс: добавить чуть-чуть структуры в промпт — хуже, чем не добавлять вообще. Это не баг, это закономерность — модель спотыкается о незнакомый формат и начинает тормозить там, где раньше шла прямо. Четырёхэтапный конвейер позволяет надёжно выполнять задачи с жёсткими ограничениями — лимиты символов, запреты на элементы, обязательные части. Весь конвейер — план → исполнение → проверка → исправление — разворачивается внутри одного промпта. Модель сама ловит свои ошибки и переделывает с описанием конкретного нарушения, а не вслепую.
Адаптировать под запрос

TL;DR

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

Главная находка — контринтуитивная. Добавление минимальной структуры (просто обернуть задачу тегами) может ухудшить результат по сравнению с полным отсутствием структуры. Это не парадокс, а закономерность: "полумеры" создают дополнительную нагрузку на модель, не давая ей взамен реальной опоры. Модель спотыкается о незнакомый формат и начинает тормозить там, где раньше шла прямо. Работает либо полная структура, либо её полное отсутствие.

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


🔬

Схема метода

Все четыре этапа — в одном промпте, одном запросе к модели:

ЭТАП 1 → ПЛАН: разобрать задачу, явно перечислить ВСЕ ограничения

ЭТАП 2 → ИСПОЛНЕНИЕ: выполнить задачу по плану

ЭТАП 3 → ПРОВЕРКА: сверить результат с каждым ограничением из плана 
          → вывести [✓/✗] по каждому пункту

ЭТАП 4 → ИСПРАВЛЕНИЕ: если есть ✗ — переделать, учитывая ошибки,
          повторить проверку → вывести финальный результат

🚀

Пример применения

Задача: Написать рекламный пост для Telegram-канала Павла Комаровского (инвест-блогер с аудиторией 200к+). Жёсткие требования: ровно 280–320 символов, без эмодзи, без восклицательных знаков, с конкретным призывом перейти по ссылке. Тема — запуск курса по формированию личного портфеля.

Промпт:

Выполни задачу строго в 4 этапа:

**ЭТАП 1 — ПЛАН**
Разбери задачу. Явно перечисли все ограничения. 
Для каждого ограничения — как именно будешь его соблюдать.

**ЭТАП 2 — ИСПОЛНЕНИЕ**
Напиши рекламный пост для Telegram-канала об инвестициях. 
Тема: запуск курса по формированию личного портфеля. 
Требования: 280–320 символов, без эмодзи, без восклицательных 
знаков, с призывом перейти по ссылке.

**ЭТАП 3 — ПРОВЕРКА**
Проверь готовый текст против каждого ограничения из плана:
[✓/✗] символов в диапазоне 280–320 — реальное количество: ...
[✓/✗] без эмодзи
[✓/✗] без восклицательных знаков
[✓/✗] есть призыв перейти по ссылке

**ЭТАП 4 — ИСПРАВЛЕНИЕ**
Если есть ✗ — перепиши текст с учётом нарушений и повтори проверку.
Если все ✓ — выведи "ФИНАЛЬНЫЙ РЕЗУЛЬТАТ:" и покажи готовый текст.

Результат: Модель выведет все четыре этапа последовательно. В плане явно зафиксирует, что 280–320 символов — это не "примерно треть экрана", а конкретное число, которое нужно посчитать. В проверке покажет реальный счётчик по каждому пункту. Если символов окажется 340 — сама сократит в этапе исправления и перепроверит. На выходе — текст, прошедший самопроверку.


🧠

Почему это работает

Слабость модели — она не держит ограничения "в уме" в процессе генерации. Когда просишь написать "300 символов", модель не считает посимвольно — она генерирует текст по ощущению, ориентируясь на паттерн. Итог: то 240, то 380, и каждый раз по-разному.

Сильная сторона модели — хорошо следовать явным пошаговым инструкциям и проверять конкретные правила, когда проверка вынесена в отдельный этап с чётким форматом вывода. Когда "посчитай символы" — это не часть главной задачи, а отдельный шаг, точность резко растёт.

Как метод использует это — планирование до исполнения вынуждает модель явно зафиксировать ограничение как числовой якорь, а не держать его фоновым пожеланием. Проверка превращает расплывчатое "соблюдай ограничения" в конкретный чеклист. Исправление даёт модели обратную связь с описанием ошибки — и она переделывает с учётом конкретного нарушения, а не вслепую.

Рычаги управления: - Этап плана — попроси явно написать число символов/слов рядом в плане → это усиливает якорь для исполнения - Уровень детализации проверки — добавь реальное значение: ... в каждый пункт → модель посчитает, а не угадает - Число итераций — добавь "повтори исправление до 2 раз, если ✗ остаются" → для упрямых ограничений - Убери этап плана → для простых задач без числовых ограничений, экономишь токены


📋

Шаблон промпта

Выполни задачу строго в 4 этапа:

**ЭТАП 1 — ПЛАН**
Разбери задачу. Явно перечисли все ограничения по пунктам.
Для каждого ограничения укажи, как именно будешь его соблюдать.

**ЭТАП 2 — ИСПОЛНЕНИЕ**
{задача с полным описанием всех требований}

**ЭТАП 3 — ПРОВЕРКА**
Проверь результат против каждого ограничения из плана.
Формат проверки:
[✓/✗] {ограничение 1} — фактическое значение: ...
[✓/✗] {ограничение 2} — фактическое значение: ...
[✓/✗] {ограничение N} — фактическое значение: ...

**ЭТАП 4 — ИСПРАВЛЕНИЕ**
Если есть ✗ — перепиши результат с учётом нарушений.
Повтори проверку в том же формате.
Если все ✓ — выведи "ФИНАЛЬНЫЙ РЕЗУЛЬТАТ:" и покажи готовый текст.

Плейсхолдеры: - {задача с полным описанием всех требований} — сама задача + все ограничения полным текстом (лимиты символов/слов, запрещённые элементы, обязательные элементы, тон, формат) - {ограничение 1...N} — в этапе проверки перечисли те же ограничения из задачи, но в формате чеклиста


🚀 Быстрый старт — вставь в чат:

Вот шаблон 4-этапного промпта для надёжного выполнения задач 
с жёсткими ограничениями. Адаптируй под мою задачу: {твоя задача}.
Задавай уточняющие вопросы, чтобы заполнить все поля.

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Числовые лимиты — частично: Точный подсчёт символов остаётся слabым местом. Даже с полным pipeline модель может ошибиться в подсчёте при тексте более 400–500 символов. Результат улучшается, но не гарантирован.

⚠️ Избыточно для простых задач: На задачах без ограничений ("переведи текст", "объясни термин") 4 этапа — лишние токены и время. Метод раскрывается на многошаговых задачах с жёсткими требованиями.

⚠️ Полумеры опасны: Добавить только теги или только проверку без плана и исправления — хуже чем не добавлять ничего. Либо полная структура из четырёх этапов, либо обычный прямой промпт.

⚠️ Галлюцинации не лечит: Если модель придумывает факты — структура не поможет. Harness фиксирует формат и ограничения, но не фактическую точность.


🔍

Как исследовали

Исследователи взяли три небольшие модели (Gemma4 2B, Qwen3.5 2B, LLaMA 3.2 3B), 24 задачи шести типов и прогнали через три условия: голый промпт, промпт в тегах и полный 4-этапный pipeline. Идея была проверить, можно ли маленькую модель сделать надёжной без апгрейда — только за счёт структуры.

Самый яркий результат — LLaMA 3.2 без структуры справилась только с 43% задач (9 из 21), при этом почти весь контент был правильным — просто формат разваливался. Добавили teги — результат стал 81%, добавили полный pipeline — 76%. Здесь же обнаружили нелинейный эффект: минимальная структура (только теги) стабильно хуже полного отсутствия структуры у двух моделей из трёх. Это неожиданно и важно.

Аблационный анализ показал: планирование и восстановление вносят примерно по 25% каждый от общего прироста. Причём планирование работает проактивно — оно якорит числовые ограничения ещё до генерации. Без этапа плана модель при задаче "200 символов" выдала 248; с планом — 193. Механизм восстановления работает реактивно — три задачи, которые тайм-аутились во всех других условиях, были решены через повторную попытку с описанием ошибки.


📄

Оригинал из исследования

Описание трёх условий (Table I — pipeline vs. ablation):

(A) model-only: Raw prompt with task description only. No structural wrapper.

(B) minimal-shell: Task wrapped in [TASK START] / [OUTPUT] tags. 
No execution flow.

(C) 4-stage pipeline: Plan → Execute → Verify → Recover. 
Recovery re-runs (up to 2 retries) with error feedback 
on verify failure or timeout.

Ablation:
pipeline-no-plan:    Execute → Verify → Recover
pipeline-no-verify:  Plan → Execute
pipeline-no-recover: Plan → Execute → Verify (verdict only)

Контекст: Это описание трёх harness-условий, которые прогоняли через все модели и задачи. Ablation показывает вклад каждого этапа при его удалении.


💡

Адаптации и экстраполяции

📌

💡 Адаптация: этап плана как явный якорь для числовых ограничений

Если задача содержит числовое ограничение (слова, символы, пункты, абзацы) — вынеси его в план отдельной строкой с формулой:

**ЭТАП 1 — ПЛАН**
Задача: {задача}

Числовые ограничения и как буду соблюдать:
- Лимит: {N} слов → буду считать слова после написания, 
  целевой диапазон {N-5}–{N} слов
- Запрещённые элементы: {список} → проверю каждый явно
- Обязательные элементы: {список} → включу в план исполнения

Исследование показало: без явного якоря в плане задача "200 символов" даёт 248 символов. С якорем — 193. Разница не в модели, а в том, зафиксировала ли она ограничение как рабочий критерий до генерации.


📌

🔧 Техника: добавь счётчик в проверку → убери ложные срабатывания

Стандартная проверка [✓/✗] не более 300 символов позволяет модели угадать. Добавь обязательное поле с реальным значением:

**ЭТАП 3 — ПРОВЕРКА**
[✓/✗] Символов не более 300 — посчитал: ... символов
[✓/✗] Нет эмодзи — нашёл: (перечисли или "не найдено")
[✓/✗] Есть призыв к действию — цитата: "..."

Когда модель вынуждена написать реальное число, а не просто поставить галочку — точность проверки резко растёт. VCR (доля пойманных ошибок) в оригинальном исследовании = 62.5%; с явными счётчиками должно быть выше.


📌

🔧 Техника: вместо автоматического исправления — "покажи диагноз"

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

**ЭТАП 4 — ДИАГНОСТИКА И ИСПРАВЛЕНИЕ**
Для каждого ✗ из проверки:
- Причина нарушения: ...
- Что именно изменю: ...
- Переписанный фрагмент: ...

[Затем полный итоговый текст с исправлениями]

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


📋

💡 Экстраполяция: принцип "полумеры хуже нуля" для любого промптинга

Исследование обнаружило нелинейный эффект: минимальная структура стабильно хуже её полного отсутствия. Это применимо за пределами pipeline:

  • Добавил роль ("ты — эксперт"), но не дал контекст и критерии → можно получить хуже, чем без роли
  • Добавил "выведи в JSON", но не описал схему → модель придумает структуру сама, иногда кривую
  • Добавил "думай шаг за шагом", но не указал что именно — шаги → пустые рассуждения вместо анализа

Правило: Если добавляешь структурный элемент — доводи до конца. Половина инструкции часто хуже её отсутствия.


🔗

Ресурсы

  • Статья: "It's Not the Size: Harness Design Determines Operational Stability in Small Language Models"
  • Автор: Yong-eun Cho, KailosLab, Сеул, Южная Корея (kevin@kailoslab.com)
  • Ссылки из исследования: Reflexion [arXiv:2303.11366], ReAct [ICLR 2023], CRITIC [arXiv:2305.11738], Ollama [github.com/ollama/ollama]

📋 Дайджест исследования

Ключевая суть

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

Принцип работы

Модель не считает символы при генерации. Она идёт по ощущению — «похоже на 300» — и каждый раз промахивается по-разному. Четыре этапа разделяют то, что модель умеет, и то, в чём она плывёт. Каждый этап делает одно, а не всё разом: планирование фиксирует ограничения числом до старта, исполнение идёт по плану, проверка выносится в отдельный шаг с чётким форматом вывода, исправление даёт конкретную ошибку для переделки. Это как конвейер на заводе: монтажник не проверяет свою работу сам — есть отдельный контролёр.

Почему работает

Когда просишь написать «300 символов», модель не считает — она генерирует паттерн. Числовой якорь в плане («я должен уложиться в 280–320 — буду считать») работает громче, чем фоновое пожелание внутри задачи. А проверка с форматом [✓/✗] фактическое значение: ... вынуждает посчитать буквально, а не угадать. Из трёх провальных задач все три превращаются в успешные, когда проверка вынесена отдельным этапом. Добавление только тегов или только проверки — без плана и исправления — даёт результат хуже, чем обычный прямой промпт. Работает либо полная структура из четырёх этапов, либо её полное отсутствие.

Когда применять

Создание контента с жёсткими техническими требованиями → особенно для лимитов символов и слов, запрещённых элементов (без эмодзи, без восклицательных знаков), обязательных частей (должна быть ссылка, должно быть конкретное слово). Хорошо работает на рекламных постах, описаниях продуктов, шаблонных письмах с ограничениями. НЕ подходит для простых задач без требований — «переведи текст», «объясни термин». Четыре этапа на таких задачах просто жгут лишние токены и время. Также не лечит галлюцинации: структура фиксирует формат и ограничения, но не фактическую точность.

Мини-рецепт

1. Вставь четыре заголовка явно: ЭТАП 1 — ПЛАН, ЭТАП 2 — ИСПОЛНЕНИЕ, ЭТАП 3 — ПРОВЕРКА, ЭТАП 4 — ИСПРАВЛЕНИЕ
2. В плане попроси перечислить ВСЕ ограничения: добавь «для каждого ограничения укажи, как именно будешь его соблюдать» — это создаёт числовой якорь ДО генерации
3. В проверке дай формат: [✓/✗] {ограничение} — фактическое значение: ... — без явного формата модель угадает, а не посчитает
4. В исправлении укажи: «если есть ✗ — перепиши с учётом нарушений, повтори проверку в том же формате, если все ✓ — выведи ФИНАЛЬНЫЙ РЕЗУЛЬТАТ»
5. Важно: либо все четыре этапа, либо обычный прямой промпт — один этап проверки без плана и исправления хуже, чем ничего

Примеры

[ПЛОХО] : Напиши пост для Telegram об инвестиционном курсе. Ровно 300 символов, без эмодзи, с призывом перейти по ссылке
[ХОРОШО] : Выполни строго в 4 этапа: ЭТАП 1 — ПЛАН Разбери задачу. Перечисли все ограничения по пунктам. Для каждого — как именно будешь соблюдать. ЭТАП 2 — ИСПОЛНЕНИЕ Напиши пост об инвестиционном курсе по формированию личного портфеля. Требования: 280–320 символов, без эмодзи, без восклицательных знаков, с призывом перейти по ссылке. ЭТАП 3 — ПРОВЕРКА [✓/✗] символов в диапазоне 280–320 — фактически: ... [✓/✗] нет эмодзи [✓/✗] нет восклицательных знаков [✓/✗] есть призыв перейти по ссылке ЭТАП 4 — ИСПРАВЛЕНИЕ Если есть ✗ — перепиши с учётом нарушений, повтори проверку. Если все ✓ — выведи ФИНАЛЬНЫЙ РЕЗУЛЬТАТ: и покажи готовый текст.
Источник: It's Not the Size: Harness Design Determines Operational Stability in Small Language Models
ArXiv ID: 2605.12129 | Сгенерировано: 2026-05-13 06:23

Проблемы LLM

ПроблемаСутьКак обойти
Модель не считает — она угадываетПросишь написать ровно 300 символов. Модель генерирует по ощущению, ориентируясь на паттерн из обучения. Итог: то 240, то 380. Каждый раз по-разному. Числовое ограничение остаётся фоновым пожеланием, а не жёстким правиломВынеси проверку в отдельный шаг с явным форматом: [✓/✗] лимит символов — реальное значение: .... Когда подсчёт — отдельный этап, а не часть основной задачи, точность резко растёт
Частичная структура хуже нуляДобавляешь к промпту теги или один этап проверки. Кажется — лучше чем ничего. На деле хуже: незнакомый формат создаёт дополнительную нагрузку, а реальной опоры не даёт. Модель спотыкается там, где раньше шла прямоЛибо полная структура из четырёх этапов, либо обычный прямой запрос. Промежуточные варианты — не компромисс, а провал

Методы

МетодСуть
Четыре этапа в одном запросе — план, исполнение, проверка, исправлениеПропиши в запросе четыре явных шага. Этап 1 — план: разобрать задачу и явно перечислить все ограничения. Этап 2 — исполнение: выполнить задачу по плану. Этап 3 — проверка: сверить результат с каждым ограничением, вывести [✓/✗] и реальное значение. Этап 4 — исправление: если есть ✗ — переделать с описанием ошибки, повторить проверку. Всё это — один запрос. Почему работает: план вынуждает модель зафиксировать ограничение как числовой якорь ещё до генерации. Проверка превращает расплывчатое "соблюдай требования" в конкретный чеклист. Исправление даёт точную обратную связь — модель переделывает с пониманием конкретного нарушения, а не вслепую. Когда применять: задачи с жёсткими числовыми или формальными ограничениями (лимиты символов, запреты на элементы, обязательные части). Когда не применять: простые задачи без ограничений — лишние токены без пользы

Тезисы

ТезисКомментарий
Проверка как отдельный этап работает лучше встроеннойКогда просишь "напиши и проверь" — проверка тонет внутри главной задачи. Когда проверка — отдельный шаг с явным форматом вывода — модель реально считает, а не угадывает. Механика простая: разделение задач снижает конкуренцию за внимание. Применяй: не пиши "соблюдай ограничения", вынеси в отдельный этап [✓/✗] ограничение — фактическое значение: ...
📖 Простыми словами

It's Not the Size: Harness Design Determines Operational Stability in SmallLanguageModels

arXiv: 2605.12129

Суть в том, что маленькие языковые модели — это не тупые инструменты, а просто плохие многозадачники. Когда ты просишь нейронку выдать текст с жесткими ограничениями, она лажает не из-за нехватки «мозгов», а потому что пытается сделать всё одновременно: и смысл родить, и символы посчитать, и стиль выдержать. В итоге структура промпта решает больше, чем размер модели. Если правильно собрать «двигатель» внутри одного запроса, даже крошечная модель начинает выдавать результат стабильнее, чем жирный и дорогой GPT-4, работающий «на расслабоне».

Это как пытаться собрать шкаф из Икеи, одновременно читая инструкцию, забивая гвозди и пытаясь не уронить полку на ногу. Если делать всё сразу — получится криво. Но если ты сначала разложишь детали, потом соберешь каркас, следом проверишь углы и в конце подкрутишь винты, шкаф будет стоять мертво. Исследование доказывает: нейронке нужно навязать тот же алгоритм. Вместо того чтобы просто просить «сделай красиво», нужно заставить её пройти через четыре такта: план, исполнение, проверка и исправление.

Работает это максимально приземленно. Допустим, тебе нужен пост для инвест-блога: строго 300 знаков, без эмодзи и криков. Обычная модель выдаст рандомную простыню, потому что она не умеет считать «в уме» во время письма. Но если внутри промпта прописана цепочка этапов, модель сначала пишет черновик, потом сама себя бьет по рукам за лишние знаки и восклицательные знаки, и только после этого выдает финальный текст. Этот метод Harness Design превращает хаотичную генерацию в конвейер, где каждый этап страхует предыдущий.

Принцип универсален и применим везде, где важна точность, а не просто «поток сознания». Тестировали на текстах, но это база для кода, анализа данных или сложных инструкций. Неважно, пишешь ли ты пост в Telegram или настраиваешь бота для техподдержки — алгоритм внутри промпта заменяет необходимость покупать дорогущие API мощных моделей. Ты просто перестаешь надеяться на «магию» AI и начинаешь использовать его как предсказуемый механизм.

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

Работа с исследованием

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

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с