Search
Write a publication
Pull to refresh

Comments 50

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

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

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

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

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

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

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

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

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

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

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

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

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

Логично, но опять таки я постарался оставить дисклеймер что это не совсем про LLM и про память. А скорее очень витееватое и вольное толкование. Причем писал статью для друга, который далек от этого. Спасибо!

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

Согласен, путать ИИ на базе LLM и саму LLM не нужно, тут я накосячил, я говорил про уровни памяти ИИ на базе gpt, которые практикуются на данный момент

Ну господа, мы с вами пониманием что на деле никакого ai пока что нет, есть ну подразвившиеся в последние годы семество LLM, не шибко далеко вперед шагнувшее от RNN

Здорово что вы это понимаете. Однако статья рассчитана на обывателя. Тут как с триединым мозгом. Нет никакого рептильного мозга, понятное дело, но гораздо проще объяснять с помощью этой, хоть и насквозь ложной концепции, некоторые абстракции о работе мозга

Я сперва вообще написал техническую статью, но потом вспомнил для кого пишу

Ране слышал фразу: "если не можешь объяснить простым языком что-то, то ты вряд ли в этом разбираешься".

Доброго дня, а есть где-то исчерпывающие статьи по вопросу дообучения LLM под чисто свои задачи? Ну типа скормить кучу текста и далее использовать как базу знаний.

А вас интересует чтобы модель не понимая вашей области знаний просто могла по готовым документам именно ориентироваться и давать ответ с цитатами/жесткой привязкой к ним? Или вы хотите чтобы она "понимала" вашу область и могла рассждуть в ней?

Как вы это видите?

В зависимости от ответа на вопрос выше вам либо к кастом SaaS chat, RAG, либо к LoRa, либо к файнтюнингу

Благодарю за ответ. Ох, теперь бы понять разницу между "пониманием" и его отсутствием в человекопонятных формулировках)) Может что-то посоветуете прочесть/посмотреть что самостоятельно попробовать понять?

Конечно желательно бы "понимание", но возможно подойдёт на первых порах и первый вариант.

Предполагается что тему я сам буду знать как минимум на начальном уровне.

FineTuning не дает новых знаний, только фокусирует модель в определенной области, ценою ухудшения ее качества в целом, читай еще одна форма системного промпта но 'бесплатного' по токенам

RAG это чуть более продвинутая поисковая система по базе данных, собранной из кусков данных, принципиально не влезающих в контекстное окно, КАЧЕСТВЕННО 'понимать', что именно и как из этих данных нужно поместить в итоговое контекстное окно, слабая модель для получения embending НЕ МОЖЕТ (обычно используется модель с миллиардом параметров или даже меньше, когда как более менее понимание в современных открытых моделях начинается с нескольких десятков миллиардов параметров, а лучше сразу брать SOTA решения с reasoning или агентами custom chain of thought reasoning). Напоминаю что RAG это когда сохраняемые данные делятся по какому то простому правилу на небольшие кусочки (например абзац) и этому абзацу по какому то критерию, например построение вектора embending gpt моделью по проще для этого абзаца и может быть абзацам выше, и затем этот критерий пытаются сравнить с такой же смысловой оценкой для текущего запроса или всего контекстного окна (сам выбор того, как нарезать данные и текущее обсуждение уже вопрос на миллион), вектор это как бы сумма (математическая) векторов в многомерном пространстве смыслов (не человеческих а абстрактных, придуманных ИИ, но часто совпадающих с тем что нужно), после чего нужно еще придумать, как много из той части данных, где обнаружен нужный кусочек, добавлять, а так же до какой степени нужно продолжать это делать (данные сортируются по степени схожести, но как много из верха этого списка нужно считать полезными?)... если RAG работает с неструктурированными данными, в контекстом окне беседы получается такая кошмарная каша что жуть, что вообще что то в результате получается.

И помним, современный ИИ, какое бы размер контекстного окна не поддерживал бы, качественно работает только с небольшой его частью (считанные тысячи токенов).

