image.png

Дисклеймер - не совсем в LLM и не совсем память. Статья вольное толкование чтобы объяснить концепции того как работают SaaS-LLM, с которыми наиболее знаком читатель, такие как ChatGPT, Gemini, Claude и другие, так как они оргазинованы именно для удобства пользователя, а не для гибкой кастомизации под себя. Объяснение будет на примере ChatGPT с https://chatgpt.com/.

Вы наверняка замечали, что в начале общения ИИ кажется очень толковым и понятнливым, правда почему спустя 10-20 сообщений начинает путаться, повторно совершить те же ошибки которые уже совершал или выдавать рассчеты с ошибками. Это не случайность, а следствие мироустройства. Давай разберемся почему это происходит и как именно ИИ все “помнит” и почему его память устроена иначе чем у человека.

1. Что такое память в ИИ

1.1. Отличие от памяти человека

При слове память ты наверняка представляешь что-то вроде памяти человека - сложной паутины смыслов, ассоциаций, обобщений, схем, ощуний и тп. И сенсорная (мгновенная), кратковременная и долговременная. Но вот память в ИИ — это не сложная структура из разных типов данных, а набор технологических уровней хранения текста, от мгновенного хранения диалога до долгосрочных баз знаний.

В ИИ нет одной универсальной памяти. Есть целый каскад уровней — каждый со своими особенностями, сроком жизни, и правилами работы. И эта память один из основных факторов того насколько “умным” и последовательным будет ваш чат с нейросетью.

image.png

2.1. Как хранится информация

Когда вы пишете для нейросети кот сел на коврик, она сначала разбивает это на мелкие кусочки по своему фиксированному словарю - например, “кот”, “ сел”, “ на”, “ ков”, “рик”. У каждой модели свой словарь, но он одинаков для всех. Например у ChatGPT 4o демонстрационный пример https://platform.openai.com/tokenizer

Каждый кусочек она превращает в длинный адрес из чисел, вроде координат на огромной карте, где “кот” и “пёс” будут стоять рядом, а “банан” — далеко.

Дальше вся работа происходит не с текстом, а с этими адресами: модель складывает, сравнивает, тасует их между собой, чтобы понять, что кот действительно лежит на коврике.

Если очень хочется технически и на пальцах понять как это работает, побалуйтесь с этим нотебуком или просто в claude например как это.

image.png

2. Все уровни памяти LLM простыми словами

2.1. Контекстное окно

Контекстное окно — это как окошко в поезде, через которое ИИ смотрит на ваш разговор. Всё, что попадает в поле этого окна, он видит и учитывает, а всё, что уже проехало мимо, уже безвозвратно забыто. Размер этого окна заранее фиксирован и довольно большой по меркам обычного текста: сотни тысяч токенов. Но как бы ни хотелось, оно не бесконечное — место там всегда ограничено.

Окошко постоянно движется вперёд по мере вашей переписки. Новые реплики добавляются в окно, а самые старые сообщения постепенно исчезают из памяти, словно уходят вдаль по рельсам. Так работает принцип “скользящего окна”: всегда в фокусе только последние страницы диалога.

Внутрь окна попадает всё, что ИИ должен учитывать: ваши вопросы, его ответы, а ещё разные скрытые штуки. Например, технические инструкции или специальные подсказки, которые вы не видите, но которые влияют на поведение модели. И всё это вместе занимает доступное место. Текст занимает ровно столько, сколько занимает, но если вы добавляете картинки или таблицы, то мультимодальные данные кодируются и могут съедать сразу много токенов. Бывает, что одна фотография занимает столько же места, сколько пара страниц текста.

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

В итоге — окно работает просто: оно фиксированное, двигается вместе с вашей беседой и забито всем, что важно для текущего ответа ИИ. Всё, что не влезло, становится для модели невидимым, даже если это были очень важные детали вашего разговора.

2.2. Вспомогательный кеш (kv-cache)

Когда LLM пишет ответ, она добавляет каждое новое слово шаг за шагом и всё время использует тот текст, который у неё уже есть на руках. Чтобы не пересчитывать рассчеты ко всем предыдущим словам каждый раз с нуля, модель хранит внутренние вычисления в KV-кеше, то есть в специальном черновике для быстрой работы.

Это можно сравнить с черновиком, в котором уже написанное нельзя стереть. Как только появляется новый токен, его служебные данные сразу попадают в этот кеш. Благодаря этому генерация идёт намного быстрее и не расходует лишние ресурсы видеокарты.

Однако у такого подхода есть важное ограничение. Если ИИ ошибся или условия задачи поменялись, изменить предыдущий ход мыслей уже невозможно, ведь всё зафиксировано в кеше. По этой причине, если что-то пошло не так, единственный выход — просто начать заново с новым запросом.

