3,583 papers
arXiv:2609.05928 84 5 сент. 2026 г. FREE

Contradiction Gate: отдельный запрос-проверка, который ловит противоречия, пропущенные при решении задачи

КЛЮЧЕВАЯ СУТЬ
Обнаружено: LLM ловит 75-83% противоречий в условии — но только если её попросить проверить данные, а не решить задачу. Метод Contradiction Gate позволяет отловить эти скрытые конфликты в фактах раньше, чем ложный ответ уйдёт пользователю. Фишка — второй запрос переключает модель из режима расчёта в режим сверки фактов, и это меняет всё: без переключения модель хватается за один факт из двух конфликтующих и в 63-76% случаев выдаёт уверенное число, как будто данные чистые.
Адаптировать под запрос

TL;DR

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

Главная находка: LLM отличает "не хватает данных" от "данные противоречат друг другу", и ведёт себя с ними по-разному. Если в условии не хватает факта — модель почти всегда честно отказывается отвечать. Но если в условии два факта противоречат друг другу (например: "супруги подают декларацию совместно" и через предложение — "супруги подают декларацию раздельно"), модель это не замечает. Она хватается за один из фактов и уверенно выдаёт число — в 63-76% случаев тот самый ответ, который получился бы на чистых, непротиворечивых данных. Никакого сигнала, что что-то не так.

Решение неожиданно простое: та же самая модель, если её попросить не решить, а проверить входные данные, находит 75-83% этих же противоречий. Значит, модель умеет их видеть — просто не смотрит на них, когда занята расчётом. Технику собирают в два шага: (1) решить задачу как обычно, (2) отдельным запросом спросить модель "нет ли противоречий во входных фактах", и если она отвечает "да" — заменить ответ первого шага на отказ.

🔬

Схема метода

ШАГ 1 (запрос 1): Реши задачу на основе данных → число ИЛИ "не могу ответить"
ШАГ 2 (запрос 2, отдельно, та же модель): Проверь эти же данные на полноту 
и внутреннюю согласованность → метка: "всё ок" / "не хватает данных" / "есть противоречие"
ШАГ 3 (логика поверх): Если ШАГ 2 = "есть противоречие" → 
      заменить ответ ШАГА 1 на отказ, независимо от того, что там было

Шаги 1 и 2 — это два отдельных запроса (в исследовании — два отдельных вызова API с одинаковым контекстом). В обычном чате это два сообщения или два отдельных чата с одинаковыми исходными данными.

🚀

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

Задача: Вы — фрилансер-проектный менеджер. Клиент присылает бриф на разработку сайта. В брифе противоречие: в начале клиент пишет "бюджет 80 000 рублей, простой лендинг на одну страницу", а в конце — "нужны также раздел с каталогом на 200 товаров и личный кабинет". Вы просите ChatGPT посчитать смету, и модель, скорее всего, просто посчитает смету по одной из версий требований, не заметив конфликт.

Промпт (запрос 1 — решение):

Ты — опытный проектный менеджер веб-разработки. Вот бриф от клиента:

«Бюджет 80 000 рублей, нужен простой лендинг на одну страницу.
Также нужны раздел с каталогом на 200 товаров и личный кабинет пользователя.»

Посчитай примерную стоимость и сроки разработки на основе этого брифа.
Если данных недостаточно для расчёта — напиши «не могу рассчитать».

Промпт (запрос 2 — проверка, отдельным сообщением или в новом чате):

Проверь этот бриф от клиента на внутреннюю согласованность:

«Бюджет 80 000 рублей, нужен простой лендинг на одну страницу.
Также нужны раздел с каталогом на 200 товаров и личный кабинет пользователя.»

Есть ли в этом брифе факты, которые противоречат друг другу
(например, разный объём работ, разные бюджеты, разные сроки)?
Ответь одним из трёх вариантов:
1) «всё согласовано»
2) «не хватает данных» — укажи каких
3) «есть противоречие» — назови конкретно, какие два факта конфликтуют

Результат: В первом запросе модель скорее всего молча посчитает смету — например, под "простой лендинг" — и не упомянёт, что каталог на 200 товаров и личный кабинет туда явно не влезают при таком бюджете. Во втором запросе, скорее всего, модель прямо назовёт конфликт: "простой лендинг на одну страницу" не сочетается с "каталог на 200 товаров и личный кабинет" при бюджете 80 000 рублей. Увидев эту метку — вы отбрасываете смету из первого запроса и возвращаетесь к клиенту с уточнением, а не с ложно-уверенной цифрой.

🧠

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

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

Но сильная сторона модели — она отлично умеет находить несоответствия, если её явно попросить сравнить факты друг с другом, а не считать. Формулировка "проверь, нет ли противоречий" — это другая задача с другим фокусом внимания, и в этом режиме модель находит конфликт в 75-83% случаев — почти так же хорошо, независимо от того, насколько сильна модель в математике.

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

