Ты час разговариваешь с ChatGPT. Даёшь контекст, объясняешь задачу, уточняешь детали. А потом модель вдруг начинает противоречить тому, что говорила раньше. Забывает имя персонажа которое ты указал в самом начале. Спрашивает то, о чём вы уже договорились.
Первая реакция - что-то сломалось. Но это не баг. Это фундаментальное ограничение архитектуры, у которого есть название и объяснение.
Модель не помнит - она читает
Главное заблуждение про языковые модели - что у них есть память. Что где-то внутри хранится история ваших разговоров, и модель к ней обращается.
Это не так.
Каждый раз когда ты отправляешь сообщение, модель получает один большой кусок текста - весь диалог с самого начала до твоей последней фразы. Она читает его целиком, с нуля, как будто видит впервые. Никакой памяти между запросами нет. Есть только этот текст.
Контекстное окно - это максимальный размер такого куска. Всё что влезло - модель видит. Всё что не влезло - для неё не существует. Совсем.
Хорошая аналогия: представь человека с очень избирательной амнезией. Он блестяще анализирует любой текст который ты кладёшь перед ним на стол. Но стол ограничен по размеру. Как только новые листы начинают вытеснять старые - старые падают на пол и человек их больше не видит. И не знает что они вообще были.
Токены: как измеряется контекст
Размер контекстного окна измеряется не в словах и не в символах - в токенах. Токен это примерно четыре символа в английском тексте, чуть больше в русском. Одно обычное слово - один-два токена. Редкое слово или имя собственное - может быть три и больше.
На практике это выглядит так. Одна страница текста - примерно 500 токенов. Средний роман - около 100 тысяч токенов. Один типичный запрос с небольшим контекстом - несколько сотен токенов.
Теперь цифры по моделям. Ранние версии GPT-3 работали с окном в 4 тысячи токенов - примерно восемь страниц текста. GPT-4 расширил это до 8-32 тысяч в зависимости от версии. Claude работает с окнами до 200 тысяч токенов. Gemini заявляет миллион.
Кажется что миллион токенов решает проблему навсегда. Но это не совсем так - и вот почему.
Потеря в середине: модель видит но не замечает
Вот где начинается самое интересное. Исследователи обнаружили эффект который назвали «lost in the middle» - потеря в середине.
Даже когда весь диалог технически влезает в контекстное окно - модель обрабатывает его неравномерно. Информация из начала и конца запроса воспроизводится значительно лучше чем из середины. Середина размывается.
Почему так происходит - вопрос к механизму внимания. Модель вычисляет насколько каждый токен важен для текущего предсказания. Токены из начала и конца получают больше внимания - возможно потому что начало задаёт общий контекст задачи, а конец - самый свежий запрос. Середина оказывается в слепой зоне.
Практическое следствие: если ты дал важную инструкцию в середине длинного диалога - не рассчитывай что модель её хорошо помнит. Даже если формально она в окне. Клади важное в начало или повторяй перед финальным запросом.
Что происходит когда контекст заканчивается
Разные модели ведут себя по-разному когда диалог вырастает за пределы окна.
Самый распространённый сценарий - тихое обрезание. Модель просто перестаёт видеть самые старые сообщения. Никакого предупреждения. Ты думаешь что она помнит контекст из начала разговора - она его уже не видит. Это источник большинства ситуаций «модель внезапно забыла».
Второй вариант - деградация качества. Модель формально видит весь контекст но начинает путаться, противоречить себе, давать менее точные ответы. Это признак что окно переполнено или близко к пределу.
Третий - честное сообщение об ошибке. Редко, но бывает: модель прямо говорит что контекст слишком длинный. Это самый честный вариант, хотя и самый редкий.
Как работать с контекстом грамотно
Понимание проблемы сразу даёт несколько практических решений.
Важное - в начало или в конец. Если есть ключевые инструкции или ограничения - размести их либо в самом начале системного промпта, либо повторяй перед финальным запросом. Середина - слепая зона.
Начинай новый чат при смене темы. Длинный диалог по одной теме а потом резкий поворот - плохая идея. Контекст будет тянуть модель к старой теме. Новая задача - новый чат.
Резюмируй длинные диалоги сам. Если разговор затягивается - попроси модель сделать краткое резюме договорённостей, скопируй его и начни новый чат с этим резюме в начале. Это эффективнее чем тянуть бесконечный диалог.
Не доверяй деталям из середины. Если ты упомянул что-то важное двадцать сообщений назад - повтори. Не потому что модель глупая, а потому что архитектура.
Проще всего почувствовать это на практике - провести длинный диалог и посмотреть в какой момент модель начинает терять нить.
В этом бесплатном Telegram-боте собраны топовые ИИ-модели бесплатно - можно переключаться между ними и сравнивать как разные модели справляются с длинным контекстом. Интересно посмотреть где у каждой начинается деградация.
Куда движется индустрия
Большие контекстные окна - очевидный путь. Gemini с миллионом токенов это впечатляет. Но исследования показывают: качество работы с длинным контекстом падает задолго до его формального предела. Миллион токенов в окне не означает что модель одинаково хорошо работает с информацией из любой точки этого миллиона.
Альтернативный подход - RAG, retrieval augmented generation. Вместо того чтобы пихать всё в контекст - хранить информацию во внешней базе и подтягивать только нужное прямо перед запросом. Модель получает маленький но точный кусок контекста вместо огромного и размытого. Именно так работают корпоративные ИИ-системы которые умеют «помнить» тысячи документов.
Скорее всего будущее за комбинацией обоих подходов - большое окно плюс умный поиск по внешней памяти.
Итог
Контекстное окно - не память. Это рабочий стол.
Всё что лежит на столе - модель видит и анализирует. Всё что упало со стола - не существует. При этом краям стола модель уделяет больше внимания чем середине.
Понимаешь это - сразу начинаешь использовать модели в разы эффективнее. Кладёшь важное туда где его заметят. Не ждёшь что модель сама вспомнит детали из давнего сообщения. Начинаешь новый чат вовремя.
Инструмент не стал умнее - просто ты научился им пользоваться.
ArtPlotnikov
Выглядит как текст написанный ИИ, обороты и структура похожи
DanTru
Ага, буквально по первым строкам становится очевидным. Особенно после вот этого "фундаментально"
Lev3250
Да ещё и по времени регистрации один из самых первых акков. Вдруг проснулся и погнали. Угнали? Взломали? Купили? Странно...