Почему 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. При угадывании всегда есть ненулевой шанс попасть. Вывод: угадывать выгоднее, чем молчать. Отсюда галлюцинации.
Что делать:
- Вынеси контекст из головы. Что это за проект, что уже сделано, чего ты хочешь, что для тебя значит хороший результат. Как говорят в Anthropic: «вынеси свой мозок наружу» буквально.
- Дай чёткое направление: напиши «сначала задай уточняющие вопросы, пока не соберёшь достаточно контекста; если чего-то не знаешь — так и скажи, не придумывай».
- Скилл «Интервью»: AI сам допрашивает тебя и вытягивает контекст из головы, вместо того чтобы сразу бежать выполнять. 🔗 github.com/genkovich/sdd/tree/main/skills/interview
- Дай разрешение сказать «не знаю»: проговори это явно в промпте.
Правило: если AI не задал ни одного вопроса перед стартом — жди мусора на выходе.
Причина 2: ты не управляешь контекстом
Сваливаешь всё в один бесконечный чат — и удивляешься, почему ответы с каждым сообщением становятся тупее.
Контекстное окно — весь текст, который модель держит перед глазами: твой запрос, файлы, вся переписка. Миллион токенов звучит как бесконечность, но есть нюанс.
Lost in the Middle (Stanford)
Стэнфордское исследование: прячешь нужный ответ в тексте, каждый раз в разное место — начало, середина, конец. Результат: в начале всё хорошо, в конце тоже, в середине часто просто игнорируется.
Context Rot (Chroma) и «Зона Тупости»
Команда Chroma брала ту же задачу и добавляла всё больше текста на вход — замеряла качество. Чем больше текст → хуже результат. Если совместить оба эффекта, получается Dum Zone («Зона тупости»):
Хоть окно большое, умная модель работает только с первой его частью. Ориентир: максимум первые 40%, лучше держать до 200 000 токенов. Дальше — сколько бы ты ни дописывал, ответы тупеют.
Что быстрее всего тебя загоняет в эту зону? Бездумно подключённые MCP, коннекторы, правила. Каждое расширение добавляет в окно служебный текст. Подключил 10 инструментов, а используешь один — окно уже наполовину забито мусором до первого слова.
Что делать:
- Одна задача — один свежий контекст. Перезапускай чат.
- Сжимай контекст: попроси модель составить краткий конспект в markdown-файл (что сделали, какие файлы, какие строки). Новый чат стартует с этого конспекта.
- Субагенты: главный смысл не в ролях (QA, developer), а в контроле контекстного окна. Субагент получает чистое окно, перелопачивает кучу всего и возвращает только сжатый вывод. Мусор удаляется вместе с субагентом.
- Позиционное внимание: самое важное — в начало (системный промпт, первые инструкции) и в конец (последнее сообщение). Внутри большого запроса главную мысль — в самое начало и продублировать в конце.
- Spec-Driven Development: принудительное деление на фазы (исследование → план → выполнение), каждая фаза — отдельное чистое окно. Модель всегда остаётся в умной зоне. Фреймворки: BMAT, SPKIT, SuperSpec, OpenSpec, SDD от Beer::Code.
Причина 3: AI останавливается, когда работа «выглядит» сделанной
Просишь что-то сделать. Модель отдаёт код, пишет «готово». И на вид — правда готово: красиво оформлено, много файлов создано. Но агент не запускал твой код. Единственное, на что он опирается — выглядит ли текст завершённым.
Данные:
- Исследование на живых проектах с сотнями тысяч AI-коммитов: более 15% коммитов содержат хотя бы один баг
- ~22% из них так и остаются в коде невыправленными
Почему самопроверка не работает? Просишь модель перепроверить — она часто делает хуже. Может взять правильный ответ и поменять на ложный. Та же модель с тем же контекстом имеет ровно те же слепые зоны. Просить её оценивать собственную работу — как просить студента самому себе поставить оценку за домашку.
Что делать — Verification Loop:
модель делает → гоняет проверку → читает результат → если не прошло → исправляет → снова
Виды проверок:
- Вероятностные (промпт с правилами): модель может послушать, может и нет
- Детерминированные (линтеры, компиляторы, тесты): дают вердикт «прошло/нет»; агент сам видит результат и исправляет
Правило: не верь модели на слово. Попроси доказательство — покажи вывод теста. Обещание «всё работает» не считается.
Отдельный агент-ревьюер: запускаешь второго агента с чистым контекстным окном, который не видел, как писался код, и не имеет тех же слепых зон.
Причина 4: ты не измеряешь качество
Пишешь что-то модели, читаешь ответ — «окей, годится». Но ты ничем не мерял, правда ли она хороша. Это просто ощущение.
Проблема масштаба: 3 ответа оценить глазами — без проблем. 300 ответов при каждом изменении промпта — ощущение непредсказуемо. Поправил одно место, сломал другое — не заметишь.
EVALS — тестирование агентов и скиллов:
Алгоритм построения:
- Error analysis: возьми десяток реальных факапов из своей работы, где модель налажала. Раскладывай их по кучам: «вот тут придумала факт», «тут сломала формат», «тут потеряла контекст». Эти кучки — твои будущие критерии.
- Датасет: набор примеров (вход + ожидаемый выход), 10 показательных кейсов
- Критерии: конкретные пункты — факты настоящие, формат точно по схеме. Вопрос не «нравится ли мне ответ», а «соответствует ли он критериям»
- Тесты: модель пишет тесты для скилла/агента → прогоняешь регулярно → конкретная цифра до и после изменений
Модель-судья: одна модель генерирует, другая оценивает по твоим критериям. Правила для судьи:
- Критерии бинарные (да/нет), без шкалы 1-5
- Прокалибруй: прогони судью на примерах, где ты сам уже поставил оценки вручную; сверь — если расходится, правь критерии
Вывод: пока оцениваешь качество на глаз — ты им не управляешь. Тебе просто везёт.
Причина 5: ты не учишь модель на её ошибках
Просишь что-то сделать — модель ошибается. Ты исправляешь. «У нас так не принято. Надо вот так.» Она поправила. Следующий раз открываешь новый чат — и она снова делает ту же ошибку. Ты снова то же самое отправляешь. И так по кругу.
Не исправляй последствие каждый раз. Исправь причину один раз.
Reflexion (NeurIPS 2023): когда агент записывает свой провал обычными словами и перечитывает этот текст перед следующей попыткой — он повторяет ту же ошибку значительно реже, без какого-либо дообучения модели.
Куда складывать:
CLAUDE.md/AGENTS.md: файл правил, который автоматически загружается в каждую новую сессию. Сюда — конвенции, чего трогать/не трогать, и конкретные проблемы, с которыми столкнулся. Файл должен расти от боли, а не быть статичным.- Авто-память: агент сам решает, что стоит запомнить. Или ты подсказываешь: «запомни».
⚠️ Важно: не раздувай. CLAUDE.md на 1000 строк → половина правил уже неактуальна, авто-память может записать случайность или ложный вывод. Снова мусор.
Правило: следи за CLAUDE.md и AGENTS.md. Подчищай старое, просматривай. Держи до 200 строк.
Итог: 5 причин — один большой процесс
| # | Причина | Что делать |
|---|---|---|
| 1 | AI не знает, что у тебя в голове | Вынеси контекст, задай направление, разреши «не знаю» |
| 2 | Неуправляемый контекст | Один чат — одна задача; сжимай контекст; субагенты; фреймворки фаз |
| 3 | Останавливается когда «выглядит» готово | Verification loop; детерминированные проверки; агент-ревьюер |
| 4 | Нет измерения качества | EVALS: error analysis → датасет → критерии → тесты |
| 5 | Не учится на ошибках | Reflexion в CLAUDE.md; авто-память ≤200 строк |
Это цепочка: дал контекст → есть чем управлять → есть что проверять → есть что мерять → есть что накапливать. Каждая ступень подпирает следующую.
С чего начать: возьми одну причину — ту, что сейчас болит больше всего — и примени прямо сегодня на следующей задаче.
Источники
- Исследование OpenAI «Why Language Models Hallucinate»
- «Lost in the Middle» — Stanford (2307.03172)
- «Context Rot» — Chroma
- Reflexion — NeurIPS 2023 (2303.11366)
- Effective context engineering — Anthropic
- Скилл «Интервью» — Beer::Code
- SDD Framework — Beer::Code
Связанное
- Harness Engineering — четвёртая парадигма AI-инженерии — та же логика (context/verification engineering) на уровне индустрии и конкретных инструментов (Claude Code, Codex, Cursor, Devin и др.)