3,583 papers
arXiv:2603.24284 72 25 мар. 2026 г. FREE

Specification Gap: полная спецификация решает конфликты — «отчёт об ошибках» не помогает

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

TL;DR

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

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

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


🔬

Схема метода

ШАГ 0 (до разделения задачи):
  Сформируй явную спецификацию — ключевые данные, форматы,
  термины, структуры → сохрани как "общий бриф"

ШАГ 1 (каждый отдельный запрос):
  Вставляй полный бриф + конкретная задача для этой части
  → получаешь часть, совместимую с остальными

ШАГ 2 (если что-то всё же не совпало):
  НЕ: "вот конфликты — исправь"
  ДА: снова дай полную спецификацию → попроси свести части воедино

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


🚀

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

Задача: Стартап Михаила делает мобильное приложение для учёта личных финансов. Нужен питч-дек для инвесторов. Михаил просит ChatGPT написать слайды по очереди: рынок → проблема → решение → unit-экономика → команда. Итог: в слайде «Рынок» TAM — 800 млрд рублей, в «Unit-экономике» почему-то фигурирует 50 млрд. Конкурент на слайде «Решение» — Тинькофф, на слайде «Команда» — уже Сбер. Цифры плавают, термины расходятся.

Промпт:

Общий бриф питч-дека — вставляй в каждый запрос:

ПРОДУКТ: Мобильное приложение «Копейка» — учёт личных финансов
ЦЕЛЕВАЯ АУДИТОРИЯ: Россияне 25–40 лет, доход от 80 000 руб/мес
РЫНОК: TAM — 320 млрд руб/год (рынок финансовых приложений РФ)
КОНКУРЕНТЫ: Дзен-мани, Coinkeeper, встроенный учёт Тинькофф
БИЗНЕС-МОДЕЛЬ: Freemium, подписка 299 руб/мес
КЛЮЧЕВЫЕ МЕТРИКИ: CAC — 350 руб, LTV — 2 100 руб, MAU — 45 000
РАУНД: Seed, ищем 30 млн рублей за 15%
КОМАНДА: Михаил Орлов (CEO, ex-Яндекс), Анна Смирнова (CTO, ex-Сбер)

---
Используя только данные из брифа выше, напиши слайд «{название слайда}».
Не добавляй цифры, которых нет в брифе. Формат: заголовок + 3–5 тезисов.

Результат:

Каждый слайд будет использовать одни и те же цифры, одних конкурентов и единую терминологию из брифа. Когда соберёшь все слайды вместе — они будут согласованы между собой, потому что каждый запрос работал с одной и той же «системой координат».

Если слайды вышли несовместимыми и нужно свести воедино — дай модели весь бриф + все слайды и попроси «привести к единой спецификации», а не «вот где противоречия — исправь их».


🧠

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

LLM не помнит «договорённость» между запросами. Когда ты просишь написать раздел A, а потом раздел B — каждый раз модель начинает с нуля и самостоятельно выбирает форматы, термины, числа. Даже если ты написал похожий контекст — два запроса независимы. Это не баг, это устройство: модель генерирует следующий токен на основе того, что видит сейчас, а не того, что делала в другом диалоге.

LLM хорошо умеет следовать явным ограничениям внутри одного запроса. Если в запросе написано «конкурент — Дзен-мани» — она не придумает Тинькофф. Если написано «TAM — 320 млрд» — она не возьмёт другую цифру. Модель не «думает самостоятельно» — она следует паттернам из контекста. Чем точнее контекст, тем предсказуемее результат.

Метод использует это: полная спецификация в каждом запросе устраняет неопределённость. Модели не нужно угадывать — всё уже написано явно. А если дать не спецификацию, а «отчёт о конфликтах» — модель видит что не так, но не знает как правильно. Выбор между вариантами без арбитра — случайный. Спецификация — арбитр.

