Прокси группа Smart
Тип прокси группы Smart использует адаптивный выбор узлов на основе весов. Вместо простого round-robin или ручной сортировки она непрерывно отслеживает реальную производительность каждого узла — задержку, процент успешных подключений, объём трафика — и автоматически направляет соединения к наилучшему доступному узлу.
Конфигурация
Заголовок раздела «Конфигурация»# Опционально: глобальные настройки LightGBM (на верхнем уровне конфига)lgbm-auto-update: truelgbm-update-interval: 72lgbm-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Параметры
Заголовок раздела «Параметры»Параметры группы
Заголовок раздела «Параметры группы»| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
type | string | — | Должно быть smart |
policy-priority | string | "" | Корректировка приоритетов узлов по regex-шаблонам |
uselightgbm | bool | false | Включить предсказание весов через ML-модель LightGBM |
collectdata | bool | false | Собирать обучающие данные в CSV для кастомной модели |
sample-rate | float | 1 | Частота сбора данных, диапазон 0–1 (1 = 100%) |
prefer-asn | bool | false | Приоритизировать поиск по ASN при выборе узла |
tolerance | int | 0 | Разница задержки в мс, в пределах которой узлы считаются равными, когда группа выбирает узлы по задержке; см. tolerance |
smart-collector-size | int | 100 | Максимальный размер файла сбора данных в МБ |
Глобальные параметры LightGBM (верхний уровень)
Заголовок раздела «Глобальные параметры LightGBM (верхний уровень)»| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
lgbm-auto-update | bool | false | Автоматически обновлять модель LightGBM |
lgbm-update-interval | int | 72 | Интервал обновления модели в часах |
lgbm-url | string | — | URL для загрузки файла Model.bin |
policy-priority
Заголовок раздела «policy-priority»Корректирует вес узлов, чьи имена соответствуют regex-шаблону. Значения меньше 1 снижают приоритет, больше 1 — повышают.
policy-priority: "Premium:0.9;SG:1.3"В этом примере узлы, соответствующие Premium, получают множитель 0.9 (ниже приоритет), а узлы SG — множитель 1.3 (выше приоритет). Несколько правил разделяются символом ;.
tolerance
Заголовок раздела «tolerance»Допуск по задержке в миллисекундах, от 0 до 65535. Если не задан или 0, допуска нет.
Обычно группа выбирает узлы по весам, которые она накопила для сайта. Если таких узлов мало, например для сайта, который группа ещё не видела, она добирает остальные узлы по задержке из проверки (url / interval группы). tolerance влияет только на этот порядок:
- узлы, задержка которых отличается не больше чем на
tolerance, считаются равными и остаются в порядке спискаproxies; - без допуска узлы сортируются строго по задержке, и два узла с 41 и 43 мс могут меняться местами после каждой проверки.
Сначала учитывается policy-priority: узел с более высоким приоритетом остаётся впереди независимо от tolerance. Узлы, которые группа подозревает в блокировке для этого сайта, всегда идут последними.
# строго по задержке (по умолчанию)tolerance: 0
# узлы с разницей до 50 мс равны, порядок решает список proxiestolerance: 50
# запас побольше: первые узлы списка остаются впереди, пока они не намного медленнееtolerance: 150Принцип работы
Заголовок раздела «Принцип работы»Расчёт весов
Заголовок раздела «Расчёт весов»Группа непрерывно оценивает каждый узел по пяти факторам:
- Процент успешных подключений — соотношение успехов и неудач; недавние ошибки имеют больший вес.
- Производительность подключений — время установки соединения и RTT.
- Статистика использования — объём загрузки/выгрузки и продолжительность сессий.
- Затухание по времени — веса снижаются для узлов, которые давно не использовались.
- Тип соединения — отдельные счётчики для UDP и TCP.
Все метрики нормализуются в базовый вес, затем корректируются правилами policy-priority и ASN-специфичными таблицами. Обновление весов происходит через взвешенное усреднение. Если качество узла деградирует более чем на 30%, его кеш-запись сбрасывается.
Выбор узла
Заголовок раздела «Выбор узла»Выбор происходит в следующем порядке приоритетов:
- История по доменам — если домен назначения уже встречался, предпочитается узел с наилучшей историей для этого домена.
- История по ASN — если истории по домену нет, используется прошлая производительность для автономной системы (AS) назначения.
- Предвычисленный кеш — горячие домены заранее оцениваются в памяти (LRU) и на диске для быстрого доступа.
- Round-robin запасной — используется при недостатке исторических данных; случайное исследование предотвращает локальные оптимумы.
Исторические данные хранятся 14 дней. Устаревшие записи удаляются автоматически.
Обработка сбоев
Заголовок раздела «Обработка сбоев»При превышении порога отказов вес узла штрафуется. Восстановление происходит постепенно — веса частично возвращаются через 5, 10, 15 и 30 минут, что предотвращает постоянную блокировку узла из-за временного сбоя.
Машинное обучение (LightGBM)
Заголовок раздела «Машинное обучение (LightGBM)»При 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.