JSON примеры для fine tuning локальной модели Qwen2.5 (7B) для анализа динамической маршрутизации - анализа результатов выполнения команды Cisco "show ip route" Ниже представлены структурированные JSON-примеры, оптимизированные для дообучения (fine-tuning) или few-shot prompting локальной языковой модели. Структура специально разделена на input_text (сырой вывод команды), parsed_input (извлеченные числовые и текстовые признаки, что критически важно для ИИ) и expected_analysis (ожидаемый вывод модели с обоснованием и рекомендациями). Совет для тренинга: Обратите внимание на поле uptime_seconds. При подготовке данных для ИИ всегда конвертируйте строковое время (например, 1w2d, 00:03:15) в секунды. Это позволит модели численно оценивать пороговые значения (например, < 300 секунд = аномалия), а не полагаться только на текстовые паттерны. JSON { "training_dataset": "cisco_show_ip_route_anomalies", "version": "1.0", "description": "Примеры для обучения ИИ анализу нестабильности (flapping) и асимметрии возраста маршрутов", "examples": [ { "id": "ospf_flapping_01", "scenario": "Нестабильность и мигание маршрута (Flapping) - аномально низкий Uptime", "input_text": "R1# show ip route\nCodes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP\n D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area\n N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2\n E1 - OSPF external type 1, E2 - OSPF external type 2\n\nGateway of last resort is not set\n\n 10.0.0.0/8 is variably subnetted, 4 subnets, 2 masks\nO 10.1.1.0/24 [110/20] via 192.168.1.2, 00:00:45, GigabitEthernet0/1", "parsed_input": { "prefix": "10.1.1.0/24", "protocol": "OSPF", "admin_distance": 110, "metric": 20, "next_hop": "192.168.1.2", "uptime_string": "00:00:45", "uptime_seconds": 45, "interface": "GigabitEthernet0/1" }, "expected_analysis": { "anomaly_detected": true, "anomaly_type": "Route Flapping", "severity": "High", "reasoning": "Маршрут 10.1.1.0/24 по протоколу OSPF имеет аномально низкое время жизни (uptime) всего 45 секунд. Для протоколов динамической маршрутизации такое низкое значение указывает на недавнее перестроение таблицы маршрутизации, что является классическим признаком нестабильности канала (flapping) или частых сбросов соседства (neighbor reset).", "recommended_actions": [ "Проверить состояние интерфейса GigabitEthernet0/1 на наличие ошибок канального уровня: show interfaces GigabitEthernet0/1", "Проверить системный лог на предмет частых изменений состояния соседства OSPF: show log | include OSPF-5-ADJCHG", "Исключить дублирование IP-адресов или проблемы с питанием/оптикой на участке." ] } }, { "id": "eigrp_ecmp_divergent_age_01", "scenario": "Множественные пути (ECMP) с кардинально разным возрастом", "input_text": "R2# show ip route\nCodes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP\n D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area\n\n 172.16.0.0/16 is variably subnetted, 3 subnets, 2 masks\nD 172.16.10.0/24 [90/30720] via 10.0.0.2, 1w2d, GigabitEthernet0/0\n [90/30720] via 10.0.0.6, 00:03:15, GigabitEthernet0/1", "parsed_input": { "prefix": "172.16.10.0/24", "protocol": "EIGRP", "paths": [ { "admin_distance": 90, "metric": 30720, "next_hop": "10.0.0.2", "uptime_string": "1w2d", "uptime_seconds": 777600, "interface": "GigabitEthernet0/0", "status": "stable" }, { "admin_distance": 90, "metric": 30720, "next_hop": "10.0.0.6", "uptime_string": "00:03:15", "uptime_seconds": 195, "interface": "GigabitEthernet0/1", "status": "recently_added_or_recovered" } ] }, "expected_analysis": { "anomaly_detected": true, "anomaly_type": "Asymmetric Path Age / Recent Topology Change", "severity": "Medium", "reasoning": "Обнаружены два равноценных пути (ECMP) к сети 172.16.10.0/24 по протоколу EIGRP, но с кардинально разным временем жизни. Первый путь стабилен (1 неделя 2 дня), тогда как второй путь появился или восстановился всего 3 минуты 15 секунд назад. Это указывает на недавний сбой на линке GigabitEthernet0/1 или его соседнем устройстве, после которого маршрут был пересчитан и добавлен заново.", "recommended_actions": [ "Проверить интерфейс GigabitEthernet0/1 и коммутацию на предмет недавних сбросов: show interfaces GigabitEthernet0/1, show log", "Проанализировать загрузку каналов: возможно, один из каналов был перегружен, что вызвало временное выпадение из таблицы маршрутизации.", "Убедиться, что временная асимметрия маршрутизации не вызывает проблем для stateful-сервисов (например, Firewall или NAT), если трафик возвращается по другому пути." ] } }, { "id": "bgp_flapping_01", "scenario": "Мигание BGP маршрута с низким uptime (нестабильность на границе AS)", "input_text": "R3# show ip route bgp\nCodes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP\n\nB 203.0.113.0/24 [20/0] via 198.51.100.1, 00:01:12", "parsed_input": { "prefix": "203.0.113.0/24", "protocol": "BGP", "admin_distance": 20, "metric": 0, "next_hop": "198.51.100.1", "uptime_string": "00:01:12", "uptime_seconds": 72 }, "expected_analysis": { "anomaly_detected": true, "anomaly_type": "BGP Route Flapping", "severity": "High", "reasoning": "BGP-маршрут имеет время жизни всего 1 минуту 12 секунд. BGP-сессии провайдеров или пиринга обычно очень стабильны (uptime измеряется днями или месяцами). Такой низкий uptime свидетельствует о недавнем перестроении BGP-сессии (reset) или получении нового обновления (update) от соседа 198.51.100.1, что может быть признаком нестабильности на стороне провайдера или локального пиринга.", "recommended_actions": [ "Проверить состояние BGP-соседа и количество перезапусков сессии: show ip bgp summary (обратить внимание на колонку Up/Down и PfxRcd).", "Проверить наличие и настройки BGP route dampening для предотвращения распространения нестабильных маршрутов вглубь сети.", "Запросить информацию у провайдера/партнера о возможных работах или сбоях на их стороне." ] } }, { "id": "normal_ecmp_stable_01", "scenario": "Негативный пример: Множественные пути с нормальным, стабильным возрастом (без аномалий)", "input_text": "R4# show ip route\nCodes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP\n D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area\n\n 192.168.100.0/24 is variably subnetted, 2 subnets, 2 masks\nO 192.168.100.0/24 [110/30] via 10.10.10.1, 2w3d, GigabitEthernet0/0\n [110/30] via 10.10.20.1, 2w3d, GigabitEthernet0/1", "parsed_input": { "prefix": "192.168.100.0/24", "protocol": "OSPF", "paths": [ { "admin_distance": 110, "metric": 30, "next_hop": "10.10.10.1", "uptime_string": "2w3d", "uptime_seconds": 1555200, "interface": "GigabitEthernet0/0", "status": "stable" }, { "admin_distance": 110, "metric": 30, "next_hop": "10.10.20.1", "uptime_string": "2w3d", "uptime_seconds": 1555200, "interface": "GigabitEthernet0/1", "status": "stable" } ] }, "expected_analysis": { "anomaly_detected": false, "anomaly_type": "None", "severity": "Low", "reasoning": "Обнаружены два равноценных пути (ECMP) к сети 192.168.100.0/24. Оба маршрута имеют одинаковый и высокий показатель uptime (2 недели 3 дня), что свидетельствует о стабильной работе протокола OSPF и отсутствии недавних топологических изменений или сбоев на данных участках.", "recommended_actions": [ "Действий не требуется. Маршрутизация работает в штатном режиме." ] } } ] } Рекомендации по использованию этого JSON для тренинга: Feature Engineering (Инженерия признаков): Поле uptime_seconds является ключевым. Модель должна научиться связывать низкие числовые значения (например, < 300) с флагом "anomaly_detected": true. Негативные примеры: Пример normal_ecmp_stable_01 критически важен. Без него модель может начать считать любые множественные пути аномалией, вместо того чтобы сравнивать их возраст. Формат обучения: Вы можете преобразовать этот JSON в формат {"instruction": "Проанализируй вывод show ip route на предмет аномалий", "input": "", "output": ""} для стандартного fine-tuning'а (например, в форматах Alpaca или ChatML). Контекст протоколов: В reasoning явно указано, почему низкий uptime плох для BGP/OSPF, но мог бы быть нормальным для статического маршрута, только что добавленного администратором. Это помогает модели строить контекстно-зависимые выводы. (c) by Valery Shmelev (Deutsche: Valery Shmeleff) https://oflameron.com https://ai-fine-tuning.blogspot.com/