temporality
Изменить страницу↗
Инженерные документы

Модель-супервайзер: роль, кейсы и метрики человеческого фактора

Статус: принято (фаза 1 реализована). Связанные документы: agent-quality-loop.md, system-dashboard.md, human-knowledge-explorer.md.

#1. Роль

Супервайзер — installation-wide модель, которая работает для администратора, а не над задачами пользователей. Она не выполняет работу пользователей и не пишет в их артефакты; её продукция — суждения: оценки, диагнозы, предложения, предупреждения. Каждое суждение имеет доказательную базу (id ранов и событий) и остаётся предложением, пока человек не примет.

Сегодня супервайзер (= судья) уже: оценивает скиллы и изменения агентов (golden-кейсы + калибровка согласия), упорядочивает области знаний. Настройка — Агенты → «Настройки качества» (/v1/workspace/supervisor).

#2. Настройки (фаза 1, реализовано)

Параметр Ключ Назначение
Модель-супервайзер eval.judge.model роль судьи: оценки качества, упорядочивание областей знаний
Модель зрения supervisor.vision.model fallback для вызовов с изображениями, если основная модель не мультимодальная (роутинг в CallModel)
HAB-коэффициенты supervisor.hab.* оценка внимания человека (§5)
Расписание качества eval.schedule.interval периодичность оценочных прогонов

#3. Каталог кейсов супервайзера (дорожная карта)

#Волна A — мониторинг проблем (наблюдатель) — реализована целиком

#Волна B — качество и развитие (реализована)

#Волна C — пользовательские ошибки и трение (реализована)

Все кейсы работают на одной и той же поверхности: журнальные события → структурное суждение супервайзера → очередь администратора. Ни одно суждение не исполняется автоматически.

#4. Vision-роутинг (фаза 1, реализовано)

Вызов модели, несущий изображения, направляется на модель из supervisor.vision.model, если задана и отличается от модели запроса; маршрутизация провайдера — общая с обычными вызовами. Без настройки изображения идут в основную модель (прежнее поведение).

#5. Человеческий фактор: HAB, HWT и Flow Efficiency (фаза 1, реализовано)

Метрики разделяют два разных явления, которые раньше смешивались в «human approval budget»:

Метрика Канбанский аналог Определение
HAB — Human Attention Spend («внимание») touch time Оценка времени внимания: чтение итоговых и промежуточных заключений, принятие подтверждений, обдумывание и написание ответов
HWT — Human Wait Time («простой») queue wait time wall-clock время, которое работа простояла в ожидании человека (вопрос поднят → решён), вне зависимости от того, сколько внимания это заняло
Flow Efficiency flow efficiency HAB / (HAB + HWT) — доля человеческой шкалы времени, которая ушла на реальное внимание, а не на простой

#Как считается HAB (оценка, коэффициенты настраиваются)

#Как считается HWT

Σ (момент решения − момент постановки вопроса) по разрешённым подтверждениям/вопросам в окне. Это чистая задержка потока — канбан-очередь.

#Где смотреть

Два слоя одних и тех же метрик:

#6. Семантический слой знаний (фаза 2, реализовано)

Модель эмбеддингов — локальная и фиксированная, работает в процессе ядра через pure-Go движок rembed (intfloat/multilingual-e5-small, 384-мерные векторы, 100+ языков, weight-only int8): ни отдельного сервиса, ни провайдеров, ни ключей. Провайдерские эмбеддинги выпилены: облачные каталоги не отдают эмбеддинг-модели, а качество локального e5 для наших коротких пропозиций выше (multilingual-e5 специально обучен на 100+ языках). Модель лениво загружается с HF Hub при старте ядра в персистентный кэш (/var/cache/rembed, volume rembed_cache; вне контейнера — кэш ОС, путь переопределяется REMBED_CACHE); до готовности подсказки работают в лексическом режиме.

Матчер подсказок многотирный: точные попадания тем/сущностей → термы (с IDF-фильтром: токены, живущие в большой доле корпуса, не считаются совпадением) → семантический тир на эмбеддингах. Семантический тир идёт ниже лексических, помечается semantic:<score> в matched_by, допускает до 3 кандидатов от косинуса ≥ 0.35 и держит зарезервированные места в бюджете подсказок, чтобы лексический шум не вытеснял смысловые совпадения.

#Как устроено (реализовано)

  1. Движок инференса — pure-Go библиотека rembed в процессе ядра (KERNEL_EMBEDDINGS_MODEL, по умолчанию e5-small; KERNEL_EMBEDDING_WORKERS ограничивает CPU), без HTTP-хопа и внешних зависимостей.
  2. Хранение — журнал-БД уже на pgvector: миграция добавляет к знанию вектор (размерность — под выбранную модель) и штамп версии модели эмбеддингов. Смена модели ⇒ фоновый пересчёт.
  3. Наполнение — ingest-хук на knowledge.proposed/corrected + фоновый проход по записям без вектора/с чужим штампом.
  4. Запрос — слот подсказки эмбеддит текст задачи; косинусная близость даёт новый тир в hintCandidate (между точными сущностями и IDF-лексикой), существующие механизмы (понижение за novelty B5, бюджеты, исходы) — без изменений. e5-префиксы: kernel добавляет query: к тексту слота и passage: к пропозициям знаний (rembed отдаёт текст как есть — без префиксов e5 молча теряет качество).
  5. Деградация — модель не настроена/недоступна ⇒ ровно текущее лексическое поведение + счётчик пропусков в health.
  6. Оценка эффекта — A/B по существующим исходам подсказок (helpful/harmful) до/после включения; золотые запросы в оценку.

Оценка объёма: миграция + клиент провайдера + ingest-хук + тир в матчере + бейдж в UI — один сосредоточенный релиз.

#7. Дальше (фаза 2+)