Насколько можно доверять ответам ChatGPT? Причём не тем из них, которые даются на простые вопросы, а тем, что имеют отношение к разработке? Исследование Pew Research Center показало, что каждый десятый пользователь применяет ИИ-чат-бот для выполнения ежедневных рабочих задач. Что касается IT-отрасли, то в 2024 году около 2 млн программистов используют ChatGPT для работы на постоянной основе. Впрочем, результаты от Pew Research Center способны серьёзно подорвать доверие разработчиков к цифровому помощнику, ставшему для многих привычным.

Уверенность не равно точность

Эксперимент, упоминавшийся выше, проводился для оценки качества и достоверности ответов ChatGPT на вопросы. Их исследователи копировали с сайта Stack Overflow. Они применили комбинированный подход, который включал ручной, лингвистический анализ и пользовательские исследования. Результаты показали, что ChatGPT слишком часто предоставляет неверные ответы на вопросы о программировании: на 52% из 517 вопросов нейросетевая модель ответила неправильно.

«Мы обнаружили, что 52% ответов от ChatGPT содержат в себе ошибки, а 77% оказались более запутанными, чем ответы человека», — говорят исследователи. Несмотря на это, ChatGPT был настолько убедительным в своих ответах, что в 39% случаев программисты доверяли именно нейросети. Вежливость чат-бота и хорошо структурированный стиль ответа подкупали и опытных профессионалов, несмотря на явные ошибки и неточности.

ChatGPT запрограммирована на имитацию человеческого ответа. При этом нейросеть избегает давать неуверенные или осторожные ответы, что создаёт иллюзию компетентности. «В ходе нашего исследования мы заметили, что пользователи могут распознать ошибку в ответе ChatGPT только тогда, когда она очевидна. Однако когда ошибка не является легко проверяемой или требует использования внешней среды разработки или документации, люди часто не могут определить некорректность ответа», — комментируют ситуацию учёные из Purdue University в своём отчёте.

Что ещё?

Авторы исследования — Purdue University. Специалисты университета оценили и различия в лингвистическом стиле ответов ChatGPT и пользователей Stack Overflow. ИИ-ответы казались более вежливыми и ёмкими по сравнению с ответами обычных пользователей. В плане выражения эмоций ChatGPT предоставляет ответы в положительном или нейтральном ключе. Например, «Ваш код содержит небольшую ошибку. Попробуйте заменить x на y для корректного выполнения». Тогда как на Stack Overflow ответ будет примерно таким: «Ваш код неправильный, потому что вы сделали глупую ошибку. Замените x на y».

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

В целом, с вежливостью у ChatGPT всё хорошо, но вот количество ошибок, к сожалению, очень велико.

Почему она ошибается?

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

То же самое можно сказать и про автоматические алгоритмы фильтрации данных, которые не способны на 100% отличить правильную информацию от некорректной, особенно когда речь идёт о сложных или спорных темах. Редко ChatGPT может обратить внимание пользователя на противоречивость данных, чаще всего система предлагает либо наиболее вероятный, по её мнению, ответ на основе обучающих паттернов, либо предоставляет некий средневзвешенный вариант.

Природа ошибок ChatGPT при генерации кодов может быть разной, например синтаксической или логической. Часто нейросетевая модель выдаёт неполный или некорректный код, который на первый взгляд выглядит правильным.

Пример 1: написать функцию на JavaScript, которая возвращает массив уникальных значений из другого массива.

Сгенерированный код:

function getUnique(array) {
    return [...new Set(array)];
}

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

Пример 2: как реализовать алгоритм Дейкстры для нахождения кратчайшего пути в графе?

Сгенерированный код:

import heapq
def dijkstra(graph, start):
    queue = []
    heapq.heappush(queue, (0, start))
    distances = {node: float('infinity') for node in graph}
    distances[start] = 0

    while queue:
        current_distance, current_node = heapq.heappop(queue)

        if current_distance > distances[current_node]:
            continue

        for neighbor, weight in graph[current_node].items():
            distance = current_distance + weight
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(queue, (distance, neighbor))
    return distances

