3,583 papers
arXiv:2604.02547 74 2 апр. 2026 г. FREE

Behavioral Patterns: почему AI атакует симптом вместо причины — и что делают успешные агенты

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

TL;DR

Когда просишь AI починить сложную проблему, он почти всегда находит правильный файл и правильный симптом — но лечит не то место. Исследователи проанализировали 9374 попыток AI-агентов решить реальные баги и обнаружили: провалы происходят не потому, что задача сложная, а потому что агент атакует симптом вместо корня. 12 задач с однострочными патчами не решил ни один из 19 агентов — при том что люди оценили их как "15 минут работы".

Главная находка: длина ответа — ложный сигнал качества. Два агента делают по 36-37 шагов, один решает задачу, второй — нет. Разница не в количестве шагов, а в их порядке: успешный сначала понимает, потом правит, потом проверяет. Неуспешный сразу лезет редактировать, накапливает ошибки и не запускает тесты вообще.

Это превращается в конкретную технику для чата: принудительный workflow "понять → воспроизвести → найти корень → исправить → проверить" в промпте не даёт AI срезать углы и прыгать к "очевидному" решению.


🔬

Схема метода

ШАГ 1: ПОНЯТЬ → собрать контекст, описать что именно происходит
         (один промпт, всё внутри)
ШАГ 2: ВОСПРОИЗВЕСТИ → механизм возникновения шаг за шагом
         (AI объясняет цепочку событий, не решение)
ШАГ 3: РАЗДЕЛИТЬ → симптом (что видим) vs корень (откуда берётся)
         (явный запрет атаковать симптом)
ШАГ 4: ИСПРАВИТЬ → точечное решение только для корневой причины
ШАГ 5: ПРОВЕРИТЬ → как это решение устраняет именно причину, не симптом

Все шаги выполняются в одном промпте — AI проходит их по порядку.


🚀

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

Задача: Ты ведёшь Telegram-канал с платной подпиской. Бот перестал принимать платежи через ЮKassa — пользователи жалуются, что кнопка "Оплатить" зависает. Команда разработчика говорит "всё работает на нашей стороне".

Промпт:

Помоги разобраться в проблеме. Не предлагай решение сразу — пройди шаги по порядку.

Проблема: в Telegram-боте перестала работать оплата через ЮKassa. 
Пользователь нажимает кнопку "Оплатить" — бот зависает, платёж не проходит. 
Разработчик говорит "у нас всё ок". ЮKassa говорит "смотрите у себя". 
Проблема началась 3 дня назад.

ШАГ 1 — ПОНЯТЬ:
Задай мне 3-5 уточняющих вопроса, чтобы полностью собрать картину.
Не угадывай — спрашивай.

ШАГ 2 — ВОСПРОИЗВЕСТИ:
После моих ответов опиши механизм проблемы шаг за шагом: 
что происходит от нажатия кнопки до зависания.

ШАГ 3 — РАЗДЕЛИТЬ:
Явно укажи:
- Симптом (что мы видим снаружи)
- Корневая причина (где именно ломается цепочка)
Не атакуй симптом.

ШАГ 4 — ИСПРАВИТЬ:
Предложи решение только для корневой причины.

ШАГ 5 — ПРОВЕРИТЬ:
Объясни, как это решение устраняет именно причину, а не маскирует симптом.

Результат: Модель сначала задаст вопросы — например, спросит что изменилось 3 дня назад, есть ли логи ошибок, какая версия библиотеки ЮKassa. После ответов явно пропишет цепочку: где именно рвётся передача токена или истекает webhook. В ШАГ 3 разделит "зависает кнопка" (симптом) и "Telegram не получает ответ от сервера за 30 секунд" (причина). Решение будет точечным — не "перепиши бота", а конкретное место в цепочке.


🧠

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

