Не просите LLM «проверить себя»!
Дайте ей чек-лист из трёх правил. Вы когда-нибудь просили ChatGPT извлечь все связи из годового отчёта, а в ответ получали список фактов, где одно противоречит другому? «Компания А владеет Б», а через пару строк — «Б владеет В», но про связь А→В ни слова. Или у одной компании вдруг два разных владельца. Проблема: LLM генерирует каждый факт изолированно, не оглядываясь назад. А общая просьба «проверь на ошибки» работает плохо — модель не знает, какие именно противоречия искать. Решение — CONSISTRE. Вместо абстрактной самопроверки вы даёте модели три чётких, проверяемых правила и заставляете её пройти по ним циклом: Транзитивность: если А→В и В→С, то должна быть А→С (прямая или через цепочку). Симметрия: если «А владеет Б», то должно логически следовать «Б принадлежит А» (обратная связь). Уникальность: у одного объекта не может быть двух разных значений одного признака (например, двух разных владельцев). Как это выглядит на практике (пример): Вы разбираете отчёт агрохолдинга с десятком «дочек». Промпт содержит: сам текст отчёта; требование извлечь факты в формате [Компания-владелец] – владеет – [Компания]; после списка — явное указание проверить его по трём правилам с конкретными формулировками. Модель выдаёт: первичный список фактов; отдельный блок с найденными нарушениями (какое правило, какие факты); исправленный итоговый список (противоречия устранены или явно помечены). Цикл повторяется, пока нарушений не останется или не достигнут лимит итераций. И всё это — в одном диалоге, без кода и API. Почему это работает? LLM отлично справляется с локальными сравнениями двух фактов по конкретному правилу, но проваливается на абстрактной задаче «найди ошибку где-то в тексте». CONSISTRE превращает нечёткую самопроверку в три механических, алгоритмизированных шага — модель не гадает, а идёт по чек-листу. Рычаги управления: можно добавить свои правила (например, «дата события не раньше даты рождения»); регулировать число итераций (для короткого документа — 1 круг, для длинного — 2–3); выбирать, показывать промежуточные шаги или только финальный список. ⚠️ Важные ограничения: Метод работает только для логически связанных фактов. Если ваши данные — набор случайных заметок без внутренней структуры, правила транзитивности и симметрии не применить. Правила нужно формулировать самостоятельно. CONSISTRE не ищет противоречия «вообще» — он проверяет только то, что вы явно описали. Лишние итерации просто тратят токены и время — для десятка фактов хватит одного круга. Как исследовали? Авторы (Mingxuan Sun и коллеги, Université de Sherbrooke) тестировали метод на бенчмарке DocRED — стандартном датасете для извлечения отношений из документов. Сравнивали обычный промптинг (без проверки) с CONSISTRE. Результат: явный чек-лист из 2–3 правил даёт больше найденных и исправленных ошибок, чем абстрактная просьба «проверь себя». Главный вывод для практики: Не просите LLM «проверить всё на всякий случай» — дайте ей конкретный алгоритм проверки. Три простых правила (цепочки, обратная связь, уникальность) + итеративное исправление превращают хаотичный список фактов в надёжную, непротиворечивую структуру. 📌 Шаблон (адаптируйте под свою задачу): Вот текст: {документ} Извлеки факты о {тип отношений} в формате: [Объект1] – {связь} – [Объект2] После составления списка проверь по правилам: ЦЕПОЧКИ: если А связано с В и В связано с С – должна быть А→С. ОБРАТНАЯ СВЯЗЬ: если А→В, то верно и В→А. ЕДИНСТВЕННОСТЬ: у объекта не может быть двух разных значений признака. Выведи: 1) найденные нарушения, 2) исправленный итоговый список. arXiv: 2607.24312