APIMart
Мультимодельные AI-приложения: роутинг и фолбэки

Мультимодельные AI-приложения: роутинг и фолбэки

Туториал по мультимодельным AI-приложениям: OpenAI-совместимый клиент, роутинг моделей в OpenRouter, автоматические фолбэки, лимиты цен и учёт расходов.

Туториал

Продакшен-приложение с AI должно переживать отказ модели так, чтобы никого не пришлось будить среди ночи. Паттерн, который к этому приводит, скучен и надёжен: один OpenAI-совместимый клиент, ранжированный список моделей, правила роутинга, предпочитающие дешёвых, но здоровых провайдеров, и жёсткие лимиты цен.

Что вы соберёте в этом туториале:

  • Единый клиент, который вызывает GPT, Claude, Gemini, DeepSeek и другие модели заменой одной строки

  • Автоматические фолбэки — если основная модель падает с ошибкой или таймаутом, запрос повторяется на следующей модели из вашего списка

  • Контроль расходов — роутинг «сначала самое дешёвое» и лимиты max_price, чтобы всплеск трафика не смог сжечь ваш бюджет

  • Прозрачность трат — учёт стоимости каждого запроса, который можно логировать и вешать на алерты

Всё ниже использует OpenRouter как слой роутинга; та же архитектура работает с любым OpenAI-совместимым шлюзом, включая APIMart, когда в том же приложении нужны модели изображений, видео или аудио.

Блок-схема мультимодельного AI-приложения с роутингом, цепочкой фолбэков и ценовыми ограничителями
Путь запроса: сначала роутер, затем цепочка фолбэков, лимиты цен включены всегда

Почему мультимодельность лучше одной модели

Отказы — вопрос «когда», а не «если»

У каждого крупного провайдера случаются заметные инциденты. Если приложение жёстко привязано к одному вендору, каждый из этих инцидентов — ваш инцидент. Цепочка фолбэков превращает «провайдер лежит» в короткий всплеск задержки.

У моделей разные сильные стороны

Дешёвые быстрые модели берут на себя классификацию и извлечение данных; фронтирные модели — генерацию с тяжёлым рассуждением. Смешивание уровней под задачу регулярно срезает счёт за инференс вдвое и больше.

Цены меняются каждый месяц

Цены на модели постоянно падают. Если смена модели — правка одной строки, вы можете гнаться за лучшим соотношением цены и качества каждый квартал без проекта миграции.

Шаг 1: один клиент, много моделей

Направьте официальный OpenAI SDK на шлюз — свой HTTP-код не нужен:

from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="sk-or-..."
)

resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-4.5",
    messages=[{"role": "user", "content": "Summarize this contract clause..."}],
)
print(resp.choices[0].message.content)

Переключение на deepseek/deepseek-chat или google/gemini-2.5-pro — это просто другая строка model. Держите имена моделей в конфиге, а не в коде.

Версия на TypeScript

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});

const resp = await client.chat.completions.create({
  model: "deepseek/deepseek-chat",
  messages: [{ role: "user", content: "Classify this ticket: ..." }],
});

Реестр моделей вместо разбросанных строк

Централизуйте маппинг «задача → уровень модели» один раз:

{
  "extract": "deepseek/deepseek-chat",
  "chat": "anthropic/claude-sonnet-4.5",
  "reason": "openai/gpt-5.2"
}

Шаг 2: фолбэки, срабатывающие автоматически

Массив models

OpenRouter повторяет запрос на стороне сервера по ранжированному списку, когда основная модель отдаёт ошибку, упирается в rate limit или таймаутит [1]:

{
  "model": "openai/gpt-5.2",
  "models": ["anthropic/claude-sonnet-4.5", "deepseek/deepseek-chat"],
  "messages": [{ "role": "user", "content": "..." }]
}

Ответ сообщает, какая модель на самом деле обслужила запрос — логируйте это.

Фейловер на уровне провайдеров

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

{
  "model": "meta-llama/llama-3.3-70b-instruct",
  "provider": {
    "order": ["deepinfra", "together"],
    "allow_fallbacks": true
  }
}

Последний рубеж на стороне клиента

Оберните вызов в один повтор к другому шлюзу (или к закэшированному ответу) на редкий случай, когда недоступен сам роутер. Только один повтор — ретрай-штормы это отказы, устроенные своими руками.

Шаг 3: контроль расходов, который нельзя обойти

Роутинг «сначала самое дешёвое»

Сортируйте провайдеров по цене, когда задержка второстепенна — либо на уровне запроса ("provider": {"sort": "price"}), либо через суффикс модели :floor для батч-задач.

Жёсткие лимиты цен

max_price отклоняет любого провайдера с котировкой выше вашего потолка (в долларах за 1M токенов):

{
  "model": "openai/gpt-5.2",
  "max_price": { "prompt": 1.5, "completion": 10 },
  "messages": [{ "role": "user", "content": "..." }]
}

Это гарантия, а не пожелание — запросы, которые нельзя обслужить в пределах лимита, быстро падают вместо того, чтобы молча стоить дороже.

Считайте стоимость каждого запроса

Ответы содержат usage; умножьте его на тарифы обслужившей модели и отправляйте как метрику. Ставьте алерты на дрейф стоимости задачи, а не только на общие траты — именно дрейфом проявляется тихий фолбэк на более дорогую модель.

За пределами текста: тот же паттерн для изображений, видео и аудио

LLM-роутеры заканчиваются на языковых моделях. Реальные продукты генерируют ещё изображения, видео и речь — а жонглирование ещё пятью SDK вендоров возвращает ровно ту проблему, которую вы только что решили.

Один шлюз для всех модальностей

APIMart предоставляет 500+ моделей — чат плюс GPT-Image-2, Sora 2, Kling, Veo, Suno — за одним OpenAI-совместимым API и одним балансом.

Знакомая интеграция, цены со скидкой

Настройка клиента идентична Шагу 1, отличается только base URL, а цены на модели примерно на 20% ниже официального прайса — точные тарифы по моделям смотрите на странице цен.

Смешивать роутеры — нормально

Типичная продакшен-схема: OpenRouter или прямые API для текста, APIMart для генерации медиа — оба за одной абстракцией в вашем коде, оба заменяются через конфиг.

Чек-лист для продакшена

Выкатывайтесь со всеми пятью пунктами: реестр моделей в конфиге, серверная цепочка фолбэков, роутинг «сначала самое дешёвое» там, где позволяет задержка, лимиты max_price на каждом вызове и метрики стоимости запросов с алертами на дрейф. Именно эта комбинация позволяет команде из двух человек держать мультимодельное приложение без выделенного дежурства опсов.

Готовы попробовать?

Выберите нужную модель в маркетплейсе моделей

Попробуйте чат, изображения и видео в маркетплейсе APIMart и быстро оцените возможности моделей через единый API.

Чат-моделиМодели изображенийВидео-модели
Открыть маркетплейс моделей