3,583 papers
arXiv:2607.25873 70 28 июля 2026 г. FREE

Диффузное внимание: почему LLM проваливают дебаг, когда цепляются за версию библиотеки вместо сути ошибки

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

TL;DR

Исследователи проверили, куда смотрит LLM, когда чинит баг в коде — без доступа к внутренностям модели. Они по очереди вырезали куски из баг-репорта (описание проблемы, трейс ошибки, версию библиотеки, тестовый пример) и смотрели, насколько сильно меняется итоговый патч. Чем сильнее меняется результат после удаления куска — тем больше модель на него «смотрела».

Главная находка: когда LLM успешно чинит баг, её внимание распределено сразу на несколько частей — описание проблемы, трейс ошибки, тестовый пример. Когда чинит неудачно — внимание залипает на одном месте, чаще всего на версии библиотеки или окружения, а остальной текст как будто не читается. Это как человек, который зациклился на несущественной детали и упустил суть.

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


📌

Схема исследования

ШАГ 1: Взять баг-репорт → разбить на секции (описание, трейс, версия, тесты, репродукция)
ШАГ 2: По очереди убирать секцию → просить модель сгенерировать патч заново
ШАГ 3: Сравнить новый патч со старым → большая разница = модель "смотрела" на убранную секцию
ШАГ 4: Сопоставить паттерн внимания с успехом/неудачей фикса
ШАГ 5: Сравнить внимание модели с тем, что важным считают реальные разработчики

🚀

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

Задача: Вы копируете в Claude тикет из трекера (Jira/GitHub Issues) с описанием бага, стектрейсом, версиями библиотек, шагами воспроизведения — и просите исправить код.

Промпт (с учётом находки исследования):

Вот баг-репорт. Разбираю его по важности для тебя:

[ГЛАВНОЕ — фокусируйся здесь]
Описание проблемы: {текст описания}
Трейс ошибки: {стектрейс}
Тест, который падает: {тест-кейс}

[СПРАВОЧНО — не главное для диагностики]
Версия библиотеки: {версия}
Окружение: {ОС, зависимости}

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

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


🧠

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

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

Сильная сторона LLM — она хорошо реагирует на явные инструкции о приоритетах в тексте. Если явно пометить, что главное, а что вторично, модель охотнее распределяет внимание туда, куда нужно, а не туда, где «проще зацепиться».

Рычаги управления: - Явная разметка «главное / справочно» → снижает риск залипания на метаданных - Порядок информации в промпте → важное лучше ставить раньше, модели чаще уделяют больше внимания началу текста - Просьба «свяжи описание, трейс и тест перед тем как предлагать фикс» → провоцирует диффузное внимание вместо локального


⚠️

Ограничения

⚠️ Домен исследования узкий: проверяли только исправление кода (Python/Java) с уже выделенной багованной функцией — не творческие или неоднозначные задачи.

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

⚠️ Мало сложных случаев: в датасете почти нет by-design «hard» багов, поэтому выводы больше применимы к типовым, средним по сложности задачам.


🔍

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

Команда взяла 319 реальных багов из Python и Java (из известных бенчмарков SWE-bench Verified и Multi-SWE-bench) и прогнала их через три модели — Claude, и две открытые (gpt-oss-20b, qwen3-32b). Вместо того чтобы лезть во внутренности модели (что часто невозможно для закрытых моделей вроде Claude), они использовали перестановочный анализ: вырезали кусок баг-репорта, смотрели, насколько изменился сгенерированный патч, и по силе изменения оценивали «внимание» модели к этому куску — через математику Shapley values (та же логика, что в объяснении решений нейросетей).

Дополнительно исследователи наняли четырёх разработчиков с опытом 5+ лет и попросили их вручную разметить 100 баг-репортов — какие секции важны, а какие нет. Это позволило сравнить, совпадает ли «взгляд» модели со взглядом человека.

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


🔗

Ресурсы

