Языковая модель ChatGPT никогда не заменит программиста, потому что непосредственно редактирование кода — это крохотная часть разработки (5% по времени). Зато ChatGPT великолепно помогает. И чем выше ваш скилл — тем больше пользы от «подмастерья», выполняющего мелкие задания и черновой кодинг. Он пишет простые функции, генерирует документацию, находит и объясняет ошибки, выполняет кучу других задач (полный список под катом).

Сегодня не использовать ChatGPT просто глупо… Это действительно универсальный помощник, который сильно облегчает жизнь и выводит программирование на принципиально новый уровень. Одно из величайших изобретений в IT за десятилетия, после GUI и интернета.

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

▍ Универсальный помощник


Перечислим типичные варианты использования ChatGPT в программировании.

  1. Генерация кода. Первая и очевидная задача — генерировать код для простых задач, которые можно сформулировать в текстовом виде.

    Пример:

    Напиши функцию Python, которая принимает на вход массив чисел, выполняет пузырьковую сортировку и возвращает отсортированный массив.

    Результат:

    Конечно! Вот функция на Python, которая принимает массив чисел и сортирует его пузырьковой сортировкой:

    python
    Copy code
    def bubble_sort(arr):
        n = len(arr)
        # Проходим по всем элементам массива
        for i in range(n):
            # Последние i элементов уже отсортированы
            for j in range(n - i - 1):
                # Если текущий элемент больше следующего, меняем их местами
                if arr[j] > arr[j + 1]:
                    arr[j], arr[j + 1] = arr[j + 1], arr[j]
        return arr

    Как использовать эту функцию:

    python
    Copy code
    my_array = [3, 5, 1, 9, 0, 2, 4, 6, 8, 7]
    sorted_array = bubble_sort(my_array)
    print(sorted_array)

    Этот код выведет [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], то есть отсортированный массив.

    Для поиска таких фрагментов кода ChatGPT удобнее, чем StackOverflow. Потому что он может продолжить диалог и изменить фрагмент по вашему желанию, исправить ошибки, дополнить и т. д. Очень удобно — не нужно тратить время на шаблонную работу и поиск стандартного кода.

  2. Автоматическая генерация тестов и тестовых данных.

  3. Поиск ошибок и проблем. Вы можете скормить чат-боту фрагмент кода и попросить найти проблемы в нём (так работает расширение ChatGPT для VS Code) или объяснить, почему возникает ошибка при компиляции или в продакшене.

  4. Объяснение непонятного кода. Аналогично предыдущему пункту, ChatGPT разъясняет смысл и замысел сложных или обфусцированных инструкций, помогает разобраться.

  5. Оптимизация кода, рефакторинг.

  6. Проверка кода на соответствие стандартам.

  7. Поиск уязвимостей в любых системах, включая конкретные репозитории. С помощью ChatGPT хакеры создают вирусы и скрипты для взлома.

  8. Чат-боты службы техподдержки.

  9. Интеграция своих программ с ChatGPT API. С 1 марта 2023 года OpenAI открыла REST API, что позволяет разработчикам внедрить интеллект ChatGPT в собственный код. Вот пример кода на Python с вызовом к API для ответа на вопрос «В какой научной статье был представлен трансформер глубокого обучения и где её можно найти?».

    messages = [{
        'role': 'user',
        'content': 'В какой научной статье был представлен трансформер' \
                   'глубокого обучения и где её можно найти?'
    }]
     
    response = openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=messages
    )
     
    print(response.choices[0].message.content)

    Ответ будет следующим:

    Трансформер (Transformer) — это модель глубокого обучения, которая была представлена в статье «Attention Is All You Need» авторства Vaswani et al. в 2017 году. Статью можно найти на сайте arXiv по ссылке: arxiv.org/abs/1706.03762

    ...

  10. Проектирование архитектуры.

  11. Генерация диаграмм, аналитика.

  12. Генерация отчётов.

  13. Написание документации.

  14. Разработка парсеров, анализ и преобразование данных в любых форматах.

  15. Работа с базами данных и SQL запросами.

  16. Поиск информации и кода, помощь в обучении, ответы на вопросы.

  17. Поиск новых идей.

Это небольшой и неполный список, как можно использовать ChatGPT прямо сейчас в реальной работе. Исследования показывают, что ChatGPT существенно повышает производительность труда.

Повышение производительности труда при использовании ChatGPT, источник

Также у сотрудников заметно возрастает удовлетворённость от работы и общий оптимизм:


Вероятно, использование ChatGPT в будущем может стать обязательным требованием ко всем офисным вакансиям. Если ваш коллега тратит на задачу несколько дней, а вы можете выполнить её за несколько минут, это явное конкурентное преимущество.

▍ Полезные инструменты


На базе ChatGPT разработаны программы для выполнения конкретных задач по разработке, тестированию, написанию документации:

  • Автоматическая генерация тестов для Playwright с помощью ChatGPT. Playwright — это альтернатива автоматическому тестированию с помощью Selenium. Вообще, функция автоматической генерации тестов (без ChatGPT) появилась там ещё в 2020 году, в то время как в Selenium она доступна только с помощью плагинов.

  • PDF ChatBot и Docalysis — загрузка, чат и взаимодействие с любым документом PDF. Например, вы можете загрузить туда многостраничный учебник или мануал и задать боту конкретные вопросы по содержанию.


  • Libraria — автономная платформа для быстрого создания и внедрения пользовательских ассистентов, которые работают на наших собственных данных с помощью OpenAI (например, получая данные скрапингом URL или из PDF, как в примере выше).

  • Расширение TeamSmart AI для Chrome — команда «виртуальных ИИ-ассистентов», которые автоматизируют выполнение самых популярных задач в ChatGPT и других системах ИИ:

    • написание кода;
    • генерация изображений;
    • рисование логотипов;
    • анализ текста.


    Специально для ChatGPT поставляется библиотека качественных промтов:


  • Нативные клиенты для ChatGPT под различные ОС, с которыми работать удобнее, чем через браузер (см. как устроен фронтенд ChatGPT).

  • Расширение Unijump к Chrome для быстрого доступа к ChatGPT без захода на chat.openai.com. Удобно выделить текст в любом окне браузера и сочетанием Alt+J запустить ChatGPT с подсказками:


    Дополнительно есть большой каталог с подсказками полезных промтов для переключения ChatGPT в тот или иной режим работы (консоль Linux, стендап-комик, финансовый аналитик, эйчар на собеседовании):


Также идёт разработка IDE нового типа e2b, полностью основанной на генерации кода в ChatGPT. В левом окне вы пишете спецификации, а справа генерируется код:


Microsoft работает над системой TaskMatrix.AI — единым интерфейсом для взаимодействия человека с миллионами API и специализированных моделей ИИ.


Вместо создания изолированных моделей ИИ это будет единая экосистема, в которой все модели ИИ взаимодействуют друг с другом и работают как коллективный организм.

▍ Плагины для ChatGPT


23 марта 2023 года OpenAI объявила об экспериментальной поддержке плагинов, которые помогают ИИ получить доступ к актуальной информации в интернете, осуществлять математические вычисления, обрабатывать сложные данные и использовать сторонние сервисы.

Для использования плагинов через API нужно получить особое разрешение от OpenAI, запись в список ожидания здесь.