AI склонен срезать углы. Когда видит знакомый паттерн — сразу генерирует "очевидное" решение. Это работает на простых задачах, но на сложных приводит к тому что исследователи назвали architectural reasoning gap — агент правит симптом там где видит его, а не там где проблема реально живёт. В примере с matplotlib агент нашёл правильный файл, понял баг с DPI — и всё равно исправил не то место, потому что прыгнул к первому подходящему решению.

Модель хорошо следует явным инструкциям о порядке. Если структура "сначала — потом — только потом" зашита в промпт, AI её держится. Это не "думать глубже" — это убрать возможность срезать угол.

Явное разделение симптома и корня — ключевой шаг. Без него AI автоматически работает на уровне симптома: видит зависание — лечит зависание. С явным ШАГом 3 модель вынуждена пройти на уровень глубже и найти откуда симптом вообще берётся.

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


📋

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

Помоги разобраться в проблеме. Не предлагай решение сразу — пройди шаги по порядку.

Проблема: {описание проблемы — что происходит, когда началось, 
кто что говорит}

ШАГ 1 — ПОНЯТЬ:
Задай мне 3-5 уточняющих вопроса, чтобы полностью собрать картину ситуации.
Не угадывай — спрашивай.

ШАГ 2 — ВОСПРОИЗВЕСТИ:
После моих ответов опиши механизм возникновения проблемы шаг за шагом:
что происходит от {начальная точка} до {конечный сбой}.

ШАГ 3 — РАЗДЕЛИТЬ:
Явно укажи:
- Симптом (что видим снаружи)
- Корневая причина (где именно ломается логика)
Предупреждение: не атакуй симптом.

ШАГ 4 — ИСПРАВИТЬ:
Предложи {конкретное действие / решение / изменение} только для корневой причины.

ШАГ 5 — ПРОВЕРИТЬ:
Объясни, как это решение устраняет именно причину, а не маскирует симптом.

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


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

Вот шаблон для разбора проблем по корневой причине. 
Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

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

LLM спросит про начальную и конечную точки проблемы, контекст ситуации — потому что без этого не может правильно заполнить ШАГ 2 (воспроизведение цепочки). Она возьмёт структуру из шаблона и адаптирует под твою задачу.


⚠️

Ограничения

⚠️ Простые задачи: Для очевидных вопросов ("какой тариф выгоднее") этот workflow избыточен — лишние шаги без пользы.

⚠️ Архитектурный потолок: Даже с правильным промптом AI не знает специфики твоей системы. Если проблема требует редких domain-знаний (как TeX math-mode или pickle-протокол Python), никакая структура не поможет — AI уверенно пойдёт в неверном направлении.

⚠️ Субъективные проблемы: Метод работает там где есть объективный "корень" — логика, процесс, цепочка событий. Для размытых задач ("почему контент не заходит") ШАГ 3 будет натянутым.

⚠️ Длина ответа: Пять шагов с вопросами — это длинный диалог. Если нужен быстрый ответ — оставь только ШАГ 3 и 4.


🔍

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

Команда взяла публичные данные с лидерборда SWE-bench — 9374 записей того, как AI-агенты решали реальные баги из 12 open-source Python-проектов (Django, matplotlib, sympy). Каждый из 19 агентов пробовал все 500 задач, что позволило сравнивать одну и ту же задачу у разных агентов — устранив главную ловушку предыдущих исследований, где за "агент проваливается на длинных задачах" стояло "агент берётся за сложные задачи, которые и длиннее, и труднее".

Исследовательский ход с "простыми" незакрытыми задачами — настоящая находка. Они выбрали 12 задач с патчами в 2-8 строк, которые люди оценили как "15 минут работы", — и показали, что все 19 агентов проваливаются. Затем вручную прошли по траекториям лучших агентов и в 10 из 12 случаев нашли один и тот же паттерн: агент находит правильный файл, понимает симптом, но редактирует не тот архитектурный слой. В matplotlib-задаче агент починил слой отображения на экране, хотя проблема была в слое сериализации — функции __getstate__, которую Python вызывает при pickle. Агент нигде не "ошибся" в обычном смысле — он просто не понял, что симптом и причина живут в разных местах.


