MAATRIX / Блог / Свой агрегатор нейросетей на VPS: несколько LLM за одним API

Свой агрегатор нейросетей на VPS: несколько LLM за одним API

Блог MAATRIX · 2026-07-07

Один эндпоинт, за которым живут OpenAI, Anthropic, локальные модели и облачные провайдеры — с единым ключом, логами и лимитами. Разбираем, как собрать такой шлюз на своём сервере за вечер.

Зачем нужен агрегатор

['Когда в проекте больше одной модели, зоопарк ключей и SDK быстро превращается в боль: разные форматы запросов, разные лимиты, разные счета. Агрегатор (LLM-gateway) прячет всё это за единым OpenAI-совместимым API — код приложения общается с одним адресом, а маршрутизация решается конфигом.', '
  • Один формат — везде вызовы вида /v1/chat/completions.
  • Фолбэк — если провайдер лёг, запрос уходит на резервную модель.
  • Учёт и лимиты — токены, бюджеты и ключи по командам.
  • Приватность — свой шлюз на своём сервере, а не чужое SaaS.
', 'Держать такой шлюз удобно на VPS рядом с приложением: минимальная задержка и полный контроль. На тарифах MAATRIX (AMD EPYC + NVMe) хватает даже базовой конфигурации — сам gateway почти не ест CPU, работа идёт в сеть.', 'Отдельный плюс — единая точка наблюдаемости. Когда весь трафик к моделям проходит через один шлюз, ты видишь в одном месте, кто и сколько тратит, какие запросы падают и где растёт задержка. Без агрегатора эту телеметрию пришлось бы собирать по каждому SDK отдельно, а при смене провайдера — переписывать интеграцию. Со шлюзом переключение модели — это одна строка в конфиге, а не релиз приложения.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для агрегатора нейросетей

Готовим сервер

['Возьмём Ubuntu 22.04/24.04, обновимся и поставим Docker — это самый быстрый путь.', '
sudo apt update && sudo apt -y upgrade\ncurl -fsSL https://get.docker.com | sudo sh\nsudo usermod -aG docker $USER\nnewgrp docker
', 'Проверяем, что Docker жив.', '
docker run --rm hello-world
']

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Ставим LiteLLM Proxy

['LiteLLM — популярный open-source шлюз: понимает 100+ провайдеров и отдаёт единый OpenAI-формат. Поднимем его в контейнере.', '
docker run -d --name litellm \\\n  -p 4000:4000 \\\n  -e OPENAI_API_KEY=sk-... \\\n  -e ANTHROPIC_API_KEY=sk-ant-... \\\n  -v $(pwd)/config.yaml:/app/config.yaml \\\n  ghcr.io/berriai/litellm:main-latest \\\n  --config /app/config.yaml --port 4000
', 'Минимальный config.yaml с двумя моделями и мастер-ключом.', '
model_list:\n  - model_name: gpt-4o\n    litellm_params:\n      model: openai/gpt-4o\n  - model_name: claude\n    litellm_params:\n      model: anthropic/claude-3-5-sonnet-20241022\ngeneral_settings:\n  master_key: sk-my-secret-key
']

Роутинг, фолбэк и балансировка

['Сила агрегатора — в правилах. Можно завести один «виртуальный» model_name, за которым несколько реальных развёртываний, и раздавать запросы по кругу с автоматическим фолбэком при ошибке.', '
router_settings:\n  routing_strategy: simple-shuffle\n  num_retries: 3\n  fallbacks:\n    - gpt-4o: ["claude"]
', 'Теперь клиент всегда зовёт gpt-4o, а если OpenAI недоступен — запрос молча уходит на Claude. Тот же приём работает для локальных моделей: добавь в model_list указатель на свой vLLM или Ollama.', 'Стратегий маршрутизации несколько, и выбор зависит от задачи. simple-shuffle просто раскидывает нагрузку по кругу и хорош, когда за одним именем несколько одинаковых развёртываний. least-busy шлёт запрос туда, где меньше активных соединений — полезно при неравномерной длине ответов. А если важна цена, можно завязать роутинг на дешёвую модель по умолчанию и поднимать «тяжёлую» только для сложных запросов на уровне приложения. Ретраи с экспоненциальной паузой сглаживают кратковременные 429 от провайдеров, не доводя их до пользователя.', 'Отдельно стоит настроить таймауты: без них зависший апстрим держит соединение и съедает воркеры. Разумный request_timeout в 60–120 секунд плюс num_retries закрывают большинство сетевых сбоев, а фолбэк добавляет второй уровень надёжности поверх ретраев.']

Проверяем API

['Шлюз говорит на языке OpenAI, поэтому подойдёт любой клиент. Простейшая проверка через curl.', '
curl http://localhost:4000/v1/chat/completions \\\n  -H "Authorization: Bearer sk-my-secret-key" \\\n  -H "Content-Type: application/json" \\\n  -d \'{"model":"gpt-4o","messages":[{"role":"user","content":"Привет!"}]}\'
', 'В коде достаточно поменять base_url — и весь зоопарк моделей доступен через привычный SDK.', '
from openai import OpenAI\nclient = OpenAI(base_url="http://SERVER_IP:4000/v1", api_key="sk-my-secret-key")\nr = client.chat.completions.create(model="claude",\n    messages=[{"role":"user","content":"Ping"}])\nprint(r.choices[0].message.content)
']

Безопасность и частые ошибки

['
  • Не открывай 4000 в мир голым — прикрой Nginx с TLS и Basic-auth, либо пусти только по приватной сети.
  • master_key обязателен — иначе любой сможет тратить твои токены.
  • Ключи провайдеров — в env или secrets, а не в git.
  • Лимиты на пользователя спасают от разорения при утечке ключа.
', 'Мини-конфиг Nginx для TLS-обёртки.', '
server {\n  listen 443 ssl;\n  server_name api.example.com;\n  location / { proxy_pass http://127.0.0.1:4000; }\n}
']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для агрегатора нейросетей

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Сколько ресурсов нужно агрегатору?

Сам шлюз почти не грузит CPU и память — хватит базового VPS. Ресурсы понадобятся, только если рядом крутить локальные модели.

Можно ли смешивать облачные и локальные модели?

Да, в этом весь смысл. В model_list добавляешь и OpenAI/Anthropic, и локальный vLLM или Ollama — клиент работает с ними одинаково.

Как считать расход токенов по командам?

LiteLLM ведёт учёт по ключам и умеет отдавать метрики и логи в БД, так что бюджет каждой команды виден отдельно.