Актуальные темы
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Перевод: Почему большие языковые модели не могут по-настоящему создавать программное обеспечение
Автор: Конрад Ирвин
Я потратил много времени на интервьюирование программистов. Это, безусловно, сложная задача, и я не могу сказать, что у меня есть какой-то секрет; но этот опыт действительно дал мне время поразмышлять о том, что на самом деле делает эффективный программист.
Основной цикл программной инженерии
Когда вы наблюдаете за настоящим мастером, вы заметите, что они постоянно выполняют следующие шаги в цикле:
* Создание психической модели требований.
* Написание (надеюсь?!) кода, который реализует требования.
* Создание психической модели фактического поведения кода.
* Выявление различий между двумя моделями и обновление кода (или требований).
Существует множество способов выполнения этих шагов, но выдающаяся черта эффективных инженеров заключается в том, что они могут создавать и поддерживать четкие психические модели.
Как обстоят дела с большими языковыми моделями?
Честно говоря, большие языковые модели довольно хорошо справляются с написанием кода. Когда вы указываете на проблему, они также неплохо обновляют код. Они могут делать все, что может делать настоящий инженер: читать код, писать и запускать тесты, добавлять логи и (возможно) использовать отладчик.
Но они не могут поддерживать четкие психические модели.
Большие языковые модели попадают в бесконечную путаницу: они предполагают, что написанный ими код действительно работает; когда тесты терпят неудачу, они могут только догадываться, нужно ли исправлять код или тест; когда они чувствуют себя разочарованными, они просто удаляют все и начинают заново.
Это прямо противоположно тому, что я ожидаю от инженера.
Программисты работают и тестируют одновременно. Когда тесты терпят неудачу, они могут сверять свои психические модели, чтобы решить, нужно ли исправлять код или тест, или собрать больше информации перед принятием решения. Когда они чувствуют себя разочарованными, они могут обратиться за помощью к другим. Хотя иногда они тоже могут удалить все и начать заново, это происходит только после того, как они лучше понимают проблему.
Но это быстро решается, верно?
С увеличением возможностей моделей, изменится ли это? Возможно?? Но я думаю, что это требует коренных изменений в том, как модели строятся и оптимизируются. Модели, необходимые для программной инженерии, не могут быть просто способными генерировать код.
Когда человек сталкивается с проблемой, он может временно отложить весь контекст, сосредоточиться на решении текущей проблемы, а затем вернуться к своим предыдущим мыслям и вернуться к большой проблеме. Они также могут свободно переключаться между макро- и микро-уровнями, временно игнорируя детали, чтобы сосредоточиться на общем, и углубляться в детали, когда это необходимо. Мы не станем более эффективными просто потому, что заполним свое "контекстное окно" большим количеством слов; это только сведет нас с ума.
Даже если мы можем обрабатывать огромные объемы контекста, мы знаем, что у текущих генеративных моделей есть несколько серьезных проблем, которые напрямую влияют на их способность поддерживать четкие психические модели:
* Пропуск контекста: модели не умеют выявлять упущенную контекстную информацию.
* Предвзятость новизны: они подвержены серьезной предвзятости новизны при обработке контекстного окна.
* Галлюцинации: они часто "фантазируют" детали, которые не должны существовать.
Эти проблемы, возможно, не являются непреодолимыми, и исследователи работают над тем, чтобы добавить памяти в модели, чтобы они могли использовать аналогичные мыслительные приемы, как мы. Но, к сожалению, на данный момент они (после определенной сложности) фактически не могут понять, что происходит.
Они не могут создавать программное обеспечение, потому что не могут одновременно поддерживать две похожие "психические модели", выявлять различия между ними и решать, нужно ли обновлять код или требования.
Так что же теперь делать?
Очевидно, что большие языковые модели полезны для программистов. Они могут быстро генерировать код и отлично справляются с интеграцией требований и документации. Для некоторых задач этого уже достаточно: требования достаточно ясны, проблема достаточно проста, и они могут решить ее сразу.
Тем не менее, для любой задачи с некоторой сложностью они не могут достаточно точно поддерживать достаточный контекст, чтобы в конечном итоге через итерации выдать жизнеспособное решение. Вы, как программист, все равно должны быть ответственны за то, чтобы требования были ясными и чтобы код действительно выполнял заявленные функции.
В Zed мы верим, что в будущем люди и ИИ могут совместно создавать программное обеспечение. Однако мы твердо уверены (по крайней мере, на данный момент), что вы являетесь водителем, управляющим рулем, а большие языковые модели — это просто еще один инструмент, который у вас под рукой.
48,63K
Топ
Рейтинг
Избранное