Мы запустили red_mad_router — единую точку доступа к большим языковым моделям. Изначально мы создавали его для наших внутренних клиентов, например, Билайна и ВкусВилла, которым нужен был доступ к моделям без VPN, оплата в рублях и понятный учёт расходов. Этой осенью мы расширили доступ к продукту и для внешних пользователей.
Через один интерфейс приложение обращается к моделям разных провайдеров, от OpenAI, Gemini, Claude и xAI до китайских DeepSeek, Kimi и Qwen, а также к генераторам изображений и видео вроде Runway и VEO от Google. Всего в каталоге сейчас около 100 моделей, и популярных открытых, и проприетарных флагманских.
Подобных решений, которые подходят для высоких нагрузок корпоративного сегмента, на российском рынке не так много. Мы расскажем, как обеспечиваем маршрутизацию к провайдерам моделей за счёт нашей архитектуры. Ниже — подробнее о том, как платформа устроена внутри, как работаем с данными и какие фичи отличают наш роутер от подобных ему платформ.
Схема системы
Список всех доступных моделей и их стоимость можно посмотреть на сайте
Архитектура
Платформу мы разделили на две плоскости:- Плоскость данных. Она выступает в качестве шлюза, и через неё идёт весь трафик к моделям. Шлюз авторизует запрос по API-ключу, проверяет бюджеты и частотные лимиты, выбирает провайдера и модель, считает стоимость и асинхронно фиксирует потребление.
- Плоскость управления. В неё входят интерфейс и фоновый обработчик. Здесь мы заводим оргструктуру, задаём лимиты, проводим пополнения, формируем отчётность, а также выпускаем ключи.

Пользовательские запросы
Работа с запросами в платформе устроена стандартно. Клиентское приложение обращается к шлюзу с API-ключом, и запрос попадает на любую свободную реплику. Шлюз определяет права ключа и проверяет частотные лимиты по счётчикам в Valkey, общим для всех реплик. Решение о допуске — блокировки, срок ключа, бюджеты по всей иерархии, список разрешённых моделей — система принимает в памяти, без дополнительных обращений к хранилищам. Запрос уходит выбранному провайдеру; при отказе выполняется повтор, затем происходит переход на резервный доступ или альтернативную модель. Ответ возвращается клиенту, если необходимо — потоком. Покажем на цифрах текущий трафик, когда мы ещё не открыли личный кабинет для внешних пользователей:- среднее количество обработанных запросов за месяц — 2 млн;
- суточный объём потребления токенов — более 10 млрд;
- ежемесячный прирост трафика — 15–20%

Данные и безопасность
Когда мы строили систему, мы столкнулись с тем, что работать с частью провайдеров напрямую из российского контура невозможно. Чтобы обойти это ограничение, в кластер мы включили внешние узлы в зарубежных облаках. На них работают прокси исходящего трафика, через которые шлюз выходит к нужному провайдеру. Весь остальной трафик идёт напрямую. Все данные мы храним на территории РФ. Путь замкнут внутри российского контура, а внешние провайдеры вынесены за прокси. Так мы решаем важную проблему. Благодаря такому подходу у пользователей есть возможность работать с моделям, недоступным в России, без средств обхода. Чтобы обеспечить безопасность, мы свели периметр к двум публичным точкам: защищённое соединение на балансировщике и служебный канал администрирования. Кластер находится в изолированной сети, а у узлов нет публичных адресов. При этом административный доступ к базам и оркестратору можно получить через узел доступа с многофакторной аутентификацией и записью сессий. С данными учётных записей мы работаем так же. API-ключи не хранятся в открытом виде, только в виде необратимого преобразования. Содержимое запросов и ответов система по умолчанию не сохраняет.Guardrails
Вместе с роутером мы подключили Guardrails — набор комплексный фильтр, через который проходят все входящие запросы. Фильтр мы построили на комбинации лёгких NER-моделей и проверок регулярных выражений (RegExp) в сочетании с использованием малых локальных моделей, где это необходимо. Такая комбинация является легковесной и подходящей для большой потоковой нагрузки при сохранении высокой точности маскирования и фильтрации, в отличие классического использования больших LLM в роли подобных фильтров. Ключевых задач, стоящих перед Guardrails, всего три:- Анонимизация персональных данных. Модуль маскирует чувствительные данные до отправки провайдеру, заменяя их на плейсхоледры, когда модель возвращает ответ, происходит их обратная подстановка происходит на стороне платформы.
- Модерация. Запрос с запрещённым содержимым (NSFW-контент) сразу блокируется и до провайдера не доходит и обеспечивает безопасность конечных пользователей, особенно, когда речь о корпоративных клиентах.
- Работа с изображениями. Guardrails находит фрагменты персональных данных на картинке — например, паспорт на фото — и замыливает тот участок, где есть чувствительная информация.
Агенты
Многие пользователи уже привыкли к интерфейсу приложений вроде Claude Code или Codex и не хотят от них отказываться. Им удобнее работать через них, но при этом они часто сталкиваются с необходимостью использовать средства обхода. Отличительная особенность нашей платформы от других подобных ей — поддержка агентских приложений. Пользователь продолжает работать в оригинальном интерфейсе, используя наш API-ключ. Устроено это так: роутер работает по OpenAI-совместимому интерфейсу, поэтому подключается к кодинг-агентам подстановкой адреса и ключа. Агенты поддерживают работу только своих моделей, но зато пользователям больше не нужно прибегать к средствам обхода. С агентами связка работает неровно у большинства агрегаторов — тот же OpenRouter отрабатывает не все сценарии. Поддержка агентов у нас в приоритете: сейчас работает связка с Codex и Claude Code, дальше запустим в работу Gemini и остальные.Тарификация
Стоимость обращения к модели складывается из количества затраченных токенов, и за подписку платить не нужно. Помимо них платформа считает:- кэш чтения и записи — кэширование снижает стоимость повторного контекста примерно в десять раз и особенно заметно в агентских сценариях, где один и тот же контекст уходит в модель многократно;
- tool calling — встроенные инструменты провайдера тарифицируются отдельно от генерации.