Перейти к содержимому

Прокси группа Smart

Тип прокси группы Smart использует адаптивный выбор узлов на основе весов. Вместо простого round-robin или ручной сортировки она непрерывно отслеживает реальную производительность каждого узла — задержку, процент успешных подключений, объём трафика — и автоматически направляет соединения к наилучшему доступному узлу.


# Опционально: глобальные настройки LightGBM (на верхнем уровне конфига)
lgbm-auto-update: true
lgbm-update-interval: 72
lgbm-url: "https://github.com/vernesong/mihomo/releases/download/LightGBM-Model/Model.bin"
proxy-groups:
- name: Smart Group
type: smart
proxies:
- Proxy A
- Proxy B
- Proxy C
policy-priority: "Premium:0.9;SG:1.3"
uselightgbm: false
collectdata: false
sample-rate: 1
prefer-asn: true
tolerance: 50

ПараметрТипПо умолчаниюОписание
typestring—Должно быть smart
policy-prioritystring""Корректировка приоритетов узлов по regex-шаблонам
uselightgbmboolfalseВключить предсказание весов через ML-модель LightGBM
collectdataboolfalseСобирать обучающие данные в CSV для кастомной модели
sample-ratefloat1Частота сбора данных, диапазон 0–1 (1 = 100%)
prefer-asnboolfalseПриоритизировать поиск по ASN при выборе узла
toleranceint0Разница задержки в мс, в пределах которой узлы считаются равными, когда группа выбирает узлы по задержке; см. tolerance
smart-collector-sizeint100Максимальный размер файла сбора данных в МБ

Глобальные параметры LightGBM (верхний уровень)

Заголовок раздела «Глобальные параметры LightGBM (верхний уровень)»
ПараметрТипПо умолчаниюОписание
lgbm-auto-updateboolfalseАвтоматически обновлять модель LightGBM
lgbm-update-intervalint72Интервал обновления модели в часах
lgbm-urlstring—URL для загрузки файла Model.bin

Корректирует вес узлов, чьи имена соответствуют regex-шаблону. Значения меньше 1 снижают приоритет, больше 1 — повышают.

policy-priority: "Premium:0.9;SG:1.3"

В этом примере узлы, соответствующие Premium, получают множитель 0.9 (ниже приоритет), а узлы SG — множитель 1.3 (выше приоритет). Несколько правил разделяются символом ;.


Допуск по задержке в миллисекундах, от 0 до 65535. Если не задан или 0, допуска нет.

Обычно группа выбирает узлы по весам, которые она накопила для сайта. Если таких узлов мало, например для сайта, который группа ещё не видела, она добирает остальные узлы по задержке из проверки (url / interval группы). tolerance влияет только на этот порядок:

  • узлы, задержка которых отличается не больше чем на tolerance, считаются равными и остаются в порядке списка proxies;
  • без допуска узлы сортируются строго по задержке, и два узла с 41 и 43 мс могут меняться местами после каждой проверки.

Сначала учитывается policy-priority: узел с более высоким приоритетом остаётся впереди независимо от tolerance. Узлы, которые группа подозревает в блокировке для этого сайта, всегда идут последними.

# строго по задержке (по умолчанию)
tolerance: 0
# узлы с разницей до 50 мс равны, порядок решает список proxies
tolerance: 50
# запас побольше: первые узлы списка остаются впереди, пока они не намного медленнее
tolerance: 150

Группа непрерывно оценивает каждый узел по пяти факторам:

  • Процент успешных подключений — соотношение успехов и неудач; недавние ошибки имеют больший вес.
  • Производительность подключений — время установки соединения и RTT.
  • Статистика использования — объём загрузки/выгрузки и продолжительность сессий.
  • Затухание по времени — веса снижаются для узлов, которые давно не использовались.
  • Тип соединения — отдельные счётчики для UDP и TCP.

Все метрики нормализуются в базовый вес, затем корректируются правилами policy-priority и ASN-специфичными таблицами. Обновление весов происходит через взвешенное усреднение. Если качество узла деградирует более чем на 30%, его кеш-запись сбрасывается.

Выбор происходит в следующем порядке приоритетов:

  1. История по доменам — если домен назначения уже встречался, предпочитается узел с наилучшей историей для этого домена.
  2. История по ASN — если истории по домену нет, используется прошлая производительность для автономной системы (AS) назначения.
  3. Предвычисленный кеш — горячие домены заранее оцениваются в памяти (LRU) и на диске для быстрого доступа.
  4. Round-robin запасной — используется при недостатке исторических данных; случайное исследование предотвращает локальные оптимумы.

Исторические данные хранятся 14 дней. Устаревшие записи удаляются автоматически.

При превышении порога отказов вес узла штрафуется. Восстановление происходит постепенно — веса частично возвращаются через 5, 10, 15 и 30 минут, что предотвращает постоянную блокировку узла из-за временного сбоя.


При uselightgbm: true группа использует предобученную модель LightGBM для предсказания весов узлов вместо правилового алгоритма.

Расположение файла модели:

  • ~/.config/mihomo/Model.bin

Включите collectdata: true, чтобы записывать метрики подключений в ~/smart_weight_data.csv.

Используйте sample-rate для снижения нагрузки — например, sample-rate: 0.1 записывает 10% подключений.

Собранный CSV можно использовать для обучения кастомной модели с помощью LightGBM 3.3.5.