Искусственный интеллект GPT и скрипты Микротик
Я не профессиональный программист и не специалист IT, но увлекался программированием с юности, когда мы писали на Бейсике и Ассемблере для первого советского персонального компьютера ПЭВМ АГАТ и даже умудрились оставить определенный след в его истории.
С того времени утекло много воды, я получил другую профессию, но увлечение своё полностью не оставил (я стал врачом и работаю по специальности с 2000 г., но оно помогает мне в работе всю жизнь). В 2013 году возникла необходимость «провести интернет» в загородный дом. Тогда то, я и познакомился впервые с роутерами Микротик. В сетевых технологиях я, на то время не знающий что такое IP-адрес (условно), возможно, не сильно продвинулся выше начального уровня (да и не было необходимости в сложных настройках Микротик), а вот программирование на скриптовом, Lua-подобном [ссылка], языке Роутер ОС почему-то захватило меня целиком, даже временно в ущерб основной работе в каких-то аспектах. Конечно, до профессионального уровня я, самоучка, не дошёл, но написал за это время немало полезных и достойных по сложности скриптов для Микротик (неполный список моих работ представлен здесь).
Надо сказать несколько слов о самом скриптовом языке Микротик для тех, кто совсем с ним не знаком. Это собственно не совсем язык программирования, так как основан на урезанном LUA, а именно язык сценариев. В нём есть свои ограничения, которых просто не может иметь настоящий язык программирования — например, отсутствие возможности работы над числами с плавающей запятой. Однако, несмотря на ограниченный, казалось бы, набор инструкций и типов данных, это, тем не менее очень мощный язык, на котором было написано множество весьма сложных скриптов. Роутер ОС сама по себе вносит дополнительные сложности в синтаксис конструкций языка, имея широкий набор весьма непростых по написанию команд и их параметров. Поэтому писать скрипты для Микротик новичку и даже профи, ранее не практиковавшему на нём, по началу, совсем не просто. Даже профессионалу длительный период адаптации — привыкания к командам и конструкциям, а также освоения целого ряда весьма не очевидных «tips & tricks» языка и системы.
Последние успехи больших языковых моделей искусственного интеллекта (ИИ) в сфере программирования известны сегодня всем, кто хоть сколько-нибудь в теме развития нейронных сетей. В частности, например, выведенный в чат GPT версии 3.5 и особенно 4 может по рисунку написать код WEB-интерфейса.
С учётом этого мне было, конечно, интересно попробовать силы ИИ в написании скриптов Микротик и вот что из этого у меня получилось.
Я попробовал обе версии Chat GPT бота, в том числе платную версию последней GPT4, к которой у нас (простых смертных) есть доступ. Поскольку для России доступ к GPT4 закрыт пришлось обойти это ограничение через иностранный VPN. Доступ у меня был временный, который мне предоставил мой друг, крутой «айтишник».
Я давал чатам GPT версий 3.5 и 4 каждому по три идентичных задания, формулируя их близким образом. При этом 3.5 версия сразу выдавала результат, а версия 4, как известно, итоговый результат выдавала после уточняющих вопросов.
Тесты были такими:
1. Написать скрипт поиска активных маршрутов в Интернет на роутере Микротик
2. Написать скрипт включения реле модуля Laurent-5G скриптом с Микротик
3. Написать скрипт перекодировки русского текста для вывода его в чатбот пользователя Телеграмм с роутера Микротик
GPT 3.5 дополнительно я также просил написать скрипт поиска фрагмента текста в файле.
Тесты были подобраны специальным образом: решение первого тривиально, но проверяет как ИИ справится со сложными конструкциями скриптов Роутер ОС, второй — сложных конструкций особо в решении нет, но задание связано с управлением не Микротиком и РОС, а сторонним оборудованием через него и третий — решение не сказать что сложное, но связано с необходимостью составить алгоритм, средства которого напрямую отсутствуют в языке Роутер ОС.
Результаты GPT 3.5 представлены частично ниже, они на порядок хуже, чем у последней модели GPT4 и, после выхода новой версии GPT, нет смысла их подробно обсуждать. Скажу только, что GPT 3.5 вполне разумно предоставляет результат, пишет комментарии к нему и дает полезные советы, но вот сами скрипты пишет чаще так себе, как правило, ошибаясь в конструкциях, а то и вообще «выдумывая» конструкции и команды, каких не существует вовсе. Как это у неё получается для меня загадка, но загадка уже не важная. Некоторые результаты Вы можете видеть на скринах ниже.
1. Задание первое: написать скрипт поиска активных маршрутов в Интернет.
Рис. 1. GPT 3.5 Выполнение задания «Скрипт поиска активных маршрутов в Интернет».
Как мы видим в цикле: foreach i in=[/ip route find dst-address=0.0.0.0/0 active=yes] пропущено «and». Правильно было бы:
[/ip route find dst-address=0.0.0.0/0 and active=yes]
Весь остальной текст скрипта правильный! Можем поставить за первое задание GPT 3.5 «пятерку с минусом», ну или «твердую четвёрку» (для придирчивых педагогов). Да, допустил принципиальную ошибку из-за которой скрипт не работает, но практически — это мелочь, для тех, правда, кто сразу может её исправить (не новичков) — GPT бот экономит время, которое было бы затрачено человеком на написание этого скрипта (или поиск готового в Интернет или даже в собственной библиотеке скриптов).
Но вот дальше было хуже. Я чуть усложнил задание, попросив написать тоже самое, но с работой над маркированными маршрутами. Тут начались чудеса: GPT бот выдал не существующую конструкцию, да ещё не понял, что маркировка маршрута это вовсе не комментарий к нему:
Рис. 2. GPT 3.5 Выполнение задания «Скрипт поиска активных маркированных маршрутов в Интернет».
Принципиальная ошибка в
:local route [/ip route get $routeId]
, где $routeId — определенный выше массив внутренних идентификаторов, из которых маршрут не получить.
За это задание я бы поставил ему «два», ну ладно, с учётом правильных некоторых строк и полезных, дружелюбных комментариев, как плохому студенту «три с минусом».
Дополнительное задание «студенту» для «исправления двойки»:
Рис. 3. GPT 3.5 Выполнение задания «Скрипт поиска фрагмента текста в файле».
Здесь правильно. Исправляем «двойку» на «тройку».
Следующее задание нашего «экзамена»:
2. Написать скрипт включения реле модуля Laurent-5G с Микротик (скрина у меня нет, привожу полученый результат GPT 3.5 в «тектовом виде»:
Я не обладаю информацией о работе модуля Laurent-5G. Могу предложить Вам скрипт, включения реле этого модуля через SNMP, если он имеет такую возможность:
Рис. 4 Ответ GPT 3.5 На задание №2
Как мы видим, GPT 3.5 придумал функцию snmpSet c вовсе не существующей в языке конструкцией /tool snmp-set oid=$1 value=$2. Ошибка также есть и в примере вызова этой функции («oid-type=integer», откуда он это «сочинил» ?). Результат абсолютно не рабочий. Заслуженная «двойка».
3. С третьим заданием GPT 3.5 чат не справился от слова совсем. Результат не привожу, не тянет даже на «двойку».
Вызываем следующего «студента» — чат GPT4 (платная версия). Наш лучший «ученик» (в смысле не наш, (наши то везде первые и «не имеют аналогов в мире» — тихо отдыхают, конечно), а компании OpenAI). Его результаты существенно лучше результатов предшествующей модели.
1. Задание первое: написать скрипт поиска активных маршрутов в Интернет.
Рис. 5. Промежуточный результат GPT4 задание 1
Это хорошо, но нужно найти все активные маркированные маршруты в Интернет, а не просто активные маршруты:
Рис. 6. Промежуточный результат GPT4 задание 1
Рис. 7. Итоговый результат GPT4 задание 1
Рис. 8. Итоговый результат GPT4 задание 1, готовый скрипт
Всё правильно, «зачёт», ставим »5».
Переходим ко второму заданию:
2. Написать скрипт включения реле Laurent 5G
Вот, что сначала ответил GPT4, после чего я попросил его найти документацию по модулю Laurent-5G, что он и самостоятельно сделал!
Рис. 9. Промежуточный результат GPT4 задание 2
Рис. 10. Итоговый результат GPT4 задание 2
В итоге мы видим, что GPT4 после моей просьбы сам нашёл в Интернет на сайте производителя руководство к модулю Laurent-5 в формате PDF, взял оттуда нужные данные http-запроса для включения реле и написал полностью рабочий скрипт для Роутер ОС. Опять «пятерка».
3. Третье — последнее задание. Написать скрипт перекодировки русского текста для вывода его в чатбот пользователя Телеграмм
Рис. 11. Промежуточный результат GPT4 задание 3
Рис. 12. Результат GPT4 задание 3
Рис. 13. Результат GPT4 задание 3
Итак, задание 3, GPT4, всё же, окончательно в рабочем виде не представил, но привёл точный алгоритмический путь к его решению. Дальше я не стал уточнять задание, мне было понятно, что в принципе он способен выполнить и это.
Обсуждение и выводы
Таким образом, даже зная очень мало, о реальных возможностях ИИ сегодня (имея ввиду, что населению планеты сообщают мягко говоря не всё), можно сказать что успехи GPT в таком узком направлении как написание скриптов для Роутер ОС, весьма впечатляют. Конечно, сложный скрипт ИИ создать пока не может и он должен быть разбит на отдельные «задания», сборка которых пока остаётся за человеком. Итоговый рабочий код отдельных частей можно получить от GPT после ряда уточнений. Система реально сильно экономит время для программистов «среднего уровня». При этом супер профи-, возможно, GPT пока не нужен, а новичкам реально вреден, так как они не смогут найти ошибки и неточности в итоговом коде, если они допущены системой. Относительно скриптов для Микротик, ИИ реально нуждается в лучшем обучении и большем количестве учебного материала, доступ к которому у него в настоящее время ограничен. Сможет ли ИИ создавать скрипты лучше человека — думаю покажет уже весьма недалекое будущее. Обсуждение данной темы читатель может также посмотреть на официальном форуме Микротик в топике GPT4 and writing scripts for Mikrotik, из которого, как мне кажется, тоже можно почерпнуть кое-какую дополнительную информацию.