Вы просите модель написать функцию. Получаете что-то среднее. Переписываете запрос вежливее, добавляете «пожалуйста, аккуратно и по best practices». Ответ не меняется. Знакомо? Проблема почти никогда не в формулировке. Промпт - это примерно десять процентов результата. Остальные девяносто - контекст, то есть всё, что модель видит в момент запроса. Разработчики годами шлифуют формулировки и удивляются, почему агент капризничает. А рычаг всё это время лежал в другом месте.

ИИ не помнит ваш разговор

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

Откуда тогда ощущение памяти в чате? Его создаёт обвязка. Оркестратор (Claude Code, Cursor, ChatGPT) каждый раз заново склеивает весь предыдущий разговор и подаёт его модели на вход. Сама модель одинакова и в чате, и в голом API. Меняется только то, что ей скармливают.

Отсюда очень практичный вывод.

Что модель видит на самом деле

Ваш вопрос - это последняя строчка длинного пакета. Перед тем как модель его прочитает, оркестратор собирает пять частей.

  1. Системный промпт. Правила поведения: «ты помогаешь разработчику, отвечай по-русски». Вы его обычно не видите, но он всегда там.
  2. Контракты инструментов. JSON-описания каждого доступного tool: чтения файлов, запуска команд, поиска. У каждого прописаны параметры, и всё это съедает токены (единицы текста для модели, примерно три четверти слова каждая). Один системный промпт Claude Code весит около восьми тысяч токенов.
  3. Файл CLAUDE.md с правилами вашего проекта. Он подгружается автоматически и попадает в самое начало пакета. Запомните эту деталь, через абзац она выстрелит.
  4. История диалога. Все ваши прошлые сообщения и ответы модели в этой сессии.
  5. Ваш запрос. Собственно то, что вы спросили сейчас.

Всё это склеивается в один большой блок текста и уходит модели. Она не знает, где здесь правило, где история, где вопрос. Она видит поток токенов. От того, как этот поток организован, зависит качество ответа.

U-образная кривая внимания

Теперь главное свойство контекста. Внимание модели неоднородно по длине пакета.

В 2023 году исследователи из Стэнфорда спрятали правильный ответ в разных местах длинного документа и замерили точность. Вышла U-образная кривая. В начале - максимум внимания. В середине - провал, точность падает на треть и сильнее. В конце - восстановление. Работу так и назвали, «Lost in the Middle», потерянные в середине. Через пару лет в MIT нашли причину в самой архитектуре трансформеров: механизм позиционного кодирования даёт больше веса краям, чем центру. Это не каприз конкретной модели, это её устройство.

Что с этим делать. Важное кладите в начало и в конец, потому что там две зоны силы, их называют sweet spots. CLAUDE.md читается первым - вот почему это ваш главный рычаг. Ваш запрос идёт последним, это второй сильный участок. А длинная история диалога болтается в середине, в зоне провала.

Зона пакетаВнимание моделиЧто сюда класть
НачалоМаксимумCLAUDE.md, ключевые правила
СерединаПровал, точность падает на третьДлинную историю - что не жалко
КонецВосстановлениеВаш запрос

Вот и разгадка, почему длинные сессии деградируют. Не «модель устала». Важные инструкции просто уехали в середину и потерялись.

Техника растущего промпта

Как формулировать задачу, чтобы агент не переспрашивал по десять раз? Ответ - растущий промпт. Идея непривычная: промпт растёт в отдельном редакторе (Obsidian, VS Code, да хоть блокнот), а в самом агенте всегда висят только два сообщения, ваш запрос и его ответ.

Алгоритм на пять шагов.

  1. Пишете задачу свободным текстом. Коряво - это нормально.
  2. Отправляете агенту с двумя просьбами: найди внутренние противоречия и подсвети, чего не хватает.
  3. Из ответа берёте только то, что откликается. Не всё подряд.
  4. Дописываете это в свой черновик в редакторе, переформулируете.
  5. Заменяете предыдущее сообщение в агенте новой версией. Не продолжаете диалог. Заменяете.

Повторяете, пока модель не перестанет задавать существенные вопросы. Обычно хватает трёх-четырёх кругов.

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

Шесть правил, чтобы агент работал на вас

Соберём всё в короткий чек-лист.

  1. Модель - чистая функция. Ни памяти, ни обучения, только контекст. Каждый запрос с нуля.
  2. Контекст - это девяносто процентов дела, промпт - десять. Не полируйте формулировки, собирайте правильный контекст.
  3. Начало контекста - зона максимального внимания. CLAUDE.md читается первым, держите его коротким и конкретным, строк до полутора сотен.
  4. Растущий промпт: отдельный редактор плюс два сообщения плюс замена. Не продолжайте, заменяйте.
  5. Прогревайте агента перед работой. Сначала общий обзор («изучи проект сверху вниз, изложи понимание»), потом фокус на нужном модуле. Холодный старт даёт мусор и потерянные связи между файлами.
  6. Отдавайте информацию порциями. Индексный файл - это карта, а не склад: аннотированные ссылки, что где лежит и зачем. В коде описывайте, КАК сделано, в документации - ПОЧЕМУ. Смешаете - код и доки разъедутся.

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

Eli Rum

Автор курса Dev Velocity. Пишет об AI-разработке на практике: агенты, контекст, инструменты.