3,583 papers
arXiv:2512.09957 74 9 дек. 2025 г. FREE

Fault Localization-Guided Repair: точечная отладка правил через маппинг ошибка→причина

КЛЮЧЕВАЯ СУТЬ
LLM плохо работает с обратной цепочкой рассуждений. Даёшь сломанную систему правил + примеры что не работает – модель угадывает где ошибка, перебирает гипотезы, может случайно сломать рабочие части. Метод решает это через двухэтапную починку: сначала точная локализация (какое правило ломает какой запрос и почему), потом точечный ремонт. Вместо абстрактного 'почини правила' LLM получает структурированный отчёт: 'правило №3 явно разрешает запрос X, который должен быть запрещён – убери разрешающую часть'. Это превращает перебор гипотез в адресную починку конкретных поломок.
Адаптировать под запрос

TL;DR

Fault Localization-Guided Repair — подход к исправлению сложных правил и политик, где перед починкой точно определяют какое конкретное правило ломает какой конкретный запрос и почему. Вместо "вот сломанная система, почини" LLM получает структурированный отчёт: "правило №3 явно разрешает запрос X, который должен быть запрещён" или "для запроса Y нет разрешающего правила, поэтому он неявно запрещён".

Когда просишь LLM починить набор правил "в лоб" (даёшь правила + примеры что работает неправильно), модель теряется в поиске причины. У неё нет карты "что именно сломано". Она перебирает гипотезы, может случайно сломать работающие части, тратит итерации на угадывание. Особенно остро с правилами из 5-10+ пунктов, где ошибка может быть в одном слове одного пункта.

Метод вводит три типа ошибок в правилах: (1) явное разрешение того, что должно быть запрещено, (2) явное запрещение того, что должно быть разрешено, (3) неявное запрещение (нет разрешающего правила) того, что должно быть разрешено. Для каждого сломанного запроса определяется тип ошибки и конкретное ответственное правило. LLM получает не "почини вообще", а "правило №2 явно запрещает запрос Z → убери ограничение или добавь исключение". Это превращает угадывание в точечный ремонт.


🔬

Схема метода

ШАГ 1: Проверка правил → список запросов, которые классифицируются неправильно

ШАГ 2: Fault Localization → для каждого сломанного запроса:
   - Определить тип ошибки (явное разрешение / явный запрет / неявный запрет)
   - Найти конкретное правило, ответственное за ошибку
   → Отчёт: "Запрос X: ожидается запрет, получено разрешение, ответственно правило №3"

ШАГ 3: LLM-починка → дать модели:
   - Полные правила
   - Отчёт fault localization
   - Запросы с ожидаемыми результатами
   → Исправленные правила

ШАГ 4: Валидация → проверить починку на всех запросах
   - Если все запросы классифицируются верно → готово
   - Если нет → повторить с Шага 2 (новая fault localization на основе текущей версии)

Количество итераций: До полной починки или установленного лимита (обычно 3-5 итераций).


🚀

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

Задача: У тебя онлайн-школа по программированию. Есть чат-бот техподдержки с правилами — какие вопросы он решает сам, какие отправляет оператору. Правила сломаны: бот отправляет простые вопросы оператору (перегружает команду), а сложные пытается решить сам (недовольные студенты). Нужно починить правила.

Промпт:

Перед тобой правила работы бота техподдержки онлайн-школы.

ТЕКУЩИЕ ПРАВИЛА:
1. Вопросы про доступ к курсу — решает бот (отправляет инструкцию по входу)
2. Вопросы про оплату и возвраты — оператору
3. Технические проблемы с платформой — бот
4. Вопросы про сертификаты и дипломы — запрещены (нет такой функции)

ТЕСТОВЫЕ ЗАПРОСЫ И ОЖИДАЕМОЕ ПОВЕДЕНИЕ:
✅ Бот должен решить сам:
- "Не могу войти в личный кабинет" 
- "Как скачать материалы урока?"

❌ Бот должен отправить оператору:
- "Хочу вернуть деньги за курс"
- "Видео не грузится уже 3 дня, перепробовал всё"

🚫 Бот должен отклонить:
- "Когда получу сертификат?"

ФАКТИЧЕСКОЕ ПОВЕДЕНИЕ (ЧТО ИДЁТ НЕ ТАК):
- "Не могу войти в личный кабинет" → бот решает (✅ правильно)
- "Как скачать материалы урока?" → оператору (❌ должен бот)
- "Хочу вернуть деньги за курс" → оператору (✅ правильно)
- "Видео не грузится уже 3 дня" → бот пытается решить (❌ должен оператору)
- "Когда получу сертификат?" → бот отвечает (❌ должен отклонить)

