Перейти к основному содержимому

Память

Профили сотрудников

Профили сотрудников — это persistent memory layer, который обогащает ответы AI пользовательским контекстом.

Модель

Модель EmployeeProfile хранит извлечённую информацию по каждому пользователю:

ПолеТипОписание
summaryStringБио / описание роли, извлечённое LLM
currentProjectsString[]Активные проекты, над которыми работает сотрудник
preferencesJSONПредпочтения в коммуникации
frequentIntentsString[]Часто используемые intents
accessLevelStringУровень авторизации (например, standard, elevated)
metadataJSONПроизвольные key-value данные
profileVersionIntИнкрементируется при каждом extraction
lastExtractedAtDateTimeTimestamp последнего извлечения

По одному профилю на пользователя (one-to-one связь с User).

Как используются профили

При генерации RAG-ответа профиль сотрудника подставляется в контекст LLM:

  • Summary — помогает AI понять роль сотрудника.
  • Current projects — делает ответы релевантными проекту.
  • Preferences — подстраивает стиль ответа.

Этот контекст добавляется в system prompt перед запросом пользователя, давая AI память на протяжении нескольких разговоров.

API

Список профилей

GET /api/v1/employee-profiles

Доступ: пользователи видят профили в рамках эффективного department scope; глобальные пользователи могут фильтровать по departmentId.

Получить профиль

GET /api/v1/employees/:userId/profile

Доступ: свой профиль либо профиль в рамках эффективного отдела вызывающего.

Обновить профиль

PATCH /api/v1/employees/:userId/profile

Body: любые поля профиля. Доступ: пользователь может обновлять свой профиль; для чужих профилей в рамках эффективного отдела нужен canManageEmployeeProfiles.

Автоматическое извлечение

Профили автоматически обновляются Memory Extraction Worker каждые N сообщений (задаётся через MEMORY_EXTRACT_EVERY_N_MESSAGES).

Ручные обновления

Пользователи с правом canManageEmployeeProfiles могут обновлять профили сотрудников вручную через API. Полезно для установки начального контекста или правки извлечённой информации.


Extraction worker

Memory extraction worker автоматически анализирует разговоры и обновляет профили сотрудников извлечёнными фактами.

Реализация

src/knowledge/memory-extractor.tsprocessMemoryExtractionJob().

Триггер

Извлечение запускается каждые N сообщений в разговоре (настраивается через MEMORY_EXTRACT_EVERY_N_MESSAGES, по умолчанию 10). BullMQ-задача попадает в очередь memory-extraction.

Пайплайн

  1. Загрузка профиля — получить существующий EmployeeProfile (создать, если нет).
  2. Сбор сообщений — вытащить сообщения с момента lastExtractedAt.
  3. Форматирование разговора — собрать транскрипт "user: ...\nassistant: ...".
  4. LLM-extraction — вызов gpt-4o-mini (настраивается через MEMORY_EXTRACTION_MODEL) с промптом:
    Extract JSON with fields: summary, currentProjects, preferences, frequentIntents, metadata.
    Only include fields with new information.
  5. Парсинг ответа — достать JSON из вывода LLM.
  6. Merge — слить с существующим профилем:
    • массивы дедуплицируются (union);
    • объекты мержатся shallow;
    • строки заменяются.
  7. Сохранение — обновить профиль, инкрементировать profileVersion, выставить lastExtractedAt.

Конфигурация очереди

ПараметрЗначение
Имя очередиmemory-extraction
Параллелизм1
Max retries3
BackoffExponential
Shutdown воркераGraceful (SIGTERM)

Конфигурация

ПеременнаяПо умолчаниюОписание
MEMORY_EXTRACT_EVERY_N_MESSAGES10Сколько сообщений между запусками extraction
MEMORY_EXTRACTION_MODELgpt-4o-miniLLM-модель для extraction