Мультиагент на AutoGen ломается не из-за красивого GroupChat, а когда шлюз не знает белого списка, когда параллельные tool-calls съедают unified memory и когда в CI прилетает сырой completion вместо короткого failure summary.

Оглавление: риски · белый список · маршрутизация · матрица · ретраи · логи · PR и CI · шаги · FAQ

Гайд для команд которые строят несколько согласующихся агентов AutoGen на арендованном удалённом Mac и хотят тот же периметр что у одиночных агентов. В отличие от сценариев CrewAI за шлюзом или плагинов Semantic Kernel здесь опорная модель GroupChat и AssistantAgent с общим клиентом комплишенов. Смежные контуры: PydanticAI и JSON Schema, Task Brain и изоляция профиля, LiteLLM Proxy и маршруты моделей. Публичные покупка и тарифы доступны без входа.

Три риска до первого инцидента

  1. Размытый периметр инструментов: один агент предлагает вызов вне политики и шлюз успевает инициировать побочный эффект.
  2. Шторм параллельных вызовов: несколько участников GroupChat одновременно давят на API инструментов и на память процесса Python.
  3. Две схемы аргументов: локальная регистрация функций в AutoGen обновлена а артефакт JSON Schema на шлюзе отстал и прод принимает неверные поля.

Минимальный белый список прав и инструментов

Зафиксируйте в git явный JSON перечень имён инструментов с версией tools_policy_version и классом эффекта чтение запись сеть. Шлюз OpenClaw сравнивает имя до маршрутизации к исполнителю и возвращает TOOL_DENIED без вызова внешних API. Для каждого разрешённого имени держите одну каноническую JSON Schema аргументов в каталоге schemas/tools/ и прогоняйте её на границе доверия одинаково для всех агентов чата. Bearer-токен шлюза храните в файле с chmod 0600 или в Keychain сервисного пользователя; в лог пишите только префикс токена и идентификатор политики.

Маршрутизация диалогов через шлюз OpenClaw

Направьте клиент AutoGen на http://127.0.0.1:<порт>/v1 с заголовком Authorization: Bearer … совпадающим с политикой шлюза. В GroupChat задайте единый model_client для участников которые ходят в модель через шлюз чтобы не появлялся параллельный обход с другим базовым URL. Выделите отдельный correlation_id на весь ход обсуждения и прокидывайте его пользовательскими полями метаданных в запросы инструментов чтобы в логах шлюза связать реплики агентов. Для наблюдаемости полей см. матрицу OpenTelemetry GenAI.

Матрица где резать отказы

Слой Инвариант Цена пропуска
AutoGen GroupChat Один клиент комплишенов и явные роли спикеров Рассинхрон политик между агентами и обход шлюза
OpenClaw Белый список имён и JSON Schema до исполнения Побочные эффекты и порча данных вне песочницы
Надёжность Бюджет параллелизма полуоткрытый breaker идемпотентные ретраи Своп на Apple Silicon и зависание воркеров шлюза

Шаблон повторов с джиттером и полуоткрытым breaker

Разведите три бюджета времени: ожидание первого токена полный цикл агента и отдельный лимит на валидацию JSON ответа инструмента. На стороне оркестратора считайте в скользящем окне подряд идущие SCHEMA_REJECT и ответы шлюза 5xx; после порога переводите маршрут в полуоткрытое состояние с одним пробным запросом и экспоненциальным бэкоффом с джиттером. Повторяйте только вызовы помеченные как идемпотентные иначе ретраи удвоят запись. Коды вида TOOL_BUDGET_EXCEEDED не ретраить наглухо а снижать параллелизм и длину очереди GroupChat.

Обезличивание логов перед экспортом в SIEM

На каждый запрос фиксируйте request_id conversation_id agent_role tools_policy_version schema_revision inflight_tool_calls и итоговый outcome. В текст сообщений и аргументы инструментов не кладите секреты; токены и ключи заменяйте на salted-хэш или последние четыре символа. Сырой completion модели в централизованный поток не отправляйте ограничьтесь хэшем тела и длиной в символах. Пользовательский ввод обрезайте до безопасной глубины вложенности JSON чтобы защитить парсер шлюза от рекурсивных структур.

Пример компактной сводки для PR или пайплайна CI

Ниже контракт который удобно эмитить из шлюза в артефакт CI и в комментарий к запросу на слияние без утечки содержимого промптов.

{ "request_id": "req_7f3a…", "conversation_id": "conv_21bd…", "stage": "tool_validate", "code": "SCHEMA_REJECT", "hint": "field repo missing required pattern ^[a-z0-9_-]+$", "tools_policy_version": "2026-04-24.3", "schema_revision": "schemas/tools/git_push.json@a91c" }

Воспроизводимые шаги

1) Песочница. Создайте пользователя сервиса каталог ~/autogen-edge с подкаталогами config logs schemas; код репозитория только чтение scratch на запись с квотой.

2) Шлюз на loopback. Поднимите OpenClaw на 127.0.0.1 выполните openclaw doctor --json внешний доступ оставьте по SSH-туннелю.

3) Токен и клиент. Запишите OPENCLAW_GATEWAY_TOKEN в защищённый файл укажите базовый URL в конфигурации клиента AutoGen для всех агентов чата.

4) Политика инструментов. Загрузите белый список и JSON Schema на шлюз включите отказ до исполнения для имён вне списка.

5) Бюджет параллелизма. Задайте верхнюю границу одновременных вызовов инструментов на процесс и зеркальное ограничение в шлюзе логируйте отказы по бюджету отдельно от таймаутов.

6) Ретраи и сводки. Подключите шаблон бэкоффа к идемпотентным кодам на ошибках возвращайте JSON failure summary без сырого completion и продублируйте поля в структурированный лог.

7) Приёмка. Прогоните два часа soak на удалённом Mac с тем же лимитом inflight что ожидается в проде сравните p95 задержки с локальным профилем.

Чек-лист перед merge

  • Ветка содержит одинаковые tools_policy_version и schema_revision в репозитории и в конфиге шлюза.
  • Токен шлюза не попал в diff и не логируется целиком.
  • Breaker и пороги параллелизма описаны в runbook рядом с параметрами unified memory.
  • CI публикует failure summary артефактом при красной сборке.

Краткие ответы

Нужен ли отдельный шлюз на каждый GroupChat? Достаточно одного процесса шлюза на узел при жёсткой изоляции политик по заголовку токена и префиксу маршрута.

Как не смешать роли в логах? Пишите agent_role и conversation_id на каждом tool-call и коррелируйте с trace_id.

Где гонять ночные прогоны? На выделенном узле из каталога аренды Mac с фиксированным железом как в проде.

Публичные страницы без логина: главная, блог, помощь, тарифы, покупка.

Итог: AutoGen даёт удобный GroupChat но договор доверия живёт на OpenClaw: токен границы белый список и JSON Schema бюджет параллелизма и короткие failure summary делают удалённый Apple Silicon воспроизводимым между спринтами и CI.