Почему AI пишет тебе мусор: 5 ошибок, которые делают все

«В теме, в которой я не разбираюсь, AI делает всё идеально. А там, где я хорошо шарю — пишет полную фигню.»

Когда AI звучит уверенно — доверять ему не стоит. Именно тогда велика вероятность, что он только что сгенерировал вам мусор.

Кирило Генькович — Head of Engineering, в команде ~30 инженеров, каждый день внедряет AI в рабочие процессы. Ниже — 5 конкретных причин, почему AI генерирует всякую фигню, и что с этим делать. Рецепты работают везде: Cursor, Claude Code, Copilot, Codex, Gemini CLI.


Причина 1: AI не знает того, что у тебя в голове

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

Эффект Memento: агент видит только то, что попало в контекст прямо сейчас. Больше для него ничего не существует.

Почему AI не скажет «не знаю»? Исследование OpenAI «Why Language Models Hallucinate» объясняет механику: модель обучали как студента на экзамене. Правильный ответ = 1 балл. Неправильный = 0. «Не знаю» = тоже 0. При угадывании всегда есть ненулевой шанс попасть. Вывод: угадывать выгоднее, чем молчать. Отсюда галлюцинации.

Что делать:

  1. Вынеси контекст из головы. Что это за проект, что уже сделано, чего ты хочешь, что для тебя значит хороший результат. Как говорят в Anthropic: «вынеси свой мозок наружу» буквально.
  2. Дай чёткое направление: напиши «сначала задай уточняющие вопросы, пока не соберёшь достаточно контекста; если чего-то не знаешь — так и скажи, не придумывай».
  3. Скилл «Интервью»: AI сам допрашивает тебя и вытягивает контекст из головы, вместо того чтобы сразу бежать выполнять. 🔗 github.com/genkovich/sdd/tree/main/skills/interview
  4. Дай разрешение сказать «не знаю»: проговори это явно в промпте.

Правило: если AI не задал ни одного вопроса перед стартом — жди мусора на выходе.


Причина 2: ты не управляешь контекстом

Сваливаешь всё в один бесконечный чат — и удивляешься, почему ответы с каждым сообщением становятся тупее.

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

Lost in the Middle (Stanford)

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

Context Rot (Chroma) и «Зона Тупости»

Команда Chroma брала ту же задачу и добавляла всё больше текста на вход — замеряла качество. Чем больше текст → хуже результат. Если совместить оба эффекта, получается Dum Zone («Зона тупости»):

Хоть окно большое, умная модель работает только с первой его частью. Ориентир: максимум первые 40%, лучше держать до 200 000 токенов. Дальше — сколько бы ты ни дописывал, ответы тупеют.

Что быстрее всего тебя загоняет в эту зону? Бездумно подключённые MCP, коннекторы, правила. Каждое расширение добавляет в окно служебный текст. Подключил 10 инструментов, а используешь один — окно уже наполовину забито мусором до первого слова.

Что делать:

  1. Одна задача — один свежий контекст. Перезапускай чат.
  2. Сжимай контекст: попроси модель составить краткий конспект в markdown-файл (что сделали, какие файлы, какие строки). Новый чат стартует с этого конспекта.
  3. Субагенты: главный смысл не в ролях (QA, developer), а в контроле контекстного окна. Субагент получает чистое окно, перелопачивает кучу всего и возвращает только сжатый вывод. Мусор удаляется вместе с субагентом.
  4. Позиционное внимание: самое важное — в начало (системный промпт, первые инструкции) и в конец (последнее сообщение). Внутри большого запроса главную мысль — в самое начало и продублировать в конце.
  5. Spec-Driven Development: принудительное деление на фазы (исследование → план → выполнение), каждая фаза — отдельное чистое окно. Модель всегда остаётся в умной зоне. Фреймворки: BMAT, SPKIT, SuperSpec, OpenSpec, SDD от Beer::Code.

Причина 3: AI останавливается, когда работа «выглядит» сделанной

Просишь что-то сделать. Модель отдаёт код, пишет «готово». И на вид — правда готово: красиво оформлено, много файлов создано. Но агент не запускал твой код. Единственное, на что он опирается — выглядит ли текст завершённым.

Данные:

  • Исследование на живых проектах с сотнями тысяч AI-коммитов: более 15% коммитов содержат хотя бы один баг
  • ~22% из них так и остаются в коде невыправленными

