Оглавление: слоистые требования · стратегии маршрутизации · стоимость и SLA · FAQ · конверсия
Типичный провал — разные клиенты ходят в модели напрямую: политики кэша расходятся, квоты обходятся, а финансы видят только HTTP без связки алиасов. Агрегирующий шлюз фиксирует контракт и даёт единый вектор наблюдаемости; детали телеметрии согласуйте с матрицей OpenTelemetry GenAI, а практику LiteLLM за OpenClaw — с гайдом по LiteLLM и шлюзу. Перед измерением батча на Metal полезно свериться с матрицей llama.cpp и Ollama на M4.
Три боли до таблицы. (1) Интерактив и офлайн делят один пул — хвост задержки растёт из-за чужих батчей. (2) Кэш без версии системного промпта даёт тихие регрессии качества. (3) Fallback без бюджета ретраев превращает счёт в лотерею. Дальше — слои, которые превращают хаос в контролируемую матрицу решений.
Слоистые требования
L0 — контракт клиента. Единый OpenAI-совместимый путь: модельные алиасы, заголовки трассировки, идемпотентность на уровне шага агента и запрет прямых обходов в продакшене.
L1 — политика маршрутизации. Правила по арендаторам, регионам, классам задач, стоимости токена и допустимому риску галлюцинаций; явный каскад резервных моделей с таймаутами.
L2 — исполнение и батч. Очереди decode, лимиты конкуренции, приоритет интерактива над офлайном, параметры KV и контекста на Apple Silicon.
L3 — стоимость и доказательства. Сшивка спанов с токенами, почасовая аренда узла, дисковые и сетевые накладные расходы удалённого хоста, подписанный чек-лист приёмки.
Стратегии маршрутизации
Ниже — сравнение трёх рабочих паттернов для LLM и агентов на Mac. Формулировки намеренно приземлённые: ваша цель — зафиксировать измеримые компромиссы, а не маркетинговые обещания.
| Паттерн | Задержка | Конкуренция | Кэш | Fallback |
|---|---|---|---|---|
| Прямой SDK → локальный сервер | Минимальный сетевой путь, предсказуемый p95 при узком клиенте. | Ограничена Metal и памятью; риск голодания чата при крупном батче. | Локальный или отсутствует; версионирование на совести клиента. | Ручной; без центрального breaker легко удвоить расход. |
| OpenAI-совместимый агрегатор | Плюс один hop и очередь; выигрыш за счёт reuse соединений и пула. | Централизованные лимиты, приоритеты и квоты по арендаторам. | Общий ключ с учётом модели, температуры и хэша системного промпта. | Каскад моделей, ретраи с джиттером, breaker на бэкендах. |
| Несколько удалённых узлов + гео-выбор | Зависит от RTT; полезно держать интерактив ближе к пользователю. | Распределение очередей; следите за согласованностью кэша между узлами. | Реплицируемый или шардированный; TTL и инвалидация обязательны. | Переключение региона и модели; нужен единый журнал причин. |
Практический вывод: оставьте «тонкий» OpenAI-совместимый фасад перед Metal-исполнителем, а бизнес-правила и кэш поднимите на агрегатор. Для агентов фиксируйте лимит параллельных инструментов отдельно от лимита модели, иначе конкуренция инструментов убьет p95 даже при свободном GPU. Добавьте отдельный бюджет токенов на ретраи инструментов и логируйте его отдельной меткой, чтобы финансы видели полную картину.
Стоимость и SLA
Шесть шагов приёмки, которые можно вставить в релизный чек-лист без споров о «нагрузке вчера».
1. Зафиксируйте эталонный профиль: смесь чатов, длинных контекстов и пакетных джобов с целевыми долями.
2. Прогоните профиль на удалённом Mac mini с теми же лимитами диска и сети, что в продакшене.
3. Снимите p95 на шлюзе и на бэкенде, раздельно для первого токена и полного ответа.
4. Учтите долю попаданий в кэш и экономию токенов; сверьте с полями биллинга в спанах.
5. Зафиксируйте число переключений fallback на миллион запросов и среднюю добавочную стоимость.
6. Сложите почасовую аренду узла, трафик и хранилище логов; сравните с бюджетом SLA на миллион токенов.
Набросок параметров окружения — подставьте свои значения и храните файл в репозитории инфраструктуры как версию профиля.
# Плейсхолдеры приёмки — замените на свои значения
export ROUTER_BASE_URL="__https://gateway.example/v1__"
export ROUTER_MAX_PARALLEL_REQUESTS="__32__"
export BACKEND_BATCH_DECODE="__8__"
export CACHE_TTL_SECONDS="__600__"
export FALLBACK_CHAIN="__primary,secondary,cheap__"
export RETRY_MAX="__2__"
export RETRY_BASE_MS="__120__"
export ACCEPT_P95_FIRST_TOKEN_MS="__450__"
export ACCEPT_CACHE_HIT_MIN="__0.12__"
export ACCEPT_FALLBACKS_PER_1M="__900__"Цитируемые ориентиры для слайдов. Держите интерактивный p95 первого токена на удалённом узле в пределах согласованного бюджета RTT плюс локальный инференс. Стремитесь к доле кэша не ниже договорённого минимума для шаблонных задач или честно отключите кэш для строгих compliance-сценариев. Любое изменение батча или алиасов моделей выпускайте с новым идентификатором профиля нагрузки, иначе сравнение стоимости между неделями бессмысленно.
FAQ
Стоит ли смешивать чат и эмбеддинги в одной очереди? Только если готовы платить хвостом задержки; для агентов разведите очереди и лимитируйте одновременные векторные джобы.
Как не сломать кэш при смене системного промпта? Включайте версию промпта или хэш в ключ; для юридически значимых ответов используйте отдельный профиль без кэша.
Что делать при дрейфе стоимости между регионами? Храните коэффициент в конфиге арендатора и обновляйте его из финансового API; не смешивайте регионы в одном алиасе без явного суффикса.
Конверсия
Забронируйте выделенный удалённый Mac под приёмку профиля нагрузки, чтобы кривые стоимости и задержки не искажались ноутбучным сном и фоновыми приложениями. Публичные страницы без обязательного входа: покупка и аренда, тарифы, центр помощи; полный список материалов — индекс блога.
Публичные страницы: тарифы на странице тарифов, каталог без обязательного входа — покупка / аренда, операционные детали — центр помощи; остальные разборы — в индексе технического блога.