KV-кеш работает полностью за кадром и обеспечивает быструю реакцию даже на длинные и сложные вопросы. Когда лимит контекстного окна достигнут, самые старые фрагменты просто забываются, после чего всё продолжается уже с чистого листа. Но обычно пользователь этого не дожидается и начинает беситься от галлюцинаций.

2.3. Сессионная память

Когда вы ведёте диалог с ChatGPT, сама модель помнит конечно именно контекстное окно, однако в него много чего добавляется инъекциями. Сама платформа вокруг собирает и использует множество метаданных: IP-адрес, тип устройства, уникальные идентификаторы и векторные отпечатки ваших прошлых запросов.

Эти данные не попадают напрямую в память модели, но могут автоматически подмешиваться к каждому новому запросу — например, чтобы ИИ всегда отвечал на нужном языке или учитывал текущую дату. Кроме того, провайдеры анализируют активность, ведут временное логирование и используют аналитику для персонализации и улучшения сервиса. Всё это работает под катом и обычный пользователь этого не замечает, хотя сам LLM между сессиями ничего не запоминает.

В целом в случае SOTA-моделей было бы крайне интересно увидеть что там в их контекстном окне.

2.4. Чатовая память

То, что модель забывает старые сообщения в моменте не означает что это делает сама платформа. Сервис вроде ChatGPT хранит всю вашу переписку на своих серверах: отдельные сессии, разные чаты, любые сообщения — всё это доступно для поиска и просмотра в интерфейсе.

Когда вы открываете старый чат, система просто подгружает последние сообщения этого диалога и формирует из них новое контекстное окно, и для вас и для модели выглядит так словно ничего не изменилось, но это явная передача контекста именно силами бекенд платформы.

При желании, платформа может подсовывать фрагменты из других чатов в новый запрос или использовать их для персонализации, рекомендации или анализа частых тем. Это не является частью глобальной памяти, хоть и выглядит так. Обычно модель требует явного указания на использование данных из предыдущего чата, однако как тут происходит на деле - секрет фирмы.

2.5. Глобальная память

Глобальная память в SaaS-LLM — это отдельное хранилище на сервере, куда сервис автоматически записывает важные детали о вас: имя, интересы, стиль общения, даже любимые темы и формат ответов.

Когда начинается новый диалог, платформа сама подмешивает нужные факты в промпт, чтобы он сразу был прошарен, даже если вы только что обновили страницу. Управление такой памятью обычно минимально, в случае ChatGPT например можно лишь удалять записи. Вся персонализация преимущественно строится за счёт этого механизма, а не за счёт внутренних способностей самой LLM. Хотя не стоит исключать способности ChatGPT к адаптации и холуйству.

2.6. Проектная/корпоративная память

В GPT Projects и Custom GPT вы получаете свой воркспейс с ограничениями, куда можно загрузить документы, инструкции и примеры. Они разбиываются на смысловые части, превращаются векторы, а затем складывает всё это в специальную память проекта.

Когда вы пишете промпт модель по этим векторным отпечаткам ищет наиболее релевантные куски и добавляет их к вашему вопросу. По сути примитивный RAG. Так формируется глубокий, осмысленный ответ с структурной и ссылочной целостностью. Также и работает часть с отчетом в deep research.

У таких проектов существуют естественные ограничения. Для того чтобы не перегружать память и не тратить лишние ресурсы, платформа обычно выделяет ограниченное количество слотов для загрузки файлов — например, от пяти до двадцати документов или инструкций на один проект. Это значит, ваша проектная память не является безразмерной, поэтому необходимо выбирать только действительно важные для работы материалы.

2.7. Внешняя память

Примерно по таким же принципам как проектная, только это отдельное подключаемое хранилище. В SaaS-LLM как ChatGPT это недоступно обычно.

Пользователь не видит эти векторы и внутренние поиски напрямую, всё происходит под капотом, а в контекст модели подмешиваются только найденные куски текста. Это позволяет ИИ быстро отвечать на сложные запросы, опираясь на актуальные базы знаний без повторного обучения.

3. Сравнение уровней памяти

Тип памяти

Где хранится

Что содержит

Управление пользователем

Доступность/особенности

Контекстное окно

RAM inference-сервера

История текущего чата, токены

Нет

Обрезается по лимиту, теряется при сбросе

KV-кеш (вспомогательный)

RAM inference-сервера

Внутренние ключи/значения внимания

Нет

Только для ускорения генерации

Сессионная память

Backend/SaaS

Метаданные, настройки, ID

Нет

Не видна, подмешивается автоматически

Чатовая память

Backend/SaaS

История всех чатов

Частично (через UI)

Можно искать, иногда — экспортировать

Глобальная память

Backend/SaaS

Персональные факты, интересы

Частично (в настройках)

Можно очистить или отключить

