Память
Профили сотрудников
Профили сотрудников — это persistent memory layer, который обогащает ответы AI пользовательским контекстом.
Модель
Модель EmployeeProfile хранит извлечённую информацию по каждому пользователю:
| Поле | Тип | Описание |
|---|---|---|
summary | String | Био / описание роли, извлечённое LLM |
currentProjects | String[] | Активные проекты, над которыми работает сотрудник |
preferences | JSON | Предпочтения в коммуникации |
frequentIntents | String[] | Часто используемые intents |
accessLevel | String | Уровень авторизации (например, standard, elevated) |
metadata | JSON | Произвольные key-value данные |
profileVersion | Int | Инкрементируется при каждом extraction |
lastExtractedAt | DateTime | Timestamp последнего извлечения |
По одному профилю на пользователя (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.ts — processMemoryExtractionJob().
Триггер
Извлечение запускается каждые N сообщений в разговоре (настраивается через MEMORY_EXTRACT_EVERY_N_MESSAGES, по умолчанию 10). BullMQ-задача попадает в очередь memory-extraction.
Пайплайн
- Загрузка профиля — получить существующий
EmployeeProfile(создать, если нет). - Сбор сообщений — вытащить сообщения с момента
lastExtractedAt. - Форматирование разговора — собрать транскрипт
"user: ...\nassistant: ...". - LLM-extraction — вызов
gpt-4o-mini(настраивается черезMEMORY_EXTRACTION_MODEL) с промптом:Extract JSON with fields: summary, currentProjects, preferences, frequentIntents, metadata.
Only include fields with new information. - Парсинг ответа — достать JSON из вывода LLM.
- Merge — слить с существующим профилем:
- массивы дедуплицируются (union);
- объекты мержатся shallow;
- строки заменяются.
- Сохранение — обновить профиль, инкрементировать
profileVersion, выставитьlastExtractedAt.
Конфигурация очереди
| Параметр | Значение |
|---|---|
| Имя очереди | memory-extraction |
| Параллелизм | 1 |
| Max retries | 3 |
| Backoff | Exponential |
| Shutdown воркера | Graceful (SIGTERM) |
Конфигурация
| Переменная | По умолчанию | Описание |
|---|---|---|
MEMORY_EXTRACT_EVERY_N_MESSAGES | 10 | Сколько сообщений между запусками extraction |
MEMORY_EXTRACTION_MODEL | gpt-4o-mini | LLM-модель для extraction |