Как вы проектируете «человека в петле» для multi-agent системы с минимальным overhead?

Краткий тезис

Human-in-the-loop (HITL) в multi-agent системе нужен для контроля критических действий (финансовые операции, удаление данных, публичные коммуникации). Минимизация overhead достигается за счёт фильтрации только таких действий, контекстных оповещений с полной предысторией и автоматических suggest'ов для approval. Архитектурно HITL реализуется через асинхронные очереди запросов, шаблоны решений и эскалацию по порогам, что позволяет человеку вмешиваться только когда это действительно необходимо, не замедляя остальные потоки.


1. Термины: Human-in-the-loop, Multi-agent система, Overhead

Human-in-the-loop (HITL) — подход, при котором человек (оператор) участвует в принятии решений автоматизированной системы, обычно для подтверждения или отклонения действий, выходящих за допустимые рамки. В контексте multi-agent систем HITL — это точка контроля, где агент запрашивает разрешение перед выполнением опасного или необратимого действия.

Multi-agent система — совокупность нескольких AI-агентов, каждый из которых решает свою подзадачу (например, агент заказов, агент платежей, агент поддержки). Агенты могут взаимодействовать друг с другом и с внешними сервисами.

Overhead — дополнительные затраты времени, ресурсов или сложности, возникающие из-за введения HITL. Основные источники overhead: ожидание ответа человека, передача контекста, обработка отклонённых запросов, повторные попытки.


2. Зачем нужен HITL в multi-agent системах?

Без HITL multi-agent система может выполнять нежелательные действия: списать деньги не с того счёта, удалить данные клиента, опубликовать непроверенный контент. HITL решает три задачи:

  • Безопасность — предотвращение финансовых потерь, утечек данных, репутационного ущерба.
  • Соответствие политикам — соблюдение внутренних регламентов и законодательства (GDPR, SOX).
  • Контроль качества — человек может оценить адекватность решения в нестандартных ситуациях, где агент не уверен.

Однако бездумное внедрение HITL на каждое действие приведёт к неприемлемому overhead: агенты будут постоянно ждать, пользователи — задерживаться. Поэтому проектирование должно быть избирательным.


3. Фильтрация действий: только критические

Первый принцип минимизации overhead — HITL только для критических действий. Критерии критичности:

Тип действияПримерКритично?
Финансовые операцииСписание > $1000, перевод на новый счётДа
Удаление данныхУдаление пользователя, очистка логовДа
Публичные коммуникацииОтправка email от имени компании, пост в соцсетяхДа
Изменение прав доступаНазначение админа, выдача API-ключаДа
Внутренние запросыПоиск документа, генерация отчётаНет
Чтение данныхПолучение информации о заказеНет

Реализация: каждый агент имеет матрицу действий с флагом requires_approval. Перед выполнением агент проверяет этот флаг. Если true — отправляет запрос в HITL-менеджер.


4. Контекстное оповещение со всей предысторией

Чтобы человек мог быстро принять решение, оповещение должно содержать:

  • Полный контекст — цепочку сообщений между агентами, приведшую к данному действию.
  • Предлагаемое действие — что именно агент собирается сделать (сумма, получатель, команда).
  • Обоснование — почему агент считает это действие правильным (ссылки на политики, предыдущие решения).
  • Варианты — автоматически сгенерированные suggest'ы: «Одобрить», «Отклонить с причиной», «Запросить уточнение».

Пример структуры оповещения (JSON):

{
  "request_id": "req_12345",
  "agent": "payment_agent",
  "action": "transfer_money",
  "details": {
    "from_account": "ACC-001",
    "to_account": "ACC-999",
    "amount": 5000,
    "currency": "USD"
  },
  "context": [
    {"role": "user", "content": "Переведи 5000 долларов на счёт 999"},
    {"role": "agent_order", "content": "Заказ #456 подтверждён, требуется оплата"},
    {"role": "agent_payment", "content": "Инициирую перевод..."}
  ],
  "suggestions": [
    {"label": "approve", "reason": "Сумма в пределах лимита для этого клиента"},
    {"label": "reject", "reason": "Подозрительный получатель"},
    {"label": "escalate", "reason": "Требуется проверка compliance"}
  ]
}

5. Автоматические suggest'ы для approval

Чтобы человек не тратил время на анализ каждого запроса с нуля, система предлагает предварительные решения на основе правил и истории:

  • Rule-based suggest'ы: если сумма < лимита и получатель в белом списке → approve.
  • ML-based suggest'ы: модель, обученная на предыдущих решениях человека, предсказывает вероятность одобрения.
  • Шаблоны: для типовых ситуаций (возврат средств, отмена заказа) — готовые формы с заполненными полями.