Рычаги управления: - Детализация брифа → больше явных параметров = меньше расхождений. Добавляй всё, что может быть интерпретировано по-разному: форматы дат, единицы измерения, ключевые термины - Инструкция «не добавляй данных вне брифа» → усиливает эффект явной спецификации - Финальный запрос «сверки» → после всех частей попроси LLM проверить соответствие брифу — не ошибки, а соответствие источнику истины


📋

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

ОБЩАЯ СПЕЦИФИКАЦИЯ ПРОЕКТА:
{ключевые параметры: названия, числа, форматы, термины, структуры данных}

ПРАВИЛА:
- Используй только данные из спецификации выше
- Не добавляй числа и факты, которых нет в спецификации
- Формат вывода: {нужный формат}

ЗАДАЧА ДЛЯ ЭТОЙ ЧАСТИ:
{конкретная задача — один раздел, один блок, один аспект}

Плейсхолдеры: - {ключевые параметры} — всё, что должно быть одинаковым во всех частях: цифры, формат дат, имена, термины, структуры - {нужный формат} — как должен выглядеть ответ: список, таблица, абзацы, слайд - {конкретная задача} — что именно делать в этом запросе: «напиши раздел X», «заполни блок Y»

Для финальной сверки / восстановления после конфликта:

ОБЩАЯ СПЕЦИФИКАЦИЯ (источник истины):
{та же спецификация}

ЧАСТИ, КОТОРЫЕ НУЖНО СОГЛАСОВАТЬ:
{вставь все части}

Приведи все части в соответствие со спецификацией.
Там где части противоречат спецификации — исправь по спецификации.
Там где части противоречат друг другу — используй данные из спецификации как арбитр.

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

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

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

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


⚠️

Ограничения

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

⚠️ Структурная несовместимость, не смысловая: Метод отлично ловит форматные расхождения (разные числа, разные термины). Но если две части используют одинаковый формат, но несовместимую логику — это не поймать явной спецификацией. Нужна содержательная проверка.

⚠️ Спецификация работает когда написана явно: «Конкурент — Тинькофф» работает. «Укажи релевантных конкурентов» — не фиксирует выбор и оставляет простор для расхождений. Неявные инструкции не создают координирующего контекста.

⚠️ Не масштабируется на очень длинные брифы: Если спецификация занимает половину окна контекста — в сложных задачах модель начинает «забывать» детали из начала. Держи бриф компактным: только то, что может расходиться.


🔗

Ресурсы

Название работы: The Specification Gap: Coordination Failure Under Partial Knowledge in CodeAgents (препринт, 2025)

Репозиторий: github.com/camilochs/the_specification_gap

Авторы: Camilo Chacón Sartori — Catalan Institute of Nanoscience and Nanotechnology (ICN2), CSIC and BIST, Campus UAB, Барселона, Испания

Связанные идеи в работе: ClassEval (бенчмарк для задач на уровне классов), Принцип сокрытия информации Парнаса, Design by Contract Майера — классические концепции из разработки ПО, которые авторы переносят на мультиагентные LLM-системы.


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

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

Парадокс: когда части задачи не совпадают, инстинкт говорит — покажи модели где ошибка. Исследование проверило это экспериментально: добавление отчёта о конфликтах к запросу на исправление даёт нулевой эффект. Метод Specification-First позволяет разбивать сложную задачу на части в отдельных запросах и получать согласованный результат без правок. Фишка: вместо «вот что не так» — «вот как должно быть целиком». В каждый запрос вставляется полная спецификация — числа, форматы, термины, структуры — и модель не угадывает, а следует явно заданному контексту.

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

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

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

Модель генерирует следующий токен на основе того, что видит прямо сейчас. Написал «конкурент — Дзен-мани» — не придумает Тинькофф. Написал «TAM — 320 млрд» — не возьмёт другую цифру. Явные ограничения в контексте делают результат предсказуемым — это вся механика. Без спецификации каждый запрос самостоятельно «придумывает» форматы и числа с нуля. Со спецификацией — следует паттерну. Не думает, а повторяет то, что написано явно.

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

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

