LLM-ловушка: почему «решить» ≠ «проверить»
**Суть метода** LLM отлично решают «чистые» юридические и налоговые задачи, но при получении противоречивых входных данных они не отказываются от ответа, а уверенно выдают ошибочный результат, игнорируя конфликт. Однако если ту же самую модель попросить не «решить» задачу, а «проверить» ввод на непротиворечивость, она успешно обнаруживает большинство противоречий. Метод **Contradiction Gate** (ворота противоречий) использует это: один дополнительный запрос-верификатор перед основным вычислением, который принудительно прерывает процесс (возвращает `null`), если найден конфликт. Это работает без дообучения и внешних инструментов. **Как это работает** 1. **Верификатор**: Модель получает текст и строгий промпт с выбором из трёх вариантов: `none` (всё ок), `missing` (не хватает данных), `contradiction` (факты противоречат друг другу). 2. **Решатель**: Если верификатор вернул `none` или `missing`, модель решает задачу штатно. 3. **Гейт**: Если верификатор вернул `contradiction`, система игнорирует ответ решателя и принудительно возвращает `null` (безопасный отказ от ответа). **Пример применения** - *Ввод*: «Алиса заработала $39 212. Алиса и Боб подали декларацию совместно. Алиса и Боб подали декларацию раздельно». - *Решатель (без гейта)*: «$6 621» (модель игнорирует конфликт и считает по умолчанию). - *Верификатор*: «contradiction» (фиксирует явный конфликт статусов подачи). - *Результат с гейтом*: `null` (система безопасно отказалась от расчёта). **Шаблон промпта для копирования** ```text Ты — эксперт по проверке данных. Проанализируй следующий текст и вопрос. Достаточно ли фактов и являются ли они внутренне непротиворечивыми для ответа? Ответь ТОЛЬКО валидным JSON с одним ключом "status" и строго одним из трёх значений: - "none" (фактов достаточно, противоречий нет) - "missing" (не хватает ключевых данных для ответа) - "contradiction" (в тексте есть прямые логические противоречия) Текст: {input_text} Вопрос: {question} ``` **Границы применимости** - **Полезно**: как дешёвый и быстрый первый фильтр для юридических, налоговых и compliance-систем, где входные данные от пользователей часто содержат прямые логические нестыковки (например, «женат» и «холост» одновременно). - **Бесполезно/вредно**: для выявления «опровержимых» (defeasible) противоречий, требующих глубокого контекста (например, «есть ребёнок» vs «нет иждивенцев» — ребёнок не всегда иждивенец). Точность детекции здесь падает до 30–59%. Также метод даёт 0–5% ложных срабатываний на чистых данных, немного снижая общую пропускную способность. **Ключевые выводы из экспериментов** - Топовые модели решают чистые задачи с точностью 89–97%. - При добавлении противоречия они отказываются от ответа лишь в 0–15% случаев, а в 63–76% случаев уверенно выдают ответ, как будто противоречия нет. - Та же модель в роли верификатора находит 75–83% этих скрытых противоречий. - Внедрение Contradiction Gate возвращает 70–83% безопасных отказов, снижая точность на чистых данных всего на 0–5.1 п.п. - Обычная self-consistency (множественная генерация с оценкой расхождений) работает хуже: находит только 11–35% противоречий. Исследование https://arxiv.org/html/2609.05928v1 Поддержать проект донатом: Сбер 2202 2084 9881 5282. Заранее спасибо.