В этом случае ChatGPT представит базовую реализацию, но не учтёт все нюансы (например, отрицательные веса рёбер) и оптимизации. В результате программисту придётся дорабатывать полученный от нейросети ответ или писать код самостоятельно.

Что дальше?

Статистика показывает, что трафик на Stack Overflow значительно снизился с 2022 года — в основном из-за роста популярности таких ИИ-инструментов, как GitHub Copilot и ChatGPT. Согласно анализу, с января 2022 г. трафик на сайт уменьшался в среднем на 6% каждый месяц, а в марте 2023 г. снижение составило уже гораздо более серьёзные 13,9%. Причиной падения стало использование разработчиками удобных встраиваемых в редакторы кода помощников вроде Copilot и Google Bard.

В ответ на эту тенденцию Stack Overflow пытался интегрировать собственные ИИ-решения и в августе прошлого года представил OverflowAI. Этот продукт включает в себя плагин для Visual Studio Code, улучшенный поиск и интеграцию со Slack. Таким образом, Stack Overflow продолжает работать над адаптацией к новым условиям и интеграцией ИИ для улучшения опыта своих пользователей.

Но в случае с ИИ-помощниками разработчику нужно придерживаться давно известного правила — «доверяй, но проверяй». А с какими проблемами ИИ-ассистентов кодера сталкивались вы?

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


  1. Vollirik_M
    30.05.2024 15:38
    +3

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


    1. SetGet
      30.05.2024 15:38

      Я таким способом программу написал на тысячу строк с базовыми знаниями «Hello, world!» https://habr.com/ru/users/SetGet/publications/articles/


      1. Vollirik_M
        30.05.2024 15:38

        Обязательно прочитаю Ваш пост вечерком. У меня есть идея непростого пэт-проекта на Python с анализом xml, возможно и правда можно его реализовать с привлечение chatGPT.


  1. SadOcean
    30.05.2024 15:38
    +3

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


  1. buharof
    30.05.2024 15:38

    ясен хрен. любой чатЖПТ - это тупо база данных, набитая человеками. просто перебором выдает какой-то вариант.


    1. SetGet
      30.05.2024 15:38
      +1

      Не совсем


  1. amazingname
    30.05.2024 15:38
    +8

    Для программиста версия 3.5 не годится, а 4 и 4o прежде всего хороша для обучения.

    Например, я в первый раз в жизни хочу сформировать CI/CD pipeline.

    Есть вариант изучать документацию от сих до сих, это утомительно и если эта задача не основная, делается в конце дня, все становится слишком сложно.

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

    Наконец новый стиль - GPT-4. Для начала можно загрузить куски уже существующих в проекте ананлогичных пайплайнов и попросить GPT объяснить что в них зачем. С этим GPT справляется великолепно. Затем просим подсказать как записать отдельные команды для каких-то частных целей с объяснениями. Это проще чем нагуглить эти же команды. Потом появляются вопросы типа "а вообще зачем это" и "а почему не делают так..." и на эти вопросы обычно тоже у GPT есть неплохие ответы. Цель достигнута - что-то заработало, почти все понятно. Можно пробежаться документацию, примеры и оценить не упущено ли что-то с GPT. В итоге все получается в несколько раз быстрее с намного меньшей мозговой энергией чем с гуглом (как минимум, не нужно копаться в списках параметров, чтобы написать нужную команду).

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

    Если кратко, для программиста GPT хорош:

    • чтобы быстро сориентироваться в незнакомой технологии;

    • чтобы не копать долго мало-знакомый синтаксис.


    1. olku
      30.05.2024 15:38

      Может объяснять построчно и делать саммари. Можно заставить перепроверять выданные ответы, не соглашаясь с ними. Тогда либо Ой простите и другой по сути ответ, либо Ой простите и тот же ответ с синтаксическими коррекциями. Предел знаний выявляется через 3-4 такие итерации, ответы начинают зацикливаться.


  1. TimKady
    30.05.2024 15:38
    +1

    Вступлюсь в защиту ChatGPT-4. Имею статистику по написанию кода примерно 80-ю разработчиками. Политика компании — применять ChatGPT. Почему? Потому, что без нее производительность труда (скорость разработки по отлаженному коду) разрабов падает на 30–40%.

    По статистике с начала текущего года, ChatGPT ошибается от 10 до 30% запросов в зависимости от сложности задачи. Но из них не менее 50% связаны с неверным или некорректным промптом (люди ленятся точно и детально описывать задачу или структуру требуемых действий). То есть, в чистом виде ошибки составляют не более 15% ответов и вполне устранимы на этапе разработки (до тестирования)

    По мере освоения инструмента людьми показатель отказов также падает примерно на 10% от месяца к месяцу — люди просто осваиваются писать правильные запросы.


    1. ArtemiiZ
      30.05.2024 15:38
      +1

      +


    1. AndronNSK
      30.05.2024 15:38

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


    1. mst_72
      30.05.2024 15:38

      А можно спросить. каким образом меряли?
      Начиная со снижения производительности труда на 30-40%, заканчивая ошибкой в 10%-30%


      1. TimKady
        30.05.2024 15:38

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


    1. olku
      30.05.2024 15:38
      +1

      Аналогичную политику применили и у нас. Буст до 50% для мидлов и лидов на типовой код в 4о. По джунам не очевидно, они бывают плавают в понимании ответов и постановки задачи.


      1. TimKady
        30.05.2024 15:38

        О! Вот в самую точку! GPT даёт прирост только в том случае, если ты можешь принять и оценить ее ответ!

        +


  1. Devastor87
    30.05.2024 15:38
    +3

    По вопросам кодогенерации:

    1. Да, генерирует код и 4 и 3.5 с ошибками, скорость генерации и качества разная.

    2. Написал уже несколько проектов (с++, Python, c, Kotlin) с помощью gpt, некоторые даже целиком только сам чат писал код. Проекты рабочие, грамотно написанные (в аспекте кода и архитектуры) так что этой "игрушкой" уже можно пользоваться очень неплохо, если научиться.

    Ситуация усугубляется тем, что ChatGPT не в состоянии проверить код, который сам и создаёт.

    Вот в чём проблема внедрить механизм самопроверки кода?

    Даже я такой написать могу (если не напишет OpenAI, придётся самому, видимо)

    Куда больше мешает, имхо, проблемы со связью: из-за любых перебоев с инетом, особенно, когда надиктовываешь ИИ очень длинные сообщения голосом, примерно в 40-60% в самом конце "Sorry, unknown error" и всё заново. Когда буквально каждая вторую длинную команду (около минуты-двух в реальном времени голосом) приходится перенадиктовывать заново - это очень тормозит разработку и кушает нервы. Процент перенабора слишком высокий - вот если бы кто-то создал модуль для него, который кэширует данные, которые ты надиктовал (используя нативное приложение) было бы круто, но, видимо, и это придётся самому, либо ждать когда OpenAI решится, а ведь такой модуль написать тоже несложно.


  1. Zoolander
    30.05.2024 15:38
    +3

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

    Рекомендую TDD


  1. Ninil
    30.05.2024 15:38

    Насколько можно доверять ответам ChatGPT?

    Сама постановка вопроса нелепа для тех, кто понимает, что такое ChatGPT и как он работает)
    Для меня ожидания человека от ChatGPT и подобных "помощников", а так же "претензии к ним" являются маркерами технической подкованности/адекватности/эрудиции человека (или автора какой-либо статьи :-))


  1. shingelevich
    30.05.2024 15:38

    ChatGpt 4 и 4.0 уступают Claude.


  1. IvanSTV
    30.05.2024 15:38

    Из своего опыта - код, сгенерированный ЧатГПТ (про JS говорить не буду, этим баловался не очень долго, скажу про VBA), в основном работает, но оптимальность сильно хромает, во-первых, полагаю, так сеть научена на VBA в основном пишут любители, а любители оптимизировать его будут последними, пишут как могут. А во-вторых, есть подозрение, что ИИ где-то слизал логику макрорекордера, а потому код слабо от последнего отличается. Одним словом, ускорение процесса получается только для рутинных операций - скармливаешь кусок кода и просишь его переписать с другими параметрами, например, так писал код заполнения словаря или коллекции, а при необходимости повторить его просто просил написать заполнение с другими параметрами из другого места с другими типами данных, например. Вот так помогало сэкономить время. Иногда помогало что-то вспомнить забытое (например, в мелкософтовской справке многие методы не описаны толком, и неясно, как применять, а чатик выдает пример, и если задать вводную правильно, еще и с кодом, который требует минимальной правки.

    Одним словом - для того, чтобы это было в помощь, а не в обузу, надо неплохо в целом знать, о чем спрашиваешь. А когда знаний вообще ноль в предмете, то бредогенератор работает по полной. Как-то раз наткнулся на ошибку доступа при вызове JSом какого-то метода из Java. В тырнетике ничего толкового не нашел, спросил чатик, и понеслось - самый близкий к правде был, видимо, первый ответ, потому что потом то ли я не так спрашивал, то ли неправильно описал, но попытка отладить код, предложенный чатгпт с помощью чатгпт завела в тупик. Изложенная на StackOverflow история ошибки с публикацией переписки с ИИ привела к еще большему запутыванию ситуации, потому, полагаю, ни один спец мне там на это за два года так и не ответил.


  1. N-Cube
    30.05.2024 15:38
    +1

    В этом случае ChatGPT представит базовую реализацию, но не учтёт все нюансы (например, отрицательные веса рёбер) и оптимизации.

    Или авторы исследования не знают, о чем пишут, или перевод кривой. Когда авторы спрашивают нейросеть про алгоритм Дейкстры или а-стар, им следовало бы знать, что эти алгоритмы не работают для отрицательных весов, поэтому такое «исследование» бессмысленно. Теоретическая задача оптимизированного построения пути на графе с отрицательными весами ребер решена только год или два назад. В лучших популярных библиотеках типа networkx, реализовавших уйму оптимизаций из научных статей, отрицательные пути не поддерживаются, а в тех библиотеках где поддерживаются, не оптимизированы (потому что в стандартном алгоритме накапливаемые веса не убывающие, на чем и построена оптимизация, а при отрицательных весах сумма оказывается совершенно непредсказуемой). Что касается оптимизаций вообще, то все они основаны на определенных свойствах графов, и не применимы к произвольному случаю. К примеру, в графе детальной дорожной сети много циклов и мы можем свернуть последовательные узлы (соединенные только одним ребром) в один и многократно упростить задачу, но для графа магистральных дорог это только добавит лишнюю сложность.


  1. sepulkary
    30.05.2024 15:38
    +1

    как реализовать алгоритм Дейкстры для нахождения кратчайшего пути в графе?

    В этом случае ChatGPT представит базовую реализацию, но не учтёт все нюансы (например, отрицательные веса рёбер)

    Подобная придирка совсем уж не к месту — алгоритм Дейкстры и не рассчитан на отрицательные веса, с ними работает алгоритм Беллмана-Форда.


    1. N-Cube
      30.05.2024 15:38

      Алгоритм Беллмана-Форда не универсальный, потому что он не работает на графах с циклами. А это часто необходимо, к примеру, почтальону оптимальнее два раза по улице пройти (по двум сторонам), нежели бегать по диагонали через улицу между четными и нечетными домами. А если разрешить циклы по ребрам с отрицательными весами, алгоритм «разваливается», его нельзя адаптировать для этого случая. Глубока кроличья нора алгоритмов поиска пути :)


  1. zartarn
    30.05.2024 15:38

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

    даже на хабре год назад было про это https://habr.com/ru/news/753660/