4-Уровневая Система Памяти и Гибридный Поиск (L1–L4)

Система памяти в ForjBot Engine состоит из 4 взаимосвязанных слоев. Она гарантирует высокую точность контекста, эффективное использование контекстного окна LLM и долгосрочное запоминание фактов о пользователе.

flowchart TD subgraph L1 ["L1. Краткосрочный Контекст"] L1_Window["Скользящее окно сообщений\n(short_term_context_n = 10..30)"] end subgraph L2 ["L2. Сжатый Контекст (Summary)"] L2_Proc["Фоновый компрессор"] --> L2_Sum["background_summary"] L2_Proc --> L2_Style["style_profile (стиль речи)"] end subgraph L3 ["L3. Хранилище Фактов (UserFact)"] L3_Extract["Авто-выделение фактов"] --> L3_Store[("Граф Фактов UserFact + FactRelation")] L3_Store --> L3_Search["Векторный поиск фактов"] --> L3_Inject["{user_facts}"] end subgraph L4 ["L4. База Знаний RAG (Hybrid RRF)"] L4_FTS["PostgreSQL FTS (to_tsquery)"] L4_Vec["PGVector (TEI granite-embedding)"] L4_Img["MarkItDown (OCR + Image Chunks)"] L4_FTS & L4_Vec & L4_Img --> L4_RRF["RRF Ranking Formula"] --> L4_Inject["{retrieved_docs}"] end L1_Window --> L2_Proc

1. L1. Краткосрочный Контекст (Short-Term Memory)

  • Параметр: BotConfig.short_term_context_n (по умолчанию 15–20 реплик).
  • Механизм: Скользящее окно последних сырых диалоговых сообщений пользователя и бота.
  • Очистка: Команда /reset мгновенно очищает L1 контекст для конкретного пользователя, сохраняя при этом сжатое резюме (L2) и накопленные факты (L3).

2. L2. Сжатый Контекст и Профиль Стиля (Context Compression)

При превышении порога сообщений запускается фоновый процесс сжатия диалога:

  1. background_summary: Краткая выжимка ключевых тем беседы, договоренностей и эмоционального фона. Внедряется в системный промпт через переменные {background_summary}.
  2. style_profile: Автоматически анализирует манеру общения пользователя (длина сообщений, сленг, использование эмодзи, уровень формальности). Модель подстраивает свой стиль под профиль пользователя.

3. L3. Динамическое Хранилище Фактов (UserFact)

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

  • Модель БД: UserFact + FactRelation (граф связей user_id, category, key, value, importance).
  • Извлечение: Векторный поиск ищет факты, релевантные текущей реплике пользователя, и подставляет их в {user_facts} и {retrieved_facts}.
  • Подсказка модели: Плагин предоставляет инструмент memory_hint для сохранения важных заметок в один клик.

4. L4. Гибридный RAG и Индексация Изображений

Удаление legacy-колонки mode:
В архитектуре августа 2026 года концепция режима mode="chat" / mode="rag" полностью удалена. Векторный поиск RAG управляется флагом BotConfig.rag_enabled и работает параллельно со всеми плагинами.

Формула Гибридного Поиска RRF (Reciprocal Rank Fusion)

Система объединяет результаты полнотекстового поиска PostgreSQL FTS (to_tsquery) и векторного поиска по эмбеддингам TEI (ibm-granite/granite-embedding-311m-multilingual-r2) с помощью алгоритма RRF:

RRF_Score = 1 / (60 + Rank_vector) + 1 / (60 + Rank_fts)

Таблица Сравнения Методов Поиска

Метод Поиска Сильные Стороны Что Ищет
PostgreSQL FTS Точное совпадение терминов, кодов, названий товаров document_chunks_bot_{id} по лексемам
PGVector TEI Семантический поиск по смыслу, даже при синонимах Эмбеддинги Granite 311M (косинусное расстояние)
OCR & Image Chunks Извлечение схем, таблиц и иллюстраций из PDF/Docx document_images_bot_{id} ➔ инструмент attach_document_image

5. Метрика Отношений и Естественный Спад (User.metric_score)

  • Метрика лояльности: User.metric_score (значение от 0 до 100).
  • Динамика: Модель может изменять балл на metric_delta (от -10 до +10) в зависимости от характера общения.
  • Естественный спад (decay_users_metric): При включенном RELATION_DECAY_ENABLED специальный планировщик ежедневно снижает балл лояльности неактивных пользователей, имитируя естественное остывание отношений при отсутствии внимания.