Пам'ять
Профілі співробітників
Профілі співробітників — це шар персистентної пам'яті, який збагачує відповіді AI контекстом про конкретного користувача.
Модель
Модель EmployeeProfile зберігає дані, екстраговані про кожного користувача:
| Поле | Тип | Опис |
|---|---|---|
summary | String | Bio/опис ролі, згенерований LLM |
currentProjects | String[] | Активні проекти, над якими працює співробітник |
preferences | JSON | Комунікаційні преференції |
frequentIntents | String[] | Часто використовувані наміри |
accessLevel | String | Рівень доступу (наприклад, standard, elevated) |
metadata | JSON | Довільні key-value дані |
profileVersion | Int | Інкрементується при кожній екстракції |
lastExtractedAt | DateTime | Час останньої екстракції |
Один профіль на користувача (зв'язок 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
Авторизація: власний профіль або профіль у межах ефективного scope викликача.
Оновити профіль
PATCH /api/v1/employees/:userId/profile
Body: будь-які поля профілю.
Авторизація: користувачі можуть оновлювати власний профіль; для оновлення чужих профілів у межах ефективного scope потрібен дозвіл canManageEmployeeProfiles.
Автоматична екстракція
Профілі автоматично оновлюються воркером екстракції пам'яті кожні N повідомлень (задається через MEMORY_EXTRACT_EVERY_N_MESSAGES).
Ручне оновлення
Користувачі з canManageEmployeeProfiles можуть оновлювати профілі співробітників вручну через API. Корисно для задання початкового контексту або виправлення помилок екстракції.
Extraction Worker
Воркер екстракції пам'яті автоматично аналізує розмови та оновлює профілі співробітників витягнутими фактами.
Реалізація
src/knowledge/memory-extractor.ts — processMemoryExtractionJob()
Тригер
Екстракція запускається кожні N повідомлень у розмові (задається через MEMORY_EXTRACT_EVERY_N_MESSAGES, дефолт: 10). У чергу memory-extraction додається BullMQ-джоб.
Pipeline
- Завантажити профіль: взяти існуючий
EmployeeProfile(створити, якщо нема) - Взяти повідомлення: отримати повідомлення з часу
lastExtractedAt - Відформатувати розмову: побудувати транскрипт
"user: ...\nassistant: ..." - LLM-екстракція: викликати
gpt-4o-mini(конфігурується черезMEMORY_EXTRACTION_MODEL) з промптом:Extract JSON with fields: summary, currentProjects, preferences, frequentIntents, metadata.
Only include fields with new information. - Розпарсити відповідь: витягти JSON з output LLM
- Змерджити: об'єднати з існуючим профілем:
- Масиви дедуплікуються (union)
- Об'єкти мерджаться deep-merge
- Рядки перезаписуються
- Зберегти: оновити профіль, інкрементувати
profileVersion, виставитиlastExtractedAt
Конфігурація черги
| Параметр | Значення |
|---|---|
| Queue name | memory-extraction |
| Concurrency | 1 |
| Max retries | 3 |
| Backoff | Exponential |
| Worker shutdown | Graceful (SIGTERM) |
Конфігурація
| Змінна | За замовчуванням | Опис |
|---|---|---|
MEMORY_EXTRACT_EVERY_N_MESSAGES | 10 | Повідомлень між екстракціями |
MEMORY_EXTRACTION_MODEL | gpt-4o-mini | LLM-модель для екстракції |