Технологии

Чат с памятью: кросс-чат recall и bi-temporal факты простыми словами

Чем диалоговая память отличается от поиска по таймлайну — Persona помнит не только факты о вас, но и то, как они менялись: показывает историю и даёт откатить. Объясняем bi-temporal память и кросс-чат recall на пальцах.

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

#Кросс-чат recall: знание переходит между беседами

«Кросс-чат recall» означает, что перед ответом Persona подтягивает релевантное из всех ваших прошлых диалогов, а не только из текущего окна. Спросили про «Олега» в новом чате — Persona вспомнит, что вы обсуждали Олега две недели назад в другой беседе.

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

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

#Bi-temporal факты: память помнит, как менялась

Вот где Persona отличается от простого «лога». Факты о вас не вечны: вы переехали, сменили работу, поменяли мнение. Наивная память на этом ломается — в ней одновременно живут «живёт в Москве» и «переехал в Берлин», и непонятно, что верно.

Bi-temporal подход решает это так: при появлении противоречащего факта старый не удаляется, а помечается как недействительный с этого момента, а новый становится актуальным. Поэтому:

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

Идея в том, что память не просто накапливает, а сверяет новое со старым и решает — добавить, обновить, удалить или ничего не делать.

#Чем это лучше поиска по таймлайну

Поиск по истории Диалоговая память Persona
Находит прошлые записи ✓ ✓
Переносит знание в новый чат ✗ ✓ (кросс-чат recall)
Понимает, что факт изменился ✗ ✓ (bi-temporal)
Хранит историю факта и откат ✗ ✓

Поиск отвечает на «что я видел». Память отвечает на «что про меня правда сейчас — и что было раньше». Разница не косметическая: без второго ассистент будет уверенно оперировать вашим позапрошлогодним местом работы.

#Почему память не заменяется длинным контекстом

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

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

#Где здесь граница приватности

Память лежит там, где развёрнута Persona: если вы поставили её у себя, база и recall работают на вашей машине. Но обратите внимание на границу, которую легко упустить: найденные фрагменты памяти подмешиваются в запрос к модели. С локальной моделью они остаются на вашем железе; с облачным ключом уходят выбранному вами провайдеру вместе с вопросом — то есть в облако попадают не только ваши слова, но и куски вашей памяти.

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

#Частые вопросы

#Чем память отличается от истории чата?

История — это лента сообщений одной беседы; она не переносится в новый чат и не разрешает противоречия. Память — это отдельный слой фактов о вас, который подтягивается в любой беседе и знает, что факт мог измениться. Историю вы листаете, память отвечает.

#Что произойдёт, если Persona запомнила про меня неправду?

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

#Нужно ли включать векторный поиск, чтобы память работала?

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

#Почему ассистент переспрашивает фамилию?

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

#Сколько памяти накапливается и можно ли её выгрузить?

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

#Какая модель нужна, чтобы память работала хорошо?

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

#Вывод

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт