08 February 2024

Генеративные алгоритмы, продолжаем наблюдение

Не все с этими новомодными AI алгоритмами так уж и плохо.
Я вот, к примеру, недавно пописал код на C# в Visual Studio 2022 и был приятно удивлен качеством подсказок, которые мне выдавались по ходу работы. Чаще всего они были тривиальными, из области каких-то общеизвестных алгоритмических вещей (типа поиска минимального или максимального значения). Да и объем анализируемого кода, исходя из которого можно было бы сгенерировать такого рода подсказу, обычно весьма скромный, на уровне класса из двух-трех десятков строк. И сами подсказки, как правило, ограничивается строго одной строкой. Но, тем не менее, работа в связке с такими вот полуавтоматическими подстановками кода это особый, весьма прикольный опыт. 

С другой стороны, надо понимать, что где-то в 10-15% случаев подсказки оказываются нерелевантными и это, на самом деле, большая проблема. Получается, что программист все равно должен напрягаться в полную силу и держать в голове корректный код. И вряд ли кто-то всерьез будет считать, что главное достоинство такого рода подсказок заключается в том, что ты просто набираешь чуть меньше букв -- производительность программиста редко когда упирается просто в скорость набора текста. 
Короче, из-за несовершенства алгоритма подсказок, получается ситуация точно как с автопилотом в электрокарах Tesla. Он вроде как есть, но доверять ему нельзя и нужно все время следить за тем, что он делает и за ситуацией на дороге. Потому что иногда он ошибается и такого рода ошибки могут стоит жизни пассажирам авто. При написании кода ставки, безусловно, не столь высоки, но уверен, что активно пользующиеся такого рода фичами, могут рассказать о случаях, когда машинально принятая подсказка приводила потом к потерянному времени в отладчике и тщетным попыткам найти непонятно откуда взявшийся баг в совершенно банальном коде.  


***

И если мой опыт с AI в Visual Studio это скорее позитивная история, то вот общение с ChatGPT это бесконечная череда разочарований. 

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

Вот список проблем:

  • потеря контекста в самых простых и однозначных диалогах. Машина внезапно "забывает" то, о чем вы общались буквально одно-два предложения назад и начинает выдавать совершенно нерелевантные ответы, без учета очевидных, подразумевающихся из контекста, факторов. Например, с самого начала код просили писать на C++, а через пару промптов выдача почему-то начинается на другом языке программирования.  
  • выдача абсолютно общих, бессодержательных ответов на конкретно сформулированные запросы. 
  • выдача откровенной лжи и некорректной информации (т.н. эффект галлюцинаций). Иногда речь идет о совершенно базовых и общеизвестных вещах, сведения о которых находятся в Википедии за пару секунд. 
  • работа в режиме безграничного доверия и потакания клиенту: исходные запросы и утверждения имеют какие-то сверхприоритеты в системе, поэтому их содержание очень часто перекрывает истинное положение вещей. Если в запросе попросили перечислить виды слонов, обитающих в Латинской Америке, то AI кинется их перечислять, а не поставит под сомнение изначальную корректность этой просьбы.  Если человек скажет, что написанный выше (абсолютно корректный) код не компилируется, то AI готов до бесконечности искать, находить и "исправлять" несуществующие ошибки. 

Несколько иллюстраций. 

Вот, к примеру, мой запрос о сравнении работы SIP протокола поверх TCP и поверх WebSocket. 
Абсолютно некорректная (и просто бредования) выдача:

Кто не в курсе, WebSocket это надстройка поверх TCP, т.е. быть более эффективной и легковесной она просто не может быть по определению.  

Так же ужасно обстоят дела с "написанием" кода. Однажды попросил написать сохранение скриншота окна в BMP файл под Windows. Сразу получил достаточно правдоподобный код, который скомпилировался и даже сохранял BMP файл при работе. Только файл был некорректного формата и не открывался ни одной программой. После нескольких безуспешных итераций в попытках исправить код (во время которых мне на руки стали выдаваться версии, которые уже просто не компилировались), AI предложил кардинально сменить стратегию и начать использовать для работы с BMP изображением какой-то там специализированный COM класс, который тянет внешние зависимости. На выходе получился принципиально новый код, который, разумеется, тоже корректно не работал. И не заработал даже после того, как я намекнул AI, что нужно все-таки не забывать вызывать CoInitialize (кстати, код имел кучу точек отказа и ноль строчек для их диагностики и обработки). После ряда безуспешных попыток на свет родилась еще одна, принципиально новая, версия с использованием GDI+. Точно такая же неработающая. 

По итогу, потеряв полчаса, я пошел гуглить и через 10 секунд нашел идеально работающую версию необходимого кода на StackOverflow (на 99% совпадающую с примером из MSDN).  
Даже не знаю, что тут еще комментировать... Кстати, а как там обстоят дела с запретом на использование AI для написание ответов на SO? Он все еще действует?  

Мне вообще повезло, потому что все закончилось относительно быстро, но вообще в жизни случаются куда как более веселые истории. Вот тут рассказ о том, как человек попросил ChatGPT сгенерировать ему LUT обработку данных для Python. Буквально 10 строчек кода, с которыми человек потом сношался несколько часов. Знаете почему? Потому что AI при вызове функции рисования графика почему-то переставил координаты x и y местами. Ошибка, с которой можно бороться очень, очень долго даже в таком маленьком объеме кода...  

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