2026: маршрутизация OpenClaw по нескольким моделям и цепи деградации — каналы и задачи, 429 и тайм-ауты fail-over на удалённом физическом Mac ZoneMac (openclaw.json + FAQ)
Команды, которые держат OpenClaw на удалённом физическом Mac ZoneMac, упираются в двойное давление: лимиты (429) и тайм-ауты длинного стриминга у одной «героической» модели. В статье — разделение по каналам и тегам задач, упорядоченные цепочки отказа и разбор 429 с backoff против fail-over по тайм-ауту; даны структура openclaw.json для вставки, матрицы решений, семишаговый runbook, цифры для отчётов и FAQ.
1. Введение и область
Маршрутизация по нескольким моделям — не «ради разнообразия провайдеров», а способ держать один шлюз под разной нагрузкой на входе: наружу — единый контракт (например пути в стиле OpenAI), внутри — профили по стоимости и задержке для канала (Telegram, Slack, внутренний API) и типа задачи (чат, пакетное резюме, CI-бот), плюс упорядоченные цепочки отказа, когда upstream нестабилен.
Дальше предполагается, что процесс шлюза и минимальный чат-запрос на Mac уже работают. Если нет — начните с полного руководства по установке OpenClaw. Контекст глобального развёртывания — в сравнении глобального развёртывания OpenClaw 2026; трансграничная задержка и выбор узлов — в матрице выбора глобальных узлов и Apple ID.
2. Точки боли
- Лимиты, спрятанные за «одной моделью для всех». Общая дорогая модель на все каналы превращает пиковые 429 в полный отказ; интерактив и пакет, внутренний и внешний трафик должны иметь разные профили и бюджеты параллелизма.
- Скрытая цена смешения 429 и тайм-аутов. Для 429 нужны
Retry-Afterи уважение к квоте; для тайм-аутов чтения или TLS — переходы по цепочке или больший stream-idle. Одна политика «повторить три раза» и тормозит очередь, и маскирует первопричину. - Стабильность и аудит конфигурации. На удалённом Mac правки
openclaw.jsonбез ревью могут сломать профиль по умолчанию или разойтись с финмоделью по порядку отказа. Именуйте профили, фиксируйте порядок primary/secondary и владельцев в runbook.
3. Матрица: измерение × стратегия
Согласуйте таблицу до выката: слева соблазнительный shortcut, справа — разумный baseline.
| Измерение | Рискованный shortcut | Рекомендуемый baseline |
|---|---|---|
| Каналы | Одна модель на все каналы | Высокочастотные низкочувствительные каналы — быстрый/дёшевый профиль; поддержка клиентов — качество в приоритете |
| Теги задач | Эвристики только по длине сообщения | Явные теги (ci, support) на маршрутизаторе для выбора профиля |
| Цепочка отказа | При сбое — случайная модель | Фиксированный упорядоченный список с невозрастающей стоимостью; структурированная причина в логе на каждом шаге |
| 429 | Немедленный повтор той же модели | Backoff + Retry-After; при необходимости снижение глобального параллелизма |
| Тайм-аут / простой стрима | Крутить только connect timeout | Раздельно connect / read / stream idle; при сбое — следующий шаг цепочки, а не бесконечные ретраи |
| Форма развёртывания | Соседство с приложением без плана второго экземпляра | Железо или Compose с health-check; в runbook — Docker vs bare metal и план второго инстанса |
4. Воспроизводимые фрагменты openclaw.json
Ниже — иллюстративная структура: ключи должны совпадать с документацией вашей версии OpenClaw; сливайте с существующим файлом, не затирая продовые пути и ссылки на секреты, и всегда держите резервную копию.
4.1 Профили маршрутизатора, каналы и теги задач
{
"gateway": {
"router": {
"defaultProfile": "balanced",
"profiles": {
"fast": {
"primaryModel": "gpt-4o-mini",
"fallbackChain": ["claude-3-5-haiku", "local-qwen-14b"]
},
"balanced": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["gpt-4o", "gpt-4o-mini"]
},
"quality": {
"primaryModel": "gpt-4.1",
"fallbackChain": ["claude-3-5-sonnet", "gpt-4o"]
}
},
"routeByChannel": {
"telegram": { "profile": "fast" },
"slack_public": { "profile": "balanced" },
"api_internal": { "profile": "quality" }
},
"routeByTaskTag": {
"ci": { "profile": "fast" },
"support": { "profile": "quality" },
"ops_summary": { "profile": "balanced" }
}
}
}
}
4.2 Повторы upstream, 429 и тайм-ауты
{
"gateway": {
"upstream": {
"http": {
"maxRetries": 4,
"retryOnStatus": [408, 409, 425, 429, 500, 502, 503, 504],
"respectRetryAfter": true,
"backoff": { "baseMs": 400, "maxMs": 8000, "jitter": 0.2 }
},
"circuitBreaker": {
"errorRateThreshold": 0.35,
"minSampleSize": 40,
"openDurationMs": 60000
},
"timeouts": {
"connectMs": 8000,
"requestMs": 180000,
"streamIdleMs": 240000
},
"failover": {
"onTimeout": "nextInFallbackChain",
"on429": "retryWithBackoffThenFallback",
"maxFallbackHops": 3
}
}
}
}
streamIdleMs закрывает длинные паузы между токенами в стриминге; разнесение on429 и onTimeout позволяет строить отдельные SLO в логах и на дашбордах — выгружайте счётчики в Prometheus или Grafana и алертите отдельно по глубине отказа и по доле 429.
5. Семишаговый runbook (удалённый физический Mac)
- Зафиксировать измерения трафика. Согласовать с продуктом и ops ID каналов и перечень тегов задач; убрать безымянные дефолты, чтобы трафик не уезжал в
balancedмолча. - Резервная копия JSON.
cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M); дифф приложить к тикету. - Слить блоки router. Сначала
profilesиfallbackChain, затемrouteByChannel/routeByTaskTag. - Локальный золотой запрос. Для каждого профиля — фиксированный curl (или крошечный SDK-скрипт) на
127.0.0.1, записать model ID и задержку. - Два класса сбоев. Через mock или throttle вернуть 429 и отдельно растянуть time-to-first-byte: 429 должен уходить в backoff без выжигания всей цепочки за три попытки, тайм-ауты — продвигаться по цепочке.
- Наблюдаемость. Минимум: запросы на профиль, доля 429, распределение глубины отказа, доля read-timeout — пороги согласовать с runbook Prometheus/Grafana.
- Архив и ревью. Закоммитить фрагменты JSON, золотые команды и откат (восстановить bak + reload) рядом с внутренней документацией.
6. Разбор 429 и тайм-аутов fail-over
| Симптом | Вероятная причина | Действие |
|---|---|---|
| HTTP 429 с Retry-After | Квота upstream или дроссель арендатора | Пауза и повтор той же модели; снизить глобальный параллелизм; затем цепочка отказа |
| HTTP 429 без Retry-After | Edge/WAF или нестандартный upstream | Экспоненциальный backoff и лог request_id; сравнить прямой upstream и путь через шлюз |
| Тайм-аут соединения | Сеть, DNS, обрыв туннеля | Проверить Tailscale/обратный прокси; при connect чаще логичнее переход по цепочке, чем длинный backoff |
| Медленный первый токен, потом норма | Холодный старт или очередь | Поднять границы connect/request; для пакета — короткий прогревочный запрос |
| Стрим обрывается посередине | Тайм-аут чтения или слишком низкий stream idle | Увеличить streamIdleMs и тайм-ауты SSE на прокси; не смешивать с политикой 429 |
7. Цифры для цитирования (runbook)
- Старт backoff:
baseMs: 400иmaxMs: 8000как порядок величины для 429; сверить с коммерческими лимитами QPS. - Простой стрима:
streamIdleMs: 240000(четыре минуты) для длинных ответов; короче — для снэппи интерактива. - Потолок отказа:
maxFallbackHops: 3ограничивает взрыв задержки; дальше — явное тело ошибки и алерт.
8. FAQ
Нужна ли моделям в цепочке одинаковая форма вывода?
Предпочтительно держать модели в одной «весовой категории» по tool calling / JSON mode; при переходе между семействами обрабатывайте сбои формата в приложении и деградируйте к простому тексту, не ожидая побитового паритета токенов.
Усиливает ли узел ZoneMac за границей тайм-ауты?
Да. Измеряйте отдельно клиент→шлюз и шлюз→upstream RTT; размещайте шлюз ближе к выходу к API или поднимайте requestMs для профиля. Трансграничный RTT учитывайте при лимитах stream-idle и request.
Можно ли ограничивать частоту по пользователю?
Добавьте token bucket перед OpenClaw (API gateway или тонкий middleware); профильный параллелизм оставьте внутри OpenClaw, чтобы не дублировать политику в двух слоях.
9. Итог и выбор узла
Маршрутизация по нескольким моделям переносит стоимость, задержку и доступность из режима «тушим пожары» в аудируемый контракт: каналы и задачи выбирают профили, 429 и тайм-ауты живут в разной семантике fail-over, упорядоченные цепочки дают предсказуемый последний рубеж, когда upstream дрожит.
Запуск шлюза на удалённом физическом Mac ZoneMac закрепляет этот путь на долгоживущем хосте с низким джиттером: нативный Terminal и SSH, launchd и стек macOS снижают дрейф окружения, который маскируется «таинственными» тайм-аутами. Объединённая память Apple Silicon делает локальный запасной маленькой модели на машине реалистичнее. Mac mini M4 — с порядка 4 Вт в простое, тихой работой и стабильным macOS — удобная площадка для шлюза 7×24; Gatekeeper и SIP снижают риск на безлюдных узлах с открытым периметром.
Если нужна эта схема маршрутизации на предсказуемом железе с минимальным операционным шумом, Mac mini M4 — один из сильных стартов по цене и производительности: арендуйте удалённый физический Mac через ZoneMac и закрепите мультимодельный трафик на воспроизводимой конфигурации шлюза.
Нужен физический Mac 24/7 под маршрутизацию OpenClaw?
Аренда узла Mac mini: реальное железо, стабильные сетевые пути и возможность повторить openclaw.json и замкнуть цикл наблюдаемости.