Рычаги управления: - Метки проверки (всё ок / не хватает / противоречие) → можно расширить под свою задачу, например добавить неоднозначность формулировки - Формулировка проверочного вопроса → чем конкретнее (например, "сравни цифры бюджета в разных частях текста"), тем выше шанс поймать конфликт - Что делать при срабатывании гейта → в исследовании это жёсткий отказ, но можно заменить на "покажи оба варианта расчёта" вместо полного отказа

📋

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

ЗАПРОС 1 (решение):
Ты — {роль эксперта}. Вот входные данные:

«{данные/бриф/условие задачи}»

{конкретное задание — посчитай/реши/сделай вывод}.
Если данных недостаточно для ответа — напиши «не могу ответить».

---

ЗАПРОС 2 (проверка, отдельным сообщением):
Проверь эти же входные данные на внутреннюю согласованность:

«{те же данные/бриф/условие задачи}»

Есть ли в них факты, которые противоречат друг другу?
Ответь одним из трёх вариантов:
1) «всё согласовано»
2) «не хватает данных» — укажи каких именно
3) «есть противоречие» — назови конкретно, какие два факта конфликтуют

---
Если ответ на ЗАПРОС 2 — «есть противоречие», не используй ответ 
из ЗАПРОСА 1. Вместо этого сообщи, что данные противоречивы, 
и укажи, что именно нужно уточнить.

Что подставлять: {роль эксперта} — под кого маскируется модель (бухгалтер, юрист, проектный менеджер), {данные/бриф/условие задачи} — исходный текст с фактами, {конкретное задание} — что именно нужно посчитать или решить.

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

Вот шаблон техники "Contradiction Gate" — двух-шаговая проверка данных 
на противоречия перед тем, как доверять ответу модели. 
Адаптируй под мою задачу: {твоя задача}. 
Задавай вопросы, чтобы заполнить поля.

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

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

⚠️

Ограничения

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

⚠️ Ложные срабатывания: проверочный запрос иногда находит "противоречие" там, где его нет, и отбрасывает верный ответ. В исследовании это стоило до 5 процентных пунктов точности на чистых данных.

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

⚠️ Одна и та же модель для решения и проверки: если у модели есть "слепое пятно" — она может не увидеть один и тот же тип ошибки в обоих режимах. Использовать разные модели для решения и проверки не проверялось, но потенциально надёжнее.

🔍

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

Исследователи взяли 91 налоговый кейс из известного юридического бенчмарка SARA (расчёт налога по реальному кодексу США) и создали два вида "порченых" версий: в одних убрали нужную цифру (например, доход), в других — вставили противоречащее утверждение о категориальном факте (например, "подают совместно" рядом с "подают раздельно"). Проверили шесть свежих моделей — GPT-5 mini, GPT-5.2, Claude Sonnet 4.6, Qwen3.7-Plus, Kimi K2.5, Gemini 2.5 Flash — каждую по три прогона для надёжности.

Каждую модель просили либо решить задачу (число или отказ), либо отдельно — проверить входные данные на противоречия. Оказалось, что при нехватке факта модели почти всегда честно отказываются отвечать. А при противоречии — четыре самые точные модели отказывались в 0-15% случаев и в 63-76% случаев тупо выдавали ответ, как если бы конфликта не было. Но те же модели, спрошенные "проверь данные", находили конфликт в 75-83% случаев.

Любопытная деталь: модели с "цепочкой рассуждений" (то есть те, что "думают" перед ответом) не оказались лучше в поиске противоречий, чем модели без такого режима — значит, дело не в глубине рассуждений, а в том, на что модель направляет внимание при формулировке задачи "посчитай" против "проверь". Из этого и родился Contradiction Gate — простой способ заставить модель посмотреть на данные вторым взглядом, прежде чем доверять первому ответу.

🔗

Ресурсы

Solving versus Verifying: Catching Contradictions in Tax Reasoning Systems, Albert Sadowski, Jarosław A. Chudziak, Warsaw University of Technology. Датасет и код: доступны публично на Zenodo (doi.org/10.5281/zenodo.22329077). Использован бенчмарк SARA / LegalBench (Holzenberger et al., 2020; Guha et al., 2023).


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

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

Обнаружено: LLM ловит 75-83% противоречий в условии — но только если её попросить проверить данные, а не решить задачу. Метод Contradiction Gate позволяет отловить эти скрытые конфликты в фактах раньше, чем ложный ответ уйдёт пользователю. Фишка — второй запрос переключает модель из режима расчёта в режим сверки фактов, и это меняет всё: без переключения модель хватается за один факт из двух конфликтующих и в 63-76% случаев выдаёт уверенное число, как будто данные чистые.

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

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

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