Почему самопроверка не работает? Просишь модель перепроверить — она часто делает хуже. Может взять правильный ответ и поменять на ложный. Та же модель с тем же контекстом имеет ровно те же слепые зоны. Просить её оценивать собственную работу — как просить студента самому себе поставить оценку за домашку.

Что делать — Verification Loop:

модель делает → гоняет проверку → читает результат → если не прошло → исправляет → снова

Виды проверок:

  • Вероятностные (промпт с правилами): модель может послушать, может и нет
  • Детерминированные (линтеры, компиляторы, тесты): дают вердикт «прошло/нет»; агент сам видит результат и исправляет

Правило: не верь модели на слово. Попроси доказательство — покажи вывод теста. Обещание «всё работает» не считается.

Отдельный агент-ревьюер: запускаешь второго агента с чистым контекстным окном, который не видел, как писался код, и не имеет тех же слепых зон.


Причина 4: ты не измеряешь качество

Пишешь что-то модели, читаешь ответ — «окей, годится». Но ты ничем не мерял, правда ли она хороша. Это просто ощущение.

Проблема масштаба: 3 ответа оценить глазами — без проблем. 300 ответов при каждом изменении промпта — ощущение непредсказуемо. Поправил одно место, сломал другое — не заметишь.

EVALS — тестирование агентов и скиллов:

Алгоритм построения:

  1. Error analysis: возьми десяток реальных факапов из своей работы, где модель налажала. Раскладывай их по кучам: «вот тут придумала факт», «тут сломала формат», «тут потеряла контекст». Эти кучки — твои будущие критерии.
  2. Датасет: набор примеров (вход + ожидаемый выход), 10 показательных кейсов
  3. Критерии: конкретные пункты — факты настоящие, формат точно по схеме. Вопрос не «нравится ли мне ответ», а «соответствует ли он критериям»
  4. Тесты: модель пишет тесты для скилла/агента → прогоняешь регулярно → конкретная цифра до и после изменений

Модель-судья: одна модель генерирует, другая оценивает по твоим критериям. Правила для судьи:

  • Критерии бинарные (да/нет), без шкалы 1-5
  • Прокалибруй: прогони судью на примерах, где ты сам уже поставил оценки вручную; сверь — если расходится, правь критерии

Вывод: пока оцениваешь качество на глаз — ты им не управляешь. Тебе просто везёт.


Причина 5: ты не учишь модель на её ошибках

Просишь что-то сделать — модель ошибается. Ты исправляешь. «У нас так не принято. Надо вот так.» Она поправила. Следующий раз открываешь новый чат — и она снова делает ту же ошибку. Ты снова то же самое отправляешь. И так по кругу.

Не исправляй последствие каждый раз. Исправь причину один раз.

Reflexion (NeurIPS 2023): когда агент записывает свой провал обычными словами и перечитывает этот текст перед следующей попыткой — он повторяет ту же ошибку значительно реже, без какого-либо дообучения модели.

Куда складывать:

  • CLAUDE.md / AGENTS.md: файл правил, который автоматически загружается в каждую новую сессию. Сюда — конвенции, чего трогать/не трогать, и конкретные проблемы, с которыми столкнулся. Файл должен расти от боли, а не быть статичным.
  • Авто-память: агент сам решает, что стоит запомнить. Или ты подсказываешь: «запомни».

⚠️ Важно: не раздувай. CLAUDE.md на 1000 строк → половина правил уже неактуальна, авто-память может записать случайность или ложный вывод. Снова мусор.

Правило: следи за CLAUDE.md и AGENTS.md. Подчищай старое, просматривай. Держи до 200 строк.


Итог: 5 причин — один большой процесс

#ПричинаЧто делать
1AI не знает, что у тебя в головеВынеси контекст, задай направление, разреши «не знаю»
2Неуправляемый контекстОдин чат — одна задача; сжимай контекст; субагенты; фреймворки фаз
3Останавливается когда «выглядит» готовоVerification loop; детерминированные проверки; агент-ревьюер
4Нет измерения качестваEVALS: error analysis → датасет → критерии → тесты
5Не учится на ошибкахReflexion в CLAUDE.md; авто-память ≤200 строк

Это цепочка: дал контекст → есть чем управлять → есть что проверять → есть что мерять → есть что накапливать. Каждая ступень подпирает следующую.

С чего начать: возьми одну причину — ту, что сейчас болит больше всего — и примени прямо сегодня на следующей задаче.


Источники

Связанное