Человек может одним кликом принять suggest, что снижает overhead до секунд.


6. Асинхронная очередь и неблокирующие запросы

Критично, чтобы ожидание ответа человека не блокировало других агентов. Решение — асинхронная очередь запросов на approval.

  • Агент отправляет запрос в HITL-менеджер и продолжает работу с другими задачами, не требующими одобрения.
  • HITL-менеджер помещает запрос в очередь (например, Redis или RabbitMQ).
  • Человек получает уведомление (Slack, email, дашборд) и отвечает.
  • Ответ приходит асинхронно, агент подписывается на callback или периодически проверяет статус.
# Псевдокод агента
async def execute_action(action):
    if action.requires_approval:
        request_id = await hitl_manager.submit(action, context)
        # агент не ждёт, переключается на другие задачи
        asyncio.create_task(wait_for_approval(request_id, action))
    else:
        await perform(action)

7. Эскалация и тайм-ауты

Чтобы избежать зависания запросов, вводятся:

  • Тайм-аут: если человек не ответил за N минут (настраивается), запрос автоматически эскалируется вышестоящему оператору или выполняется fallback-действие (отклонение с уведомлением).
  • Эскалация по уровням: L1 — оператор поддержки, L2 — senior, L3 — compliance officer.
  • Deadline: для срочных действий (например, отмена мошеннического перевода) — короткий тайм-аут и автоматический отказ.

8. Метрики эффективности HITL

Для оценки overhead и качества HITL нужно отслеживать:

МетрикаОписаниеЦелевое значение
Approval latencyВремя от запроса до ответа человека< 30 сек (для срочных), < 5 мин (для обычных)
Approval rateДоля одобренных запросов70-90% (слишком низкая → плохие suggest'ы)
Overhead ratio(время ожидания approval) / (общее время выполнения)< 10%
False positive rateДоля запросов, которые можно было не отправлять (агент мог решить сам)< 5%
Human workloadКоличество запросов на оператора в час< 20 (чтобы не перегружать)

9. Инструменты и платформы

  • LangGraph — позволяет встраивать HITL-узлы в граф агентов, поддерживает асинхронные прерывания.
  • AutoGen — имеет встроенный механизм UserProxyAgent для взаимодействия с человеком.
  • CrewAI — поддерживает human_input=True для задач.
  • Собственная реализация на базе очередей (Redis + FastAPI + Slack Bolt) даёт полный контроль.

10. Риски и компромиссы

  • Человеческий фактор: оператор может ошибиться или устать → нужны двойные проверки для особо критичных действий.
  • Задержки: даже при асинхронной схеме, если человек не отвечает, действие откладывается → для real-time сценариев HITL неприменим.
  • Стоимость: содержание операторов дороже, чем полностью автоматическая система → HITL оправдан только для high-value действий.
  • Приватность: передача контекста человеку может раскрывать чувствительные данные → необходимо маскирование или анонимизация.

Пет-проект для закрепления

Задача: Реализовать симуляцию multi-agent системы (агент заказов, агент платежей) с HITL для переводов > $1000. Минимизировать overhead за счёт асинхронных запросов и suggest'ов.

Инструменты: Python, asyncio, Redis (или in-memory queue), простой CLI/Slack-интерфейс для оператора.

Шаги:

  1. Создать двух агентов: OrderAgent (обрабатывает заказы) и PaymentAgent (выполняет платежи).
  2. Определить матрицу действий: PaymentAgent.transfer требует approval, если сумма > 1000.
  3. Реализовать HITL-менеджер с очередью asyncio.Queue.
  4. При запросе approval менеджер отправляет оператору контекст и suggest'ы (approve/reject).
  5. Агент не блокируется, продолжает обрабатывать другие заказы.
  6. После ответа оператора агент выполняет или отменяет действие.
  7. Добавить тайм-аут 30 секунд и эскалацию (автоотклонение).

Ожидаемый результат: Система обрабатывает 100 заказов, из них 10 требуют approval. Среднее время ожидания — 5 секунд (благодаря suggest'ам), overhead составляет < 5% от общего времени выполнения. Можно измерить метрики и убедиться, что HITL не тормозит основной поток.


Связь с другими вопросами

ВопросТема
395Как проектировать multi-agent систему?
397Как обеспечить согласованность действий агентов?
398Как логировать и мониторить multi-agent систему?
399Как тестировать multi-agent систему?
400Как деплоить multi-agent систему?
15Как внедрить HITL в RAG-систему?

Навигация