Пока модель считает, всё внимание уходит на арифметику — она берёт факты по порядку и не сверяет их друг с другом. Это как считать в столбик, не заметив, что в условии два раза указан разный возраст персонажа. Но стоит спросить прямо "сравни факты между собой" — фокус переключается, и модель находит конфликт в 75-83% случаев, почти одинаково хорошо независимо от того, насколько она сильна в математике. Расчёт и проверка — это две разные задачи для модели, и смешивать их в одном запросе мешает увидеть очевидное.

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

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

Мини-рецепт

1. Реши как обычно: отправь задачу первым запросом, попроси число или явный отказ, если данных не хватает.
2. Проверь отдельно: тем же данным задай второй, отдельный запрос — не "посчитай", а "сравни факты между собой на противоречия".
3. Дай три варианта ответа проверке: всё согласовано / не хватает данных / есть противоречие — так модель не сваливается в невнятное "возможно".
4. Поставь фильтр сверху: если проверка сказала "противоречие" — выбрось ответ из первого запроса, каким бы уверенным он не выглядел.

Примеры

[ПЛОХО] : Посчитай смету по брифу: бюджет 80 000 рублей, простой лендинг на одну страницу, плюс каталог на 200 товаров и личный кабинет
[ХОРОШО] : Запрос 1 — Посчитай смету по этому брифу. Если данных не хватает — напиши "не могу рассчитать". Отдельным сообщением запрос 2 — Проверь этот же бриф на противоречия: назови конкретно, какие два факта конфликтуют, если такие есть. Второй запрос честно скажет: бюджет под простой лендинг не совместим с каталогом на 200 товаров и личным кабинетом — и вы уточните у клиента, а не отправите ложную смету.
Источник: Solving versus Verifying: Catching Contradictions in Tax Reasoning Systems
ArXiv ID: 2609.05928 | Сгенерировано: 2026-09-09 04:22

Проблемы LLM

ПроблемаСутьКак обойти
Модель не замечает противоречия в входных данных, когда занята решением задачиЕсли в условии не хватает факта — модель почти всегда честно отказывается отвечать. Но если два факта в условии противоречат друг другу — модель это не замечает. Хватается за один из фактов и уверенно выдаёт ответ. Никакого сигнала, что что-то не так. Работает для любых задач с входными фактами: расчёты, юридические условия, брифы, технические требованияРазбей задачу на два отдельных запроса к той же модели. Первый — решить задачу. Второй — отдельно спросить "нет ли противоречий в этих данных". Если второй запрос находит конфликт — отбрось ответ первого

Методы

МетодСуть
Contradiction Gate — отдельный запрос-фильтр перед выдачей ответаДелай два отдельных запроса с одинаковыми исходными данными. Запрос 1: "реши задачу, или напиши 'не могу ответить' если данных не хватает". Запрос 2 (отдельно): "проверь эти же данные — есть ли противоречия между фактами?" с тремя вариантами ответа: всё согласовано / не хватает данных / есть противоречие. Если запрос 2 вернул "противоречие" — не используй ответ из запроса 1, сообщи пользователю о конфликте. Почему работает: при решении внимание модели уходит на вычисление, факты не сверяются между собой. При прямой просьбе "сравни факты" внимание переключается на сверку, и модель находит конфликт в 75-83% случаев. Когда применять: входные данные — текст от человека (бриф, условие, письмо), где могут быть внесённые правки или противоречивые уточнения. Когда не работает: числовые противоречия (два разных значения одной суммы) модель часто читает как "уточнение", а не конфликт — гейт здесь слабее

Тезисы

ТезисКомментарий
Модель различает "не хватает данных" и "данные конфликтуют" — но реагирует на них по-разномуНехватку факта модель ловит почти всегда и честно отказывается отвечать. А вот противоречие между двумя фактами — пропускает, потому что фокус внимания при решении заточен на "взять факт и посчитать", а не на "сравнить факты друг с другом". Смена формулировки задачи с "посчитай" на "проверь на согласованность" переключает модель в другой режим — режим сравнения, где она находит те же конфликты в разы чаще. Применяй: не полагайся на то, что модель сама заметит противоречие во время решения. Спроси её об этом отдельно, явно и другим вопросом
📖 Простыми словами

Solving versus Verifying: Catching Contradictions in Tax Reasoning Systems

arXiv: 2609.05928

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

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

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

Фишку тестировали на сложном налоговом законодательстве, но принцип универсален. Ровно та же беда всплывает в клиентских брифах, когда просят «простой лендинг за 80 000 рублей», а в конце невзначай добавляют личный кабинет и каталог на 200 товаров. Без жёсткого фильтра противоречий модель молча выберет случайную ветку условий и выдаст тебе кривую смету.

Перестань надеяться, что AI сам заметит лажу в твоём промпте или ТЗ: разделяй решение и верификацию на два шага. Метод Contradiction Gate сжигает чуть больше токенов, но моментально отсекает бред на входе. Либо ты настраиваешь автоматический аудит условий, либо потом руками разгребаешь галлюцинации и пробитые бюджеты.

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

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

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