Мини-рецепт

1. Сделай бриф заранее: Выпиши всё, что должно совпадать во всех частях — числа, названия, форматы дат, ключевые термины. Держи компактно: только то, что может разойтись.
2. Вставляй бриф в каждый запрос: Шаблон: СПЕЦИФИКАЦИЯ: {бриф} — ПРАВИЛО: используй только данные из спецификации, не добавляй факты вне неё — ЗАДАЧА: {конкретная часть}
3. Если части всё же разошлись: Дай модели весь бриф плюс все части и попроси привести к единой спецификации. Не «вот противоречия — разберись», а «вот источник истины — сверь по нему всё».

Примеры

[ПЛОХО] : Напиши слайд про рынок для питч-дека стартапа по финансам.
[ХОРОШО] : СПЕЦИФИКАЦИЯ: Приложение «Копейка» — учёт личных финансов. TAM — 320 млрд руб/год. Конкуренты — Дзен-мани и Coinkeeper. Стоимость привлечения клиента (CAC) — 350 руб, пожизненная ценность клиента (LTV) — 2 100 руб. Посевной раунд — 30 млн руб за 15%. ПРАВИЛО: используй только цифры и факты из спецификации. Не добавляй данные вне неё. ЗАДАЧА: напиши слайд «Рынок» — заголовок и 4 тезиса. Каждый следующий слайд получает тот же бриф. Итог — все слайды используют одни числа и одних конкурентов, без расхождений.
Источник: The Specification Gap: Coordination Failure Under Partial Knowledge in CodeAgents
ArXiv ID: 2603.24284 | Сгенерировано: 2026-03-26 04:26

Проблемы LLM

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

Методы

МетодСуть
Спецификация-первой — согласованность частей через явный брифПеред разделением задачи зафиксируй общий бриф: числа, форматы, названия, термины, структуры данных. Всё что может быть интерпретировано по-разному — пиши явно. Вставляй бриф целиком в каждый запрос. Шаблон: ОБЩАЯ СПЕЦИФИКАЦИЯ: {параметры} / ПРАВИЛА: используй только данные выше, не добавляй ничего вне них / ЗАДАЧА ДЛЯ ЭТОЙ ЧАСТИ: {конкретный раздел}. Почему работает: Модель следует явным ограничениям внутри текущего запроса точно. Нет неопределённости — нет расхождений. Восстановление: Если части уже несовместимы — дай бриф + все части + «приведи к спецификации как к источнику истины». Не «вот ошибки», а «вот как правильно». Когда не работает: Очень длинный бриф (больше трети контекста) — модель перестаёт держать детали из начала. Держи бриф компактным
📖 Простыми словами

The Specification Gap: Coordination Failure Under Partial Knowledge in CodeAgents

arXiv: 2603.24284

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

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

Главная причина лажи — частичное знание. В исследовании 2603.24284 четко видно: когда агент пишет функцию А, он не видит, какие типы данных выбрал агент для функции Б. Если в одном запросе ты просишь рассчитать налоги, а в другом — вывести отчет, модель может в первом случае использовать целые числа, а во втором — строки с валютой. В итоге система ловит ошибку совместимости, хотя каждый промпт был отработан корректно. Модель просто не помнит «договоренностей», которых не было в текущем контексте.

Этот принцип универсален и бьет не только по коду. Если ты просишь AI написать стратегию маркетинга по главам, в первой главе целевой аудиторией будут зумеры из Москвы, а в пятой — пенсионеры из Сибири. SEO-тексты, бизнес-планы, сложные юридические документы — везде, где есть логическая связность между частями, независимые запросы превращают результат в лоскутное одеяло. Контекстное окно не резиновое, и попытка изолировать задачи друг от друга убивает общую логику проекта.

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

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

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

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