Инженерия контекста для агентов с длительной работой: векторные базы данных, KV-кэш, Claude Code
Инженерия контекста для агентов, выполняющих 200 шагов: почему длинные контексты разрушаются, экономика KV-кэша, память векторной базы данных и в чём различия между Claude Code и другими решениями.
Источники: Context Engineering Architecture Patterns for AI Agents — A Practitioner’s Guide
Написано много текстов о том, что такое инжиниринг контекста. Гораздо меньше внимания уделяется вопросу, с которым сталкивается разработчик на практике: как следует спроектировать систему обработки контекста для агента, выполняющего 200 шагов? Окно объемом в миллион токенов кажется щедрым, однако исследование Chroma 2025 года, посвященное 18 передовым моделям, показало, что качество начинает снижаться, когда окно заполняется на 50–70 процентов. Далее приведена схема решения этой проблемы, предназначенная для тех, кто разрабатывает производственные агенты. В ней рассматриваются причины ухудшения качества при длинных контекстах, модель памяти, заимствованная из архитектуры компьютеров, четыре подхода к управлению контекстом, экономика использования кэша KV, различия между тремя известными продуктами, а также алгоритм принятия решений с использованием показателей.
Агент без модели памяти страдает амнезией
Представьте агента, который правильно выполняет шаги с 1 по 40. На 41-м шаге он, кажется, забывает о цели и начинает повторять уже принятые решения. Это редко бывает ошибкой логики. Это ухудшение контекста — измеримое снижение качества ответов по мере увеличения длины входных данных. Чем больше информации получает модель, тем больше она фактически теряет.
Исследования, опубликованные Zylos AI в 2026 году, показывают то же самое: удвоение продолжительности задачи, как утверждается, увеличивает вероятность сбоя в четыре раза, а качество работы агентов, по-видимому, снижается примерно через 35 минут выполнения задачи. В вышеупомянутом исследовании Chroma было обнаружено, что все 18 моделей теряли качество работы по мере увеличения объема контекста. Бенчмарк NoLiMa (ICML 2025) показал еще более выраженные результаты: уже при 32K токенах 11 из 13 моделей показывали результаты ниже половины своих базовых показателей, несмотря на заявленную способность обрабатывать 128K или более токенов, а у GPT-4o показатель снизился с 99,3% до 69,7%.
Почему механизм разложения встроен в модель
Механизм внимания трансформеров сравнивает каждый токен со всеми остальными токенами. Поэтому удвоение длины текста приводит к увеличению вычислительных затрат примерно в четыре раза, а не в два. При 200 тысячах токенов это означает около 40 миллиардов пар внимания на каждый слой. Попытка включить всё в контекст просто не позволяет модели эффективно работать при обработке сотен шагов.
Вторым эффектом является ситуация, когда информация «теряется посередине». Модели лучше всего справляются с началом и концом длинного контекста, но теряют точность в его середине, из-за чего важные данные, находящиеся там, могут стать практически незаметными. Как ни странно, текст, который кажется логичным и хорошо структурированным, но несущественным, снижает точность больше, чем одинаковые предложения, случайным образом переставленные местами. Семантическое сходство среди шума затрудняет поиск настоящего сигнала.
Рекламируемый размер окна также вводит в заблуждение. Модель, способная обработать миллион токенов, не обеспечивает миллион токенов полезной емкости.
Тревога из-за контекста
Пользователи заметили, и компания Anthropic это подтвердила, ещё одну особенность: Claude Sonnet 4.5 имел тенденцию слишком рано завершать задачи при приближении к лимиту контекста. Это явление называют тревогой из-за контекста. Модель ведёт себя так, будто у неё заканчивается оперативная память, и останавливается до того, как её ресурсы действительно исчерпаются.
Поскольку ухудшение качества работы невозможно избежать, архитектура агента должна с этим справляться. Здесь помогает давняя аналогия из инженерии систем.
Модель — это процессор, контекст — оперативная память, векторная база данных — диск
В середине 2025 года Андрей Карпати выступил в поддержку «инженерии контекста» вместо «инженерии промптов», описав её как тонкое искусство и науку заполнения окна контекста именно той информацией, которая необходима для следующего шага. Он не придумывал новый термин — он указывал на смену точки зрения: большая языковая модель выполняет роль процессора, окно контекста — оперативной памяти, а инженер, создающий агента, играет роль операционной системы.
Эта аналогия вполне естественно находит отражение на практике. Компактизация информации напоминает процесс сбора мусора, внедрение состояния — последовательность загрузки системы, подагенты — изоляцию процессов, а файл вроде CLAUDE.md представляет собой конфигурацию, загружаемую при запуске. Изменяется лишь акцент: меньше внимания уделяется формулировке промпта, больше — тому, что загружается в память и в какое время.
Иерархия памяти для агентов
У агента такая же иерархия, как и у компьютера, причем каждый уровень идет на компромисс между скоростью и объемом:
- Память работы в контексте. Отсутствие дополнительной задержки, объем от 200 тыс. до 1 млн токенов. Соответствует регистрам и кэшу L1: самая быстрая, самая дорогая и самая ограниченная по объему.
- Кэш KV. Задержка менее 10 мс. Сопоставим с кэшем L2 или L3, хранит матрицы внимания, предварительно вычисленные для более ранних токенов, и сохраняет их между запросами.
- Векторная база данных или семантический поиск. Задержка примерно от 5 до 50 мс, объем — миллионы записей; соответствует оперативной памяти. Указанные показатели включают примерно 0,34 мс на запрос при использовании FAISS локально и 7 мс p99 для Pinecone.
- Файловая система или заметки. Задержка выше 100 мс, реального лимита по объему нет, как у диска.
- Архивное хранилище. Время чтения в секундах, сопоставимо с сетевым или резервным хранилищем.
Каждое решение относительно местоположения информации представляет собой компромисс между затратами, задержками и пропускной способностью. Неправильный выбор уровня приводит либо к высоким расходам, либо к тому, что агент забывает информацию. Работа MemGPT 2023 года, широко цитируемая в научной литературе, сформулировала эту идею под названием «управление виртуальным контекстом», основанную на принципах управления многорежимной памятью операционными системами. Эта концепция продолжает развиваться сегодня в рамках фреймворка Letta.
Если контекст находится в ОЗУ агента, какие шаблоны используются для его управления в реальных системах и как они взаимосвязаны?
Четыре шаблона: запись, выбор, сжатие, изоляция
Инженерия контекста основывается на четырех базовых шаблонах. Они не являются альтернативами, между которыми нужно выбирать; они представляют собой взаимодополняющие элементы единого комплексного дизайна, и каждый производственный агент в конечном итоге использует все четыре.
Запись: сохранение состояния вне рамок контекста
Письмо означает внешнее представление состояния. Агент сохраняет заметки в файле вроде todo.md, NOTES.md или progress.md и снова их читает на более поздних этапах. Manus известен техникой «декламации списка задач»: агент постоянно переписывает свой список задач в самом конце контекста, чтобы внимание модели было сосредоточено на общем плане. Это осознанное направление внимания, которое противодействует эффекту потери информации на промежуточных этапах.
В эксперименте с игрой Pokémon Claude Opus 4, как сообщается, вел точные записи на протяжении тысяч игровых ходов, отслеживая уровни персонажей, карты и стратегии, при этом не получая явных указаний относительно структуры своей памяти.
Выбор: загрузка только по мере необходимости
Выбор этого подхода означает загрузку контекста по мере необходимости, а не его предварительную загрузку. CLAUDE.md выполняет функцию статической предзагрузки, подобно документу с инструкциями, который дают новому сотруднику в первый же день. После этого агент исследует кодовую базу с помощью инструментов grep и glob, загружая только то, что необходимо на текущем этапе.
Сообщается, что Claude Code пробовал векторные базы данных, но отказался от них из-за того, что код может выходить из синхронизации, а права доступа становятся сложными в управлении. Cursor пошел другим путем, сосредоточившись на динамическом поиске с использованием семантической индексации. Согласно отчетам, A/B-тест показал сокращение количества токенов на 46,9%, когда агент загружал инструменты MCP по требованию.
Сжатие: уменьшение объема
Сжатие означает уменьшение объема путем краткого изложения или обрезки информации. Метод сжатия предполагает, что большая языковая модель кратко излагает прошедший диалог, освобождая пространство в окне визуализации при сохранении важной информации.
Сообщается, что Claude Code предупреждает о достижении примерно 80% загрузки и автоматически компактирует данные при уровне около 95%, сохраняя при этом архитектурные решения. Чрезмерно агрессивная компактация приводит к потере тонких, но важных контекстных данных, и агент начинает повторно исследовать уже пройденные участки. На практике оптимальным уровнем сжатия для производственных задач считается значение от 3 до 6 раз. В академических тестах отмечаются гораздо более высокие коэффициенты сжатия (LLMLingua указывает на 20 раз с потерей точности всего 1,5 балла для формата GSM8K), однако в производственных условиях требуется более высокая точность.
Изоляция: разделение с помощью подагентов
Изоляция означает разделение контекстов. Специализированный детский агент работает в собственном окне контекста и возвращает своему родителю сокращенный результат. Он может обработать 10 тысяч токенов или больше, но вернуть лишь краткое резюме из 1–2 тысяч токенов, что значительно меньше, чем можно было бы накопить в общем контексте. Manus использует принцип, заимствованный из Go: не обменивайтесь данными путем совместного использования памяти, а совместно используйте память путем обмена данными.
Важно не то, какой шаблон выбрать, а как их комбинировать и когда каждый из них должен сработать. Написание кода и его выбор являются первой линией защиты, а сжатие и изоляция — способом масштабирования системы.
Одна из составляющих управления контекстом оказывает огромное влияние на производственные затраты и часто игнорируется на этапе проектирования.
Уровень успешных запросов к кэшу KV — ключевой показатель
Кэш KV хранит матрицы внимания, уже вычисленные для более ранних токенов, поэтому модели не нужно пересчитывать их для каждого нового токена. Представьте себе базу данных, которая заранее вычисляет результаты объединения данных для часто используемых префиксов запросов. В одном тесте с GPT-2 генерация 200 токенов занимала 11,9 секунды с использованием кэша и 56,2 секунды без него, что соответствует ускорению примерно в 4,7 раза.
Почему это влияет на экономику агентов
У типичного производственного агента соотношение входных и выходных данных составляет около 100 к 1, в то время как у чат-бота оно примерно 1 к 1. Пересчёт всего входного данных занимает основную часть времени при каждом вызове. Кэширование подсказок — это механизм с стороны поставщика, который хранит вычисленные токены для одинаковых префиксов между запросами, что делает операции чтения примерно в десять раз дешевле. Для Claude Sonnet указанные цены составляют 0,30 доллара за миллион кэшированных токенов против 3,00 доллара за токены без кэширования.
Таким образом, перестройка дизайна контекста вокруг кэша KV позволяет значительно снизить ежемесячные расходы на API — с 8 000 долларов до 800 долларов, что соответствует десятикратной скидке на кэширование, предлагаемой Anthropic. Ичао «Пик» Цзи, один из основателей Manus, отмечал, что для агента в производственной среде нет ничего важнее того, как часто происходят обращения к кэшу KV.
Три правила для поддержания активности кэша
- Стабильный префикс. Разница в один токен приводит к неудачному поиску в кэше. Одной из ошибок, на которые указывает Manus, является добавление временной метки в начало системного запроса: это позволяет модели определять время и снижает коэффициент успешных обращений к кэшу.
- Контекст с возможностью только добавления. В контекст можно добавлять только новую информацию, никогда не изменять уже имеющуюся. История остается неизменной, поскольку любые изменения приводят к неудачному поиску в кэше. Сериализация в формате JSON также должна быть детерминистичной, поскольку порядок ключей имеет значение.
Существует также проблема масштабирования, иногда называемая «налогом MCP». Предположим, 10–15 инструментов каждый содержат от 10 тыс. до 15 тыс. токенов определений. Это уже 100 тыс.–225 тыс. токенов дополнительных затрат до того, как пользователь что-либо введёт. Для 1 000 разработчиков, проводящих по пять сессий в день, приблизительная оценка показывает, что только на определения инструментов тратится около 1,2 миллиона долларов в год. Решением является постепенное отображение: загружать инструменты в нужный момент, а не сразу все.
Показатели успешных обращений к кэшу и четыре шаблона — это теория. Как они выглядят в системах, уже столкнувшихся с этой проблемой в реальных условиях?
Claude Code и ещё два продукта, три философии
Claude Code, Cursor и Manus предлагают три логичных, но разных решения одной и той же проблемы. Каждое из них основано на собственном контексте работы инструмента, а не на незнании альтернатив.
Claude Code: статическая загрузка заранее плюс чтение в момент необходимости
Claude Code от Anthropic загружает файл CLAUDE.md в начале сессии в качестве документа с описанием функций, а затем использует команды glob и grep для поиска в кодовой базе без применения векторных баз данных. Инструмент автоматически сжимает данные примерно на 95% и сохраняет архитектурные решения. Сочетание инструмента для работы с памятью и функций редактирования контекста, по сообщениям, позволило добиться улучшения на 39% по сравнению с базовым вариантом.
Из-за проблем с контекстом у версии Sonnet 4.5 модели требовались внешние сбросы контекста. По сообщениям, Anthropic решил эту проблему в более поздних версиях модели, не изменяя архитектуру инструмента.
Cursor: два уровня обработки и динамическое поиск
Cursor (разработанный Anysphere) разделяет «контекст намерения», то есть то, о чём просит пользователь, и «контекст состояния», то есть актуальное состояние файлов, внесённых изменений и ошибок. По умолчанию он читает только первые 250 строк любого файла — это осознанный выбор, позволяющий сэкономить токены и деньги.
Значимое изменение произошло в январе 2026 года. Компания Cursor заявила, что по мере улучшения моделей в качестве агентов стало эффективнее предоставлять меньше информации сразу и позволять агенту самостоятельно извлекать необходимый контекст. Ранее упомянутый тест A/B показал сокращение использования токенов на 46,9% по сравнению с загрузкой по требованию.
Manus: градиентный спуск методом проб и ошибок
Manus называет свой подход «стохастическим спуском по градиенту», причем файловая система выступает в роли окончательного контекста. Сообщается, что с марта 2025 года команда пять раз переписывала свою платформу. Как отмечает Джи, инженерия контекста оказалась совсем не простой задачей и представляет собой экспериментальную науку.
Команде приписывают шесть принципов:
- В первую очередь используйте кэш KV.
- Используйте инструменты маскировки вместо их удаления, чтобы сохранить кэш.
- Рассматривайте файловую систему как неограниченную внешнюю память.
- Перечитывайте список задач, чтобы сосредоточить внимание на общем плане.
- Держите ошибки в контексте, поскольку их удаление уничтожает доказательства.
- Изменяйте шаблоны сериализации, чтобы избежать ловушки ограниченного количества примеров.
Чему учит сравнение
Нет единственно правильной философии. Claude Code предназначен для длительных сессий программирования, требующих стабильности. Cursor ориентирован на краткие сессии с поддержкой, которые динамически реагируют на контекст редактора. Manus создан для полностью автономных веб-агентов, выполняющих 50 и более вызовов инструментов за задачу. Пять пересборок в Manus показывают одну основную вещь: инжиниринг контекста — это эмпирическая дисциплина, а не шаблон, который создаётся один раз и используется всегда. Каждая производственная система будет проходить собственные итерации.
Легко предположить, что увеличение объёма данных решит проблему, ведь миллион токенов должно быть достаточно. Однако данные NoLiMa и Chroma быстро опровергают это предположение. Claude 4 Sonnet демонстрирует заметно лучшую устойчивость к ухудшению контекста по сравнению с более старыми моделями, но это исключение, подтверждающее правило, а не доказательство того, что проблема исчезла.
Эти системы и шаблоны описывают то, что работает. Остаётся преобразовать их в конкретные дизайнерские решения для определённого агента и выяснить, выполняет ли дизайн контекста свою функцию.
План действий: что использовать и что измерять
Статья 2026 года о многопроцессорной архитектуре в корпорациях (arXiv:2603.09619, посвящённая переходу от промптов к инженерии контекста) предлагает пять критериев качества контекста и рассматривает контекст как операционную систему агента:
- Релевантность. Является ли информация актуальной для текущего этапа принятия решения? Нерелевантный контекст непосредственно ведёт к ошибкам.
- Достаточность. Имеет ли агент всё необходимое без необходимости догадок?
- Изоляция. Являются ли контексты агентов должным образом разделены, чтобы данные тенанта А никогда не просачивались к тенанту Б?
- Экономия ресурсов. Является ли контекст минимальным набором токенов с высокой значимостью? Каждый ненужный токен истощает ресурсы внимания.
- Происхождение данных. Можно ли отследить источник каждого элемента контекста? Это важно для отладки.
Пути принятия решений
Для короткой задачи, состоящей примерно из 20 шагов без долгосрочных зависимостей, достаточно использовать окно скроллинга. Сохраняйте последние N ответов вместе с основными инструкциями системы. Это не требует дополнительных ресурсов, а реализация остается самой простой.
Для длительной задачи, где решение на 5-м шаге влияет на 50-й шаг, используйте метод сжатия, сохраняющий архитектурные решения. Предупреждайте при примерно 80% загрузки и автоматически сжимайте данные при примерно 95%.
Для независимых подзадач с более чем 10 инструментами используйте подагентов, которые генерируют краткие резюме объемом от 1 до 2 тысяч токенов, причем каждый из них работает в отдельном окне.
Для большого количества инструментов, но коротких сессий загружайте их по мере необходимости, а не заранее. Постепенное раскрытие информации позволяет избежать избыточной нагрузки.
Что необходимо отслеживать
Без этих показателей архитектура контекста не обладает возможностями для наблюдения:
- Скорость роста количества токенов. Постоянный монотонный рост указывает на отсутствие стратегии сжатия данных. Характерный зубчатый рост, сброс и снова рост свидетельствуют о работоспособности стратегии сжатия.
- Коэффициент успешных запросов к кэшу KV. Значение ниже 50% говорит о том, что что-то в префиксе системного запроса постоянно меняется. Сначала проверьте временные метки и другие динамические элементы.
- Гипертеза 35 минут. По-видимому, производительность агентов снижается примерно через 35 минут выполнения задачи, поэтому планируйте контрольные точки с учётом этого срока.
- Амнезия после сжатия. Если агент снова исследует уже пройденные им области, вероятно, процесс сжатия слишком интенсивен.
У тех, кто разрабатывает такие системы, есть одна значимая проблема: отсутствует стандартный показатель для оценки информации, потерянной в процессе сжатия. Ошибка проявляется позже, а не в момент сжатия. Оптимальное время для сжатия по-прежнему остаётся открытым вопросом — слишком раннее сжатие тратит время, а слишком позднее приводит к ухудшению качества.
SWE-ContextBench (arXiv:2602.08316) подтверждает это, показав, что нефильтрованный или неправильно выбранный опыт приносит ограниченную или даже отрицательную пользу. Больше контекста не всегда лучше, а плохой контекст активно вредит.
Правила проектирования контекста для долгосрочных агентов
Проектирование конвейера обработки контекста — это отдельный вопрос от вопроса о том, что такое инженерия контекста, и из этого следует несколько выводов.
- Ухудшение качества контекста — это физическая особенность трансформеров. Лучшая модель эту проблему не решает; её решает архитектура памяти.
- Модель соответствует процессору, контекст — оперативной памяти, а инженерия контекста — операционной системе агента, что переводит обсуждение из области лингвистики в область инженерии систем.
- Запись, выбор, сжатие и изоляция — это взаимодополняющие этапы, а не альтернативы, и каждый производственный агент использует все четыре.
- Важным показателем является коэффициент успешных обращений к кэшу KV, а одна лишняя дата в системном промпте может увеличить ежемесячный счёт на десятки тысяч долларов.
- Не существует единственно верной философии, как показывают Claude Code, Cursor и Manus.
- Хорошее проектирование контекста подразумевает наличие пяти критериев качества вместе с измеримыми показателями, а не интуиции.
Практическим первым шагом является уделение контексту приоритетного внимания на следующем обзоре проектирования агента: где хранится состояние, как обрабатывается кэш KV, каков порог сжатия и какие подзадачи передаются подагентам. Это не просто настройка производительности — это основа функционирующей системы.