3,583 papers
arXiv:2607.24312 79 27 июля 2026 г. FREE

CONSISTRE: LLM проверяет сама себя на логические противоречия по трём конкретным правилам

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

TL;DR

CONSISTRE — метод, который заставляет LLM не просто извлекать факты из большого текста, а сверять их между собой по трём конкретным логическим правилам: если A связано с B, а B с C — должна быть связь A с C (транзитивность), если A владеет B — B должен быть "во владении" A (симметрия), у одного объекта не может быть двух разных значений одного и того же признака (уникальность). Модель сначала выдаёт список фактов, потом проверяет его по этим трём правилам, находит конкретные нарушения и переписывает список — и так несколько раз, пока противоречий не останется.

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

CONSISTRE решает это не общей просьбой проверить себя, а тремя конкретными, проверяемыми правилами. Модель получает не "найди ошибки", а точный алгоритм сравнения: пройди по цепочкам А→Б→В и проверь, есть ли А→В; пройди по парным отношениям и проверь обратную связь; пройди по уникальным признакам и проверь, нет ли дублей. Если находит нарушение — говорит модели конкретно, какое, и просит исправить именно его.


🔬

Схема метода

ШАГ 1 (промпт 1): Документ + список сущностей + явные формулировки трёх правил консистентности 
    → LLM выдаёт первый набор фактов-триплетов (структурированный, машиночитаемый формат)

ШАГ 2 (можно в том же или отдельном промпте): Проверка набора фактов по трём правилам
    → список конкретных нарушений с указанием, какое правило и какие факты нарушены

ШАГ 3 (если нарушения есть — отдельный запрос): 
    Модель получает точную формулировку нарушения ("цепочка A→B, B→C подразумевает A→C, но её нет")
    → пересмотренный набор фактов

ПОВТОР шагов 2-3, пока нарушений не останется или не достигнут лимит итераций

Все шаги можно делать в одном длинном диалоге с LLM — без API и кода.


🚀

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

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

Промпт:

Вот текст отчёта холдинга: {текст отчёта}

Извлеки из текста все факты о владении компаниями в формате:
[Компания-владелец] — владеет — [Компания]

После того как составишь список, проверь его по трём правилам:

1. ТРАНЗИТИВНОСТЬ: если А владеет Б, и Б владеет В — 
   должно быть указано, что А (через Б) связано с В. 
   Проверь все такие цепочки.

2. СИММЕТРИЯ: если сказано "А владеет Б", 
   должно логически следовать "Б принадлежит А" — 
   найди случаи, где одно из утверждений противоречит другому.

3. УНИКАЛЬНОСТЬ: у одной компании не может быть двух разных 
   контролирующих владельцев одновременно (если явно не указано 
   совместное владение) — найди дубликаты и противоречия.

Выведи: список найденных нарушений (если есть) → исправленный итоговый список фактов.

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


🧠

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

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

Зато LLM хорошо справляется с точечной, конкретной проверкой, если дать ей ясное правило и конкретную пару фактов для сравнения. Сравнить два факта на соответствие правилу — это простая, локальная задача, с которой модель справляется намного увереннее, чем с абстрактным "найди ошибку где-то в тексте".

Метод превращает нечёткую задачу самопроверки в три чёткие, механические проверки. Это и убирает двусмысленность — модель не гадает, что от неё хотят, а проходит по конкретному чек-листу.

Рычаги управления: - Число правил — можно добавить свои (например, "если событие произошло раньше даты рождения — ошибка") или убрать неприменимые. - Число итераций рефлексии — для короткого документа хватит одного круга проверки, для длинного может понадобиться 2-3. - Формат вывода — можно попросить показывать промежуточные шаги проверки (для контроля) или только финальный список (для скорости).


📋

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

Вот текст: {документ}

Извлеки из текста факты о {тип отношений} в формате:
[Объект 1] — {тип связи} — [Объект 2]

После составления списка проверь его по правилам:

1. ЦЕПОЧКИ: если {A связано с B} и {B связано с C} — 
   должно логически следовать {A связано с C}. Найди пропущенные связи.

2. ОБРАТНАЯ СВЯЗЬ: если {A связано с B каким-то образом} — 
   должно быть верно и обратное утверждение {B связано с A}. 
   Найди противоречия.

3. ЕДИНСТВЕННОСТЬ: у {объекта} не может быть двух разных значений 
   {признака} одновременно. Найди дубликаты.

Выведи:
1) Найденные нарушения (с указанием правила и конкретных фактов)
2) Исправленный итоговый список

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

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

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

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


⚠️

Ограничения

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

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

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


🔍

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

