Одна из хайповых тем последней недели в англоязычном Твиттере – релиз ChatGPT от OpenAI. Чат-бот который, по задумке авторов, может писать код, фиксить баги, и отвечать на сложные вопросы.

Я решил проверить, действительно ли ChatGPT может помочь разработчику. Имею опыт программирования на разных языках, совсем недавно перешел на Go (пишу блокчейн-проект). Решил сузить задачу до такой: мог бы мне, разработчику с опытом, новичку в Go, хоть немного помочь ChatGPT.

Пример 1

Давайте начнем с простого. Хочу найти элемент в срезе (slice) – расширенном аналоге массива. Давайте зададим вопрос боту. MA в этом чате и далее – это я.

Что хорошо:

  • Код компилируется, есть пример применения бинарного поиска;

  • Есть выводы сообщений "найден/не найден";

  • Есть базовые объяснения алгоритма, хотя упоминается функция Index, подразумевается Search.

Что плохо:

  • Код, конечно, не работает как надо, т.е. срез не отсортирован, а это основное требование к бинарному поиску. Но говорится, что массив д.б. отсортирован.

  • Выглядит сложно для новичка. Я бы предпочел цикл или пакет slices и IndexFunc, если не было явного требования о "быстром" поиске.

Пример 2

Но давайте явно укажем, что массив не сортированный.

Что хорошо:

  • В принципе, хорошо почти все :) и код рабочий, и совет дан хороший.

Что плохо:

  • Название функции перепутано, нужно Search, а не Index.

Пример 3

Давайте перейдем к более специфичному примеру. Попробуем напечатать значение, заданное в Wei, в ETH (1 ETH = 10^18 Wei):

Что круто:

  • Почти все! Ну действительно, приятно удивил результат. Он действительно переведет в ETH значение wei (да, конечно, Int может не хватить, но можно инициализировать wei через wei.SetString).

  • Правильная единица конверсии (10^18).

  • Откомментированный код.

  • Бот, похоже, обучается на основе фидбэка от пользователей. Предыдущий результат, который я получил несколько часов назад, включал очевидно неверный код с делением big.Int на big.Int.

Пример 4

Давайте попробуем получить баланс в USDT заданного кошелька в сети Ethereum:

Что хорошо:

  • Шаблон программы действительно сгенерирован и в целом имеет правильную структуру (подключение к API, получение баланса, печать).

  • Подключены правильные библиотеки (go-ethereum).

  • Подставлены осмысленные имена переменных.

  • В одном из запросов (не в этом) был правильно определен адрес USDT в нужной сети (Ethereum Mainnet).

  • Бот правильно понял, что число символов после запятой равно шести и правильно написал код печати.

Что плохо:

  • Правильный баланс этот код не напечатает. Не вдаваясь в подробности, но он напечатает (после правок) баланс в ETH (не в USDT).

  • Чтобы сделать пример рабочим, нужно добавить довольно много инфраструктурного кода, который я не буду здесь приводить для экономии места.

(Добавлено) Пример 5

Проверим, как бот справится с задачей чтения из таблицы Postgres, содержащей данные о людях.

Как будто, все правильно (комментарии бота опустил). Но давайте теперь создадим саму таблицу с тестовыми данными:

Я попробовал это запустить и... все заработало, таблица с данными создалась, код выполняется и выводит данные в консоль!

(!) Единственное изменение, которое пришлось сделать – это установить правильную строку подключения к БД.

Что хорошо:

  • В этом примере все получилось как нужно. Однозначно буду использовать ChatGPT для простого прототипирования. Сильно быстрее было сделать два запроса к боту, чем набирать код вручную.