ЗАДАЧА 1 — FAULT LOCALIZATION:
Для каждого неправильно обработанного запроса определи:
- Тип ошибки: явное разрешение/запрет/неявное (нет правила)
- Какое правило ответственно
- Почему запрос попал не туда

Формат отчёта:
"Запрос: [текст]
Ожидается: [бот/оператор/отклонить]
Получено: [бот/оператор/отклонить]
Тип ошибки: [явное разрешение бота / явный запрет / неявное (нет правила для оператора) / ...]
Ответственное правило: [номер]
Причина: [объяснение]"

ЗАДАЧА 2 — REPAIR:
На основе fault localization исправь правила. Покажи:
- Какие правила меняешь
- Что конкретно меняешь (добавляешь/убираешь/уточняешь)
- Почему это починит конкретные ошибки

Результат:

Модель выдаст двухэтапный ответ:

Этап 1 — Fault Localization Report: Для каждого сломанного запроса — точное указание типа ошибки и ответственного правила. Например: "Запрос про скачивание материалов попал к оператору, потому что нет явного правила для бота → неявный запрет → нужно добавить правило".

Этап 2 — Исправленные правила: Точечные изменения с обоснованием. Например: "Правило 3 слишком широкое ('технические проблемы') — захватывает критичные баги → уточнить 'простые технические вопросы (вход, скачивание)' + добавить правило 'критичные баги (не работает >1 дня) → оператору'".

Получишь рабочую версию правил, которую можно протестировать на новых запросах.


🧠

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

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

Сильная сторона LLM: Модель отлично работает с явными структурированными данными — когда вместо "вот сломанная система" даёшь "вот конкретные проблемы → конкретные причины → конкретные правила". Когда карта "запрос→ошибка→правило" нарисована, модель переходит от угадывания к точечному ремонту: "правило №3 разрешает X, который должен быть запрещён → заменить разрешающую часть на более узкую".

Как метод использует это: Fault Localization превращает абстрактную задачу "почини правила" в структурированный набор точечных исправлений. Каждая ошибка получает тип (явное разрешение/запрет/неявное) + адрес (конкретное правило). LLM получает не "найди что сломано и почини", а "вот список 'правило №2 → запрос Y → тип ошибки: явный запрет' — исправь конкретно эти правила". Это как разница между "машина не заводится" и "свечи зажигания в цилиндре 2 и 4 пробиты, заменить".

Рычаги управления:

  • Глубина fault localization: Можешь попросить LLM только определить ответственные правила (быстро) или дополнительно объяснить ЧТО ИМЕННО в правиле сломано (медленнее, точнее для сложных случаев).

  • Итеративность: Для простых правил хватит одного прохода починки. Для сложных (10+ правил, зависимости между ними) — запусти 2-3 итерации: чини → проверяй → новая fault localization на оставшихся ошибках → чини снова.

  • Примеры запросов: Чем больше тестовых запросов дашь (и чем разнообразнее), тем точнее fault localization найдёт проблемы. Но можно начать с 5-7 критичных кейсов — часто этого хватает для 80% починки.

  • Тип ошибок: Три базовых типа (явное разрешение/запрет/неявный запрет) работают для большинства правил. Можешь добавить свои типы для конкретной задачи (например, "конфликт правил" или "слишком широкая формулировка").


📋

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

Перед тобой набор правил, которые работают неправильно.

ТЕКУЩИЕ ПРАВИЛА:
{список_правил_пронумерованных}

ТЕСТОВЫЕ ЗАПРОСЫ:
✅ Должны быть разрешены:
{список_запросов_которые_должны_быть_разрешены}

❌ Должны быть запрещены (или переданы дальше):
{список_запросов_которые_должны_быть_запрещены}

ФАКТИЧЕСКОЕ ПОВЕДЕНИЕ:
{для_каждого_запроса: "запрос" → получено [разрешено/запрещено] → ожидалось [разрешено/запрещено]}

---

ЗАДАЧА 1 — FAULT LOCALIZATION:
Для каждого неправильно обработанного запроса определи:
- Тип ошибки:
  * Явное разрешение (правило говорит "разрешить", но должно запрещать)
  * Явный запрет (правило говорит "запретить", но должно разрешать)  
  * Неявный запрет (нет правила, которое разрешает)
