Вы просите модель написать функцию. Получаете что-то среднее. Переписываете запрос вежливее, добавляете «пожалуйста, аккуратно и по best practices». Ответ не меняется. Знакомо? Проблема почти никогда не в формулировке. Промпт - это примерно десять процентов результата. Остальные девяносто - контекст, то есть всё, что модель видит в момент запроса. Разработчики годами шлифуют формулировки и удивляются, почему агент капризничает. А рычаг всё это время лежал в другом месте.
ИИ не помнит ваш разговор
Начнём с факта, который ломает интуицию. Языковая модель не запоминает диалог. Совсем. Она работает как чистая функция: подали вход - получили выход, как «два плюс два равно четыре». Результат зависит только от того, что вы подали сейчас, а не от прошлых вызовов.
Откуда тогда ощущение памяти в чате? Его создаёт обвязка. Оркестратор (Claude Code, Cursor, ChatGPT) каждый раз заново склеивает весь предыдущий разговор и подаёт его модели на вход. Сама модель одинакова и в чате, и в голом API. Меняется только то, что ей скармливают.
Отсюда очень практичный вывод.
Что модель видит на самом деле
Ваш вопрос - это последняя строчка длинного пакета. Перед тем как модель его прочитает, оркестратор собирает пять частей.
- Системный промпт. Правила поведения: «ты помогаешь разработчику, отвечай по-русски». Вы его обычно не видите, но он всегда там.
- Контракты инструментов. JSON-описания каждого доступного tool: чтения файлов, запуска команд, поиска. У каждого прописаны параметры, и всё это съедает токены (единицы текста для модели, примерно три четверти слова каждая). Один системный промпт Claude Code весит около восьми тысяч токенов.
- Файл
CLAUDE.mdс правилами вашего проекта. Он подгружается автоматически и попадает в самое начало пакета. Запомните эту деталь, через абзац она выстрелит. - История диалога. Все ваши прошлые сообщения и ответы модели в этой сессии.
- Ваш запрос. Собственно то, что вы спросили сейчас.
Всё это склеивается в один большой блок текста и уходит модели. Она не знает, где здесь правило, где история, где вопрос. Она видит поток токенов. От того, как этот поток организован, зависит качество ответа.
U-образная кривая внимания
Теперь главное свойство контекста. Внимание модели неоднородно по длине пакета.
В 2023 году исследователи из Стэнфорда спрятали правильный ответ в разных местах длинного документа и замерили точность. Вышла U-образная кривая. В начале - максимум внимания. В середине - провал, точность падает на треть и сильнее. В конце - восстановление. Работу так и назвали, «Lost in the Middle», потерянные в середине. Через пару лет в MIT нашли причину в самой архитектуре трансформеров: механизм позиционного кодирования даёт больше веса краям, чем центру. Это не каприз конкретной модели, это её устройство.
Что с этим делать. Важное кладите в начало и в конец, потому что там две зоны силы, их называют sweet spots. CLAUDE.md читается первым - вот почему это ваш главный рычаг. Ваш запрос идёт последним, это второй сильный участок. А длинная история диалога болтается в середине, в зоне провала.
| Зона пакета | Внимание модели | Что сюда класть |
|---|---|---|
| Начало | Максимум | CLAUDE.md, ключевые правила |
| Середина | Провал, точность падает на треть | Длинную историю - что не жалко |
| Конец | Восстановление | Ваш запрос |
Вот и разгадка, почему длинные сессии деградируют. Не «модель устала». Важные инструкции просто уехали в середину и потерялись.
Техника растущего промпта
Как формулировать задачу, чтобы агент не переспрашивал по десять раз? Ответ - растущий промпт. Идея непривычная: промпт растёт в отдельном редакторе (Obsidian, VS Code, да хоть блокнот), а в самом агенте всегда висят только два сообщения, ваш запрос и его ответ.
Алгоритм на пять шагов.
- Пишете задачу свободным текстом. Коряво - это нормально.
- Отправляете агенту с двумя просьбами: найди внутренние противоречия и подсвети, чего не хватает.
- Из ответа берёте только то, что откликается. Не всё подряд.
- Дописываете это в свой черновик в редакторе, переформулируете.
- Заменяете предыдущее сообщение в агенте новой версией. Не продолжаете диалог. Заменяете.
Повторяете, пока модель не перестанет задавать существенные вопросы. Обычно хватает трёх-четырёх кругов.
Почему заменять, а не продолжать? Причина в той же кривой внимания. Каждое промежуточное сообщение добавляет шум в середину. Хуже того: если в первой итерации агент выдал неудачный код, этот код остаётся в контексте, и модель тянется «продолжать в том же духе». А чистый, собранный бриф в начале свежей сессии читается максимально чётко.
Шесть правил, чтобы агент работал на вас
Соберём всё в короткий чек-лист.
- Модель - чистая функция. Ни памяти, ни обучения, только контекст. Каждый запрос с нуля.
- Контекст - это девяносто процентов дела, промпт - десять. Не полируйте формулировки, собирайте правильный контекст.
- Начало контекста - зона максимального внимания.
CLAUDE.mdчитается первым, держите его коротким и конкретным, строк до полутора сотен. - Растущий промпт: отдельный редактор плюс два сообщения плюс замена. Не продолжайте, заменяйте.
- Прогревайте агента перед работой. Сначала общий обзор («изучи проект сверху вниз, изложи понимание»), потом фокус на нужном модуле. Холодный старт даёт мусор и потерянные связи между файлами.
- Отдавайте информацию порциями. Индексный файл - это карта, а не склад: аннотированные ссылки, что где лежит и зачем. В коде описывайте, КАК сделано, в документации - ПОЧЕМУ. Смешаете - код и доки разъедутся.
С чего начать сегодня. Возьмите задачу из бэклога, прогрейте агента двумя шагами, соберите бриф растущим промптом за три итерации, сохраните финальную версию в файл. Когда увидите разницу между холодным «напиши как-нибудь» и собранным контекстом, обратно уже не захочется.
Eli Rum
Автор курса Dev Velocity. Пишет об AI-разработке на практике: агенты, контекст, инструменты.