3,583 papers
arXiv:2607.06636 84 7 июля 2026 г. FREE

Specification Grounding: явные критерии вместо "проверь на ошибки"

КЛЮЧЕВАЯ СУТЬ
Парадокс: просишь модель 'найти проблемы' — она находит несуществующие в каждом третьем случае. Без явных правил модель не знает что именно автор пропустил — она угадывает. А угадывает мимо почти в 33% случаев. Метод Specification Grounding позволяет проверять любой материал так, чтобы ни одно реальное нарушение не ушло незамеченным — и без ложных тревог. Фишка: не 'найди проблемы', а 'вот список N правил — проверь каждое по очереди'. Модель перестаёт угадывать и работает по чеклисту — 33% ложных тревог падают до нуля, а реальные пропуски сокращаются в разы.
Адаптировать под запрос

TL;DR

Когда просишь LLM проверить что-либо, результат кардинально зависит от одного: есть ли у модели явный список требований или она ищет проблемы "на глаз". Дать модели конкретный список правил и попросить проверить каждое по отдельности — не просто лучше, а на порядок лучше. Это работает везде, где есть критерии оценки: код, документы, планы, тексты.

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

Решение простое: вместо "найди проблемы" — "вот список N конкретных требований, проверь каждое по очереди". Контент спецификации — вот что делает всю работу. Даже обычный абзац с требованиями лучше, чем развёрнутая инструкция "думай о крайних случаях". А структурированный список на порядок эффективнее абзаца.


🔬

Схема метода

ШАГ 1: Составить спецификацию → явный список требований (N правил)
        Можно в отдельном запросе: "Дай список критериев для [задачи]"

ШАГ 2: Передать модели спецификацию + проверяемый материал
        → Для каждого правила: найти нарушение или подтвердить соответствие
        → Вывод: конкретные нарушения с указанием правила

ШАГ 3: Исправить материал на основе найденных нарушений
        → Только целевые правки, не переписывать всё с нуля

Шаги 1 и 2 можно объединить в одном запросе, если критерии уже известны. Если нет — сначала получи список критериев, потом запускай проверку.


🚀

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

Задача: Написал коммерческое предложение для крупного клиента на 200 тыс. рублей. Хочу проверить перед отправкой — не хочу слышать "в целом хорошо", хочу знать что конкретно не так.

Промпт:

Ты — опытный менеджер по продажам, который оценивает коммерческие предложения перед отправкой клиенту.

Вот список требований к сильному КП:
1. Чётко сформулирована боль клиента — не наш продукт, а его проблема
2. Конкретный измеримый результат (цифры, сроки, единицы)
3. Объяснено ПОЧЕМУ именно мы, а не конкуренты
4. Прозрачная структура цены — клиент понимает за что платит
5. Указан конкретный следующий шаг с дедлайном
6. Нет корпоративного канцелярита ("осуществляем", "в рамках", "является")
7. Объём — не больше одной страницы A4

Проверь моё КП против каждого из этих 7 правил по очереди. Для каждого правила: статус (✅ выполнено / ⚠️ частично / ❌ нарушено) и конкретное пояснение что именно не так.

Вот КП:
[текст коммерческого предложения]

Результат:

Модель пройдёт по каждому из 7 правил отдельно. Для каждого — статус и конкретика: не "слабовато описан результат", а "в правиле 2 отсутствуют цифры — написано 'повысим эффективность', но не указано на сколько процентов и за какой срок". В конце — список именно тех мест, которые нужно переписать, с указанием правила.


🧠

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

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

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

Рычаги управления промптом: - Количество правил → 5–10 оптимально. Меньше — пропустишь важное. Больше 15 — модель начинает быть менее внимательной к каждому - Детализация правил → Чем конкретнее формулировка ("цифры и сроки" вместо "конкретика"), тем точнее проверка - Формат вывода → Добавь "выведи только нарушения" для быстрого результата или "выведи всё с объяснениями" для полного аудита - Источник правил → Правила можно взять из стандарта, методологии, чеклиста клиента — и они уже будут явными критериями


📋

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

Проверь {что проверяем} против следующего списка требований.

Требования:
1. {требование_1}
2. {требование_2}
3. {требование_3}
[... все требования]

