Интеллектуальная маршрутизация, умные помощники и никакой магии — только проверенные методы
💡 Главная идея: Не используйте огромную модель для каждой задачи. Вместо этого — направляйте простые запросы на лёгкие локальные модели, а сложные — на мощные (и дорогие) «тяжеловесы». Это и даёт экономию до 80%.
1️⃣ Почему 80% — это реально
Представьте: вы ставите 100 моделей — от «полнотекстового» анализа «есть ли жизнь на Марсе» до узкоспециализированной модели, которая по картинке определяет квадратики и круги для станка[citation:2].
Если каждую задачу отправлять на самую умную модель, сервер захлебнётся. Если же настроить умный роутер, то:
🧩
Автоматический выбор модели
Система анализирует запрос: если он простой (например, «привет» или «сколько будет 2+2»), маршрутизатор отправляет его на маленькую локальную модель (например, llama3.2:3b). Если запрос сложный — подключает GPT-4 или Claude Opus. В результате вы платите только за действительно сложные задачи[citation:1][citation:2].
📌 Реальный пример: Один из инструментов (llm-router) позволяет экономить до 80% при работе с API, автоматически выбирая самую дешёвую подходящую модель[citation:1].
2️⃣ Три способа реализовать экономию
🔹 Вариант 1: Готовый роутер (open-llm-router)
Это легковесный прокси-сервер, который работает как замена LiteLLM и легко интегрируется с Open WebUI[citation:1][citation:6].
- Что делает: Принимает запросы через API, совместимый с OpenAI, и маршрутизирует их к нужной модели (Ollama, OpenAI, Anthropic, и другие)[citation:1].
- Как настраивается: Достаточно описать модели в файле
config.yml в формате LiteLLM — и всё работает.
- Фишка: Поддерживает авто-обнаружение локальных моделей из Ollama и LM Studio (
./manage.sh scan-models)[citation:1][citation:6].
model_list:
- model_name: gpt-4.1
litellm_params:
model: gpt-4.1
api_key: your_openai_key
- model_name: claude-sonnet-4
litellm_params:
model: anthropic/claude-sonnet-4-20250514
api_key: your_claude_key
- model_name: local-qwen
litellm_params:
model: ollama/qwen3:8b
🔹 Вариант 2: Умный роутер по типу контента (modelsrouter)
Этот подход идеально подходит для вашего сценария: 100 моделей + разные типы задач (текст, картинки, чертежи)[citation:2].
- Суть: Роутер автоматически определяет, есть ли в запросе изображение. Если есть — направляет к мультимодальной модели (например, Gemma 3 Vision), если нет — к текстовой[citation:2].
- Для вашей задачи: Модель для «квадратиков и кругов для станка» будет использоваться только тогда, когда пользователь прикрепляет картинку. Остальные запросы (вроде «есть ли жизнь на Марсе») пойдут на текстовые модели[citation:2].
🎯 Идеальное решение для вас: Один эндпоинт (http://router:8000/v1) в Open WebUI, а внутри — автоматический выбор между текстовой и визуальной моделью. Клиент (пользователь) даже не замечает переключения[citation:2].
🔹 Вариант 3: Кастомная Pipe-функция в Open WebUI
Если вам нужна максимальная гибкость — напишите свою логику распределения прямо внутри Open WebUI. Это называется Pipe Function (или «манифолд»)[citation:3][citation:8].
- Вы создаёте функцию, которая в списке моделей выглядит как одна модель, но внутри сама решает, к кому обратиться[citation:3].
- Например: если в запросе есть слова
«Ansible», «playbook» → отправить на qwen2.5-coder. Если запрос про «жизнь на Марсе» → на llama3:70b[citation:3].
- Поддерживает автоматический выбор инструментов (поиск, генерация картинок) через Auto Tool Selector[citation:4][citation:14].
async def pipe(self, body: dict):
user_query = body["messages"][-1]["content"]
if "код" in user_query or "python" in user_query:
model = "qwen2.5-coder"
elif "Марс" in user_query or "жизнь" in user_query:
model = "llama3:70b"
else:
model = "qwen3:1b"
return await self.call_model(model, body)
3️⃣ Как не убить сервер при 100+ моделях
Когда вы ставите 100 разных моделей, система может захлебнуться даже без учёта маршрутизации. Вот что спасает:
⚙️ Оптимизация Open WebUI
- Кеширование списка моделей: При 100+ моделях страница может грузиться 10–15 секунд. Включите
ENABLE_BASE_MODELS_CACHE=True — и список будет загружаться мгновенно[citation:5].
- PostgreSQL вместо SQLite: Для многих моделей и пользователей SQLite — это «бутылочное горлышко». PostgreSQL обязателен[citation:5][citation:15].
- Вынос задач (Task Model): Для фоновых задач (генерация заголовков, тегов) используйте отдельную лёгкую модель, например
qwen3:1b. Это освобождает ресурсы для основных запросов[citation:5].
- Внешний движок для извлечения контента: Если вы загружаете PDF или картинки, стандартный парсер (pypdf) может «съедать» память. Используйте Apache Tika или Docling как отдельный сервис[citation:5].
💡 Важно: Если вы используете ChromaDB для RAG (поиска по документам) и у вас больше одного воркера (UVICORN_WORKERS > 1) — возможны падения. Переходите на Milvus, Qdrant или PGVector[citation:5].
4️⃣ Ваш план действий: от А до Я
Итак, у вас уже есть 100 моделей, включая «полнотекстовую» и «визуальную для станка». Вот пошаговый план:
-
Установите роутер: Самый простой вариант —
open-llm-router. Он поднимается через Docker и требует лишь файл конфига[citation:1][citation:6].
docker compose up -d
./manage.sh scan-models all -u
-
Настройте маршрутизацию по типу контента: Если у вас есть модели для изображений — используйте
modelsrouter, который сам определяет, есть ли картинка в запросе[citation:2].
-
Подключите к Open WebUI: В настройках Connections укажите Base URL роутера (
http://localhost:8086/v1)[citation:1][citation:2].
-
Включите кеширование и оптимизацию: Добавьте переменные
ENABLE_BASE_MODELS_CACHE=True и DATABASE_URL=postgresql://... в ваш .env файл[citation:5].
-
Настройте Auto Tool Selector (опционально): Если хотите, чтобы система сама решала, подключать ли поиск, генерацию картинок или код-интерпретатор — установите готовую функцию Auto Tool Selector[citation:4][citation:9].
«Ни одна модель не умеет всё одинаково хорошо. Но система, которая умеет выбирать, будет и умной, и экономичной».
5️⃣ А что насчёт «есть ли жизнь на Марсе» и «квадратики для станка»?
Вот как это будет работать в собранной системе:
-
Запрос «есть ли жизнь на Марсе» → Роутер видит, что это текстовый вопрос без картинок. Отправляет на текстовую модель (например,
llama3:70b или GPT-4), если вопрос сложный. Или на llama3.2:3b, если вопрос простой[citation:2].
-
Запрос с картинкой «квадратики и круги для станка» → Роутер обнаруживает изображение и направляет запрос к мультимодальной модели, обученной на технических чертежах (
Gemma 3 Vision или аналогичной)[citation:2][citation:12].
-
Все 100 моделей не грузятся одновременно, а ждут своего часа. Ресурсы расходуются только на те модели, которые действительно нужны в данный момент.
✅ Итог: Вы экономите до 80% вычислительных ресурсов, потому что большая часть запросов обрабатывается лёгкими локальными моделями, а сложные и визуальные задачи — только по необходимости. Всё это работает автоматически и прозрачно для пользователя.
🛠️ Собрано из документации Open WebUI, open-llm-router, modelsrouter и реальных кейсов оптимизации.
Комментарии
Пока нет комментариев. Будьте первым!