Multi-turn стратегия в 2026 — это не просто “передавать историю чата”. Это решение о том, какая часть прошлого разговора должна попасть в текущий вызов, в каком виде и с каким приоритетом. В длинных диалогах проблема почти всегда не в отсутствии памяти как таковой, а в плохом управлении conversation state.
Именно поэтому для multi-turn систем важнее не “больше истории”, а правильный баланс между:
Длинный диалог деградирует по трём причинам:
Поэтому raw chat history почти никогда не является хорошей production memory strategy.
Sliding window — самая простая стратегия: брать только последние N сообщений или последние X токенов.
Плюсы:
Минусы:
Sliding window хорош, когда:
Compaction превращает старую историю в короткий state object или summary, а не держит её целиком.
Это полезно, когда разговор:
Лучший вариант compaction обычно не свободный абзац, а структура:
Иногда проблема не в том, что история старая, а в том, что она вдруг снова становится релевантной. Для этого используют semantic recall: поиск по старым turns или memory fragments по смыслу текущего запроса.
Это особенно полезно, когда:
Но semantic recall редко стоит использовать в одиночку. Ему обычно нужен союз с recent window, иначе модель может получить старый фрагмент без свежего контекста.
Hybrid почти всегда healthiest production pattern:
Именно этот паттерн лучше всего выдерживает:
Не все маршруты разговора требуют одинаковой стратегии.
| Route | Что обычно лучше работает |
|---|---|
| Support | recent turns + compact case state |
| Planning | summary + recent turns + periodic recall |
| Research | summary + semantic recall + citations |
| Coding | task state + recent turns + repo/tool context |
| General chat | sliding window с лёгким summary |
То есть multi-turn strategy должна зависеть не только от длины диалога, но и от типа сценария.
Обычно compaction запускают:
K turns;Нездоровый вариант: откладывать compaction слишком долго и потом сжимать огромный неструктурированный transcript в один плохо контролируемый summary.
Вместо вопроса “какие сообщения сохранить?” часто полезнее вопрос “какой state нужен следующему вызову?”.
Обычно полезно хранить:
Это и есть переход от transcript-first к state-first multi-turn design.
Частые антипаттерны: