Я не профессиональный программист и не специалист 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. Задание первое: написать скрипт поиска активных маршрутов в Интернет.

image
Рис. 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 бот выдал не существующую конструкцию, да ещё не понял, что маркировка маршрута это вовсе не комментарий к нему:

image
Рис. 2. GPT 3.5 Выполнение задания «Скрипт поиска активных маркированных маршрутов в Интернет».

Принципиальная ошибка в
:local route [/ip route get $routeId]
, где $routeId – определенный выше массив внутренних идентификаторов, из которых маршрут не получить.
За это задание я бы поставил ему «два», ну ладно, с учётом правильных некоторых строк и полезных, дружелюбных комментариев, как плохому студенту «три с минусом».
Дополнительное задание «студенту» для «исправления двойки»:

image
Рис. 3. GPT 3.5 Выполнение задания «Скрипт поиска фрагмента текста в файле».
Здесь правильно. Исправляем «двойку» на «тройку».

Следующее задание нашего «экзамена»:

2. Написать скрипт включения реле модуля Laurent-5G с Микротик (скрина у меня нет, привожу полученый результат GPT 3.5 в «тектовом виде»:

Я не обладаю информацией о работе модуля Laurent-5G. Могу предложить Вам скрипт, включения реле этого модуля через SNMP, если он имеет такую возможность:

image
Рис. 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. Задание первое: написать скрипт поиска активных маршрутов в Интернет.

image
Рис. 5. Промежуточный результат GPT4 задание 1
Это хорошо, но нужно найти все активные маркированные маршруты в Интернет, а не просто активные маршруты:

image
Рис. 6. Промежуточный результат GPT4 задание 1

image
Рис. 7. Итоговый результат GPT4 задание 1

image
Рис. 8. Итоговый результат GPT4 задание 1, готовый скрипт

Всё правильно, «зачёт», ставим «5».
Переходим ко второму заданию:

2. Написать скрипт включения реле Laurent 5G

Вот, что сначала ответил GPT4, после чего я попросил его найти документацию по модулю Laurent-5G, что он и самостоятельно сделал!

image
Рис. 9. Промежуточный результат GPT4 задание 2

image

image
Рис. 10. Итоговый результат GPT4 задание 2
В итоге мы видим, что GPT4 после моей просьбы сам нашёл в Интернет на сайте производителя руководство к модулю Laurent-5 в формате PDF, взял оттуда нужные данные http-запроса для включения реле и написал полностью рабочий скрипт для Роутер ОС. Опять «пятерка».

3. Третье – последнее задание. Написать скрипт перекодировки русского текста для вывода его в чатбот пользователя Телеграмм

image
Рис. 11. Промежуточный результат GPT4 задание 3

image
Рис. 12. Результат GPT4 задание 3

image
Рис. 13. Результат GPT4 задание 3

Итак, задание 3, GPT4, всё же, окончательно в рабочем виде не представил, но привёл точный алгоритмический путь к его решению. Дальше я не стал уточнять задание, мне было понятно, что в принципе он способен выполнить и это.

Обсуждение и выводы

Таким образом, даже зная очень мало, о реальных возможностях ИИ сегодня (имея ввиду, что населению планеты сообщают мягко говоря не всё), можно сказать что успехи GPT в таком узком направлении как написание скриптов для Роутер ОС, весьма впечатляют. Конечно, сложный скрипт ИИ создать пока не может и он должен быть разбит на отдельные «задания», сборка которых пока остаётся за человеком. Итоговый рабочий код отдельных частей можно получить от GPT после ряда уточнений. Система реально сильно экономит время для программистов «среднего уровня». При этом супер профи-, возможно, GPT пока не нужен, а новичкам реально вреден, так как они не смогут найти ошибки и неточности в итоговом коде, если они допущены системой. Относительно скриптов для Микротик, ИИ реально нуждается в лучшем обучении и большем количестве учебного материала, доступ к которому у него в настоящее время ограничен. Сможет ли ИИ создавать скрипты лучше человека — думаю покажет уже весьма недалекое будущее. Обсуждение данной темы читатель может также посмотреть на официальном форуме Микротик в топике GPT4 and writing scripts for Mikrotik, из которого, как мне кажется, тоже можно почерпнуть кое-какую дополнительную информацию.

Комментарии (24)


  1. XOR2048
    02.12.2023 20:31
    +1

    Замечательная статья!

    Спасибо огромное автору за сравнение двух версия ChatGPT, сам баловался с ними, когда в тему скриптинга на Mikrotik въезжал.


    1. Sertik13 Автор
      02.12.2023 20:31
      +1

      Спасибо !


  1. past
    02.12.2023 20:31
    -5

    Я просто хотел провести инет на даче...

    Нужен Вам этот микротик? Заменил все свои микротики на keenetic и мне больше нет нужды писать скрипты на lua


    1. Sertik13 Автор
      02.12.2023 20:31
      +4

      Я отвечу Вам цитатой из моей предыдущей статьи "Продолжаем изучать аппаратные возможности расширения Микротик RBM33G" .... "Просьба не кидать в меня грязными тряпками к тем, кто не любит Микротик в принципе и не понимает людей, которые любят эти устройства и используют их иногда не только как роутеры". Keenetic для нашего сообщества - это мимо.


      1. Sertik13 Автор
        02.12.2023 20:31
        +6

        А Вы за что мне "минусы" поставили ? За то, что я использую Микротик, а Вы Кинетик ? Вы статью оцениваете по теме или предпочтения автора ?


    1. 2minds
      02.12.2023 20:31

      Артём, признайся, что ты поставил на него - openwrt))


      1. Sertik13 Автор
        02.12.2023 20:31

        Артём это кто ?


      1. past
        02.12.2023 20:31

        Вся прелесть кинетиков - на них не надо ставить OpenWRT. Достаточно разрешить ставить opkg


        1. Sertik13 Автор
          02.12.2023 20:31
          +1

          Кинетики не относятся к теме статьи, любители Кинетиков общайтесь, пожалуйста, в своих песочницах


  1. theurus
    02.12.2023 20:31

    GPT4 и DALLE 3 абсолютно бесплатно доступны всем кто может через впн зайти на сайт bing.com (это микрософтовский гугол)

    Еще GPT4 доступен через скайп+впн


  1. DungeonLords
    02.12.2023 20:31

    ИИ сможет похоронить GNU Autotools, переписав бесчисленное количество скриптов сборки на CMake?


    1. Sertik13 Автор
      02.12.2023 20:31
      +1

      Это покажет время.


  1. NutsUnderline
    02.12.2023 20:31

    это все довольно показательно, но видя такой багаж знаний хотелось бы оценки медицинских ИИ - они вон уже проходят экзамен на медика, диагнозы ставят


    1. Sertik13 Автор
      02.12.2023 20:31
      +1

      Это скорее не на Хабре. Но, если кратко, то медицинские ИИ сейчас находят весьма не очевидные для врача корреляции между симптомами, синдромами и диагнозами и при этом верно ставят последние или правильные новые ! То, на что человеку понадобились сотни лет наблюдений и практики или десятки при сопоставлении анализов ИИ проходят за часы !


      1. NutsUnderline
        02.12.2023 20:31

        Это в теории. практика показывает иное - об этом недавно писали в новостях.


        1. Sertik13 Автор
          02.12.2023 20:31

          В российских новостях.


          1. NutsUnderline
            02.12.2023 20:31

            в хабровских новостях


            1. Sertik13 Автор
              02.12.2023 20:31

              На Хабре не видел, погляжу что там написали. Но это всё нужно обсуждать не здесь. Да я и не специалист в ИИ и медИИ. В этой статье я просто показал свой опыт и высказал своё мнение насчет GPT и написания им скриптов для Микротик и не более того.


              1. Sertik13 Автор
                02.12.2023 20:31

                Если Вам интересно по ИИ и медицину посмотрите это https://habr.com/ru/companies/digitaloctober/articles/136252/


  1. fly_indiz
    02.12.2023 20:31
    +1

    [/ip route find dst-address=0.0.0.0/0 active=yes] пропущено «and»
    Да, допустил принципиальную ошибку из-за которой скрипт не работает.

    Неверно, вполне рабочая конструкция. and тут необязателен.

    Принципиальная ошибка в
    :local route [/ip route get $routeId]
    где $routeId – определенный выше массив

    Неверно, $routeId - не массив, а вполне конкретный айдишник из массива $routeList. Бот правильно написал.


    1. Sertik13 Автор
      02.12.2023 20:31
      +1

      Вот проверка и состоялась ! Вы молодец ! Я думал найдет кто-нибудь мои ошибки в статье или нет ? Вы нашли. Это намеренно мной сделанные ошибки в тексте. Всё же Рене Декарт прав "Я мыслю, значит я существую". У нас пока есть шансы. Ну, а на оценку работы GPT в выводах статьи это не повлияло.


      1. Sertik13 Автор
        02.12.2023 20:31
        +1

        Неверно, $routeId - не массив, а вполне конкретный айдишник из массива $routeList. Бот правильно написал.

        Это он написал правильно, но routing-mark и comment начисто перепутал (дальше на скрине)


        1. fly_indiz
          02.12.2023 20:31
          +1

          В дальнейшее просто не вчитывался )))


          1. Sertik13 Автор
            02.12.2023 20:31

            Да, такое впечатление, что большинство читают поверхностно для ознакомления. Те, кто реально знают скрипты, либо не читают, уже имея своё мнение и опыт работы с ИИ, либо их (нас) "слишком немного". Это показывает и активность на форумах - большинство предпочитают просто копировать готовые скрипты, единицы пишут сами.