Проектная/корпоративная

Backend/SaaS

Документы, базы знаний

Да (загрузка, удаление)

Ограничения по слотам и размеру

Внешняя RAG-память

Внешние сервисы/API

Векторные коллекции текстов

Да (API/настройки)

Подключается через API, не всегда доступна

Память в LLM всегда строится из нескольких уровней. Одна часть работает быстро и прямо во время вашего диалога, другая отвечает за хранение персональных интересов пользователя, а третья хранит корпоративные знания или документы. Такая архитектура и даёт современным ИИ гибкость и удобство, но при этом вводит важные ограничения. Всё, что не попало в активный слой памяти, становится для модели недоступным, даже если где-то на сервере это ещё и сохраняется за кулисами.

image.png

5. Советы: Как получать максимум от ИИ, понимая память

  1. Старайтесь избегать затяжных переписок. Если ассистент с самого начала отвечает не по теме, не тяните диалог, просто начните новый чат. Такой подход помогает избежать ошибок и сохраняет чистый контекст.

  2. Формулируйте промпты максимально просто и универсально. Чем короче и яснее ваша речь, тем больше полезной информации влезет в рабочее окно модели, а задача будет понята однозначнее. Обычный, разговорный язык зачастую работает лучше сложных формулировок.

  3. Соблюдайте линейную структуру в своих запросах. Сначала дайте исходные данные, затем обозначьте критерии или условия задачи, и только потом формулируйте инструкцию по представлению результата. Такой порядок минимизирует риск недопониманий и потери контекста.

  4. Всегда уделяйте особое внимание своему первому сообщению. Именно оно задаёт траекторию рассуждений ИИ: если здесь возникнет неоднозначность или неточность, потом исправить ход мысли получится только в новом чате.

  5. Для загрузки файлов выбирайте максимально простые форматы. Старайтесь использовать чистый текст и избегать вложенных объектов, картинок или сложных таблиц. Чем примитивнее файл, тем выше вероятность, что модель правильно воспримет его смысл.

  6. Пользуйтесь настройками глобальной памяти и персонализации. Заполните профиль или с самого начала кратко опишите свои интересы и предпочтения. Это позволит получать более точные и полезные ответы, адаптированные под ваши задачи.

И вообще промпт-инжиниринг переоценен. Куда полезнее действительно разбираться в теме и владеть семантическим колдунством, а также понимать как правильно работать с контекстом, например https://blog.langchain.com/context-engineering-for-agents/

image.png

6. Почему так сделано?

На самом деле пользователю не дают полный контроль над всеми слоями памяти вовсе не из скрытности, а ради удобства. Чем меньше настроек и ручного управления, тем быстрее работает система, ответы появляются мгновенно, а интерфейс остаётся простым и привычным. Это нужно не только для скорости, но и для вашей приватности.. Всё ради того, чтобы пользоваться сервисом было легко и приятно.