💡

Адаптации и экстраполяции

1. Адаптация: Два конкурирующих объяснения корня

🔧 Добавь в ШАГ 3 запрос на две гипотезы → защита от ложной уверенности

ШАГ 3 — РАЗДЕЛИТЬ:
Предложи две конкурирующие гипотезы о корневой причине.
Для каждой укажи: что проверить, чтобы подтвердить или опровергнуть.
Выбери более вероятную и объясни почему.

Симулирует то, что исследование назвало "агент, который воспроизводит баг перед правкой" — снижает шанс уверенного неправильного ответа.


2. Экстраполяция: Применение для анализа провалов, не только технических проблем

Принцип "симптом vs корень" работает не только для кода. Пример — разбор почему упали продажи:

Проблема: в ноябре продажи онлайн-курса упали на 40% по сравнению с октябрём.
Рекламный бюджет тот же, охваты похожие.

ШАГ 1 — ПОНЯТЬ:
Задай 3-5 вопроса о воронке: трафик → лиды → продажи.

ШАГ 2 — ВОСПРОИЗВЕСТИ:
Опиши цепочку от перехода на сайт до решения не купить.

ШАГ 3 — РАЗДЕЛИТЬ:
Симптом: меньше продаж.
Корень: где именно ломается конверсия — трафик, лендинг, оффер, цена, доверие?
Предложи две гипотезы с разными корнями.

ШАГ 4 — ИСПРАВИТЬ:
Точечное действие для более вероятного корня.

ШАГ 5 — ПРОВЕРИТЬ:
Какую метрику смотреть, чтобы убедиться что это сработало?

🔗

Ресурсы

Beyond Resolution Rates: Behavioral Drivers of Coding Agent Success and Failure Tural Mehtiyev, Wesley Assunção — North Carolina State University, Raleigh, NC, USA Preprint, 2026

Датасет: SWE-bench Verified — swebench.com Фреймворки в исследовании: SWE-agent, OpenHands, AutoCodeRover, Trae, Skywork, CodeSweep, EPAM-AI, SAGE, Sonar


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

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

Обнаружено: LLM почти всегда находит правильное место — правильный файл, нужную строчку, нужный раздел. И всё равно правит не то. Чинит отображение вместо сериализации, правит потребителя вместо производителя. Это не баг конкретной модели — все LLM, включая сильнейшие, делают одно и то же. Метод позволяет получать решение, которое бьёт в корневую причину, а не в видимый симптом. Структура "изучи → раздели симптом и причину → аргументируй → проверь" блокирует стандартный прыжок к ближайшему ответу: когда LLM сначала называет симптомы, а потом должна назвать причину — она сама себя загоняет в угол. Финальный ответ вынужден объяснять причину, а не просто реагировать на описание.

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

Длина диалога — ложный сигнал качества. Длинный разговор с LLM не означает провал. Провал означает структура: агент, который прыгает к правкам без изучения контекста, почти всегда лечит симптом. Победители следуют порядку: понять ситуацию → воспроизвести проблему → исправить причину → проверить результат. И второй нетривиальный момент: два агента с одинаковой моделью, но разными промптами совпадают в результатах чаще, чем с одинаковыми промптами на разных моделях. Хороший промпт вытягивает слабую модель — но сильную почти не ограничивает. Когда выбираешь между умным промптом на слабой модели и простым промптом на сильной — бери сильную.

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

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

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

Разбор технических проблем → для поиска где именно сломалось, а не только что сломалось. Маркетинг и продажи → когда метрики падают и непонятно почему: трафик? контент? воронка? предложение? Конфликты в команде → чтобы не зависнуть на видимых претензиях. НЕ подходит: если задача уже описана в форме причины («плохой копирайтер», «медленный разработчик») — LLM с этим согласится без анализа. Описание проблемы должно быть нейтральным.

Мини-рецепт

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

Примеры