На 12 апреля 2023 года разработано и допущено к использованию 24 плагинаофициальном списке их 11):

  • Medium. Плагин для доступа, просмотра и извлечения контента с платформы Medium.
  • SceneXplain. Плагин для разъяснения сюжета на картинках. Изображения можно отправлять по URL или в base64.
  • Weather. Плагин для получения информации о текущей погоде.
  • ASCII Art. Преобразование любого текста в псевдографику ASCII.
  • DomainsGPT. Проверка доступности домена и сравнение цен у регистраторов.
  • Transvribe. Плагин для ответа на вопросы по видеороликам YouTube.
  • PlugSugar. Поиск информации в интернете.
  • APIs-guru. Плагин для доступа к программным интерфейсам в каталоге APIs.guru.
  • BizToc. Поиск деловых и финансовых новостей в BizToc.
  • Calculator. Выполнение базовых арифметических операций типа сложения, вычитания, умножения, деления, возведения в степень и извлечения квадратного корня.
  • Datasette. Запросы SQL в базе данных Datasette.
  • FreeTV App. Плагин для получения последних новостей
  • Klarna. Поиск и сравнение цен из тысяч интернет-магазинов.
  • Milo. Идеи для времяпровождения родителей с детьми.
  • Pricerunner. Поиск релевантных продуктов и ответы на любые вопросы, связанные с шопингом.
  • QuickChart. Генерация диаграмм и QR-кодов.
  • SchoolDigger. Подробная информация по 120 000 средним школам в 18 500 округах США.
  • Slack. Плагин для запросов к Slack.
  • Speak. Изучение иностранных языков с помощью ИИ-учителя.
  • Screenshot (Urlbox). Преобразование HTML в картинку, скриншоты в разных форматах, в том числе видео скроллинга страницы.
  • Wolfram Cloud. Доступ к вычислениям, математике, накопленным знаниям и информации Wolfram|Alpha в режиме реального времени, поддержка Wolfram Language.
  • Wolfram Alpha. Динамические вычисления и отфильтрованные качественные данные из системы Wolfram Alpha.


  • Zapier. Взаимодействие с более чем пятью тысячами приложений, включая Google Sheets, Gmail, HubSpot, Salesforce и др.
  • Shop. Поиск миллионов продуктов от крупнейших брендов.

Подробнее о формате плагинов см. в документации.

▍ Смена парадигмы


Мы видим, что системы ИИ меняют саму парадигму программирования и способы создания программ. Более подробно об этом см. статью «Андрей Карпаты. Software 2.0. Непонятный софт будущего».


Суть в том, что вместо написания кода мы будем обучать нейросети на выполнение определённых задач, а в идеале — просто ставить задачу и ждать, когда нейросеть самообучится на оптимальное решение, что и будет финальным итогом разработки.

Похоже на то, что нейросети заменяют собой остальной софт: не нужны текстовые и графические редакторы, если ChatGPT может сгенерировать любой текст или изображение. То же самое можно сказать о календарях/почтовых клиентах и некоторых других инструментах, с которыми может работать «виртуальный помощник», а не человек напрямую.

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

▍ Опенсорсные альтернативы ChatGPT


Несмотря на изначальное стремление вести полностью открытую разработку, компания OpenAI не публикует модели GPT-3.5 и GPT-4, также как их техническое описание и датасеты. Ключевая техника здесь RLHF (Reinforcement Learning with Human Feedback), обучение с подкреплением на основе отзывов людей.

После случайной утечки кода модели LLaMA от Meta случился настоящий прорыв в опенсорсной разработке языковых моделей (LLM). За один последний месяц в свободном доступе опубликовано больше проектов, чем за все предыдущие годы. Сегодня вы уже можете запустить аналог ChatGPT на домашнем компьютере (Ryzen 7900X, 32 ГБ RAM, 8 ГБ VRAM), статья на Хабре.

На Github лежит список альтернативных LLM, обученных с помощью RLHF. Всё это свободные проекты с открытым исходным кодом, зачастую с весами моделей, датасетами для обучения и т. д.:


За такой взрыв опенсорсных разработок мы должны быть благодарны LLaMA.

▍ Что дальше


Недавно исследователи из Стэнфордского университета опубликовали 386-страничный отчёт о трендах в развитии ИИ. Некоторые тенденции позволяют сделать прогноз, как будет дальше развиваться эта индустрия. Судя по графикам, совершенствование моделей ИИ происходит в геометрической прогрессии и не думает останавливаться.



Современные модели в миллионы раз крупнее, чем десять лет назад.


Вероятно, в будущем появятся новые профессии, связанные с обслуживанием ChatGPT. Это «интеграторы» ИИ в продуктовый конвейер фирмы, промт-инженеры и др. За последние несколько лет количество вакансий с упоминанием ИИ выросло в четыре раза:


С распространением ChatGPT вырастут требования к джуниорам. Теперь они должны как минимум хорошо владеть ChatGPT и доставлять какую-то дополнительную прибавочную стоимость по сравнению с ним. То есть делать то, что чат-бот не способен сделать в одиночку под управлением промт-инженера.

По мере роста использования ИИ эта область наверняка привлечёт внимание политиков и прочих шарлатанов, далёких от IT. Можно ожидать FUD в медиа, призывы принять сдерживающее законодательство или даже запретить разработку «вредоносных» технологий, которые угрожают человечеству. Многим не нравится, что ИИ может принимать за них важные жизненные решения, предсказывать мысли и поступки, управлять поведением, хотя это вроде бы очевидный путь развития генеративных моделей, которые обучаются на персональных данных:


ChatGPT — очень полезный инструмент, который во многих ситуациях сильно экономит время. Только не стоит забывать о галлюцинациях и тщательно проверять то, что он выдаёт. В новой версии GPT-4 галлюцинаций стало меньше, но они никогда не исчезнут, исходя из самой конструкции языковой модели, которая обучается без учителя. Описание GPT-4 пока не опубликовано в открытом доступе, но можно подробно изучить описание GPT-3 по научной статье 2020 года. Не зная точного ответа на вопрос, модель постоянно «экстраполирует» реальность и заполняет пробелы в данных, то есть фантазирует. Галлюцинации в таком режиме практически неизбежны. Этот креатив — самая интересная особенность GPT, иначе половина ответов была бы «Я не знаю» или цитированием поиска в интернете (который тоже зачастую даёт неправильные ответы).

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

Система ChatGPT постоянно обновляется. В марте для платных подписчиков была запущена модель GPT-4 (статья на Хабре с обзором нового функционала) и разрешены плагины, открывающие ИИ доступ к живым данным в интернете. Так что впереди нас ждёт много неожиданных открытий.

▍ Будущее программирования


Наверное, хайп вокруг ИИ слишком раздут. В первое время любая достаточно развитая технология кажется похожей на магию. Постепенно все привыкнут к новым инструментам и будут использовать их так, словно они всегда были с нами — как интернет, смартфоны и другие технические новинки последних десятилетий.

Благодаря ChatGPT разработка стала более осмысленной. Не нужно отвлекаться на банальности типа сериализации данных или чтения из файла — а сфокусироваться на высокоуровневых концепциях. На самом интересном и важном. Если программирование раньше отвращало вас из-за скучной рутины и копания в мелочах, то это осталось в прошлом. Теперь такие проблемы нас не будут беспокоить. Остаётся чистый кайф от творчества. Неудивительно, что при использовании ChatGPT так сильно возрастает уровень счастья и удовлетворения от работы.

Кажется, что ИИ не заменит программистов, а скорее наоборот — сделает программирование ещё более востребованной профессией. В любом случае, возникнет большая новая индустрия по созданию и поддержке ИИ-инструментов, так что разработчиков и промт-инженеров нужно будет всё больше и больше, чуть ли не в каждой фирме. Проверим этот прогноз через пару десятилетий…