Итак, субъективные выводы:

  • ChatGPT – впечатляющая разработка. Код из всех примеров может работать с изменениями различной степени, либо вообще без изменений.

  • ChatGPT уже можно использовать для вдохновения (например, понять, какие библиотеки можно взять для решения задачи, пример 4), для быстрого прототипирования (пример 5), или чтобы не тратить время на реализацию тривиальных операций (результат примера 3 я бы взял в продакшен).

  • Возможно, не совсем для пользования новичками в программировании, которые сходу не смогут понять, в чем в коде проблема.

  • Вижу классное нишевое использование подобных ботов, например, в плане поиска нужных библиотек и примеров из них, что потенциально может быть встроено сразу в IDE (вот тут кто-то уже запилил плагин для VSCode), или для сдачи лабораторных преподавателю, не особо разбирающемуся в теме :) (надеюсь, такие уже не встречаются).

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


  1. vassabi
    07.12.2022 21:32
    +2

    если он будет обучаться у меня на компе - то так глядишь и вообще джуников заменит!


    1. Schalaeff
      07.12.2022 22:47
      +4

      Заменит, простите, на кого?) На вас же, но с готовым кодом?)


      1. vassabi
        08.12.2022 01:13
        +5

        возможно.

        просто реальные задачи - это всегда какие-то "добавьте Х из 5го слоя абстракции в 20ый слой абстракции, не порушив промежуточные слои и по возможности вообще их не потревожив", надеюсь что будущая версия этого чатбота такое сумеет


    1. Terimoun
      08.12.2022 03:33
      +1

      Я хочу у вас научиться. Согласны?


      1. vassabi
        08.12.2022 13:25
        +1

        а вы нейросетка?


  1. WondeRu
    07.12.2022 22:40
    +10

    Конкурент stackoverflow


    1. shushu
      08.12.2022 08:21
      +3

      угу, и стаковерфлов забанил автогенерируемые ответы. Не уверен как он определяет он был автосгенерирован или нет

      https://www.zdnet.com/article/stack-overflow-temporarily-bans-answers-from-openais-chatgpt-chatbot/

      https://meta.stackoverflow.com/questions/421831/temporary-policy-chatgpt-is-banned


      1. KvanTTT
        08.12.2022 16:26
        +1

        Не уверен как он определяет он был автосгенерирован или нет

        Для этого нужна еще одна нейросеть.


  1. GbrtR
    07.12.2022 22:48
    +9

    Судя по всему текущая реализация всё таки не совершит чудес, но следующая вполне (или через одну). Пару-тройку лет подождём и вот тогда скорее всего уже не избежать отпада башки. Если конечно сингулярность не случится, ну или армагедон, что тоже возможно.

    Сегодня прочитал статью что проекты подобные ChatGPT (следующих версий) заменят гугл, т.е. спрашивать будем у них, а не гугла. Звучит очень убедительно, может пора акции гугла потихоньку сливать.

    Лично меня пугает шквал джанка нагенерированного этими сетками и вываленного в интернет под видом валидного контента. Копирайтеры в очередь выстроились, стартапы гудят. Если на этом будут обучать следующие поколения сеток, то они научаться конечно много чему полезному. Похоже надо делать срез интернета и на полочку сложить, пока не поздно. И с картинками тоже самое.

    Кстати у кого есть доступ к ней — попросите сгенерировать какой-нибудь ASCII art, интересно сможет совладать. И спросите список акций каких компаний прикупить — через год проверим.


    1. vdp
      07.12.2022 23:59
      +2

      >Лично меня пугает шквал джанка нагенерированного этими сетками и вываленного в интернет под видом валидного контента.

      ну и сейчас кода подобного качества больше чем везде


      1. setevik
        08.12.2022 12:41
        +1

        Черт с ним, с кодом. Тут можно столько нагенирировать труднодетектируемой дичи, что поиск конкретной иформации в интернете будет тем еще приключением


        1. Gryphon88
          08.12.2022 12:44

          Поиск в сети уже приключение. Сейчас даже через один поисковик сложно что-то найти, а я еще помню времена, когда менялись списками веб-сайтов и рефералами :) Ну и очень многие сайты так построены, что в архив они не уйдут и будут полностью потеряны, как и информация в мессенджерах.


    1. steanlab
      08.12.2022 00:33
      +6

      Про ascii у меня был вопрос наверное во второй десятке из всех заданных ей вопросов. Не может она полноценное что-то, только совсем простенький, аля смайлы.
      (\___/)
      (='.'=)
      (")_(")
      Насчет среза интернета — согласен. Только я пишу по другому — «цените бумажные книги, особенно технические&справочники. Это лучшая инвестиция». В химических вопросах пока это «ассистент» совсем нулевой, хотя простую реакцию химическую уравнять способна правильно.
      Насчет «какие акции компаний» — пишет что не является системой для прогнозирования, да и вообще обучена на датасетах 2021 года и всей текущей информацией не владеет.


    1. mechkladenets
      09.12.2022 01:52
      +2

      Однозначно так. Мы в чате AGIRussia обсуждали ChatGPT и все пришли к выводу что не только он не заменит разработчиков, но и во многих фактологических задачах не поможет. Просто потому что архитектура GPT не работает с концептами, она работает со статистиками токенов - поэтому простые кусочки кода работают потому, что они типичны и похожи на куски из StackOverflow, но тк нет понимания сущностей и нет глобальной памяти, а локальная короткая то комбы из 2-3 классов с логикой между ними не будут работать.

      Кстати, ведь сетку Galactica отключили как раз поэтому - псевдонаучный бред генерила, а это опасно и засоряет интернет.

      К слову, мы сделали ИИ чатбота психолога - и критика его очень похожа на критику ChatGPT - критичная, чувствительная к этике область, но там хотя бы можно обходиться общими советами, не нужна мощная фактология, не нужно вычислений, математики и тп. А вот описательные вопросы, объясняющие хорошо отрабатывает, и даже не хуже чем ChatGPT, хотя мы выпустили бота раньше чем OpenAi
      https://neurohive.io/ru/gotovye-prilozhenija/sabina-ai-chatbot/


  1. plFlok
    07.12.2022 23:19
    +10

    а не получается ли так, что на валидацию кода глазами уходит даже больше времени, чем на его написание?


    1. dyadyaSerezha
      08.12.2022 05:34
      +1

      А если ты пока не знаешь, как написать и какие библиотеки/классы/методы задействовать, или просто забыл? И потом, тут же главное что - "не хочешь - не ешь".


    1. KawaiiSelbst
      08.12.2022 08:28
      +2

      Для большого объема кода, думаю вполне действительно больше, чем на написание. А на маленькие кусочки пойдёт, типо сделай 3 строчки запроса к бд по таким то параметрам или получи по апи оттуда - то, такую то структуру и достань оттуда имя пользователя.


    1. Antra
      08.12.2022 13:05

      Да, в качестве вдохновения использовать - выглядит годным. Тупо копипастить - нет.

      Скажем, для python он мне сгенерировал "for range in ranges....". А я потом тупил, почему существенно ниже банальный range(5,8) выдает TypeError и прочую фигню.

      А вот после небольших правок - норм. Даже regexp внутри python неплохо подсказывал.


      1. vtal007
        08.12.2022 15:42

        а что не так в for range in ranges
        (я ток погружаюсь в питон, но вроде вместо range может быть что угодно, хоть "i")


        1. Antra
          08.12.2022 18:46
          +3

          ranges=["a_1","b_2"]
          for range in ranges:
              x, y = range.split('_')
              print(x, y)
              print(range(5,7))
          

          $ ./test.py
          a 1
          Traceback (most recent call last):
            File "./test.py", line 5, in <module>
              print(range(5,7))
          TypeError: 'str' object is not callable

          Я долго тупил над TypeError и str. Думал на другое, ибо у меня использование range было существенно ниже и применялось к переменными, полученным из строк, впоследствии преобразованных в int.

          Потом только дошло, что в результате "for range in ..." наш привычный range превратился в строковую переменную.


    1. Stanislavvv
      08.12.2022 14:34
      +16


  1. nidalee
    08.12.2022 06:09
    +1

    Возможно, не совсем для пользования новичками в программировании, которые сходу не смогут понять, в чем в коде проблема
    Точно знаю, что боту можно скормить ошибку компилятора\приложения и он с ненулевой вероятностью ее найдет и исправит в своем коде, если вы все еще в том же треде.


    1. AirLight
      09.12.2022 04:43

      Ого, копилот пока такого не умеет


  1. Barnaby
    08.12.2022 06:47
    +1

    Только вот для РФ он не доступен, номер мтс под видом КЗ не жрет (или он и в КЗ недоступен).


    1. nidalee
      08.12.2022 07:11
      +1

      К этой тенденции пора привыкать. Впрочем, признаюсь, проверку номера мне пришлось решать впервые.


      1. Barnaby
        08.12.2022 16:21

        Тут они хорошо заморочились, даже виртуальный номер не подошел. Обычно vpn достаточно


    1. whoisking
      08.12.2022 21:58

      В КЗ доступен (Билайн)


  1. anwender95
    08.12.2022 08:07
    +1

    Мне понравилось, как он генерит песни и поэмы на разные темы, а также как он может прикидываться терминалом с интерпретатором питона, gcc, файловой системой и т.п.
    Что проверял:
    1) Писал в файлы через echo > file, читал файлы через cat и содержимое. через ls
    2) Запускал питоновские скрипты
    3) Компилил сишный код и запускал бинарники
    4) пингует 8.8.8.8, но висит в пинге недоступного хоста!
    После 4 пункта сеть на меня обиделась, наверное, и перестала работать.


  1. asdcxfrt
    08.12.2022 08:33
    +5

    В вузе изучаю C++. Сегодня спрашивал у этого бота по функциям cstring. Даёт разумные ответы. (Объясняет хорошо).

    После закинул ему код своей проги, которая не работала. И он понял, что я хотел написать, объяснил мне это.

    После я у него спросил об ошибках. Он нашел потенциальных 5 ошибок.

    Я попросил их исправить, и он исправил... Правда, накосячил, но не значительно.


    1. Juster
      08.12.2022 16:14

      Вы это в chat gpt закидывали или в playground?


  1. root85 Автор
    08.12.2022 09:14

    Добавил в статью пример 5 для простого прототипирования работы с Postgres. Результат приятно порадовал. Для прототипирования/небольших тестов вполне годно.


    1. GbrtR
      08.12.2022 09:27

      Почитайте www.nytimes.com/2022/12/05/technology/chatgpt-ai-twitter.html

      Особенно секцию с комментариями, может даже не с GPT4, а уже с этим ботом некоторые профессии ожидает серьёзный шок. Профессора унивеситетов стонут, писатели их поддерживают, юристы посматривают на вакансии яндекс доставки.


  1. valery1707
    08.12.2022 10:05
    +1

    How do i find element in slice in Go

    import "sort"
    
    slice := []int{3, 7, 1, 9, 5}
    index := sort.Search(len(slice), func(i int) bool { return slice[i] >= 5 })
    if index < len(slice) && slice[index] == 5 {
    	fmt.Println("Found element at index:", index)
    } else {
    	fmt.Println("Element not found in slice")
    }
    
    1. Это нормально что поиск конкретного значения 5 выполняется с проверкой на >=?

    2. Проверка index < len(slice) корректна, но только потому что sort.Search() вернёт значение большее максимального индекса если ничего не найдёт (это и в доке указано), тогда как в описании решения написано This function returns the index of the element in the slice, or -1 if the element is not found.. Но если бы функция реально возвращала -1, то index < len(slice) был бы true а при вычислении slice[index] мы бы получили ошибку panic: runtime error: index out of range [-1]


    1. root85 Автор
      08.12.2022 10:47
      +2

      1. Да, так работает бинпоиск. Search возвращает индекс первого элемента, для которого переданная функция равно true, а это возможно только при условии >= 5.

        То есть для сортированного списка 1, 3, 5, 7, 9 переданная функция будет true для всех элементов, начиная с третьего до последнего (из документации sort.Search: "Search uses binary search to find and return the smallest index i in [0, n) at which f(i) is true, assuming that on the range [0, n), f(i) == true implies f(i+1) == true.")

      2. Я в статье упоминал, бот перепутал функции Index и Search, в описании говорится про Index, а реально используется Search, которая никогда не возвращает -1, а возвращает n, если поиск неуспешен (из документации sort.Search: "If there is no such index, Search returns n. (Note that the "not found" return value is not -1 as in, for instance, strings.Index"), поэтому runtime error не случится.


  1. whoami
    08.12.2022 12:50
    +2

    Часто в примерах вижу, что не используется основная фишка - чат, когда есть история разговора и можно поправлять ChatGPT. Например, можно было написать что лучше использовать Index, а не Search, бот тогда обновит код.


  1. event1
    08.12.2022 18:04
    +1

    Вижу классное нишевое использование подобных ботов, например, в плане поиска нужных библиотек и примеров из них

    С этим и гугл вроде хорошо справляется


  1. raqeta
    08.12.2022 23:36

    Спросите вопросы которые вы задаете на собеседовании. :)


    1. daniilshat
      10.12.2022 15:15
      +1

      Логические задачи он решает в лоб, даже не пытается оптимизировать решение

      Скриншот


  1. gionet
    10.12.2022 21:09

    Никто часом не написал ТГ-Бота для этой приблуды? А то захожу.. В прошлой реализации работало, а сейчас мне говорит: извините, не из вашей страны. Я мог бы обойти, конечно, но вдруг кто-то уже накреативил что-то раньше?