- Какое конкретное правило ответственно (номер)
- Почему запрос обработан неправильно

Формат отчёта:
"Запрос: [текст]
Ожидается: [разрешить/запретить]
Получено: [разрешить/запретить]
Тип ошибки: [явное разрешение / явный запрет / неявный запрет]
Ответственное правило: [номер]
Причина: [объяснение коротко]"

---

ЗАДАЧА 2 — REPAIR:
Исправь правила на основе fault localization.

Для каждого исправления укажи:
- Какое правило меняешь (номер)
- Что было / что стало
- Какие ошибки из отчёта это исправляет

Параметры для подстановки: - {список_правил_пронумерованных} — твои текущие правила, пронумерованные для удобства ссылок - {список_запросов_которые_должны_быть_разрешены} — примеры того, что должно работать - {список_запросов_которые_должны_быть_запрещены} — примеры того, что не должно работать

- {для_каждого_запроса...} — описание фактического поведения: какие запросы обработаны неправильно

Когда использовать: У тебя есть набор правил (бизнес-процесс, критерии оценки, модерация контента, чек-лист требований) + понимание что работает неправильно. Вместо угадывания "где ошибка" — получаешь точную карту ошибка→правило→причина, потом точечный ремонт.


⚠️

Ограничения

⚠️ Требуется чёткая спецификация разрешено/запрещено: Метод работает когда ты точно знаешь "этот запрос должен быть разрешён, этот запрещён". Для субъективных критериев (креативность, качество текста) или размытых требований fault localization не даст точной карты.

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

⚠️ Сложность для взаимозависимых правил: Если правила связаны ("правило 3 работает только если сработало правило 1"), fault localization может указать на одно правило, а ломать будет комбинация нескольких. В таких случаях нужны итерации или явное указание LLM "правила могут конфликтовать".

⚠️ Не для создания правил с нуля: Метод чинит существующие правила. Если правил вообще нет — fault localization не от чего оттолкнуться. Начни с базовой версии правил (даже очень простой), потом применяй метод.


🔗

Ресурсы

CloudFix: Automated Policy Repair for Cloud Access Control Policies Using Large Language Models

Quacky (инструмент для анализа политик): quantitative policy analyzer для AWS IAM

William Eiers, Bethel Hall, Owen Ungaro (Department of Computer Science, Stevens Institute of Technology)


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

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

LLM плохо работает с обратной цепочкой рассуждений. Даёшь сломанную систему правил + примеры что не работает – модель угадывает где ошибка, перебирает гипотезы, может случайно сломать рабочие части. Метод решает это через двухэтапную починку: сначала точная локализация (какое правило ломает какой запрос и почему), потом точечный ремонт. Вместо абстрактного 'почини правила' LLM получает структурированный отчёт: 'правило №3 явно разрешает запрос X, который должен быть запрещён – убери разрешающую часть'. Это превращает перебор гипотез в адресную починку конкретных поломок.

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

Не давай LLM сломанные правила и проси 'почини'. Сначала создай карту поломок: для каждого неправильно обработанного запроса определи тип ошибки (явное разрешение / явный запрет / неявный запрет) + конкретное ответственное правило + причину. Потом дай эту карту LLM вместе с правилами. Модель переходит от 'где тут ошибка?' к 'вот адреса поломок – исправь их'. Для сложных правил (10+ пунктов) делай итерации: починил → проверил → новая карта для оставшихся ошибок → починил снова.

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

Слабость LLM: модель теряется когда нужно от результата (запрос обработан неправильно) вернуться к причине (конкретное правило сломано). Она видит систему правил как целое, начинает перебирать – 'может правило 1 слишком широкое? или правило 3?' – теряет фокус. Сильная сторона: отлично работает с явными структурированными данными. Когда карта 'запрос→ошибка→правило' нарисована, модель не угадывает – делает точечный ремонт конкретных пунктов. Это как разница между 'машина не заводится' и 'свечи в цилиндре 2 и 4 пробиты – заменить'.

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

Работа с наборами правил и критериев → модерация контента, бизнес-процессы, чек-листы требований, критерии одобрения. Особенно когда видишь что правила работают неправильно (одни запросы проходят, другие не проходят), но не понимаешь где именно ошибка. НЕ подходит для субъективных критериев (креативность, качество текста) или размытых требований – нужна чёткая спецификация 'это должно быть разрешено, это запрещено'.