[ПЛОХО] : Конверсия в телеграм-канале упала. Что делать?
[ХОРОШО] : Помоги разобраться с падением конверсии в телеграм-канале. Контекст: [тематика канала, аудитория, что изменилось за последние 2 месяца, какие именно цифры просели]. Работай в четыре шага: Шаг 1 — ИЗУЧЕНИЕ Задай 4-5 уточняющих вопросов. Дождись моих ответов. Шаг 2 — СИМПТОМЫ vs ПРИЧИНА Раздели на два столбца: что видно снаружи — и что может за этим стоять. Шаг 3 — ГЛАВНАЯ ГИПОТЕЗА Назови одну корневую причину с обоснованием: почему именно она, а не симптом? Шаг 4 — ПРОВЕРКА Предложи 2-3 способа проверить гипотезу до того, как начнём что-то менять.
Источник: Beyond Resolution Rates: Behavioral Drivers of Coding Agent Success and Failure
ArXiv ID: 2604.02547 | Сгенерировано: 2026-04-06 04:39

Проблемы LLM

ПроблемаСутьКак обойти
Модель правит симптом, а не причинуОписываешь проблему через видимый эффект: "конверсия упала", "код не работает". Модель предсказывает следующий токен — и тянется к ближайшему слову-ответу. Это всегда симптом. Причина лежит глубже и требует явного шага к ней. Без этого шага модель правит не то местоДобавь в запрос явный шаг-разделение: "Раздели на два столбца: симптомы (что видно снаружи) и корневые причины (почему это происходит)". Только после этого шага — проси решение

Методы

МетодСуть
Принудительная структура: понять разделить решить проверитьРазбей запрос на четыре явных шага. Шаг 1: задай уточняющие вопросы. Шаг 2: раздели симптомы и корневые причины. Шаг 3: назови одну главную причину с обоснованием. Шаг 4: предложи способы проверить до того, как действовать. Почему работает: каждый шаг сужает пространство ответов. Когда модель сначала описала симптомы — она не может в следующем шаге назвать симптом причиной. Сама себя ограничивает. Когда применять: анализ любой проблемы где есть несколько возможных причин. Когда не нужно: решение очевидно и проверять нечего

Тезисы

ТезисКомментарий
Выбор модели влияет на результат сильнее, чем структура запросаДва разных запроса к одной модели дают похожие результаты. Одинаковый запрос к двум разным моделям — нет. Структура запроса помогает слабой модели меньше ошибаться. Но сильную модель хорошая структура почти не ограничивает — она справляется и без жёстких шаблонов. Применяй: сначала выбери лучшую доступную модель. Потом думай про структуру запроса. Не наоборот
📖 Простыми словами

Beyond Resolution Rates: Behavioral Drivers of CodingAgentSuccess and Failure

arXiv: 2604.02547

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

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

В работе это проявляется через architectural reasoning gap — неспособность агента осознать структуру проекта целиком. Исследователи нашли 12 задач, где нужно было поправить всего одну строчку, и с этим не справился ни один из 19 топовых агентов. Для человека это «задача на 15 минут», но для AI это непроходимый лабиринт, потому что он атакует симптом, который видит прямо перед собой, игнорируя архитектурную связь с другими модулями.

Принцип универсален для любой автоматизации: будь то правка кода на Python или настройка сложной интеграции в Telegram-боте. Если система лажает, она почти всегда делает это в точке соприкосновения с реальностью, а не в абстрактных вычислениях. Тестировали на программировании, но это касается любого агентского поведения: AI всегда будет пытаться «срезать углы», выбирая самый быстрый путь к закрытию тикета, даже если этот путь ведет в тупик.

Главный вывод: не надейся, что агент «сам разберется» в сложном проекте, даже если он нашел правильный файл. 12 провальных задач из 12 доказывают, что без четкого указания на архитектурную причину AI будет бесконечно фиксить последствия. Чтобы это работало, нужно заставлять модель сначала строить дерево зависимостей, а не прыгать к написанию патча, иначе ты получишь гору кода, который вроде бы работает, но ничего не исправляет.

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

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

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