Исследователи проверяли метод на DocRED — стандартном бенчмарке для извлечения отношений из документов, где нужно найти связи между десятками сущностей в длинном тексте. Сравнивали обычный промптинг (модель просто выдаёт список фактов без проверки) с версией, где добавлены явные правила консистентности и цикл "проверка → исправление". Дополнительно авторы обучали отдельные маленькие модели через fine-tuning и подкрепление (это уже не для чата — там нужен код и датасеты), но нас интересует именно первая часть.

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


🔗

Ресурсы

CONSISTRE: A Unified Consistency-Aware Framework for Document-Level Relation Extraction with Large Language Models. Mingxuan Sun, Université de Sherbrooke, Canada. IEEE/ACM Transactions on Audio, Speech, and Language Processing.


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

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

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

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

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

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

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

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

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

Мини-рецепт

1. Сформулируй правила: выбери из трёх (цепочки, обратная связь, уникальность) те, что подходят твоим фактам — не все три обязательны.
2. Извлеки факты: попроси LLM выдать список в строгом формате [объект] — [связь] — [объект].
3. Прогони проверку: дай модели те же правила и попроси найти конкретные нарушения с указанием, какое правило и какие факты задеты.
4. Исправь и повтори: если нарушения найдены — попроси переписать список, повтори проверку 1-3 раза для длинных документов.

Примеры

[ПЛОХО] : Проверь этот список фактов на ошибки
[ХОРОШО] : Проверь список по правилу транзитивности: если А владеет Б, и Б владеет В — должна быть связь А-В. Найди все цепочки, где это нарушено, укажи конкретные факты и предложи исправление
Источник: CONSISTRE: A Unified Consistency-Aware Framework for Document-Level Relation Extraction with Large Language Models
ArXiv ID: 2607.24312 | Сгенерировано: 2026-07-28 06:29

Проблемы LLM

ПроблемаСутьКак обойти
Модель теряет согласованность фактов в длинном текстеМодель генерирует каждый факт отдельно, не сверяя с предыдущими. В итоге факт номер 5 может противоречить факту номер 50 — модель "забыла" что писала раньше. Это ломается на любой задаче, где нужно извлечь много связанных фактов из большого документаДай модели три конкретных правила проверки: цепочки связей (если AB и BC, должно быть AC), обратные связи (если A связано с B, должно быть верно и обратное), уникальность признака (у объекта не может быть двух разных значений одного свойства). Попроси пройтись по списку фактов и найти нарушения именно по этим правилам
Просьба "проверь на ошибки" не работаетСпрашиваешь модель "проверь список фактов на ошибки" — получаешь поверхностную проверку или вообще ничего. Задача слишком общая: модель не знает что именно искать среди десятков фактовЗамени общую просьбу на конкретный алгоритм сравнения: "сравни факт X с фактом Y по правилу Z". Дай точный критерий нарушения, а не абстрактное "найди ошибку"

Методы

МетодСуть
Проверка фактов по трём логическим правилам вместо общей просьбы "найди ошибки"Модель сначала выдаёт список фактов-триплетов (объект — связь — объект). Затем проходит по списку с тремя конкретными фильтрами: цепочки (AB, BC AC), обратная связь (A связано с B B связано с A), уникальность (у объекта один признак — одно значение). Найденные нарушения формулируются конкретно ("факты X и Y противоречат правилу Z"), модель переписывает список. Повторяй 1-3 раза, пока нарушений не останется. Почему работает: сравнить два факта по конкретному правилу — простая локальная задача, с ней модель справляется намного лучше, чем с расплывчатым "найди ошибку где-то в тексте". Когда применять: факты логически связаны между собой (иерархии, отношения владения, семейные связи, причинно-следственные цепочки). Когда не работает: факты независимы друг от друга (случайные заметки без внутренней структуры) — правилам нечего проверять
📖 Простыми словами

CONSISTRE: A Unified Consistency-Aware Framework for Document-Level Relation Extraction withLargeLanguageModels

arXiv: 2607.24312

Проблема в том, что LLM при чтении длинных текстов ведут себя как золотые рыбки: они выцепляют факты по одному, но напрочь забывают, что сказали абзацем выше. В итоге модель может одновременно утверждать, что компания А владеет компанией Б, а через страницу заявить, что они вообще не связаны. Это происходит потому, что нейронка генерирует текст последовательно и не имеет встроенного механизма логической сверки всей картины целиком. Метод CONSISTRE исправляет этот баг, заставляя модель работать не как простой читатель, а как дотошный следователь, который ищет нестыковки в показаниях.

Это как собирать гигантский пазл, где детали вроде бы подходят по цвету, но не складываются в общую картинку. Обычная LLM просто наваливает кучу деталей в одну кучу и говорит: «Готово!». CONSISTRE же берет этот хаос и начинает проверять каждый стык: если эта деталь синяя, а та красная, они не могут быть частью одного неба. Это не просто просьба «проверь себя», которая обычно не работает, а жесткий алгоритм перекрестной проверки по конкретным правилам логики.

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

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

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

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

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

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