Перейти к содержанию

Human-in-the-Loop (HITL)

Раздел HITL — согласование критических операций ИИ-агентов человеком перед выполнением.

Маршрут: /hitl

Когда требуется HITL

HITL активируется когда:

  1. Политика hitl.rego помечает действие как критическое
  2. risk_score превышает порог (по умолчанию 0.7)
  3. Действие в списке критических: delete_data, transfer_funds, modify_permissions
  4. Обнаружена аномалия с высоким score
sequenceDiagram
    participant Agent
    participant API
    participant Policy as OPA Policy
    participant Human as Оператор

    Agent->>API: policies/check
    API->>Policy: Evaluate
    Policy-->>API: required_approval=true
    API-->>Agent: Ожидание согласования
    Agent->>API: hitl/request
    API-->>Human: WebSocket уведомление
    Human->>API: hitl/approve
    API-->>Agent: Разрешено

Очередь согласований

Колонка Описание
ID UUID запроса
Агент Имя и ID агента
Действие Запрашиваемая операция
Ресурс Целевой ресурс
Risk Score Оценка риска
Статус pending, approved, rejected, expired
Запрошено Время создания запроса
Истекает TTL запроса

Согласование / отклонение

Через UI

  1. Откройте /hitl
  2. Выберите запрос со статусом pending
  3. Просмотрите контекст (действие, ресурс, reasoning агента)
  4. Нажмите Approve или Reject
  5. Укажите комментарий (опционально)

Через API

curl -X POST http://localhost:8000/api/v1/hitl/request \
  -H "X-API-Key: <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_id": "<uuid>",
    "action": "delete_data",
    "resource": "personal_data",
    "context": {"records": 1500, "reason": "retention_policy"}
  }'
curl -X POST http://localhost:8000/api/v1/hitl/approve/<approval_id> \
  -H "X-API-Key: <key>" \
  -H "Content-Type: application/json" \
  -d '{"approver": "security@company.com", "comment": "Approved per policy"}'
curl -X POST http://localhost:8000/api/v1/hitl/reject/<approval_id> \
  -H "X-API-Key: <key>" \
  -H "Content-Type: application/json" \
  -d '{"approver": "security@company.com", "comment": "Insufficient justification"}'

Статусы запросов

Статус Описание
pending Ожидает решения оператора
approved Согласовано, агент может выполнить действие
rejected Отклонено
expired Истёк TTL без решения

TTL запросов

Запросы без решения автоматически переходят в expired. Агент должен повторить запрос.

Права доступа

Действие Минимальная роль
Просмотр очереди Security Analyst
Согласование Security Analyst
Отклонение Security Analyst
Создание запроса (API) Developer (через агента)

Уведомления

  • WebSocket: событие hitl.pending при новом запросе
  • Счётчик на панели мониторинга (KPI «Ожидающие HITL»)
  • Toast-уведомление в UI

Политика hitl.rego

Пример правила, требующего согласования:

required_approval if {
    input.action == "delete_data"
}

deny_critical if {
    input.action == "delete_data"
    not input.context.approved
}