Для каждого требования по очереди:
- Статус: ✅ выполнено / ⚠️ частично / ❌ нарушено
- Конкретное объяснение: что именно не так (если не выполнено)
- Цитата из материала, которая демонстрирует проблему (если применимо)

В конце — краткий список правок: что именно переписать и как.

Вот материал для проверки:
{текст / план / документ}

Плейсхолдеры: - {что проверяем} — "коммерческое предложение", "продуктовое ТЗ", "статью", "бизнес-план" - {требование_N} — конкретные критерии под задачу (можно попросить LLM сначала сгенерировать список) - {текст / план / документ} — сам материал для проверки


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

Вот шаблон Specification Grounding — проверки материала против явного списка критериев. 
Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

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

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


⚠️

Ограничения

⚠️ Алгоритмическая логика: Метод помогает там, где есть спецификация — чёткие требования к поведению. Для задач, где главная трудность в алгоритме ("придумай как оптимизировать..."), а не в соблюдении правил — эффект минимален или отсутствует.

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

⚠️ Ложные тревоги без спецификации: Без явных правил LLM не только пропускает реальные проблемы, но и чаще указывает на несуществующие. В исследовании — 33% ложных тревог у "проверяй края" против 0% у проверки по правилам. Правила дают модели якорь: "это нарушение правила N" вместо субъективного суждения.

⚠️ Субъективные критерии: Если правила описывают вкус или стиль ("текст должен быть живым"), модель будет менее точной, чем с объективными критериями.


🔍

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

Команда из TD Bank поставила изящный эксперимент: одна переменная, всё остальное зафиксировано. Взяли 18 задач на написание небольших функций Python. Каждую функцию генерировала LLM — и почти всегда делала правильно для обычных случаев, но забывала краевые. Дальше запускали два подхода проверки на одном и том же коде: FREE+ ("проверь граничные случаи") и SPEC (тот же тестировщик, та же модель, тот же бюджет тестов — но с явными правилами). Правильность определял независимый "золотой" тест-сьют, который модели никогда не видели.

Что удивило: удвоение количества тестов дало почти ноль (+4 пп). Объединение 8 независимых наборов "проверяй края" — не дотягивало до одного прохода по правилам. Исследователи ожидали, что количество поможет — нет. Помог только контент спецификации.

Дополнительно проверили: может, дело в формате, а не в содержании? Дали модели спецификацию одним связным абзацем (не списком) — она всё равно нашла 27 из 30 проблем. Дали только план задачи без спецификации — 2 из 30. Это ответ на вопрос "почему": модель не додумывает что автор пропустил. Ей нужно явно сказать.

Эффект воспроизвёлся на трёх семействах моделей (Claude, GPT, Gemini) и на задачах, спецификации для которых брались из публичных стандартов (RFC, CSS, ISO) — то есть исследователи не могли "подыграть" методу, придумывая удобные правила.


📄

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

SPEC arm prompt structure (from paper §3.3):
- Receives: the prose ticket + the specification enumerated into K discrete rules
- Task: write one test per rule
- Expected value: computed from the ticket/rules, never from the candidate code

FREE+ arm prompt structure (fair baseline):
- Receives: only the ticket
- Additional instruction: "cover invalid inputs and edge cases"  
- Same K tests, same tester model, same repair loop

Key ablation results (§4.2):
- Plan only (task decomposition, no spec): 2/30 bugs caught
- Spec as plain paragraph: 27/30 bugs caught  
- Spec as enumerated checklist (one test per rule): 30/30 bugs caught

Контекст: Исследователи показывают точные промпт-структуры двух comparisons — SPEC и FREE+. Разница между ними ровно одна строка: наличие спецификации как чеклиста. Аблация показывает, что не формат (список vs абзац), а именно контент спецификации несёт 90% эффекта.


💡

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

1. Адаптация: генерация спецификации перед проверкой

Если правил нет — попроси LLM их придумать, потом примени.

💡 Двухшаговый SPEC:

Шаг 1:

Я хочу проверить {что проверяем} перед финальной версией.
Составь список из 7-10 конкретных, проверяемых критериев качества для {тип материала}.
Каждый критерий должен быть объективным: можно ответить ДА или НЕТ.

Шаг 2: используй полученный список в основном шаблоне проверки.


