Оглавление: риски · белый список · маршрутизация · матрица · ретраи · логи · PR и CI · шаги · FAQ
Гайд для команд которые строят несколько согласующихся агентов AutoGen на арендованном удалённом Mac и хотят тот же периметр что у одиночных агентов. В отличие от сценариев CrewAI за шлюзом или плагинов Semantic Kernel здесь опорная модель GroupChat и AssistantAgent с общим клиентом комплишенов. Смежные контуры: PydanticAI и JSON Schema, Task Brain и изоляция профиля, LiteLLM Proxy и маршруты моделей. Публичные покупка и тарифы доступны без входа.
Три риска до первого инцидента
- Размытый периметр инструментов: один агент предлагает вызов вне политики и шлюз успевает инициировать побочный эффект.
- Шторм параллельных вызовов: несколько участников GroupChat одновременно давят на API инструментов и на память процесса Python.
- Две схемы аргументов: локальная регистрация функций в 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.