How Do LLMs Read Bug Reports? An Empirical Study of Attention in LLMs for Automated Program Repair — Ramtin Ehsani, Preetha Chatterjee (Drexel University), Irene Manotas, Saurabh Pujar, Luca Buratti (IBM Research).


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

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

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

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

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

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

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

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

Автоматическое исправление кода → конкретно для баг-репортов с трейсом, описанием и метаданными версии, особенно когда тикет из Jira или GitHub Issues перегружен техническими деталями. НЕ подходит для творческих или неоднозначных задач без чёткой структуры бага.

Мини-рецепт

1. Разметь баг-репорт: раздели на «главное» (описание, трейс, тест) и «справочное» (версия, окружение)
2. Поставь важное первым: модель уделяет больше внимания началу текста
3. Попроси связать куски: добавь фразу «свяжи описание, трейс и тест перед тем как предлагать фикс» — это провоцирует распределённое внимание
4. Ограничь роль метаданных: явно напиши «версию используй только если без неё решение невозможно»

Примеры

[ПЛОХО] : Вот баг-репорт с версией библиотеки 2.3.1, стектрейсом и описанием. Исправь код.
[ХОРОШО] : [ГЛАВНОЕ] Описание: приложение крашится при пустом списке. Трейс: NullPointerException в строке 45. Тест: test_empty_list() падает. [СПРАВОЧНО] Версия: 2.3.1. Задача: найди причину, опираясь на описание, трейс и тест. Версию используй только если без неё не обойтись.
Источник: How Do LLMs Read Bug Reports? An Empirical Study of Attention in LLMs for Automated Program Repair
ArXiv ID: 2607.25873 | Сгенерировано: 2026-07-29 06:22

Проблемы LLM

ПроблемаСутьКак обойти
Внимание модели схлопывается на одной заметной деталиВ длинном тексте есть короткие чёткие факты (версия, дата, число) и размазанная по нескольким местам суть проблемы. Модель цепляется за короткий факт, а остальной текст почти не учитывает. Итог — ответ строится на несущественной детали, суть теряетсяЯвно раздели текст на «главное» и «справочно» в запросе. Попроси модель сначала связать главные части между собой, а второстепенные использовать только если без них решение невозможно

Методы

МетодСуть
Разметка «главное / справочно» — управление фокусомРаздели длинный текст на два блока: критичная информация (описание, причина, ключевые данные) и вспомогательная (версии, окружение, метаданные). [ГЛАВНОЕ] ... и [СПРАВОЧНО] .... Явно попроси ориентироваться на первый блок, второй — только при необходимости. Работает потому что модель по умолчанию цепляется за короткие конкретные факты — метка сдвигает её фокус туда, где он нужен. Работает: длинные тексты со смесью важных и вспомогательных данных (тикеты, отчёты, договоры, баг-репорты). Не работает: короткие запросы, где всё одинаково значимо и разделять нечего
📖 Простыми словами

How DoLLMsRead Bug Reports? An Empirical Study of Attention inLLMsfor Automated Program Repair

arXiv: 2607.25873

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

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

Выяснилось, что версия библиотеки и стектрейс ошибки — это святой грааль для LLM. Без них качество починки кода падает в разы. А вот длинные, подробные описания того, «как я нажал кнопку и всё сломалось», модели часто игнорируют. Им проще сориентироваться по сухому дампу ошибки, чем пытаться распутать человеческий поток сознания. В итоге 10 из 15 попыток исправить баг зависят не от того, насколько хорошо ты объяснил проблему, а от того, приложил ли ты технические логи.

Этот принцип работает не только в программировании, но и в любом общении с нейронками. Тестировали на коде, но механика универсальна: Claude, GPT-4 или Gemini всегда будут отдавать приоритет структурированным данным перед свободным текстом. Если ты просишь AI проанализировать юридический договор или медицинскую выписку, он в первую очередь «считает» даты, статьи и конкретные термины, а твои личные комментарии и пояснения может вообще пропустить мимо ушей. Конкретика бьёт контекст в 90% случаев.

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

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

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

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