LABGO.AI
Все руководства
Руководства/chat-context

Долгосрочная память чата — как агент помнит контекст

Для кого: инженеры лаборатории. Что узнаете: как AI запоминает ваши факты, события и стиль — и почему это бесплатно для вас.


Инженерный тон в ответах

Раньше: «Я понял, вы хотите рассчитать прочность куба B25...». Сейчас: факт — норма — следующий шаг.

Результат: R = 24.8 МПа
Норма ГОСТ 22690-2015 п.5.3: ≥ 25 МПа для B25 → НЕ соответствует
Следующий шаг: переотобрать 3 образца / снизить класс до B22.5

Без воды: «отлично», «сейчас сделаю», «я понял», «конечно». Просто работа.


3 уровня памяти

Агент помнит вас на трёх уровнях — как реальный коллега:

1. Семантическая память — ФАКТЫ

Что AI знает о вашей работе:

  • «Основная лаборатория: Krasnodar-1»
  • «Специализация: бетон B25-B40»
  • «Формат протокола: PDF с подписями»

Извлекается асинхронно после сессии (Haiku, ~$0.001). Хранится годами, обновляется EMA-алгоритмом (новый факт = 30% веса, старый = 70%).

2. Эпизодическая память — СОБЫТИЯ

Что произошло в чате последние 30 дней:

  • «2 дня назад · 🧮 Расчёт прочности B25 для СтройГарант → 24.8 МПа»
  • «вчера · ✅ Подтвердил протокол ПР-2026-042»
  • «4 дня назад · 📋 Создал заказ ORD-2026-027»

Извлекается асинхронно после сессии (~$0.001). Auto-expire через 90 дней. Топ-5 важных всегда в контексте.

3. Процедурная память — СТИЛЬ

Как именно вам отвечать:

  • Язык (русский / смешанный)
  • Длина (концисная / нормальная / детальная)
  • Markdown vs plain text
  • Технический уровень (basic / standard / expert)
  • Обращение (на «Вы» / на «ты»)
  • Предпочитаемые форматы (PDF, XLSX)

Один документ на юзера, обновляется AI каждые N сессий.

+ Open Tasks Tracker — ОБЕЩАНИЯ АГЕНТА

Если AI сказал «посчитаю к вечеру», «пришлю PDF», «напомню завтра» — это записывается.

При новом сообщении агент ВИДИТ незакрытые обещания и:

  • ✅ Если новый запрос совпал — закрывает задачу автоматически
  • 🔔 Если не совпал — упоминает ОДНУ ближайшую в конце ответа

Анти-спам: максимум 3 напоминания на одну задачу с интервалом 24 часа.


Как это влияет на ваш опыт

Без памяти (старый агент):

Юзер: посчитай прочность куба
AI:   По какому ГОСТу? Какой класс бетона? Сколько образцов?
Юзер: 22690, B25, 5 штук
AI:   Какая ваша лаборатория? Куда отправить результат?
Юзер: 🤬

С памятью (новый агент):

Юзер: посчитай прочность куба
AI:   Результат: R = 24.8 МПа
      Норма ГОСТ 22690-2015: ≥ 25 МПа → НЕ соответствует
      Следующий шаг: повторить отбор 3 образцов
      
      (агент знает: ваша лаборатория Krasnodar-1, обычно B25-B40,
       только что вы прислали 5 образцов в чате)

Стоимость для вас: ₽0

СлойКогда работаетЦена
Semantic extractorРаз в день (cron)~$0.001/сессия → ~$0.30/месяц на тенант
Episodic extractorПосле каждой сессии~$0.001/сессия
Procedural updaterКаждые 5 сессий~$0.0005
Open tasks extractorПосле каждой репли~$0.0005
Итого<$2/месяц на активный тенант

Платит лаборатория из общего AI-бюджета. Юзер не видит счетов.


Контроль и приватность

GDPR: право на забвение

В настройках профиля (TODO) — кнопка «Удалить мою память». Удалит всё: UserMemory + EpisodicMemory + ProceduralMemory + OpenTask.

Tenant isolation

Никогда: данные одной лаборатории НЕ попадают к другой. В Postgres все таблицы имеют tenantId + строгая фильтрация.

