Вы наверняка замечали: в начале работы над новой задачей ChatGPT, Claude или другая языковая модель выдает идеальные, точные ответы. Но стоит диалогу разрастись до десятков сообщений, как ИИ начинает повторяться, забывать прошлые условия, галлюцинировать или прямым текстом противоречить сам себе.
Это не баг конкретной модели и не признак того, что сервис «испортился». Это фундаментальное ограничение современных архитектур — переполнение и зашумление контекстного окна.
💡 Главный принцип работы с контекстом:
Контекстное окно нейросети — это RAM (оперативная память), а не жесткий диск. Если оперативная память забита мусором, система начнет «тормозить». Все ненужное прямо сейчас необходимо выносить во внешнюю память.
Почему диалог «тупеет»: Physics of Context Rot
Даже если разработчики заявляют о поддержке 128k или 1M токенов, качество обработки информации не остается равномерным по всей длине. На это влияют три фундаментальных явления:
- Needle in a Haystack («Иголка в стоге сена»): Чем больше объем текста подается на вход (Prompt), тем ниже вероятность того, что механизм внимания (Attention Mechanism) корректно вычленит одиночный ключевой факт из середины контекста.
- Lost in the Middle: Исследования показывают, что LLM наилучшим образом анализируют начало (System Prompt / первичное условие) и самый конец диалога. Инструкции, «захороненные» в середине истории сообщений, теряют приоритет.
- Context Rot (Деградация контекста): Накопленный шум (неудачные генерации, промежуточные уточнения, вежливые фразы) сбивает фокусировку внимания. Модель начинает отталкиваться от собственных ошибочных ответов, создавая «петлю галлюцинаций».
Приём 1: Compaction (Сжатие контекста)
Когда вы чувствуете, что диалог разросся, а модель начинает терять нить — не продолжайте спорить и давить в тот же чат. Это худшая стратегия, которая лишь увеличивает количество шума.
Используйте метод Compaction: попросите модель сжать суть текущего состояния и перенесите эту выжимку в абсолютно чистый диалог.
Готовый промпт для сжатия:
Собери итог нашего диалога:
1. Ключевые принятые решения и почему именно они.
2. Текущее состояние задачи.
3. Важные технические ограничения и детали.
4. Что именно мы делаем дальше.
Формат: краткий структурированный список. Я продолжу работу с этой выжимки в новом чате. Алгоритм действий:
- Отправляете промпт в «старый» раздутый чат.
- Копируете полученную выжимку (Summary).
- Создаете совершенно новый чат (New Chat).
- Вставляете выжимку первым сообщением и продолжаете работу. Модель снова работает со 100% точностью и «острым» вниманием.
Приём 2: Память в файле (Structured Note-Taking)
Для длительных проектов, растягивающихся на дни или недели, метода Compaction недостаточно. Здесь применяется паттерн Structured Note-Taking — ведение внешнего файла памяти.
Вы создаете обычный текстовый файл (project_context.md или .txt), который хранится у вас локально, и при необходимости подгружаете его в начало новой сессии с ИИ. Это не архив всей переписки. Это короткий, редактируемый владельцем проекта источник истины: что мы делаем, какие решения действуют сейчас и что нельзя менять без отдельного согласования.
Что включать в файл памяти проекта:
- Контекст и цели: Описание проекта, стек технологий, целевая аудитория.
- Архитектурные решения: Что было выбрано и почему отказались от альтернатив (чтобы ИИ не предлагал их снова).
- Правила и гайдлайны: Требования к коду, стилистика текста, ограничения по формату.
- Текущий статус (Current State): Что уже сделано и каков следующий шаг.
Для контентного сайта в такой файл можно вынести структуру разделов, правила перелинковки, выбранные URL, требования к переводам, принятый стек и список идей, от которых уже отказались. Для разработки — архитектурные решения, команды проверки, ограничения окружения и статус текущего этапа.
Что хранить в PROJECT_CONTEXT.md
# Project context
Updated: YYYY-MM-DD
## Goal
- Какой результат должен быть получен.
## Current state
- Что уже сделано.
- Что работает сейчас.
## Active decisions
- Решение — почему оно принято.
- Решение — почему оно принято.
## Requirements
- Обязательный формат.
- Технические и редакционные ограничения.
- Язык, стиль, аудитория.
## Rejected options
- Вариант — почему отказались.
## Exact data
- URL, названия, версии, числа и другие значения, которые нельзя искажать.
## Open questions and risks
- Что ещё не проверено или требует решения.
## Next action
- Один ближайший конкретный шаг.
## Change log
- YYYY-MM-DD — что изменилось и почему. Как поддерживать файл памяти
- Держите его коротким: обычно полезнее 50 актуальных строк, чем 500 строк истории.
- Записывайте решения, а не весь ход обсуждения.
- Удаляйте или явно помечайте устаревшие сведения.
- Сохраняйте причины важных решений, чтобы модель не предлагала отменить их без новых оснований.
- После значимого этапа просите модель предложить обновление файла, но проверяйте изменения самостоятельно.
- Не храните в нём пароли, API-ключи, приватные данные клиентов и другую чувствительную информацию.
Сравнение подходов
| Метод | Когда использовать | Главный плюс |
|---|---|---|
| Compaction | Внутри одной рабочей сессии, когда чат превысил ~15–20 сообщений. | Мгновенно очищает окно внимания без потери текущего прогресса. |
| Память в файле | При долгосрочной разработке, написании документации, сквозных проектах. | Полная независимость от истории чатов, быстрый старт в любой LLM. |
Итог
Для эффективной работы с LLM держите по проекту короткий файл-памятку и периодически делайте Compaction внутри активных сессий. Это сэкономит ваше время и избавит от необходимости объяснять одно и то же по десять раз.
⬇️ А как вы спасаете долгие чаты — сжимаете, начинаете заново или ведёте заметки? Делитесь опытом в комментариях!


