Как вы проектируете «человека в петле» для 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-интерфейс для оператора.
Шаги:
- Создать двух агентов:
OrderAgent(обрабатывает заказы) иPaymentAgent(выполняет платежи). - Определить матрицу действий:
PaymentAgent.transferтребует approval, если сумма > 1000. - Реализовать HITL-менеджер с очередью asyncio.Queue.
- При запросе approval менеджер отправляет оператору контекст и suggest'ы (approve/reject).
- Агент не блокируется, продолжает обрабатывать другие заказы.
- После ответа оператора агент выполняет или отменяет действие.
- Добавить тайм-аут 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-систему? |
Навигация
- Предыдущий: 395
- Следующий: 397
- Индекс: 00. Индекс разборов