Whitelisted keys

Semantic memory не позволяет AI выдумывать произвольные ключи. Только из заранее одобренного списка (8 ключей сейчас, расширяется по запросу).

Confidence threshold

Факты с уверенностью < 0.5 не попадают в промпт. Эпизоды с importance < 0.6 — игнорируются (не захламляют контекст).


Что AI получает в начале каждой реплики

Всё это собирается параллельно за <100ms (с warm cache):

<memory_context>
<user_memory>
- Основная лаборатория: Krasnodar-1
- Специализация: бетон B25-B40
- Формат протокола: PDF с подписями
</user_memory>

<recent_episodes>
Недавние события чата:
- 2 дня назад · 🧮 Расчёт: Прочность B25 для СтройГарант → 24.8 МПа
- вчера · ✅ Подтвердил протокол ПР-2026-042
- 4 дня назад · 📋 Создал заказ ORD-2026-027
</recent_episodes>

<user_style>
- Язык: русский
- Длина: концисная (1-3 предложения)
- Технический уровень: эксперт
- Формат: plain text (без markdown)
- Обращение: на «Вы»
- Документы: PDF, XLSX
</user_style>

<open_tasks>
ВАЖНО: незакрытые задачи:
- 🧮 Посчитать морозостойкость F150 (обещано вчера, срок: завтра)
- 📄 Прислать ZIP протоколов СтройГарант (обещано 2 дня назад)
</open_tasks>
</memory_context>

~1000 токенов памяти vs тысячи токенов истории = 90% экономии токенов, но качество диалога выше.


Multi-provider — память не теряется

У нас 5 LLM-провайдеров (Anthropic, OpenAI-compat, Yandex, GigaChat, Claude SDK). Если один отвалился — авто-переключение через LLMRouter.

Память НЕ зависит от провайдера — это унифицированный блок в system prompt. Yandex/GigaChat не имеют prompt-caching (как Anthropic), но получают тот же контекст памяти.

Все сообщения нормализуются в NormalizedMessage → каждый провайдер рендерит в свой формат.


Технический стек (для команды)

  • Postgres — хранилище всех 3 слоёв + Open Tasks (модели в prisma/schema.prisma)
  • L1 cache — in-memory Map per-process, 5-10 мин TTL
  • Haiku 4.5 — extractor для semantic / episodic / open-tasks (~$0.001/сессия)
  • Async extraction — BullMQ jobs ИЛИ nightly cron (без блокировки UX)
  • MemoryAssembler — параллельная сборка 3 слоёв за ~50ms (cold)
  • EMA confidence — устойчивость к шуму (new = old0.7 + extracted0.3)
  • GDPRdelete*ForUser() функции в каждом store

RAG: BGE-reranker для лучшего поиска

Дополнительно: для семантического поиска по ГОСТам и файлам подключён BGE-reranker-v2-m3:

  • Multilingual (включая русский), 50-100ms на GPU
  • Запускается в Docker (опционально, через BGE_RERANKER_URL)
  • Если контейнер недоступен → graceful fallback на наш intent-rerank

Pipeline RAG:

1. Semantic search (pgvector) → 30 кандидатов
2. Dedup + per-source limits → 20 кандидатов
3. BGE rerank (если доступен) → переупорядочивание по релевантности
4. Intent rerank → буст под намерение (формулы для расчётов и т.д.)
5. → Top-N в контекст

Без BGE: 50ms (только наш intent-rerank). С BGE: 150-250ms (но точность +15-25% по нашим внутренним тестам).


Когда обращаться

  • 🐛 AI забыл что-то важное → проверить факт через prisma studio → таблицу UserMemory
  • 🔄 AI вспоминает старое решение → чек таблица EpisodicMemory → можно удалить конкретный эпизод
  • 📋 AI напоминает о задаче что уже сделана → закрыть в OpenTask (status=done)
  • 🛡️ GDPR-запрос юзераdeleteAllEpisodesForUser(userId) + deleteUserMemory(userId) + deleteProceduralProfile(userId) + deleteAllOpenTasksForUser(userId)

By Alex Pashkin — CTO LABGO.AI