Мини-рецепт

1. Дай правила пронумерованными: облегчает ссылки на конкретные пункты
2. Покажи что сломано: для каждого запроса укажи ожидалось (разрешить/запретить) vs получено
3. Запроси карту поломок: для каждой ошибки нужен тип (явное разрешение / явный запрет / неявный запрет), номер ответственного правила, причина коротко
4. Дай карту + правила для починки: модель видит адреса – исправляет точечно
5. Проверь на всех запросах: если остались ошибки – повтори с шага 3 на новой версии правил

Примеры

[ПЛОХО] : У нас чат-бот с правилами модерации работает неправильно. Вот правила: [список]. Вот что пропускает/блокирует неправильно: [примеры]. Почини правила. (Модель начнёт угадывать где ошибка, может сломать рабочие части)
[ХОРОШО] : Перед тобой правила модерации чат-бота. ТЕКУЩИЕ ПРАВИЛА: 1. Мат и оскорбления – блокировать 2. Обсуждение политики – блокировать 3. Вопросы про продукт – пропускать 4. Реклама – блокировать ФАКТИЧЕСКОЕ ПОВЕДЕНИЕ (что идёт не так): - 'Ваш продукт – дерьмо' → пропущено (должно блокировать) - 'Когда обновление продукта?' → заблокировано (должно пропускать) - 'Купите криптовалюту здесь' → заблокировано (правильно) ЗАДАЧА 1 – КАРТА ПОЛОМОК: Для каждого неправильно обработанного сообщения определи: - Тип ошибки: явное разрешение / явный запрет / неявный запрет (нет правила) - Ответственное правило (номер) - Причина коротко Формат: 'Сообщение: [текст] | Ожидается: [блокировать/пропустить] | Получено: [блокировать/пропустить] | Тип ошибки: [...] | Правило №: [...] | Причина: [...]' ЗАДАЧА 2 – ПОЧИНКА: Исправь правила на основе карты. Для каждого исправления покажи: что было → что стало → какие ошибки из карты это чинит (Модель создаст карту поломок, потом точечно исправит конкретные правила)
Источник: CloudFix: Automated Policy Repair for Cloud Access Control Policies Using Large Language Models
ArXiv ID: 2512.09957 | Сгенерировано: 2026-01-08 23:37

Проблемы LLM

ПроблемаСутьКак обойти
LLM теряется при починке правил без карты ошибокДаёшь правила + "вот что работает неправильно" модель перебирает гипотезы где ошибка, может сломать работающие части; плохо работает с обратной цепочкой рассуждений (результатпричина)Дай структурированный отчёт перед починкой: для каждого сломанного запроса укажи тип ошибки + конкретное правило + почему

Методы

МетодСуть
Fault Localization перед починкой — точная карта ошибкаправилотипДля каждого сломанного запроса определяешь: тип ошибки (явное разрешение / явный запрет / неявный запрет) + конкретное правило + почему. Отчёт даёшь LLM: "Запрос X: ожидается запрет, получено разрешение, ответственно правило №3, причина: слишком широкая формулировка". Модель получает не "найди что сломано и почини", а адреса поломок точечный ремонт вместо угадывания. Итерации: чини валидируй новая fault localization на оставшихся ошибках чини снова (2-3 раза). Для: правила с чёткой спецификацией разрешено/запрещено (модерация, бизнес-процессы, чек-листы требований). НЕ для: субъективные критерии, размытые требования, создание правил с нуля

Тезисы

ТезисКомментарий
LLM теряется в обратной цепочке рассуждений — от результата к причинеВидит "это работает неправильно" перебирает гипотезы "может тут ошибка? или тут?" без точной карты. Применяю: для отладки/починки сначала структурируй ЧТО сломано и ПОЧЕМУ, потом прошу чинить
📖 Простыми словами

Fault Localization-Guided Repair: точечная отладка правил через маппинг ошибка→причина

arXiv: 2512.09957

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

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

В техническом плане магия происходит за счет Fault Localization-Guided Repair. Система не просто жалуется на жизнь, а раскладывает конфликт на атомы: «правило №3 разрешает запрос X, хотя должно запрещать» или «запрос Y улетает в бан, потому что нет разрешающего правила». Вместо того чтобы перебирать гипотезы, модель получает точную привязку запроса к правилу. Это убирает «белый шум» и позволяет LLM сфокусироваться на одной конкретной логической дыре, не трогая остальную архитектуру безопасности.

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

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

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

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

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