Утверждения
HITL-процесс
Любой ответ, сгенерированный AI, может быть проверен человеком до отправки конечному пользователю. HITL гарантирует качество и соответствие для чувствительных ответов или ответов с низкой уверенностью.
Когда срабатывает HITL
Ответ уходит на HITL, если выполнено хотя бы одно условие:
- Низкая уверенность — RAG confidence < 0.7.
- Триггерное слово — сообщение пользователя или ответ содержит настроенное триггерное слово (например,
конфлікт,суд,штраф,звільнення,lawsuit,termination). - Новое взаимодействие — сотрудник впервые попал на конкретный intent.
- Доверие ещё не набрано — intent не дошёл до порога автономности.
- Стохастический сэмплинг — даже автономные intents отправляют часть ответов (по умолчанию 10%) на HITL для текущего контроля качества.
- Обнаружена инъекция — в сообщении пользователя или в RAG-контексте найдены паттерны prompt injection.
Поток статусов утверждения
pending → approved (send to user)
→ rejected (discard, log reason)
→ edited (content modified)
→ escalated (routed to higher role)
Действия
Утвердить
Утверждает ответ AI как есть. Ответ ставится в очередь на отправку в канал.
POST /api/v1/approvals/:id/approve
Утвердить с правкой
Утверждает изменённую версию ответа. editedContent заменяет оригинал.
POST /api/v1/approvals/:id/approve
Body: { "editedContent": "Modified response text" }
Отклонить
Отклоняет ответ — он не отправляется. Утверждающий может приложить комментарий с причиной.
POST /api/v1/approvals/:id/reject
Body: { "reason": "Inaccurate information about policy X" }
Эскалировать
Перенаправляет утверждение на пользователя с более высокой ролью (например, с approver на dept_head).
POST /api/v1/approvals/:id/escalate
Body: { "escalatedToId": "<user-id>", "reason": "Legal question, needs dept head review" }
Обновление матрицы доверия
Когда утверждение approved:
successfulCountintent-а увеличивается.- Если
successfulCount >= threshold(по умолчанию 5),isAutonomousстановитсяtrue. - Следующие сообщения с этим intent могут обходить HITL (с учётом
samplingRate).
Подробности — в разделе Auto-Bypass.
Просмотр утверждения
Детали утверждения включают:
- Исходный ответ AI.
- Использованные RAG-источники (чанки, документы, скоры).
- Классифицированный intent.
- Confidence score.
- Контекст разговора.
GET /api/v1/approvals/:id
Журнал аудита
Все действия по утверждениям пишутся в систему аудита:
- действия
approve,reject,escalate; - актор (утверждающий пользователь);
- timestamp;
- любые правки и комментарии.
Пакетное утверждение
Обрабатывайте несколько утверждений одним вызовом API — удобно в пиковые часы.
Эндпоинт
POST /api/v1/approvals/batch
Запрос
{
"decisions": [
{ "approvalId": "approval-1", "action": "approve" },
{ "approvalId": "approval-2", "action": "approve", "editedContent": "Modified response" },
{ "approvalId": "approval-3", "action": "reject", "reason": "Inaccurate" }
]
}
Ограничения
- Максимум 50 решений на запрос.
- Каждое решение обрабатывается независимо — возможны частичные сбои.
- Требуется право
canApprove.
Ответ
Возвращает результаты по каждому решению со статусом успех/ошибка:
{
"results": [
{ "approvalId": "approval-1", "status": "success" },
{ "approvalId": "approval-2", "status": "success" },
{ "approvalId": "approval-3", "status": "success" }
]
}
Сценарий использования
Очередь утверждений во фронтенде поддерживает пакетный выбор. Утверждающие выбирают несколько pending-утверждений и апрувят или отклоняют их одной операцией. Удобно для рутинных запросов, накопившихся за нерабочее время.
Автоматический обход (матрица доверия)
Матрица доверия даёт AI-ассистенту постепенную автономию. По мере того как утверждающие проверяют ответы по конкретным intents, система учится — какие intents можно безопасно отправлять автоматически.
Как это работает
Модель матрицы доверия (IntentTrust)
У каждой комбинации namespace + intent есть своя запись доверия:
| Поле | По умолчанию | Описание |
|---|---|---|
successfulCount | 0 | Количество утверждённых ответов |
threshold | 5 | Сколько approvals нужно для автономности |
isAutonomous | false | Включена ли автоматическая отправка |
samplingRate | 0.1 | Доля ответов, которые всё равно уходят на HITL (10%) |
Последовательность решения об автономности
1. Message received
2. Intent classified (vector similarity)
3. Check confidence fallback:
a. Confidence < 0.7 → FORCE HITL
b. Trigger word detected → FORCE HITL
c. First interaction for this intent → FORCE HITL
4. If fallback triggered → create Approval, wait for human
5. Check trust matrix:
a. Not autonomous → HITL
b. Autonomous + random() > samplingRate → AUTO-SEND
c. Autonomous + random() <= samplingRate → HITL (sampling)
Fallback по уверенности
Реализация: src/channels/bypass.ts.
Три условия всегда отправляют на HITL, даже для автономных intents:
- Низкая уверенность — RAG confidence < 0.7, система не уверена в ответе.
- Триггерные слова — настраиваемые ключевые слова для чувствительных тем (задаются через
INTENT_TRIGGER_WORDS). - Новое взаимодействие — первое сообщение сотрудника, классифицированное этим intent.
Стохастический сэмплинг
Даже если intent полностью автономный, часть ответов (по умолчанию 10%) случайно уходит на HITL. Это даёт:
- постоянный контроль качества;
- обнаружение дрейфа;
- сигнал для continuous training.
samplingRate настраивается отдельно для каждого intent.
Пример роста доверия
Intent: "leave_policy"
Namespace: "hr"
Day 1: 0/5 approved → HITL for all
Day 2: 3/5 approved → HITL for all
Day 3: 5/5 approved → autonomous, 90% auto-send
Day 30: 150 total → autonomous, 90% auto-send (with 15 sampled HITL reviews)
API
Просмотр матрицы доверия
GET /api/v1/intents/trust?namespaceId=<id>
Возвращает все intent trust-записи для namespace.
Требуется право canManageNamespaces.
Сбросить доверие
Чтобы выключить автономность для intent, обновите trust-запись: поставьте isAutonomous: false и successfulCount: 0 через БД (API-эндпоинта пока нет).
Настройка
Триггерные слова задаются через переменную окружения:
INTENT_TRIGGER_WORDS=конфлікт,суд,штраф,звільнення,скарга,позов,conflict,lawsuit,fine,termination,complaint