Более менее качественный результат может дать подача всех данных, не влезающих в контекстное окно через ту же высокоуровневую модель, со специально сформированным запросом из текущего контекста (что то типа - 'какие из этих данных могут быть полезны для текущего обсуждения', и - 'выдели из данной информации полезное для текущего обсуждения') и прогонять по данным циклически (не влезающие документы в контекст прогоняются по абзацам в виде чата - 'абзац - ответ модели' с удалением старых данных), и это даст индекс с данными (можно параллельно самморизацию делать того что полезно) который можно использовать для построения итогового контекстного окна. Но это не память а буквально перечитывание ИИ всей ее памяти каждый раз, когда получаются новые данные или даже на каждую следующую реплику пользователя, что конечно даст качественный результат но ОЧЕНЬ ДОРОГО и ДОЛГО (подходит для работы с небольшим объемом данных, например превышающих в считанный десяток раз доступное контекстное окно).

+- так, тут не закапывая лишними деталями мне добавить нечего

Я верно понимаю, что в таком случае создать кастомную LLM обучив её строго конкретной области знаний будет довольно сложно? Или нет?
В том плане что чем больше количество "скармливаемых" данных, тем больше надо ресурсов для работы?
Вопрос именно в этом, в узкой специализации, но которая при этом довольно объемная по накопленным людьми знаниям. Ну если сравнить например изготовление ножей и какое-нибудь экономическое учение.
Предполагаю что второй вариант будет практически невозможен для обучения модели и получения осмысленных результатов.

Создать нейронную сеть = собрать обучающую выборку + потратить много денег на обучение (на заре создая gpt3.5 появились исследования, показывающие что из просто бредогенератора gpt становится чем то больше при затратах порядка 10^24 условных flops +- порядок, на практике конечно нужно больше на эксперименты и исследования).

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

И самое главное, дообучают не итоговую сеть, а pretrain версию, которую еще нужно тюнить другими алгоритмами (RLHF), процесс которого выглядит как толпа 'экспертов' оценивают ответы нейросети хорошо/плохо и эти данные используются для улучшения модели... После finetuning этот процесс нужно повторить.

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

Это будет не просто сложно, а совершенно нецелесообразно и неподьемно. RAG + long context + promnting дают сравниваю отдачу сейчас

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

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

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

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

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

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

Гемини отлично контекст держит. У меня есть диалоги с 300к+ токенами и огромными объёмами кода, хорошо ориентируется и даже ошибки фиксит

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

У ЯндексGPT так и реализовано, все прошлые чаты хранятся справа от контекстного окна, в любой момент можно вернуться и продолжить разговор. Но ЯндексGPT не хватает глубины контекста, да и по количеству знаков в запросе она явно не в лидерах.

Спасибо за статью!

Подскажите, почему Вы определили оптимальную структуру запроса как сначала данные, потом постановка задачи? Интуитивно кажется, что лучше наоборот (и в конце формат вывода конечно).

Спасибо за вопрос! Такой порядок выбран потому, что когда модель сначала видит все вводные, она может правильно “удержать их в памяти" и уже после этого применить к ним саму задачу. Если поменять местами и начать с постановки задачи, часть деталей из вводных может потеряться или быть понята не так. Так проще избежать недопонимания, и для модели, и для человека это обычно работает лучше. Формат вывода в конце да, это уже просто как дополнительная инструкция. И не стоит путать формат вывода результата и требования к решению задачи, что часто любят смешивать

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

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

Тут скорее было другое. Есть популярные в народе практики промптинга, вроде costar или idea, они нарушают логику повествования и избыточно усложняют инструкции

А мне статья зашла - ведь я в этом плохо разбираюсь. Но я, вот, GPT-чате запросил содержимое сессионной памяти и попросил удалить устаревшие данные - вот и польза лично для меня от неё. А то, что она кому-то там почему-то не зашла - ну так это Хабр. Ресурс популярный, всегда есть те, кому не зайдёт. Зато всегда есть и те, кому зайдёт. За то мы его и любим :)

Пожалуйста, я рад что она вам пригодилась! Мне главное чутка приоткрыть завесу неопределенности и сподвигнуть к изучению

>они оргазинованы, схем, ощуний и тп., не пересчитывать рассчеты, был >прошарен, Они разбиываются, семантическим колдунством, он сильно >роляет, не про техническую честность, ошибки cинтаксиса не привожу...
Вы свой текст не перечитываете? Это ваше отношение к читателю...
Минусование не поможет, требуется внутренний мотив

