Multi-turn Context Strategies

Multi-turn Context Strategies в 2026: sliding window, compaction, semantic recall, hybrid state и route-aware conversation handling.

Multi-turn стратегия в 2026 — это не просто “передавать историю чата”. Это решение о том, какая часть прошлого разговора должна попасть в текущий вызов, в каком виде и с каким приоритетом. В длинных диалогах проблема почти всегда не в отсутствии памяти как таковой, а в плохом управлении conversation state.

Именно поэтому для multi-turn систем важнее не “больше истории”, а правильный баланс между:

  • свежими turns;
  • compact summary старого состояния;
  • semantic recall нужных фрагментов;
  • output reserve и budget discipline.
Если разговор долгий, модели не нужно помнить каждую фразу дословно. Ей нужно помнить главное: что уже решили, какие ограничения есть сейчас и что обсуждали совсем недавно.

Короткая версия

Четыре основные стратегии:

СтратегияЧто делаетКогда хороша
Sliding windowдержит только последние сообщениякороткие support и chat-сценарии
Compaction / summaryсжимает старый диалог в stateдлинные разговоры по одной теме
Semantic recallподтягивает старые релевантные turnsразговоры с возвратом к старым темам
Hybridсочетает window + summary + recallproduction assistants и agents

Практический вывод

Для большинства production-систем лучше всего работает не “чистая” одна стратегия, а гибрид:

  • последние 2-6 turns дословно;
  • summary старого состояния;
  • 1-3 старых релевантных сообщения по необходимости.
ПромптHybrid multi-turn
Контекст:
- summary: пользователь уже выбрал Токио, бюджет 200К, даты 5-15 мая
- recent turns: обсуждали район Shinjuku
- semantic recall: 1 старое сообщение про интерес к аниме-районам

Новый вопрос: «А какой день лучше выделить под Akihabara?»
Ответ модели

Модель понимает и общий план поездки, и свежий контекст про район, и старое предпочтение пользователя по аниме. Для такого вопроса полный transcript не нужен.

1. Почему multi-turn ломается

Длинный диалог деградирует по трём причинам:

  1. история растёт быстрее, чем budget;
  2. важные факты оказываются глубоко в прошлом;
  3. transcript полон шума, завершённых веток и неактуальных деталей.

Поэтому raw chat history почти никогда не является хорошей production memory strategy.

2. Sliding Window

Sliding window — самая простая стратегия: брать только последние N сообщений или последние X токенов.

Плюсы:

  • очень простая реализация;
  • минимальный overhead;
  • хорошо работает для коротких сервисных сценариев;
  • предсказуемое budget behavior.

Минусы:

  • теряет ранние user constraints;
  • забывает цели и решения, принятые давно;
  • плохо переживает длинные консультации, planning и research.

Sliding window хорош, когда:

  • сессии короткие;
  • разговор в основном локальный и не требует дальнего контекста;
  • бизнес-логика может хранить критичные факты вне transcript.

3. Compaction / Summary State

Compaction превращает старую историю в короткий state object или summary, а не держит её целиком.

Это полезно, когда разговор:

  • долгий;
  • развивается вокруг одной задачи;
  • содержит решения, ограничения и pending actions.

Лучший вариант compaction обычно не свободный абзац, а структура:

  • цель пользователя;
  • принятые решения;
  • ограничения;
  • открытые вопросы;
  • важные факты;
  • последний статус задачи.
Без техники
{ "title": "Плохо", "content": "40 сообщений истории передаются в каждый следующий запрос." }
С техникой
{ "title": "Лучше", "content": "Последние 4 turns остаются дословно, а старая часть схлопывается в summary state: цель, решения, ограничения, open questions." }

4. Semantic Recall

Иногда проблема не в том, что история старая, а в том, что она вдруг снова становится релевантной. Для этого используют semantic recall: поиск по старым turns или memory fragments по смыслу текущего запроса.

Это особенно полезно, когда:

  • разговор прыгает между темами;
  • пользователь возвращается к раннему решению;
  • важный факт обсуждали давно;
  • нужен recall без полного transcript.

Но semantic recall редко стоит использовать в одиночку. Ему обычно нужен союз с recent window, иначе модель может получить старый фрагмент без свежего контекста.

5. Hybrid Strategy

Hybrid почти всегда healthiest production pattern:

  1. Recent window для свежей continuity.
  2. Summary state для длинной истории.
  3. Semantic recall для дальних релевантных фрагментов.

Именно этот паттерн лучше всего выдерживает:

  • support conversations;
  • planning assistants;
  • research chats;
  • coding copilots;
  • multi-step agents.
Типичный hybrid budget
Recent turns40%
Summary state20%
Semantic recall15%
Instructions / tools / reserve25%

6. Route-aware multi-turn handling

Не все маршруты разговора требуют одинаковой стратегии.

RouteЧто обычно лучше работает
Supportrecent turns + compact case state
Planningsummary + recent turns + periodic recall
Researchsummary + semantic recall + citations
Codingtask state + recent turns + repo/tool context
General chatsliding window с лёгким summary

То есть multi-turn strategy должна зависеть не только от длины диалога, но и от типа сценария.

7. Когда делать compaction

Обычно compaction запускают:

  • по превышению token threshold;
  • каждые K turns;
  • при смене этапа задачи;
  • при завершении подзадачи;
  • перед переносом сессии в долгоживущую память.

Нездоровый вариант: откладывать compaction слишком долго и потом сжимать огромный неструктурированный transcript в один плохо контролируемый summary.

8. Что именно хранить в multi-turn state

Вместо вопроса “какие сообщения сохранить?” часто полезнее вопрос “какой state нужен следующему вызову?”.

Обычно полезно хранить:

  • current task;
  • known constraints;
  • chosen options;
  • open questions;
  • latest tool outcomes;
  • unresolved risks.

Это и есть переход от transcript-first к state-first multi-turn design.

9. Что обычно ломает качество

Частые антипаттерны:

  • хранить всю историю всегда;
  • summary без структуры;
  • semantic recall без свежего window;
  • дублировать одни и те же факты в summary, memory и recent turns;
  • забывать про output reserve.

Плюсы

  • Позволяет удерживать continuity без бесконечного transcript
  • Снижает token spend на длинных диалогах
  • Делает multi-turn сценарии устойчивее и предсказуемее
  • Помогает разделить свежий state и долгоживущую память

Минусы

  • Требует extra logic для summary и recall
  • Плохо структурированный summary быстро дрейфует
  • Semantic recall добавляет инфраструктурную сложность
  • Неправильный hybrid легко превращается в дублирующийся шум

Пример simple hybrid buffer

from dataclasses import dataclass, field


@dataclass
class ConversationState:
    summary: str = ""
    recent_turns: list[dict] = field(default_factory=list)
    recalled_turns: list[dict] = field(default_factory=list)


def build_multi_turn_context(state: ConversationState) -> list[dict]:
    messages: list[dict] = []

    if state.summary:
        messages.append(
            {
                "role": "system",
                "content": f"[Conversation state]\n{state.summary}",
            }
        )

    messages.extend(state.recalled_turns[:3])
    messages.extend(state.recent_turns[-4:])
    return messages

Здесь важна сама идея:

  • summary state живёт отдельно;
  • recalled turns не подменяют свежий window;
  • recent turns ограничены по размеру.
Проверьте себя

1. Почему raw transcript редко хорош как единственная multi-turn стратегия?

2. Что чаще всего работает лучше в production?

3. Что лучше суммаризировать?