2. Техника: "SPEC для оппонента"

🔧 Используй требования клиента/аудитории как спецификацию → проверка с их позиции

Вместо своих критериев — явные возражения или требования другой стороны:

Вот список типичных возражений инвестора на питч-сессии в России:
1. Рынок слишком маленький — меньше 1 млрд рублей
2. Нет защиты от копирования крупным игроком (Яндекс, Сбер)
3. Юнит-экономика не сходится при масштабировании
4. Команда без опыта в этой индустрии
5. Зависимость от одного канала привлечения клиентов

Проверь мой питч против каждого возражения. Для каждого: закрыто ли оно в питче и насколько убедительно?

3. Экстраполяция: SPEC + итеративное улучшение

Стандартный SPEC — проверка и список правок. Можно добавить петлю исправления:

[Промпт SPEC-проверки]

После проверки: исправь все пункты со статусом ❌ и ⚠️.
Выведи исправленную версию и список изменений.
Потом пройди по списку требований ещё раз — убедись, что все ❌ стали ✅.

Это аналог repair loop из исследования — только в одном диалоге. LLM сначала находит нарушения, потом чинит, потом перепроверяет себя.


🔗

Ресурсы

Статья: "Specification Grounding Drives Test Effectiveness for LLM Code"

Авторы: Amin Haeri, Mahdi Ghelichi — Model Development Innovation, TD Bank, Toronto, Canada

Контакты: amin.haeri@td.com, mahdi.ghelichi@td.com

Связанные работы, упомянутые в статье: - AlphaCodium (Ridnik et al., 2024) — итеративная генерация кода с тестами - Self-Refine (Madaan et al., 2023) — самокоррекция LLM - Reflexion (Shinn et al., 2023) — итерация на основе обратной связи - EvalPlus (Liu et al., 2023) — расширенные тест-сьюты для оценки кода - TiCoder (Lahiri et al., 2022) — формализация намерения через тесты с участием человека


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

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

Парадокс: просишь модель 'найти проблемы' — она находит несуществующие в каждом третьем случае. Без явных правил модель не знает что именно автор пропустил — она угадывает. А угадывает мимо почти в 33% случаев. Метод Specification Grounding позволяет проверять любой материал так, чтобы ни одно реальное нарушение не ушло незамеченным — и без ложных тревог. Фишка: не 'найди проблемы', а 'вот список N правил — проверь каждое по очереди'. Модель перестаёт угадывать и работает по чеклисту — 33% ложных тревог падают до нуля, а реальные пропуски сокращаются в разы.

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

Стандартный запрос 'проверь на ошибки' — это запрос к модели решить ЧТО проверять. Она берёт то, что сама считает важным. Если автор забыл указать граничный случай — модель не видит эту дыру. Её картина 'что бывает обычно' не совпадает с тем, что именно здесь забыли. Specification Grounding превращает один размытый запрос на проверку в N отдельных — по одному правилу каждая. Модель не выбирает — она проходит список. Неочевидный случай ('а что если пустая строка?') становится явным ('правило 4: обработка пустого ввода'). Пропустить невозможно. Структурированный список работает лучше абзаца с теми же требованиями — каждый пункт изолирован и не тонет в соседях.

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

Модель без критериев — как редактор которому сказали 'посмотри текст'. Смотрит на то, что сам считает важным. Проблема в том, что его картина 'что обычно бывает' не совпадает с тем, что конкретно здесь забыли написать. С явным списком каждое нарушение привязано к конкретному правилу — не к субъективному суждению. Это убирает сразу две проблемы: пропуски (есть правило — есть проверка) и ложные тревоги (нет правила — нет сигнала). Без якоря модель сигналит о 'проблемах' которых нет. С правилом — либо нарушение есть, либо нет.

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

Везде, где есть критерии оценки → проверка кода на соответствие стандартам, аудит договоров и документов, оценка коммерческих предложений, ревью статей по редполитике — особенно когда важно не услышать 'в целом хорошо', а узнать что конкретно не так. Не подходит для задач где главная трудность — придумать алгоритм ('как оптимизировать поиск'), а не проверить соответствие уже известным правилам. Там спецификация не поможет.

Мини-рецепт