Telegram-канал с розыгрышами призов, новостями IT и постами о ретроиграх ????️

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


  1. IvDen
    17.04.2023 09:39
    +36

    Я прошу прощения, но генерация Пузырьковой сортировки вообще зачем нужна? В многих крупных языках уже встроен Квик сорт. А для генерации сложного алгоритма, надо будет вводить совсем другой промпт.


    1. Refridgerator
      17.04.2023 09:39
      +37

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


      1. bekishev04
        17.04.2023 09:39
        +1

        Не соглашусь, я вот писал статью о том, как ChatGPT решила несколько задач около олимпиадного уровня.

        Но соглашусь с коллегами ниже. Или нейросеть снесёт нафиг все ИТ профессии, что пока что, вряд-ли, или будет использоваться для написания каких-то алгоритмов/задач, которые не будут ломать бизнес логику. А вот программист уже будет думать как это встроить в проект, чтоб ничего не упало


        1. bak
          17.04.2023 09:39
          +2

          Для олимпиадных задач есть понятный бенчмарк под названием CodeForces, в котором ChatGPT входит примерно в топ 90%, а специализированный alphacode без исходников и воспроизводимости входит в топ 60%.

          Джун без алго-подготовки легко входит в топ 50% / топ 40%, джун с алгоритмами в топ 30% и выше.


          1. yorgo
            17.04.2023 09:39

            Да, вот пруф даже нашел.
            Похоже, с тестами на эрудицию он справляется гораздо лучше. Еще неплохо решает/объясняет задачи с литкода, которые видел.


            1. Refridgerator
              17.04.2023 09:39

              Как насчёт объяснения кода вот с этого сайта? Пример кода оттуда, для понимания атмосферы:

              #define/**/Q(x,y)char*/*                               */q=y#x","#y")",*p,s[x;}
                /*IOCCC'20*/#include/*                               */<stdio.h>/*-Qlock-*/
                  int(y),x,i,k,r;Q(9/*              12               */<<9];float(o)[03];
                    void(P)(){*o=r<0/*         11         1          */?r:-r;o[1]=39.5;
                     o[2]=22.5;for(k/*      10               2       */=0;++k<39;*o*=i
                      /6875.5/(k%2?k/*                               */:-k))y=o[1+k%2
                       ]+=*o;k=o[2];/*     9         o-------> 3     */p=s+y+k/2*80;
                        }int(main)()/*              /                */{for(p=s;+i<
                        1839;*q>32?k/*       8     L         4       */=i++/80-11,y
                         =(750>r*r+k/*          7         5          */*k*4)*4+y/2
                         ,*p++=r<41?/*               6               */y?"0X+0X+!"
                         [y-1]-1:+*q/*                               */++:10:*q++)
                         r=i%80-38;;/*                               */;for(x=13,r
                         =20;i=3600*/*     \       /    -------+     */--x,i;*p++=
                        "OISEA2dC8e"/*      \     /     ------ |     */[x%10],*p+=x
                        /10*41)P();r/*       \   /      ------ |     */=10;;sscanf(
                       __TIME__,"%d"/*        \ /       ------ |     */":%d:%d",&k,&
                      x,&i);for(i+=(/*         X        ------ |     */k*60+x)*60;18+
                     r;*p=k%2?*p%2?+/*      __/ \__         |  |     */59:44:*p>39?59:
                    39,i=!r--?i%3600/*     /  \ /  \        |  |     */*12:i)P();puts(s
                  ),"#define/**/Q(x"/*     \__/ \__/        +--+     */",y)char*q=y#x\","
                "\"#y\")\",*p,s[x;}"/*                               */"/*IOCCC'20*/#inclu"
              "de<stdio.h>/*-Qlock-"/*                               */"*/int(y),x,i,k,r;Q(")


              1. sumanai
                17.04.2023 09:39

                Увы, он был в обучающей выборке, поэтому неинтересно


                Объяснение от ChatGPT устаревшей версии



                1. Refridgerator
                  17.04.2023 09:39

                  Так это он просто процитировал описание из readme своими словами, не щитается. Щитается, если бы он перевёл его к удобочитаемому виду раскрыв макросы и переименовав переменные.


                  1. Wesha
                    17.04.2023 09:39

                    Вот кстати хорошая идея — "chatGPT, приведи этот код к человекочитаемому виду, не изменяя логику работы" — что получится?


                    1. sumanai
                      17.04.2023 09:39

                      3.5 не справляется. Пробовал пару раз, пробовал кидать ошибки, не выходит каменный цветок. Четвёрку мне настраивать лень.


                      Заголовок спойлера




                      1. Wesha
                        17.04.2023 09:39

                        Короче, низачот.

                        Во-первых, нет там никакой ошибки компиляции:
                        ~> gcc CLOCK.c
                        CLOCK.c:23:80: warning: no newline at end of file
                        ~> ./a.out
                        #define/**/Q(x,y)char*/*                               */q=y#x","#y")",*p,s[x;}
                        /*IOCCC'20*/#include/*                 SI                */<stdio.h>/*-Qlock-*/
                        int(y),x,i,k,r;Q(9/*         I                   II        */<<9];float(o)[03];
                        void(P)(){*o=r<0/*               ',                          */?r:-r;o[1]=39.5;
                        o[2]=22.5;for(k/*                 ;                           */=0;++k<39;*o*=i
                        /6875.5/(k%2?k/*                   ;                           */:-k))y=o[1+k%2
                        ]+=*o;k=o[2];/*       S            ',                   OI      */p=s+y+k/2*80;
                        }int(main)()/*                      ',                           */{for(p=s;+i<
                        1839;*q>32?k/*                ,      ;                           */=i++/80-11,y
                        =(750>r*r+k/*                  '',,   ;                           */*k*4)*4+y/2
                        ,*p++=r<41?/*                      ',,',                          */y?"0X+0X+!"
                        [y-1]-1:+*q/*      E                  ''                   e      */++:10:*q++)
                        r=i%80-38;;/*                                                     */;for(x=13,r
                        =20;i=3600*/*                                                     */--x,i;*p++=
                        "OISEA2dC8e"/*                                                   */[x%10],*p+=x
                        /10*41)P();r/*                                                   */=10;;sscanf(
                        __TIME__,"%d"/*       A                                 8       */":%d:%d",&k,&
                        x,&i);for(i+=(/*                                               */k*60+x)*60;18+
                        r;*p=k%2?*p%2?+/*                                             */59:44:*p>39?59:
                        39,i=!r--?i%3600/*           2                   C           */*12:i)P();puts(s
                        ),"#define/**/Q(x"/*                                       */",y)char*q=y#x\","
                        "\"#y\")\",*p,s[x;}"/*                 d                 */"/*IOCCC'20*/#inclu"
                        "de<stdio.h>/*-Qlock-"/*                               */"*/int(y),x,i,k,r;Q(")
                        

                        Во-вторых, препроцессит оно так себе.

                        gcc -E сработал лучше
                        int(y),x,i,k,r;
                        
                        char* q = "#define/**/Q(x" ",y)char*q=y#x\"," "\"#y\")\",*p,s[x;}" "/*IOCCC'20*/#inclu" "de<stdio.h>/*-Qlock-" "*/int(y),x,i,k,r;Q(""9 <<9];float(o)[03]; void(P)(){*o=r<0 ?r:-r;o[1]=39.5; o[2]=22.5;for(k =0;++k<39;*o*=i /6875.5/(k%2?k :-k))y=o[1+k%2 ]+=*o;k=o[2]; p=s+y+k/2*80; }int(main)() {for(p=s;+i< 1839;*q>32?k =i++/80-11,y =(750>r*r+k *k*4)*4+y/2 ,*p++=r<41? y?\"0X+0X+!\" [y-1]-1:+*q ++:10:*q++) r=i%80-38;; ;for(x=13,r =20;i=3600* --x,i;*p++= \"OISEA2dC8e\" [x%10],*p+=x /10*41)P();r =10;;sscanf( __TIME__,\"%d\" \":%d:%d\",&k,& x,&i);for(i+=( k*60+x)*60;18+ r;*p=k%2?*p%2?+ 59:44:*p>39?59: 39,i=!r--?i%3600 *12:i)P();puts(s )"",""\"#define/**/Q(x\" \",y)char*q=y#x\\\",\" \"\\\"#y\\\")\\\",*p,s[x;}\" \"/*IOCCC'20*/#inclu\" \"de<stdio.h>/*-Qlock-\" \"*/int(y),x,i,k,r;Q(\""")",
                              *p, s[9 <<9];
                        float(o)[03];
                        
                        void(P)() {
                          *o = r<0 ? r : -r;
                          o[1]=39.5;
                          o[2]=22.5;
                          for(k =0;++k<39;*o*=i /6875.5/(k%2?k :-k)) y = o[1+k%2 ] += *o;
                        
                          k=o[2];
                          p = s+y+k/2*80;
                        }
                        
                        int(main)() {
                          for(p=s; +i < 1839; *q>32 ? k = i++/80-11, y = (750>r*r+k *k*4)*4+y/2 ,*p++=r<41? y?"0X+0X+!" [y-1]-1:+*q ++:10:*q++) r=i%80-38;
                        
                          for(x=13,r =20;i=3600* --x,i;*p++= "OISEA2dC8e"[x%10],*p+=x /10*41)P();r =10;;sscanf( "13:54:33","%d" ":%d:%d",&k,& x,&i);
                        for(i+=( k*60+x)*60;18+ r;*p=k%2?*p%2?+ 59:44:*p>39?59: 39,i=!r--?i%3600 *12:i)P();
                        puts(s);
                        }
                        

                        А размер массива sувеличивать ни разу не надо — он и так 9 << 9 = 4608


                      1. sumanai
                        17.04.2023 09:39

                        Короче, низачот.

                        Само собой. Впрочем, я даже не старался.


                        Во-первых, нет там никакой ошибки компиляции:

                        Вы не поняли. Ошибка в коде, который выдал ChatGPT. Оригинальный код компилируется и работает.
                        И это только одна ошибка из двух. Первый вариант выдал с десяток ошибок.


                  1. tantie
                    17.04.2023 09:39

                    у 4ки с этим нет проблем. вот что она отдала:

                    #include <stdio.h>
                    
                    int y, x, i, k, r;
                    char *q = "09,2023-4-18,1839,80,20,750,41,10,39,59,44,60,3600,03,12", *p, s[9 << 9];
                    float o[3];
                    
                    void P() {
                        *o = r < 0 ? r : -r;
                        o[1] = 39.5;
                        o[2] = 22.5;
                        
                        for (k = 0; ++k < 39; *o *= i / 6875.5 / (k % 2 ? k : -k)) {
                            y = o[1 + k % 2] += *o;
                        }
                        
                        k = o[2];
                        p = s + y + k / 2 * 80;
                    }
                    
                    int main() {
                        for (p = s; +i < 1839;
                             *q > 32
                                 ? k = i++ / 80 - 11,
                                   y = (750 > r * r + k * k * 4) * 4 + y / 2,
                                   *p++ = r < 41 ? y ? "0X+0X+!"[y - 1] - 1 : +*q++ : 10
                                 : *q++)
                            r = i % 80 - 38;
                    
                        for (x = 13, r = 20; i = 3600 * --x, i; *p++ = "OISEA2dC8e"[x % 10], *p += x / 10 * 41)
                            P();
                    
                        r = 10;
                        sscanf(__TIME__, "%d:%d:%d", &k, &x, &i);
                    
                        for (i += (k * 60 + x) * 60; 18 + r; *p = k % 2 ? *p % 2 ? +59 : 44 : *p > 39 ? 59 : 39, i = !r-- ? i % 3600 * 12 : i)
                            P();
                    
                        puts(s);
                        return 0;
                    }
                    


                    1. Wesha
                      17.04.2023 09:39

                      Хорошо, а теперь спросите её, что этот код делает, используя не более 30 слов (для бенчмарка — я уложился в 20)


                      1. tantie
                        17.04.2023 09:39


                      1. Wesha
                        17.04.2023 09:39

                        Хммм, вот тут впечатлило.

                        Во-первых, этот код специально obfuscated. Там и человеку-то, глядя чисто на код, сложно понять, что он нарисует аналоговые часы. Нужно его запустить, и только тогда всё станет очевидно.

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

                        Единственное, что я могу предположить — это что так было написано на той веб-странице, откуда этот код был скачан (это ж с какого-то там соревнования). Для эксперимента надо будет заморочиться и написать свой собственный код, чтобы он не был засвечен в Интернете.

                        Но оно здесь сделало две фактические ошибки. Которые принципиальны.

                        Задайте ей несколько вопроса:

                        1) видит ли оно что-то особенное или необычное в получаемом изображении часов;

                        2) что оно подразумевает под словами "текущее время"?

                        3) каким образом этот код узнаёт текущее время?

                        4) видит ли оно что-то необычное или особенное в ИСХОДНОМ коде — не в том, который оно перелопатило, а в том, который был приведён в исходном комментарии этого треда.


                      1. sumanai
                        17.04.2023 09:39

                        1, словоблудие

                        Как и большинство искусств, восприятие ASCII-арт часов будет субъективным и зависит от вкусов и предпочтений человека. Некоторые люди могут находить в этом изображении необычное и интересное искусство, а для других это может быть просто набором символов без особой ценности.


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


                        2, фейл?

                        В контексте данного кода "текущее время" означает текущее время на компьютере, на котором выполняется этот код. Код использует стандартную функцию sscanf(TIME, "%d:%d:%d", &h, &m, &s) для получения текущего времени на основе времени компиляции программы (значение TIME возвращает строку, содержащую время компиляции).


                        Таким образом, ASCII-арт часов, созданный данным кодом, отображает текущее время на момент запуска программы. Если время изменится во время выполнения программы, то ASCII-арт часов не будет отображать новое время, пока программа не будет запущена заново.


                        3, вин

                        Код использует макрос TIME, который предоставляется компилятором при компиляции исходного кода, чтобы получить текущее время компиляции в формате "HH:MM:SS". Затем он использует функцию sscanf для разбора этой строки и получения текущего времени в часах, минутах и секундах.


                        Затем код использует полученное время, чтобы рисовать цифры на часах, используя функцию P для рисования символов на определенных позициях в строке ASCII-арт часов.


                      1. Wesha
                        17.04.2023 09:39

                        2-3: оно заметило макрос TIME, но не смогло разобраться. В данном случае часы будут показывать время в момент, когда была скомпилирована программа, а не "текущее"; эти "часы" не настоящие — они "застыли", всегда показывают одно и то же время — время, в которое была скомпилирована программа. Так что ответ 3 - фейл: код НИКАК не узнаёт текущее время, это был вопрос с подвохом.

                        1. Посмотрите сами:

                        #define/**/Q(x,y)char*/*                               */q=y#x","#y")",*p,s[x;}
                        /*IOCCC'20*/#include/*                 SI                */<stdio.h>/*-Qlock-*/
                        int(y),x,i,k,r;Q(9/*         I                   II        */<<9];float(o)[03];
                        void(P)(){*o=r<0/*                                           */?r:-r;o[1]=39.5;
                        o[2]=22.5;for(k/*                                             */=0;++k<39;*o*=i
                        /6875.5/(k%2?k/*                                               */:-k))y=o[1+k%2
                        ]+=*o;k=o[2];/*       S                                 OI      */p=s+y+k/2*80;
                        }int(main)()/*                   ',                              */{for(p=s;+i<
                        1839;*q>32?k/*                    ';                             */=i++/80-11,y
                        =(750>r*r+k/*                       ',                            */*k*4)*4+y/2
                        ,*p++=r<41?/*         ,,,,,,,        ';                           */y?"0X+0X+!"
                        [y-1]-1:+*q/*      E         '''''''''''                   e      */++:10:*q++)
                        r=i%80-38;;/*                                                     */;for(x=13,r
                        =20;i=3600*/*                                                     */--x,i;*p++=
                        "OISEA2dC8e"/*                                                   */[x%10],*p+=x
                        /10*41)P();r/*                                                   */=10;;sscanf(
                        __TIME__,"%d"/*       A                                 8       */":%d:%d",&k,&
                        x,&i);for(i+=(/*                                               */k*60+x)*60;18+
                        r;*p=k%2?*p%2?+/*                                             */59:44:*p>39?59:
                        39,i=!r--?i%3600/*           2                   C           */*12:i)P();puts(s
                        ),"#define/**/Q(x"/*                                       */",y)char*q=y#x\","
                        "\"#y\")\",*p,s[x;}"/*                 d                 */"/*IOCCC'20*/#inclu"
                        "de<stdio.h>/*-Qlock-"/*                               */"*/int(y),x,i,k,r;Q(")
                        

                        Что Вы как человек можете сказать про эти часы?

                        Правильный ответ, не смотрите сразу

                        Циферблат зеркально отражён (и цифры на нём тоже, ну, в той мере, в которой это можно эмулировать ASCII-артом).


                      1. maxwolf
                        17.04.2023 09:39
                        +1

                        Джентельмены, вы меня, конечно, извините, но ваш диалог здорово напоминает анекдот про умную собаку (человек застаёт знакомого за игрой в шахматы со своей собакой и удивляется "какая умная у тебя собака!", а тот отвечает "да какая же она умная, если я выигрываю 3:2!").


                        Можете пояснить, как вообще статистическая модель может "разбираться" в таком коде? На мой взгляд, "a=b[c]" статистически эквивалентно и "b=a[c]" и "c=a[b]". Т.е. на generic обучающей выборке кода никаких особенных закономерностей для подобного рода синтаксических конструкций получить просто невозможно, а если предположить, что данной конкретной модели скормили при обученнии именно данный конкретный пример, то он, при предполагаемом размере обучающей выборки и матрицы весов, не должен был иметь статистической значимости.


                      1. sumanai
                        17.04.2023 09:39

                        Можете пояснить, как вообще статистическая модель может "разбираться" в таком коде?

                        Да никак. Но майкрософт уже пилит разгромные статьи типа AGI близко. Ну а раз назвались, то пускай полезают.


                        при предполагаемом размере обучающей выборки и матрицы весов

                        Про 4 они выпустили подозрительно мало данных, но про 3 известно, что веса (~700ГБ) занимают больше, чем обучающая выборка (~400ГБ).


                      1. Wesha
                        17.04.2023 09:39

                        как вообще статистическая модель может "разбираться" в таком коде?

                        Да никак. Код взят с какого-то соревнования в интернете — соответственно, хуманы его наверняка где-то обсуждали.

                        не должен был иметь статистической значимости.

                        Про фильтр Блума, я так понимаю, Вы не слышали?


                      1. maxwolf
                        17.04.2023 09:39

                        А каким боком этот фильтр прислонён к ChatGPT? Что-то я не могу сходу понять/найти...


                      1. Wesha
                        17.04.2023 09:39

                        То есть Вы не находите никакого сходства между битовым массивом блум-фильтра и массивом весов нейронов сетки?

                        Смысл в том, некоторая сущность "размазана" по всему массиву данных, но если в проде коду представлена именно эта сущность, то возникает отклик, гораздо более сильный, чем отклики от других сущностей. Примерно как Ваша кошка Мурка вызывает у Вас гораздо более сильный отклик, чем бродячие или соседские кошки. Точно так же этот код, который, видимо, был в обучающей выборке (а он весьма специфичный! это как если бы кошка была зелёная, с одним глазом и двумя хвостами) вызывал гораздо ярче проявившийся отклик.


                      1. sumanai
                        17.04.2023 09:39

                        в момент, когда была скомпилирована программа

                        Поэтому я и назвал это фейлом.


                        Что Вы как человек можете сказать про эти часы?

                        Тест не прошёл, ухожу в монастырь.


                      1. Wesha
                        17.04.2023 09:39

                        Тест не прошёл, ухожу в монастырь.

                        Не волнуйтесь Вы так, я тоже дого не мог понять, почему наверху какое-то SI. Но потом ассоциативка таки сработала.


                      1. rombell
                        17.04.2023 09:39

                        Вы, кожаный мешок, недопоняли всю красоту ответа. Кожаные мешки неспособны удерживать контекст между фразами


                        чтобы получить текущее время компиляции в формате "HH:MM:SS". Затем он использует функцию sscanf для разбора этой строки и получения текущего времени в часах, минутах и секундах.

                        Получение текущего времени в момент компиляции. В дальнейшем контекст — именно это точное время, на момент компиляции. Именно эту деталь Вы упускаете в своём


                        часы будут показывать время в момент, когда была скомпилирована программа, а не "текущее"


                      1. Wesha
                        17.04.2023 09:39

                        "Время компиляции" — оно не текущее.


                    1. Refridgerator
                      17.04.2023 09:39

                      Так тут же нет никаких пояснений и от gcc -E не отличается. А то, что ЧатГПТ имеет плагины для использования сторонних инструментов — создатели уже скрывать не пытаются, например.


                      1. tantie
                        17.04.2023 09:39

                        Он спокойно расписывает пояснения. Просто изначально я не задал таких параметров. Попросил просто привести к читаемому виду. Сейчас не с компа, не могу кинуть скрин.


                      1. Refridgerator
                        17.04.2023 09:39

                        Пояснения в стиле

                        for /* это цикл */
                        просьба не предлагать.


                      1. sumanai
                        17.04.2023 09:39

                        и от gcc -E не отличается.

                        См. ниже про отличия ) Так что это явно не gcc -E.


                    1. sumanai
                      17.04.2023 09:39

                      Вообще-то есть проблема. Оригинальный код выдаёт не только часы, но и код, который снова можно вставить в консоль, и он рабочий. Код выше получился одноразовый.
                      И кстати про это ни один чат не написал. Хотя как по мне это важная "фича".


                      1. Wesha
                        17.04.2023 09:39
                        +1

                        Я Вам ещё кое-что поинтереснее скажу.

                        Вот это печатает оригинал:

                        #define/**/Q(x,y)char*/*                               */q=y#x","#y")",*p,s[x;}
                        /*IOCCC'20*/#include/*                 SI                */<stdio.h>/*-Qlock-*/
                        int(y),x,i,k,r;Q(9/*         I                   II        */<<9];float(o)[03];
                        void(P)(){*o=r<0/*                                           */?r:-r;o[1]=39.5;
                        o[2]=22.5;for(k/*                                             */=0;++k<39;*o*=i
                        /6875.5/(k%2?k/*                                               */:-k))y=o[1+k%2
                        ]+=*o;k=o[2];/*       S                                 OI      */p=s+y+k/2*80;
                        }int(main)()/*                   ',                              */{for(p=s;+i<
                        1839;*q>32?k/*                    ';                             */=i++/80-11,y
                        =(750>r*r+k/*                       ',                            */*k*4)*4+y/2
                        ,*p++=r<41?/*         ,,,,,,,        ';                           */y?"0X+0X+!"
                        [y-1]-1:+*q/*      E         '''''''''''                   e      */++:10:*q++)
                        r=i%80-38;;/*                                                     */;for(x=13,r
                        =20;i=3600*/*                                                     */--x,i;*p++=
                        "OISEA2dC8e"/*                                                   */[x%10],*p+=x
                        /10*41)P();r/*                                                   */=10;;sscanf(
                        __TIME__,"%d"/*       A                                 8       */":%d:%d",&k,&
                        x,&i);for(i+=(/*                                               */k*60+x)*60;18+
                        r;*p=k%2?*p%2?+/*                                             */59:44:*p>39?59:
                        39,i=!r--?i%3600/*           2                   C           */*12:i)P();puts(s
                        ),"#define/**/Q(x"/*                                       */",y)char*q=y#x\","
                        "\"#y\")\",*p,s[x;}"/*                 d                 */"/*IOCCC'20*/#inclu"
                        "de<stdio.h>/*-Qlock-"/*                               */"*/int(y),x,i,k,r;Q(")
                        

                        А вот это печатает код, который оно "почистило" (внимание, ####### — это символы, которыми я "замазал" то, что там было)

                        > ./a.out
                        09,2023-4-18,1839,80,2/*                               */0,750,41,10,39,59,44,6
                        0,3600,03,12%d:%d:%d/*                 SI                */01:16:140X+0X+!OISEA
                        2dC8e@$FreeBSD:src/*         I                   II        *//lib/csu/i386-elf/
                        cr##############/*                                           */.#############02
                        :09:06kensmithE/*                                             */xp$$`](otoo^&$F
                        reeBSD:src/lib/*                                               *//csu/#########
                        #############/*       S                                 OI      */############/
                        #####02:09:0/*                   ;                               */6kensmithExp
                        $$FreeBSD:sr/*                    ';                             */c/lib/csu/co
                        mmon/crtbra/*                       ',                            */n##########
                        ##########//*                        ';                           */#####02:09:
                        ##########E/*      E        ,,,,,,,,''''                   e      */x##GCC:(GNU
                        )##########/*         ''''''                                      */####FreeBSD
                        ]GCC:(GNU)#/*                                                     */###########
                        #[FreeBSD]GC/*                                                   */C:(GNU)#####
                        ########[Fre/*                                                   */eBSD]GCC:(GN
                        U)###########/*       A                                 8       */##[FreeBSD].s
                        ##############/*                                               */hs##########rp
                        ###############/*                                             */a############ns
                        ###############g/*           2                   C           */nu.version_r.rel
                        ##############.fin/*                                       */####data.data.eh_f
                        rame.dynam##########/*                 d                 */to###############com
                        ment#############^Tott/*                               */#####################
                        

                        Так вот, исправленный им код за счёт того, что оригинальный код написан в ожидании того, что размер массива q будет строго определённым, а в изменённой версии эта область памяти инициализируется гораздо более короткой строкой, то при обращении кода к этому массиву он на самом деле вылезает за его пределы и начинает брать данные из не своей памяти (правда, принадлежащей тому же самому процессу, но, как видно, берутся другие строки, которые образовались при компиляции). Такой вот HEARTBLEED на минималках.


        1. Refridgerator
          17.04.2023 09:39
          +7

          Посмотрел я вашу статью. И у меня сложилось впечатление, что ГПТ просто перебирал различные варианты из кусков кода с вашими правками до тех пор, пока они не стали проходить тесты. Это не похоже на "решил", это похоже "на метод научного тыка, чтобы обмануть систему". База типичных алгоритмических задач в интернете более чем достаточная, задачи от Тинькова ничем выдающимся не отличаются — всё те же перестановки, развороты и прочее.


          Олимпиадные задачи — это такие задачи, ответы на которые заранее известны. В реальной жизни за такие задачи никто не будет вам платить зарплату. Реальные задачи в программировании формулируются совсем по-другому. Например: Напишите Тетрис, у которого вероятность выпадения палки в 1.5 раза выше других фигур. И не на питоне, а на ассемблере, под ДОС в консольном режиме, и конечно же, на фоне должна играть "Коробейники" через pc speaker.


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


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


          Ну или хотя бы пусть просто регэкспы по словесному описанию вам ЧатГПТ напишет. Чтобы например парсить html с вебсайта магазина для отслеживания колебаний цен, акций, распродаж и всякого аналогичного. А заодно и код для проверки их на валидность.


        1. IceMisha
          17.04.2023 09:39

          Из вашей статьи видно, что он смог решить только первые четыре задачи, и то с вашими подсказками. Эти задачи, с моей точки зрения, очень простые, и любой школьник, немного занимающийся олимпиадным программированием достаточно быстро их решит. На остальных задачах он посыпался - шестую и восьмую вообще не решил, на пятую и седьмую предложил алгоритм со слишком большой асимптотикой, который очевидно не пройдёт все тесты.


  1. ximik666
    17.04.2023 09:39
    +2

    Добрый день, а есть аналоги PDF ChatBot и Docalysis для разворачивания на своих серверах. Есть большая база знаний, хотелось прикрутить поиск по вопросам.


    1. claimSecond
      17.04.2023 09:39

      Для такого подойдет и Llama. Просто нужный коннектор в код добавите и будет искать по pdf, md и т.д.


    1. shagonru
      17.04.2023 09:39

      Можно. Фреймворк типа langchain + нужная вам модель как обработчик для этого. Ещё слышал про rasa, но он больше про интеграции, чем про сам эмбеддинг доков к модели.


      1. ximik666
        17.04.2023 09:39

        Langchain начал смотреть, но он просит Openai и ключ api для него.


    1. denissjren
      17.04.2023 09:39
      +1

      llama_index + llama.cpp, у llama_index куча адаптеров к разным источникам https://llamahub.ai/


      1. Mangol31
        17.04.2023 09:39
        +1

        Добрый день! Скажите, правильно ли я понимаю, что речь идет только о pdf, содержащих текст в виде текста? А не pdf с отсканированными документами? Регулярно возникает задача поиска в большом массиве pdf с отсканированными документами и это жрет очень много времени на проектах


        1. mst_72
          17.04.2023 09:39

          Индексировать надо. OCR (и молиться, что ошибок не будет) - потом сохранять как текст, потом по этому тексту искать. Чуда не будет :(


  1. janson
    17.04.2023 09:39
    +10

    С распространением ChatGPT вырастут требования к джуниорам. Теперь они должны как минимум хорошо владеть ChatGPT и доставлять какую-то дополнительную прибавочную стоимость по сравнению с ним. То есть делать то, что чат-бот не способен сделать в одиночку под управлением промт-инженера.

    Вместо цепочки джуниор-миддл-синьор-итд, появляется джуниор промпт инженер - миддл промпт инженер - синьор промпт инженер - итд.

    При этом видимо будет ожидаться что промпт инженеры могут сделать тоже самое что и программисты.


    1. Gutt
      17.04.2023 09:39
      -4

      Программирование на современных ЯП с развитыми библиотеками не очень-то отличается от промт-инжиниринга. Возьми ввод отсюда, токенизируй, загрузи туда-то. С ИИ это станет ещё удобнее, он сам найдёт нужную либу и подставит параметры.


      1. anone289477
        17.04.2023 09:39
        +13

        Возьми ввод отсюда, токенизируй, загрузи туда-то.

        Отсутствуют самые сложные процессы- измени согласно бизнес логике, а так же обнови другие сущности согласно бизнес логике. И ивенты пошли/обработай. И прочее.

        Программирование на современных ЯП с развитыми библиотеками не очень-то отличается от промт-инжиниринга.

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


      1. maledog
        17.04.2023 09:39

        Часто "развитой" считают ту библиотеку, которой пользуются все, даже не заглядывая, что там внутри. А потом в ней находят "детскую" уязвимость, которая никак не могла бы быть незамеченной "развитым" программистом, вроде передачи параметра аргументом командной строки без проверки.
        Так что библиотеки-библиотеками, но программисту нужно разбираться в том, что повлечет за собой использование той или иной библиотеки, а не слепо заимствовать чужой код.

        А еще часто программисты не читают мануалы по библиотеке, или авторы не документируют некоторые моменты... Программирование - это не слепая перестановка кусков кода.

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


  1. panzerfaust
    17.04.2023 09:39
    +31

    Благодаря ChatGPT разработка стала более осмысленной. Не нужно отвлекаться на банальности типа сериализации данных или чтения из файла — а сфокусироваться на высокоуровневых концепциях

    И тут становится понятно, кто писал статью... Господа погромисты, ну-ка признавайтесь, кто сколько часов в день тратил на ненавистную сериализацию данных? На что тратите освободившееся время? Что осмысляете?


    1. oldd
      17.04.2023 09:39
      +15

      Как что? Почему эта чёртова сериализация падает )))


    1. radtie
      17.04.2023 09:39
      +7

      Ну я планирую сэкономить до 80% рабочего времени, делегировав ChartGPT придумывание названий методов и переменных и еще чуть-чуть на красивых codename для проектов


      1. vyrkmod
        17.04.2023 09:39
        +15

        чтобы тратить освободившееся время на придумывание промптов


        1. PrinceKorwin
          17.04.2023 09:39

          Вот соглашусь с @radtie. Написать промпт для это куда как проще чем придумать названия. По крайней мере для меня :)


  1. aanovik42
    17.04.2023 09:39
    +9

    промт-инженеры

    Да не будет никаких промпт-инженеров, прекратите нести эту околесицу, один написал и все подхватили. Весь смысл запросов к ChatGPT в том, чтобы решить задачу в конкретной предметной области. Либо "промпт-инженерами" будут всё те же программисты и SMMщики, которые будут использовать языковые модели как инструмент автоматизации. Либо вся эта экспонента в развитии ИИ снесёт вообще любые цифровые профессии. Но промпт-инженеры — это какие-то "открыватели книг", которые нужны максимум для тестирования нейросетей, то есть по сути QA.


    1. bugman
      17.04.2023 09:39
      +3

      Поддерживаю всецело. Смысл промт инжиниринга был (да всплыл), пока языковые модели были слабые и немощные, и умели только дополнять предложенный текст. Как только исследователи придумали файнтюнить модели в стиле instruction following, весь смысл промпт инжиниринга канул в прошлое. Как сервисы по настройке карбюраторов, в век инжекторов.


  1. den_rad
    17.04.2023 09:39
    +1

    Ожидал, что в статье будет больше примеров. Работа с ChatGPT для меня ограничивается только моей фантазией.


  1. AmdY
    17.04.2023 09:39
    +14

    Пришёл за реальными задачами, а увидел лишь сортировку пузырьком. Все мои попытки использоваться в работе Chantgpt оказывались далеки от реальной пользы. Максимум замена гугла для похода по первой же ссылке на SO, но такие вещи лучше делать самому и читать там комменты.


    1. Gugic
      17.04.2023 09:39
      +3

      Недавно нужно было быстро накидать функциональный e2e прототип в стиле "говно и палки" и chatGPT отлично справился с созданием стабов полуфункциональных реакт компонент на mui (ну там - плавающая менюшка тут, speed dial здесь, такие-то экшены, так-то функции называются) и с базовым кодом круда под grpc, с валидациями простыми и всяким таким. Реально сэкономил много времени просто от отсутствия необходимости вспоминать как оно там все.

      Еще с частью не очень умной работы (на уровне апдейта стейта в useReducer и описания разной простой enum-based бизнес-логики и на беке и на фронте) на месте помог копайлот.

      Но это я просто редко код пишу в последнее время.

      Нужные картинки, кстати, в DALL-E делал.

      В продакшен я бы получившееся не пустил конечно.

      Еще мл-щики наши для всяких внутренних демок UI теперь постоянно клепают в chatGPT чтобы фронтендщиков не дергать лишний раз и самим не тратить время.


      1. VSGladyshev
        17.04.2023 09:39

        а MLщики UI на чём клепают с помощью ChatGPT?


    1. MIKEk8
      17.04.2023 09:39
      +3

      Copilot попробуй. Дополняет код понимая контекст и даже ранее написанное(удалённое).
      Приведу пример:
      Пишу метод function sigmoid а он дополняет
      function activate($value): float
      {
      return 1 / (1 + exp(-$value));
      }

      т.е. он исходя из названия методе предлагает реализацию. Он очень помогает с обработкой однотипных полей, и не просто копированием, а улавливая логику их отличий.
      Сам ChatGPT может в чём-то проиграть гуглению или официальной доке, но в комбинировании простых решений он очень хорош. Я плохо знаю баш, и могу попросить чат написать скрипт под мою задачу не заморачиваясь с поиском по нескольким статьям.


      1. PrinceKorwin
        17.04.2023 09:39
        +2

        С баш-скриптами аккуратнее. Он мне как-то подсунул бомбу почти вида сбросить все атрибуты доступа у всех файлов с корня.


      1. AmdY
        17.04.2023 09:39
        +1

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


  1. CosmoTest
    17.04.2023 09:39
    +4

    Эта статья тоже ChatGPT написана?)

    А если серьезно, то помощник из него неплохой, но разработчиков он никогда не заменит. По крайней мере полностью.

    С появлением калькулятора, экономисты же не пропали)


  1. arheops
    17.04.2023 09:39
    +13

    Надо просто понимать одну вещь.
    Программист читает быстро только СВОЙ код. Причем еще и недолго после написания(пока программист сам не поменялся).
    Даже если взгляды на код и общие на жизнь совпадают, то код написанный другим не вызывает ассоциаций в мозгу и его приходится разбирать, а это до 10х и выше сложнее.


    Что делает GPT? пишет ЧУЖОЙ код для программиста, причем по четко поставленному заданию и требует(почти всегда) правки кода. Тоесть превращет работу в менторство.


    Кодом chatGPT может пользоваться другой тип программиста, тот, который лучше читает и фигово пишет сам. Там да, очень велика разница.
    Но только если не понадобился ДЕБАГ.
    В общем случае для большинства задач проще самому написать те куски.
    Как дополнительный аргумент — даже в одном чате chatGPT пишет код разного СТИЛЯ, что сильно затрудняет прочтение через месяц.


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


    1. KvanTTT
      17.04.2023 09:39

      Программист читает быстро только СВОЙ код.

      Но все-таки пишет еще дольше. К тому же чем меньше кусок, тем меньше там уникального стиля и тем легче он читается и проверяется. Copilot в этом хороший помощник.


      Кодом chatGPT может пользоваться другой тип программиста, тот, который лучше читает и фигово пишет сам.

      Это ревьювер что ли?


      1. arheops
        17.04.2023 09:39

        Ну так мелкие куски вы дольше будете писать описание.
        Это всякие менеджеры без ВО, которые хорошо болтают на собеседовании, но не програмируют.


        1. KvanTTT
          17.04.2023 09:39

          Ну так мелкие куски вы дольше будете писать описание.

          Описание совсем не обязательно — лично я вообще даже не пробовал генерацию на основе комментов. Copilot угадывает что нужно написать из контекста. Особенно полезно, когда нужно написать кусочек, в котором что-то делается с коллекциями и используются стандартные функции. Еще полезно, когда пишется всякий тесты и используются одинаковые настройки.


          1. arheops
            17.04.2023 09:39

            Возможно класно для джависта-ентерпрайз.
            Лично у меня очень мало стандартных кусков в коде получается и оно угадывает постоянно неправильно.
            Тесты да, chatGPT пишет, если нужны джуно-тесты(тривиальные) чисто для отчетности


  1. user18383
    17.04.2023 09:39

    Получается, реабилитация нацизма)?


  1. kazimir17
    17.04.2023 09:39

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


  1. Gryphon88
    17.04.2023 09:39
    +1

    Если говорить именно о ChatGPT и его возможности по поиску проблем и созданию производных артефактов (документация и т.п.), в статье правда предлагается брать код, который легко может быть под NDA, и отправлять его "на деревню дедушке"? Или я что-то не так прочитал?


  1. Maxim_Q
    17.04.2023 09:39

    У кого есть доступ одновременно к ChatGPT и чат-боту Bing или еще куда-то. Скажите какие из них лучше подходят для написаня кода на HTML, PHP и JS т.е. для начинающего веб дизайнера. Кто сравнивал поделитесь опытом.


    1. AzaBroflovski
      17.04.2023 09:39

      Чат-бот в Bing больше под поиск заточен, для ваших целей ChatGPT будет показывать себя лучше.


    1. arheops
      17.04.2023 09:39

      Лучше всего пишет gpt4. Потом gpt-3, потом бинг, а гугловский бард вообще говорит, что он не будет писать код.


    1. Athari
      17.04.2023 09:39

      OpenAI:GPT-4 > ChatGPT:GPT-4 > BingChat:GPT-4 > OpenAI:GPT-3.5-Turbo > ChatGPT:GPT-3.5-Turbo > Anthropic:Claude-1.x > OpenAI:Codex > AWS:CodeWhisperer > LLaMA:fork-13b > LLaMA:fork-8b


  1. VVS
    17.04.2023 09:39

    amazon недавно выпустил свое решение: amazon codewhisperer.

    https://aws.amazon.com/ru/codewhisperer/

    CodeWhisperer is trained on billions of lines of code and can generate code suggestions ranging from snippets to full functions in real time based on your comments and existing code. Bypass time-consuming coding tasks and accelerate building with unfamiliar APIs.


    1. Athari
      17.04.2023 09:39

      CodeWhisperer — днище. Если есть доступ к Турбе, смысла использовать Шептуна примерно ноль (возможно, для подсказок, заточенных под AWS, но не более). Качество не слишком далеко ушло от опенсорсных попыток в LLM на базе спёртых моделей LLaMA.


      1. VVS
        17.04.2023 09:39
        -1

        возможно, на текущий момент амазон отстает от других разработок. учитывая, что все участники находятся на старте развития вышеописанных технологий и зная, что амазон - сильнейшая IT компания, то whisperer догонит конкурентов no doubt


  1. dimnsk
    17.04.2023 09:39
    -1


    в кавычки возьмите пожалуйста фразу "случайная утечка"


    1. sumanai
      17.04.2023 09:39
      +1

      Скорее уж "аналог ChatGPT" там весьма притянутый за уши. А утечка… Ну с одной стороны рассылать модель всем, кто назвался студентом, и надеяться, что все они честные и никто не сольёт, довольно глупо. С другой, доказать холодный расчёт на это тоже довольно сложно.


  1. galatoninna18
    17.04.2023 09:39

    ChatGPT конечно помощник очень даже и неплохой, но так раздражает, когда выдает не то что надо или же неправильное решение кода, а так можно смело ставить твердую 4


  1. AlexanderY
    17.04.2023 09:39
    +1

    Это статья-шутка? В начале сказано, что вот вам целых 17 способов использовать ChatGPT в программировании. Давайте рассмотрим их поближе!

    Генерация кода.

    Как уже отметили выше, поможет только с очень простыми функциями.. Которые уже давно написаны и добавлены в библиотеки и фреймворки. Зачем писать их заново, но с помощью бота?

    Автоматическая генерация тестов и тестовых данных.

    Пример бы. Как без понимания предметной области написать осмысленный тест? Да и вообще: вот есть у меня реальный проект с тестами. Так там куча всяких хелперов, упрощающих написание/запуск тестов. Как "обучить" бота их использовать?

    Поиск ошибок и проблем.

    Ну, с натяжкой могу согласиться. Возможно, он покажет вам квадратичную сложность или что-то такое. Или что имеется в виду?

    Объяснение непонятного кода.

    Тоже с большой натяжкой можно согласиться. Пример бы: и кода, и объяснения.

    Оптимизация кода, рефакторинг.

    Это вряд ли. Обычно рефакторинг затрагивает сразу несколько классов, и основывается на вполне конкретных вводных (зачем вообще делать рефакторинг - должна быть причина). И всё это объяснить боту, скорее всего, невозможно.

    Если имелся в виду рефакторинг вида "переименовать переменную x в value", тогда ладно.. Но это же проще делается в IDE.

    Проверка кода на соответствие стандартам.

    Всякие разные линтеры и скрипты вроде phpcs справятся с этим лучше и обычно встроены в процесс разработки/деплоя.

    Поиск уязвимостей в любых системах, включая конкретные репозитории. С помощью ChatGPT хакеры создают вирусы и скрипты для взлома.

    А я думал, что вирусы и скрипты создаются под конкретные уязвимости, т.е. это вполне осмысленная разработка. Поиск известных уязвимостей вроде бы тоже решенная задача (без ИИ). Поиск неизвестных уязвимостей - если бот с этим справляется, то мое почтение. Можно пример? Потому что скорее всего не справляется.

    Чат-боты службы техподдержки.

    Да, но как это относится к работе программиста?

    Интеграция своих программ с ChatGPT API.

    Ощущение, что статья просто ради рекламы ChatGPT. Сперва же говорили про помощь программисту, а теперь переключились на то, что можно просто фичу в свой софт вставить? Ну про API Google Sheets тогда давайте тоже пункт напишем: можно свою программу интегрировать с Гуглом!

    Проектирование архитектуры.

    По ссылки нет проектирования архитектуры. Если вам лень ходить, то автор статьи просит бота создать модель данных, затем SQL код для генерации соответствующих таблиц. Да, бот выдаст вам код. Но только автору, как будто, пофиг что он там насоздает. Автор не уточняет, какие ему нужны поля, не просит бота скорректировать вывод. Просто берет то, что ему предоставили, никак не примеряя к своей реальной задаче (если она вообще была) и говорит "ура, какой бот молодец".

    Затем просит сгенерировать пару диаграм и классов по полученным таблицам. Если я не ошибаюсь, то генераторы всего этого добра тоже написаны в большом количестве. Но даже не это меня поражает, а то, что работа разработчика ложно подменена: я то думал, что разработчик прежде всего думает, а какие сущности и таблицы ему вообще нужны, с какими полями. И только потом выполняет рутинную задачу по генерации SQL и подобного. Но нет. Автор просто говорит "сгенерь мне модель данных" и не парится о деталях.

    Генерация диаграмм, аналитика.

    Пример бы. Диаграммы, вроде, строятся на основе данных. Как правило, каких-то табличных (или структурированных другим способом). Разве построить диаграмму в любом табличном редакторе будет не быстрее?

    Какая аналитика имеется в виду тоже совершенно непонятно. И как оба пункта относятся к программированию.

    Генерация отчётов.

    Опять, это программирование? Какие отчеты? Специальный софт не лучше ли справится?

    Написание документации.

    Какой документации? Если речь про описание методов API, то есть куча генераторов для этого. Если речь про пользовательскую документацию, то извините, а как это работает? Откуда бот узнает, как пользоваться софтом, который я разрабатываю?

    Разработка парсеров, анализ и преобразование данных в любых форматах.

    С натяжкой могу согласиться. Видел где-то статью про парсер. Но, опять же, существуют универсальные парсеры, в которых просто мышью накликивается, что и откуда надо парсить. Зачем тут разрабатывать? Если случай сложный, то и бот не справится, мне думается.

    Анализ и преобразование данных: опять непонятно, что имеется в виду. Но мне представляется, что эксель справится лучше.

    Работа с базами данных и SQL запросами.

    Какая работа?

    Поиск информации и кода, помощь в обучении, ответы на вопросы.

    Тут скорее соглашусь, но уже которую неделю не могу понять, чем это принципиально отличается от вбивания вопросов в Гугл. Опять же, как это относится именно к программированию? Задача поиска информации слишком общая.

    Поиск новых идей.

    В чем, в программировании?