Перейти до основного вмісту

Пам'ять

Профілі співробітників

Профілі співробітників — це шар персистентної пам'яті, який збагачує відповіді AI контекстом про конкретного користувача.

Модель

Модель EmployeeProfile зберігає дані, екстраговані про кожного користувача:

ПолеТипОпис
summaryStringBio/опис ролі, згенерований LLM
currentProjectsString[]Активні проекти, над якими працює співробітник
preferencesJSONКомунікаційні преференції
frequentIntentsString[]Часто використовувані наміри
accessLevelStringРівень доступу (наприклад, standard, elevated)
metadataJSONДовільні key-value дані
profileVersionIntІнкрементується при кожній екстракції
lastExtractedAtDateTimeЧас останньої екстракції

Один профіль на користувача (зв'язок 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.tsprocessMemoryExtractionJob()

Тригер

Екстракція запускається кожні N повідомлень у розмові (задається через MEMORY_EXTRACT_EVERY_N_MESSAGES, дефолт: 10). У чергу memory-extraction додається BullMQ-джоб.

Pipeline

  1. Завантажити профіль: взяти існуючий EmployeeProfile (створити, якщо нема)
  2. Взяти повідомлення: отримати повідомлення з часу lastExtractedAt
  3. Відформатувати розмову: побудувати транскрипт "user: ...\nassistant: ..."
  4. LLM-екстракція: викликати gpt-4o-mini (конфігурується через MEMORY_EXTRACTION_MODEL) з промптом:
    Extract JSON with fields: summary, currentProjects, preferences, frequentIntents, metadata.
    Only include fields with new information.
  5. Розпарсити відповідь: витягти JSON з output LLM
  6. Змерджити: об'єднати з існуючим профілем:
    • Масиви дедуплікуються (union)
    • Об'єкти мерджаться deep-merge
    • Рядки перезаписуються
  7. Зберегти: оновити профіль, інкрементувати profileVersion, виставити lastExtractedAt

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

ПараметрЗначення
Queue namememory-extraction
Concurrency1
Max retries3
BackoffExponential
Worker shutdownGraceful (SIGTERM)

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

ЗміннаЗа замовчуваннямОпис
MEMORY_EXTRACT_EVERY_N_MESSAGES10Повідомлень між екстракціями
MEMORY_EXTRACTION_MODELgpt-4o-miniLLM-модель для екстракції