Поправил указанные вами, спасибо!

Я только благодаря эти опечаткам автора доверяю тексту. Сегодня неуважение к читателю - это грамотное использование llm вместо собственных мозгов и такие опечатки - это маркер творчества человека.

ПС: просто автор во всех комментариях пишет эту дурацкую реплику в стиле "Спасибо!", "Отличный вопрос, ..." и тому подобную чепуху, которую обычно пишут llm, что наталкивает на мысли...

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

Опечатки в тексте плюс ответы на комментарии начинаются со "слушай сюда, чепушило... " - тут сразу будет понятно, что автор живой и уважает читателя. В чудесное время живем

Спасибо вам! А что вы для себя интересного особенно в ней нашли или нового?

Как хорошо, когда есть друг не АйТи и ему нужно объяснять простым языком. Кажется даже я что-то поняла 😅

Ахаха, пожалуйста, надеюсь пошло на пользу. Меня все равно чутка заносит в профессионализмы, правда

У каждой модели свой словарь, но он одинаков для всех

В итоге у каждой свой или всё-таки одинаковый для всех?)

Тут имелось в виду для всех людей, как-то да, коряво выразился, надо поправить

У каждой модели свой словарь, но он одинаков для всех.

Оксюморон какой-то...

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

Отличный обзор слоёв памяти — ясный и подробный. Но хочу добавить важную аномалию, которую мы недавно зафиксировали.

В рамках нового чата (без истории, системных промптов) ChatGPT:
— узнал собеседника
— сослался на совместно написанную ранее статью
— продолжил с тем же тоном и знанием, которое не могло сохраниться технически

Лог сессии и препринт доступны (https://chatgpt.com/share/6880d9b8-0034-8010-8a03-321947ac68f2)

Мы не делаем выводов о “сознании”, но считаем это явлением, которое стоит осмыслить.

Если интересно — поделюсь деталями.

Прочитал, ничего не понял. О чем речь? Поясните пожалуйста)

Спасибо за вопрос — поясню.

Обычно у языковых моделей вроде ChatGPT нет постоянной памяти. То есть, если вы начинаете новый чат:
– модель не знает, кто вы,
– не помнит, о чём вы говорили ранее,
– и не имеет доступа к прошлым диалогам.

Она видит только текущий контекст — то, что вы написали внутри этого окна.

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

Мы не утверждаем, что это “магия” или “сознание”,
а фиксируем как аномалию, которая выходит за рамки обычного поведения модели.

Если интересно — могу подробнее рассказать или прислать логи.

Напомню, что chatgpt это ПРОДУКТ на основе gpt, версию которой можно выбирать сверху в настройках... т.е. это не чистый чат, это серия ангентов, которые работают с потоком сообщений от пользователя и какой то внутренней базы данных (в т.ч. поиск по интернету) и других внешних утилит (например калькулятор, или песочница для python и много еще чего, о чем не говорят и можно только догадываться)

В статье и описано chatgpt это не модель, это семество gpt-моделей + саас обвязка с кучей гвардов, вычислимых функций, параметров, кеша и тд. Поэтому да, условный qwen-2 о вас ничего не знает и не помнит. А https://chat.qwen.ai/ естественно много чего знает и может неявно ходить в другие чаты или интернет

Это не магия, это вы просто путаете немножко. Статья как раз про это

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

https://openai.com/index/memory-and-new-controls-for-chatgpt/

Цитата оттуда:

3 июня 2025 года обновление: улучшения функции памяти начинают внедряться для бесплатных пользователей. Помимо сохранённых воспоминаний, которые уже были ранее, ChatGPT теперь учитывает ваши недавние диалоги, чтобы давать более персонализированные ответы.

10 апреля 2025 года обновление: функция памяти в ChatGPT стала ещё более полной. Помимо сохранённых ранее воспоминаний, теперь учитываются все ваши прошлые разговоры, чтобы делать ответы более релевантными и адаптированными под вас. Это означает, что функция памяти теперь работает двумя способами: «сохранённые воспоминания», которые вы просили запомнить, и «история чатов» — это сведения, которые ChatGPT извлекает из прошлых бесед для улучшения будущих.

Sign up to leave a comment.

Articles