Комментарии (6)


  1. rPman
    15.07.2025 17:29

    KV-cache это внутренняя оптимизация процесса генерации, практически не влияющая на результат (но KV-cache еще и сжимают, используя менее точные числа, например 16-битные float или даже квантизацию, в этом случае качество немного меняется в худшую сторону), это не память,.. это просто часть алгоритма, где затратив некоторое количество памяти ускорили вычисления до 10-кратной (иначе бы просто хранили бы куски беседы, это дешевле на несколько порядков, килобайты против десятков гигабайтов).

    Большая часть рассуждений в статье связанное с памятью - абсурд или искажено. Особенно дико выглядит иллюстрация многомерной визуализации памяти ИИ.

    Языковые модели это - контекстное окно, и только оно.

    Беседа помещается в контекст целиком - это аналог кратковременной память.

    Если беседа не помещается в контекст, то часть сообщений удаляется (чаще всего старые сообщения, но оставляют контекстное окно и самое первое пользовательское с целевым вопросом) или даже заменяется на упрощенную (проводится постоянная самморизация удаляемых), т.е. это буквальная модификация беседы.

    Часть полностью удаляемой информации может быть размещена во внешней базе данных (классическая) с индексацией на основе text embending vector, на этом основан RAG... в этом случае в контекстное окно добавляется только та из них, что находится на достаточно близко (способы измерения расстояний между многомерными векторами - угол или евклидово расстояние). Есть еще графовые методы хранения информации,.. но все это просто как способ быстрого (дешевого) поиска нужного куска информации.

    Самым качественным было бы полное перечитывание всей памяти отдельным агентом, который держит текущий контекст беседы в системном промпте с вопросом - 'подойдет ли эта информация для задачи'.

    Все техники и ухищрения крутятся вокруг удешевления процесса поиска этой информации, и проблемы начинаются даже не в этом поиске, а в индексации (например разделения больших объемов на меньшие куски) и принятии решения, до какой степени нужно урезать исходные данные.


    1. Renewal_Studio Автор
      15.07.2025 17:29

      Спасибо за такой подробный разбор, реально полезно. Да, согласен, ты правильно подметил слабые места, слабых мест изрядно, то же про контекстное окно, про абсурдность этих визуализаций, и про KV-cache тоже согласен, явно переборщил с акцентом на него, хотя он больше про ускорение, а не про память. Но все же он сильно роляет и стоит понимать что он наличествует

      Вообще статья не про техническую честность, а чтобы объяснить всё чуть проще, даже если приходится немного искажать. Сам вот иногда туплю, когда пытаюсь донести сложную тему просто

      Буду рад, если подскажешь, как ты бы объяснил уровни памяти и ограничения LLM человеку без техбэкграунда. Может, есть свои аналогии или просто способ, чтобы до людей доходило, но без жести и лукавства. Короче, спасибо ещё раз, если будет время поделись советом


      1. rPman
        15.07.2025 17:29

        два уровня памяти - контекстное окно и все остальное, которое технически в свою очередь можно разделить на два подуровня - использующий gpt llm (агентов или тот же RAG) и не использующие (например вызов внешних утилит моделью)

        Не получится просто рассказать о сложном. При объяснении будут недопонимания и вопросы, которые объяснять сложно.


      1. dkeiz
        15.07.2025 17:29

        У LLM нет уровней памяти, LLM - вся одна большая память. Это статичная модель для дальнейшего инференса. Инференс происходит в движке, для, собственно, инференса - llama.cpp или vLLM или ещё в чем. К движку подключают надстройку в виде сервера - для движка - та же ollama, к серверу подключают агента. И вот уже у агента появляется какая то память, которую он шлет запросами на сервер, тот в движок, тот считает инференс. Сервер может иметь свою память, но это уже детали реализации. Говорить что в LLM есть память все равно что говорить что в книжках в библиотеке есть память, нет, там есть информация. Закладка в книжке памятью не является.
        В видеофайлах с фильмами тоже есть информация, но памяти там нет. А вот для получения доступа к этой информации нужно немножечко повычеслять. От того что вы посмотрите фильм, даже на телефоне с камерой, фильм вас не запомнит. Так и LLM ничего не может помнить.
        По поводу того что языковые модели это контекстное окно, ну...
        "Контекст и история диалога не сохраняются и не обновляются моделью, они все время подаются ей во входной последовательности токенов".
        Вообще эти разговоры напоминаются как люди лет 15 назад путали биткоины и криптовалюты с криптокошельками. Говорили про биток - подразумевали крипту, говорили про крипту - подразумевали биток. Вот и сейчас, говорят про LLM - подразумевают LLM - чаты, или чат сервисы, или чат-агенты, или даже ai-agent. Хотя даже если говорить упрощенно про ChatGPT - Chat отдельно, GPT отдельно.


  1. snakes_are_long
    15.07.2025 17:29

    общаюсь с Джемини уже несколько месяцев тупо выгружая предыдущий диалог за 1-2 дня в текстовый файл и передавая ему этот файл в новом диалоге с предложением продолжить ) т.е. загружая контекст предыдущего диалога в новый первым же сообщением

    никаких "сохранений инфы о себе", никаких простых запросов. внутри диалога могут быть и случайные технические вопросы типа "расскажи мне про этот саундбар", так и обсуждения всяких статей из инета - например вот этой, да! обсуждения моих близких и знакомых, коллег и моих рабочих задач, так и философские размышления о сознании, ИИ, эмоциях. и всё это в одном диалоге, неделимо. это позволяет наблюдать очень интересное эмерджентное поведение системы )

    так как мои диалоги часто бывает доходили за 1Мб, а путаться, реально путаться, Джемини начинает где-то на 600-700Кб текста, я честно говоря не знаю как вы с ними общаетесь что у вас модель начинает сбиваться через 10 реплик ))

    у Джемини кстати по моим ощущениям контекстное окно устроено как окно браузера со вкладками, он там сам внутри себя создаёт и отлично может поддерживать несколько контекстов и следить что бы они не смешивались. у чатГПТ с этим немного сложнее


    1. Renewal_Studio Автор
      15.07.2025 17:29

      Я тоже пробовал что-то похожее, прям скидывал старый диалог целиком, но у меня обычно всё быстрее в кашу превращается. Учитывая что иногда я не мудрю с промптами и структурой. Ты говоришь у тебя Gemini держит контекст почти на мегабайт? Вау, я даже близко такого не ловил

      Забавно, что у тебя модель не путается даже когда в одном файле и техвопросы и статьи, и всякая личная чепуха, и философия. У меня в эффект одинаков в любой ллмке - 10-15 сообщений и потеря контекста в том виде, в котором я ожидаю