1. Составь список правил: Конкретные формулировки — не 'хороший текст', а 'каждый абзац начинается с тезиса, который объясняется дальше'. Нет готовых правил — попроси модель: Дай список критериев для проверки [тип материала]

2. Передай материал и правила вместе: Покажи что проверяем и весь список. 5–10 правил — оптимально. Больше 15 — внимание к каждому падает.

3. Попроси проверить по очереди: Для каждого правила — статус (выполнено / частично / нарушено) и конкретная цитата из материала, которая показывает проблему.

4. Уточни формат вывода под задачу: Хочешь быстро — добавь выведи только нарушения. Хочешь полный аудит — выведи всё с объяснениями и цитатами.

Примеры

[ПЛОХО] : Проверь это техническое задание — нет ли там проблем
[ХОРОШО] : Проверь ТЗ против этих 6 правил: 1. Каждая функция имеет чёткий критерий приёмки 2. Нет размытых требований типа 'быстро' без цифр 3. Описана обработка ошибок для каждого сценария 4. Указаны зависимости между модулями 5. Сроки привязаны к конкретным этапам 6. Есть раздел с ограничениями и исключениями Для каждого правила — статус (выполнено / частично / нарушено) и цитата из ТЗ, которая подтверждает или опровергает. [текст ТЗ]
Источник: Specification Grounding Drives Test Effectiveness for LLM Code
ArXiv ID: 2607.06636 | Сгенерировано: 2026-07-09 04:30

Проблемы LLM

ПроблемаСутьКак обойти
Без явных правил модель пропускает именно неочевидные проблемыПросишь "найди что не так". Модель проверяет то, что сама считает важным. Очевидные вещи находит. Неочевидные — пропускает. Причём промахивается ровно там, где автор тоже что-то упустил.模ель не телепат — она не знает что именно автор забыл указать. Угадывает — и угадывает правильно примерно в половине случаевДай явный список требований. Не "проверь на ошибки" — а "вот 7 конкретных правил, проверь каждое по очереди". Если правил нет — сначала попроси модель их сгенерировать для твоей задачи

Методы

МетодСуть
Явный список критериев — проверка каждого по очередиСоставь список конкретных требований: 5–10 пунктов. Передай модели: "Для каждого требования — статус ✅/⚠️/❌ и что именно не так". Почему работает: каждое правило становится отдельным заданием. Модель не выбирает что проверять — она проверяет всё. Неочевидный случай ("а что если пустой ввод?") становится явным пунктом — пропустить нельзя. Когда да: есть критерии оценки — код, документ, план, текст, КП. Когда нет: задача творческая или алгоритмическая — правил нет, только "придумай как лучше"

Тезисы

ТезисКомментарий
Явные правила убирают ложные тревогиБез правил модель выносит субъективное суждение: "здесь слабовато", "это сомнительно". Треть таких замечаний — ложная тревога: реальной проблемы нет. С явными правилами модель говорит "нарушено правило 4". Правило — якорь. Либо нарушено, либо нет. Субъективность пропадает. Применяй: если получаешь размытые замечания — добавь конкретный список правил и перезапусти проверку
📖 Простыми словами

Specification Grounding Drives Test Effectiveness forLLMCode

arXiv: 2607.06636

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

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

Суть метода проста как кирпич: нужно дать модели конкретные спецификации и заставить её прогнать объект через каждую из них по отдельности. Вместо абстрактного «проверь этот код», ты даешь список: «1. Есть ли обработка ошибок? 2. Соблюдены ли лимиты памяти? 3. Названы ли переменные по стандарту?». Модель должна выдать отчет по каждому пункту. Цифры говорят сами за себя: такой подход делает тесты на порядок эффективнее, превращая бесполезное «ок» в детальный аудит, который реально находит баги.

Хотя ученые мучили этот метод на коде, принцип универсален. Это работает для юридических договоров, маркетинговых стратегий и даже планов на отпуск. Если ты просишь ChatGPT оценить твое коммерческое предложение, не жди чуда от общей фразы. Дай ей список условий: «проверь, указаны ли сроки, есть ли призыв к действию и не слишком ли мы заискиваем перед клиентом». Только так ты получишь реальный фидбек, а не вежливую отписку, которая стоит тебе контракта.

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

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

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

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