← Context engineering: beyond the prompt
06 / 07 · 50 min

Multi-turn context in production

Conversation history as a liability: cache-friendly request layout, observability of context composition, overflow, and poisoned context.

Lesson content is currently available in Russian.

What you will learn

  • →Проектировать политику истории: скользящее окно, границы сессий, handoff-сводки.
  • →Максимизировать долю кэш-попаданий и считать её экономику в проде.
  • →Строить наблюдаемость состава контекста и лестницу фолбэков при переполнении.

История диалога как ответственность

В продакшене история — не лог, а статья расходов и источник деградации, поэтому у неё должна быть явная политика. Базовый вариант — скользящее окно: системный промпт и инварианты закреплены всегда, последние N ходов хранятся дословно, всё старше — компактится по схеме из четвёртого урока. Наивное «храним всё» гарантированно приводит к квадратичному счёту и context rot; наивное «храним 10 последних сообщений» — к агенту с амнезией, который переспрашивает уже сказанное.

Второй инструмент — границы сессий. Не всякий диалог должен быть бесконечным: смена темы или завершение задачи — естественная точка начать новую сессию с чистым окном. Чтобы не терять преемственность, применяется handoff-сводка: уходящая сессия пишет структурированную передачу (цель, сделанное, решения, следующий шаг), и новая стартует с неё вместо гигабайта истории. Это тот же паттерн, что передача смены у дежурных инженеров.

Цифры для мотивации: диалог поддержки на 100 ходов со средним ходом в 500 токенов при политике «храним всё» суммарно прогоняет через модель порядка 2,5 миллиона токенов истории. Скользящее окно с компакцией сокращает это в 5–10 раз до всяких кэшей. В проде политика истории — это конфиг с числами, а не пожелание: размер горячего окна, порог компакции, правило границы сессии.

Экономика кэша в проде

В пятиминутном TTL кэша Anthropic скрыт важный продакшен-факт: каждое попадание продлевает жизнь кэша, поэтому у активного агента префикс живёт часами, а у чат-бота с редкими сообщениями кэш умирает между репликами — для таких сценариев есть расширенный TTL в один час. У OpenAI кэширование автоматическое от 1024 токенов префикса, со скидкой на кэшированную часть. В обоих случаях выигрыш определяется одним и тем же: насколько стабилен и велик общий префикс ваших запросов.

Посчитаем. Агент со стабильным префиксом в 100 тысяч токенов (системный промпт, инструменты, справка) обрабатывает 500 запросов в день. Без кэша: 500 × 100 000 × 3 доллара за миллион = 150 долларов в день только за префикс. С кэшем: одна запись (×1,25) плюс 499 чтений (×0,1) — около 15 долларов. Разница — 135 долларов в день на одном агенте, порядка четырёх тысяч в месяц.

Чтобы этот выигрыш не растерять, следите за метрикой cache hit rate — долей входных токенов, прочитанных из кэша (поля cache_read_input_tokens в usage ответа). Падение hit rate — сигнал, что кто-то «улучшил» систему: добавил timestamp в системный промпт, включил ротацию инструментов, начал пересортировывать сообщения. Правило для команды: любое изменение верхних блоков запроса — это изменение с денежной ценой, и оно проходит ревью с вопросом «что будет с кэшем».

Наблюдаемость состава контекста

Контекстом нельзя управлять вслепую, поэтому продакшен-агенту нужны три уровня наблюдаемости. Первый — метрики на каждый запрос: суммарные входные и выходные токены, разбивка по источникам (система, инструменты, история, retrieval, память), cache_read и cache_creation из usage. Эти числа пишутся в обычную систему метрик и стоят почти ничего.

Второй уровень — дашборды и алерты: p50/p95 заполнения окна, состав контекста по статьям во времени, cache hit rate, частота компакций. Алерты вешаются на три события: заполнение окна выше порога, падение hit rate ниже базовой линии, всплеск частоты компакций — каждое из них означает, что бюджет из второго урока разошёлся с реальностью.

Третий уровень — трассировка: для отладки нужен точный финальный промпт, ушедший в модель, со всеми подстановками. Логируйте его (с редактированием секретов) хотя бы для сэмпла запросов и для всех сбоев. Девять из десяти «странных ответов модели» объясняются за минуту взгляда на реальный промпт: туда попал мусор, не попал нужный чанк, или инструкция уехала в середину окна. Без трассировки та же отладка превращается в гадание по симптомам. Хорошая практика — кнопка «показать контекст» прямо в админке агента: она окупается первой же инцидент-сессией.

Переполнение, отравленный контекст и фолбэки

Даже с бюджетом и компакцией продакшен встречает крайние случаи, и на них нужна заранее описанная лестница фолбэков. Ступень первая: плановая компакция при 80% заполнения. Ступень вторая: агрессивная чистка — старые результаты инструментов заменяются ссылками, retrieval урезается до минимума. Ступень третья: аварийная граница сессии — текущее состояние сворачивается в handoff-сводку, сессия перезапускается с чистым окном. Каждая ступень логируется: частота срабатываний — метрика здоровья системы.

Отдельный класс проблем — отравленный контекст. Ошибка, попавшая в историю, начинает самоусиливаться: модель видит свой неудачный вызов инструмента, повторяет его, второй провал тоже остаётся в окне — и агент входит в цикл. Похожим образом действует галлюцинация, зафиксированная в истории как факт: все последующие шаги строятся на ней. Детектируйте паттерн: N однотипных неудачных вызовов подряд — стоп, сброс контекста, рестарт с чистым окном и кратким описанием тупика («подход X провален с ошибкой Y, не повторять»).

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

Practice

Спецификация context-middleware

Спроектируйте прослойку управления контекстом для продакшен-агента: политика истории с числами, cache-friendly раскладка, метрики и алерты, лестница фолбэков с детекцией отравленного контекста.

Deliverable

Спецификация: конфиг политики истории, схема раскладки запроса с кэш-границами, список метрик с порогами алертов и псевдокод лестницы фолбэков.

Checkpoint

Cache hit rate агента упал с 85% до 20% после релиза, а стоимость выросла втрое. Опишите порядок диагностики и вероятные первопричины.

  • ✓ Диагностика через трассировку: сравнение финальных промптов до и после релиза, поиск первого изменившегося токена.
  • ✓ Названы типовые причины: динамика в системном промпте, ротация или пересортировка инструментов, редактирование истории.
  • ✓ Предложен процесс-предохранитель: ревью изменений верхних блоков запроса с вопросом о кэше.

Check yourself

Что такое handoff-сводка при границе сессий?

01Что такое handoff-сводка при границе сессий?

Агент со стабильным префиксом 100K токенов делает 500 запросов в день. Что даёт кэш при цене 3 доллара за миллион?

02Агент со стабильным префиксом 100K токенов делает 500 запросов в день. Что даёт кэш при цене 3 доллара за миллион?

Что чаще всего означает внезапное падение cache hit rate после релиза?

03Что чаще всего означает внезапное падение cache hit rate после релиза?

Как проявляется отравленный контекст и что с ним делать?

04Как проявляется отравленный контекст и что с ним делать?

Почему автоматические вмешательства в контекст должны быть видимыми?

05Почему автоматические вмешательства в контекст должны быть видимыми?

Sources

Multi-turn context in production · Context engineering: beyond the prompt · VORCL