Может ли искусственный интеллект (ИИ) превзойти программиста-человека при написании кода? Спустя ряд экспериментов становится понятно, что ответ на этот вопрос – уверенное да!

Эволюция программистов
Эволюция программистов

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

Вначале для поднятия настроения вот вам «вредный совет» программистам от LLM (оказывается она не только пишет код, но и обладает своеобразным чувством юмора):

Никогда не изучайте новые языки программирования; в конце концов, вы уже и так знаете достаточно, чтобы хоть как-то писать свой обычный код — так что твердо придерживайтесь привычного и не тратьте время на изучение чего-то нового!

Какой будет эксперимент?

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

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

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

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

Как будем проводить эксперимент?

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

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

Сам эксперимент я разбил на два этапа.

Первый этап - это получение полнофункционального кода и пользовательского интерфейса.
Второй этап - это доведение кода до кондиции и получении рабочей игры.

Какие исходные условия эксперимента?

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

Инструкции я буду давать на русском языке.

Игра будет создана с нуля, так чтобы модель по возможности ничего не знала и ней.
В качестве языка будет выбран не самый подходящий для этого C#.
В качестве модели я буду использовать специально обученную для кодинга на 80 языках квантованную Codestral-22B-v0.1-Q4_K_M (Про оригинальную модель можно узнать на сайте разработчиков https://mistral.ai/news/codestral/).

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

Я буду создавать довольно известную в народе игру "Шарики", Lenes (Color Lines), которая является непростой в реализации как в логическом, так и в графическом смысле. Предварительно я убедился, что модель о ней ничего не знает.

Начинаем первый этап

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

Итак, можно начинать сам эксперимент.

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

Напишите код Windows forms на c# с учетом игровой логики и специфических функциональных возможностей для игры в lines. Суть игры в следующем.
На игровом поле 10 на 10 клеток в случайной клетке появляется шарик одного из 5 случайных цветов. Игрок мышкой выбирает любой шарик в поле и указывает свободную клетку, куда этот шарик нужно передвинуть и шарик плавно передвигается в эту клетку. Затем в случайной свободной клетке опять появляется другой шарик одного из случайных 5 цветов и таким образом игра продолжается. Задача игрока в том, чтобы из 5 или более шариков одного цвета собрать непрерывную линию по вертикали или по горизонтали или по диагонали. В этом случае все эти 5 шариков исчезают. Игра заканчивается, когда все клеточки заполнены шариками. Новый шарик может появиться только на свободной клеточке.

Ответ Модели.
Here is a simple implementation of the game's logic in C# Windows Forms. This version doesn't include any animations; the movement of balls is instant.

Далее код и комментарии.
Note: To run this code, you need to have a Windows Forms project in your C# environment and replace the contents of the Form1.cs file with this code. This is just a simple text-based representation of the game and does not include any graphics or animations. For a more complete implementation, you may want to consider using a graphics library like Unity or XNA for the visual representation of the game.

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

Измени функцию Grid_MouseClick так, чтобы оба действия и выбор шарика и указание клеточки для его перемещения производились только нажатием MouseButtons.Left

Ответ Модели.
Here's how you can modify the `Grid_MouseClick` function to handle both selecting a ball and specifying a destination for it solely through left clicks:

Далее код и комментарии.
In this version, clicking on a ball will first select it if no ball is currently selected. Clicking on another ball will change the selection to that ball. If we then click on an empty cell, the previously selected ball will move to the new cell. This only works if there are two distinct clicks - one on a ball and one on an empty cell - in between.

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

Измени код так, чтобы выбранный шарик сохранял свой цвет, но отличался от не выбранных шариков.

Ответ Модели.
You can modify the `Grid_MouseClick` function to change the color of the selected ball when it's clicked, and revert its color back to normal when it's deselected:
First, you need to introduce a new variable to keep track of the original color of the selected ball:

Далее код и комментарии.
Then, adjust your `Grid_MouseClick` method like so:

Далее код и комментарии.
In this version, clicking on a ball will change its color to the contrast color (which is calculated by the `GetContrastColor` function), and if you click on another ball, the first one will revert back to its original color. Then, you can move the selected ball to an empty cell.
Note: You should also add a `GetContrastColor` function that takes a `Color` as input and returns either black or white based on the perceived brightness of the input color.

Модель забыла сама определить функцию GetContrastColor, поэтому просим ее написать.

Напиши функцию GetContrastColor

Ответ Модели.
Here's a simple implementation of the `GetContrastColor` function in C#:

Далее код и комментарии.
This function calculates the perceived brightness of a color using the RGB values and the formula for luminance (also known as relative luminance). If the brightness is greater than 128 (out of 255), it returns black; otherwise, it returns white. This provides a simple way to choose a contrasting color for any given color.

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

Измени функцию GetContrastColor так, чтобы цвет шарика при его выборе не менялся, а яркость плавно циклически изменялась по синусоиде с помощью таймера

Ответ Модели.
To create this effect, you could use a `Timer` object to change the brightness of the selected ball at regular intervals. Here's an example of how to do this:
First, add a `Timer` field to your form:

Далее код и комментарии.
Then, in your constructor, initialize the timer and subscribe to its `Tick` event:

Далее еще код и комментарии.
Next, modify your `Grid_MouseClick` method to start the timer when a ball is selected and stop it when it's deselected:

Далее еще код и комментарии.
Finally, implement your `Timer_Tick` event handler. This should change the color of the selected ball based on a sinusoidal brightness value:

Далее еще код и комментарии.
In this version, the `time` variable accumulates over time, and the brightness is calculated as a function of this variable using a sinusoidal waveform that cycles between 0 and 1. The resulting brightness value is then used to calculate a new grayscale color for the selected ball.

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

Преобразуй внешний вид шариков из квадратной формы в круглую.

Ответ Модели.
To make the balls circular instead of square, you can set their `Region` property to an instance of the `System.Drawing.Drawing2D.GraphicsPath` class with an ellipse shape. Here's how to modify your code to achieve this:
First, add the following `using` directive at the top of your file:

Далее код и комментарии.
Then, in your constructor, create a new `GraphicsPath` object with an ellipse shape and set it as the `Region` of each `PictureBox`:

Далее код и комментарии.
In this version, a new `GraphicsPath` object is created for each `PictureBox`, and an ellipse is added to its path that fits within the bounds of the `PictureBox`. This ellipse is then used to define the region of the `PictureBox`, which determines which pixels are considered part of the control and which are transparent. This makes the balls circular instead of square.

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

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

Ответ Модели.
To add a new game button, a label to display the number of removed lines, and improve the appearance of the panel, button, and label, you can use the following code:
First, add the following fields to your form:

Далее код и комментарии.
Then, in your constructor, create and initialize these controls, and set their properties as desired:

Далее код и комментарии.
In this version, a new `Button` and `Label` are created, and their properties are set to display the desired text and appearance. The button's `Click` event is also handled by the `NewGameButton_Click` method, which you can implement to start a new game.

Далее код и комментарии.
To update the number of removed lines, you can modify your `RemoveLine` method as follows:
In this version, the `linesRemoved` field is incremented each time a line is removed, and the label's text is updated to reflect the new value.

Модель забыла определить функцию NewGameButton_Click, напоминаем ей об этом.

Напиши функцию NewGameButton_Click.

Ответ Модели.
Here's an example implementation of the `NewGameButton_Click` function:

Далее код и комментарии.
In this version, the `NewGameButton_Click` function clears the grid by setting the background color of each `PictureBox` to white, resets the `linesRemoved` field and the label's text, and then fills the grid with new balls using the `AddNewBall` method.

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

Что можно сказать о качестве кода? Он чистый, откомментированный, хорошо структурированный и главное безошибочный.

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

Переходим ко второму этапу

В принципе, уже и так все более-менее понятно, Эксперимент окрыляет и мы явно на пути к успеху, но хочется достичь совершенства, поэтому переходим ко второму этапу эксперимента. Переходим из несостоявшихся мазохистов в клуб перфекционистов.
Начинаем новую сессию общения с моделью новым промптом.

Ниже представлен код Windows forms на c# с учетом игровой логики и специфических функциональных возможностей для игры в lines. Суть игры в следующем.

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

Далее весь рабочий код из нашего проекта в VS.
И новая инструкция.

Измени код так, чтобы у выбранного шарика изменялся не только цвет, а еще и размер.

Ответ Модели.
Sure, I can help you modify the code to change both the color and size of the selected ball. Here's how you could do it:
First, we need to add a new variable to keep track of the initial size of the ball. We will use this value to calculate the new size during the animation. Let's add it in the `Form1` class:

Далее код и комментарии.
Then, when selecting a ball, store its initial size:

Далее код и комментарии.
Now let's modify the `Timer_Tick` function to also change the size of the ball:

Далее код и комментарии.
This should make the selected ball expand and shrink in size while changing its color. You may need to adjust the calculation of the new size to get the exact effect you want.

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

Замени изменение размера выбранного шарика Size на изменение размера AddEllipse.

Ответ Модели.
Sure, I can help you with that. Instead of changing the `Size` property of the `PictureBox`, we will change the size of the ellipse used to draw the ball. This requires us to create a new `GraphicsPath` with each tick of the timer. Here's how you can modify the code:
Instead of storing the initial size of the ball, let's store the initial radius of the ellipse:

Далее код и комментарии.
Then, when selecting a ball, store its initial radius:

Далее код и комментарии.
Now let's modify the `Timer_Tick` function to also change the size of the ellipse:

Далее код и комментарии.
This should make the selected ball expand and shrink in size while changing its color. Note that we're assuming that the width and height of the `PictureBox` are always equal to maintain a circular shape. If they can be different, you would need to store and calculate with both initial width and height instead of just the radius.

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

Шарики работают
Шарики работают

Финальная и самая сложная доработка

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

Пока что наш выбранный шарик просто перескакивает в указанную клеточку без каких-либо ограничений и это надо исправить.

Пишем самый сложный промпт.

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

Ответ Модели.
Sure, I can help you modify the code to move the selected ball to the target cell smoothly and sequentially, moving one step at a time towards the target cell without intersecting any other balls on the field. Here's how you could do it:
Firstly, we need a way to calculate the shortest path from the current position of the selected ball to the target cell, taking into account the positions of all other balls on the field. This is a complex problem known as pathfinding, and there are many algorithms to solve it. For simplicity, let's use A* (A-Star) algorithm for this task.
We need to add a new method `FindShortestPath` to the `Form1` class that takes the starting point and the ending point of the path as parameters and returns an array of points representing the shortest path:

Далее код и комментарии.
Then, when clicking on a target cell, if the clicked cell is not empty, we don't select or move any ball. Otherwise, we calculate the shortest path from the current position of the selected ball to the target cell. If the shortest path exists, we start moving the selected ball along this path, one step at a time.
Here's how you may modify the `Grid_MouseClick` method to handle this:

Далее код и комментарии.
Now let's add a new method `MoveAlongPath` that takes an array of points representing the path as a parameter and moves the selected ball along this path, one step at a time:

Далее код и комментарии.
This should move the selected ball along the shortest path to the target cell smoothly and sequentially, one step at a time without intersecting any other balls on the field. You may need to adjust the speed and number of steps of the movement to get the exact effect you want.

Модель определила основную функцию FindShortestPath без содержания, но с комментариями.
// Calculate the shortest path using A* algorithm.
// This function should return a list of points representing the shortest path.
// The implementation of this function is beyond the scope of this response.
// You can find many implementations of A* algorithm online.

Поэтому заставим ее написать эту функцию.

Напиши функцию FindShortestPath.

Ответ Модели.
Sure, I can help you write a function to find the shortest path between two points in the game grid using A* algorithm. Here's a simple implementation of the `FindShortestPath` function:

Далее код и комментарии.
This function uses a `Node` class that represents a position in the game grid with its G cost, H cost, and parent node:

Далее код и комментарии.
The function also uses a `PriorityQueue` class to store nodes in the open set with their priority based on their F cost:

Далее код и комментарии.
The `GetNeighbors` function returns a list of valid neighboring positions of the given position:

Далее код и комментарии.
The `Heuristic` function calculates the H cost (estimated distance to the destination) using Manhattan distance:

Далее код и комментарии.
Finally, the `ReconstructPath` function reconstructs the path from the destination node to the starting node:

Далее еще порция кода.

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

Напиши функцию Heuristic.

Ответ Модели.
Sure, I can help you write a function for the heuristic calculation in the A* algorithm. The heuristic function estimates the cost to reach the destination from a given position on the game grid. A common choice for this is the Manhattan distance, which calculates the sum of the absolute differences between the x and y coordinates of two points. Here's a simple implementation of the `Heuristic` function:

Далее код и комментарии.
This function takes two `Point` objects as input, representing the starting point and the ending point, and returns an integer value that represents the estimated cost to reach the destination from the starting point using Manhattan distance

Напиши функцию ReconstructPath.

Ответ Модели.
Sure, I can help you write a function to reconstruct the path from the destination node to the starting node in the A* algorithm. This function backtracks from the destination node to the starting node by following the parent nodes of each node in the path. Here's a simple implementation of the `ReconstructPath` function:

Далее код и комментарии.
This function takes a `Node` object as input, representing the destination node, and returns a list of `Point` objects that represent the positions of the nodes in the shortest path from the starting node to the destination node. The function starts at the destination node and adds its position to the path. Then it moves to the parent node of the current node and repeats this process until it reaches the starting node. Finally, the function reverses the path so that it goes from the starting node to the destination node.

Напиши функцию GetNeighbors.

Ответ Модели.
Sure, I can help you write a function to get the valid neighboring positions of a given position on the game grid. This function checks if a neighboring position is within the bounds of the game grid and if it's not occupied by another ball. Here's a simple implementation of the `GetNeighbors` function:

Далее код и комментарии.
This function takes a `Point` object as input, representing the current position, and returns a list of `Point` objects that represent the valid neighboring positions of the current position. The function loops through four possible directions (up, down, left, right) and checks if each neighboring position is within the bounds of the game grid and if it's not occupied by another ball. If a neighboring position is valid, it's added to the list of neighbors. Finally, the function returns the list of neighbors.

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

Модель справилась на отлично и в конце второго этапа получилась вполне добротная игра.

Выводы из всего этого чудесного безобразия

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

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

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

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

Итак, поскольку мы, как выясняется, уже стоим на пороге новой эры технологий, давайте примем это будущее сознательно и с распростертыми объятиями, а не пугливо прячась в таком привычном, закостенелом консерватизме уютных старых парадигм. Используйте имеющиеся уже сейчас LLM и все другие инструменты искусственного интеллекта, которые обязательно последуют в будущем по их стопам. Давайте овладевать ими, чтобы улучшить свои творческие и конструкторские навыки, быстрее и лучше решать задачи и проблемы уже на новом уровне. В конце концов, разве не в этом суть новых технологий?

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

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


  1. Coob
    22.06.2024 10:01
    +28

    >2 дня, 672 строки кода

    >Новая парадигма более эффективна

    Немножко не сходится.

    LLM - инструмент прикольный, но я б не рискнул использовать сгенеренный код где-либо, кроме прототипов


    1. Keep_lookout Автор
      22.06.2024 10:01
      +3

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


      1. GoDevSeoTaxi
        22.06.2024 10:01
        +2

        Можете подсказать промт?

        Я решил проверить chatGPT 4o и claude 3.5

        Взял несколько hard задачек на лид коде, и не всегда модели выдавали верный (рабочий) код.

        Потом ручными попытками указать на ошибки - код становился исполняемым, но далеко не все задачи удалось довести до решения (чтобы LLM выдала полностью решающий задачу код)


        1. AcckiyGerman
          22.06.2024 10:01
          +4

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


      1. Hint
        22.06.2024 10:01
        +8

        Я пытался сделать аналогичное с ChatGPT 4 с официального сайта несколько месяцев назад. Запутанный код строчек на 50, одна функция. Результат не должен был измениться для тех же входных данных. Промучался около часа, но правильный код так и не получил (и на каждой итерации довольно сложно было понять, есть ли в новом коде ошибки). То одно работает не так, то другое после очередного исправления. Плюнул, переписал сам.


      1. Siddthartha
        22.06.2024 10:01

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


        1. Wesha
          22.06.2024 10:01

          Осталось самая мелочь — понять, а правильно ли оно работает.

          Понимать чужой код всегда на порядок труднее, чем свой. Просто потому что я знаю, с какой целью я написал каждую его строчку и что ею достигается.


          1. Dolios
            22.06.2024 10:01

            <sarcasm>
            А тестеры на что? Они пускай проверяют!
            </sarcasm>


  1. ALapinskas
    22.06.2024 10:01
    +51

    Код к такой максимально типовой программе намного проще найти на просторах сети: Запрос на гите https://github.com/search?q=lines+game&type=repositories выдает почти 2 тысячи репозиториев, фильтрует по c#, получаем 162. Немного полистаем, https://github.com/Altav1sta/Lines

    Очень похоже на предствленную игру в статье (может это она и есть?). У меня ушло 10 минут на ее поиск. У специалиста по C# уйдет еще 10 минут чтобы подправить цвета. Итого 20 минут.


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. Alexsey
        22.06.2024 10:01
        +47

        Не отменяет того что LLM модель "создала" это на основе уже существующего кода на гитхабе. LLM модель не может корректно "создать" большую часть задач если чего-то крайне похожего нет в ее датасете.


        1. Keep_lookout Автор
          22.06.2024 10:01

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


          1. BlackMokona
            22.06.2024 10:01
            +14

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


          1. Steparist
            22.06.2024 10:01
            +1

            Это похоже уже на ответ самой модели


        1. ArtursBirzgals
          22.06.2024 10:01
          +1

          Неправда. Модель может создать поограмму которой небыло в обучающем датасете. Программа состоит из множества кусочков, и модель знает эти кусочки, и очень классно ими играет. Что-то вроде Дайте мне самые обычные кирпичи, я сложу самый уникальный на свете дом.

          Уникальность даёт промпт от пользователя ллм.


          1. Alexsey
            22.06.2024 10:01
            +36

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

            Я, возможно, смогу ее вывести сотнями промптов на нужное решение какой-то изолированной части задачи используя мои собственные знания и потратив x2 времени, но тут возникает нюанс - а зачем мне нейросеть тогда? И, что самое главное, как она поможет человеку без моих знаний, которые я использовал чтобы вывести ее на нужное решение?

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


            1. icanall1010
              22.06.2024 10:01
              +8

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

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


              1. ReadOnlySadUser
                22.06.2024 10:01
                +4

                Да гспди, я не могу заставить ChatGPT сгенерировать рабочий кусок кода на 100 строчек содержащий вызовы OpenSSL. А вы про полноценное решение задач...

                А ведь OpenSSL - он вообще везде. Тысячи проектов. Но нет, эта гениальная нейросеть не может сгенерировать код для поточного формирования CMS SignedData не перемешав функции из разных версий этой библиотеки) Не может даже корректно параметры передать! Даже с десятками уточнений, мне не удалось заставить её решить такую тупую задачу)

                Модель GPT-4o


                1. icanall1010
                  22.06.2024 10:01

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


                  1. nikitka_rr
                    22.06.2024 10:01
                    +1

                    А у модели есть возможность интерпретировать результат, даже если будет возможность запустить код и получить результат?

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

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


                    1. icanall1010
                      22.06.2024 10:01

                      а почему нет? модель вполне "понимает" что от нее требуется. нужно просто повторять цикл "while ( результат запуска не соответствует задаче?) { пишем/правим код, запуск }

                      оценивать себя она будет сама. еще можно сделать возможность оценки результата с разных точек зрения, т.е модель сама спрашивает у себя заранее заготовленный список вопросов в каждом цикле "результат формально соотствует задаче?", "результат соответствует задаче с учет бизнес-процессов?" и тп, список вопросов можно подобрать. + ей нужна система связи с менеджером, чтобы она могла задать уточняющий вопрос по задаче, если при оценке выполнения задачи какие-то уровни превышены или занижены, например цифра ниже 2 по 10 бальной шкале при ответе на какой-то вопрос, и тп. добавить к этому еще какую-то систему обратной связи от заказчика/менеджера, типа как оценка ресторану после выполения заказа с возможностью написать отзыв, чтобы после выполннения всех задач система могла запомнить, как она справилась и в дальнейщем учитывать это, думаю результаты будут хорошие.


                1. IgorAlentyev
                  22.06.2024 10:01

                  Это ваш skill issue. Bullshit in, bullshit out.


                  1. ReadOnlySadUser
                    22.06.2024 10:01
                    +7

                    Допустим. Тем не менее, предполагается, что я стану не нужен, а LLM будет генерить код по описанию человека, у которого нет моих знаний, т.к. skill issue только усугубится)


                    1. IgorAlentyev
                      22.06.2024 10:01

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

                      Грубо говоря так -

                      Чел с ИИ >>> ИИ > чел без ИИ


            1. Advisers
              22.06.2024 10:01

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

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


              1. Advisers
                22.06.2024 10:01

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


      1. Arlekcangp
        22.06.2024 10:01
        +15

        Все, что описано в статье - это действительно создано моделью. 

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

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


        1. Keep_lookout Автор
          22.06.2024 10:01

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


          1. RichardMerlock
            22.06.2024 10:01
            +3

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


  1. titan_pc
    22.06.2024 10:01
    +34

    А да, точно задача программиста код писать - да. Наверное самая "сложная часть" нашей профессии да...

    Сижу вот на работе и думаю каждый день. Какой бы мне код написать, как бы вот блин пальцы на клавиатуру положить то. И боюсь вот, LLM ща как накодит круче и быстрее


    1. icanall1010
      22.06.2024 10:01

      думаете с другими аспектами вашей работы нейронки не справятся?


      1. titan_pc
        22.06.2024 10:01
        +7

        Беру значит паяльную станцию. Сажаю cortex на плату. О великий llm помоги мне. Замени меня


        1. icanall1010
          22.06.2024 10:01
          +7

          программист берет паяльную станцию...


          1. PrinceKorwin
            22.06.2024 10:01
            +1

            Программист_паяльник_жало.jpg


            1. Femistoklov
              22.06.2024 10:01

              Обман! Нет такой картинки.


              1. DizzyJump
                22.06.2024 10:01

                Чат.жпг создай такую картинку!


      1. cat-chi
        22.06.2024 10:01
        +6

        Думаем, что вот уже на протяжении десятков лет разные люди всё пытаются и пытаются оптимизировать написание кода. Не работу программиста, а именно написание кода. Чем концептуально появление "кодящих" LLM отличается от... ну не знаю, изобретения Python? Да ничем. Это всё ещё просто инструмент, оптимизирующий самую скучную и рутинную часть нашей работы.

        Что до "других аспектов" – а мы не знаем, справятся или нет. За все десятилетия развития программирования никто ДАЖЕ НЕ ПЫТАЛСЯ с ними что-то сделать. Что изменит появление нейронок, которые пока что не сделали НИ ШАГУ в этом направлении?

        Вот когда будут какие-то подвижки в этом направлении – тогда и поговорим.

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


        1. icanall1010
          22.06.2024 10:01

          тем, что заказчик/менеджер сможет объяснить задачу ему, а не вам. пока что это и правда инструмент, но потенциал явно выходит за пределы "просто инструмента"


          1. microuser
            22.06.2024 10:01
            +1

            И что заказчик будет делать с полученным кодом?


            1. icanall1010
              22.06.2024 10:01

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


              1. k4ir05
                22.06.2024 10:01
                +1

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


                1. icanall1010
                  22.06.2024 10:01

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


                  1. k4ir05
                    22.06.2024 10:01

                    Так тут вопрос не в точности, а в контроле. И потеря контроля, по-моему, относится к недопустимым издержкам.


                    1. icanall1010
                      22.06.2024 10:01

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


              1. microuser
                22.06.2024 10:01

                Ну когда нибудь так и будет, но llm к этому отношения скорее всего иметь не будет.

                В любом случае все это фантазии без конкретных дат, когда это произойдет, через год, два, 10, 100, 1000?


                1. icanall1010
                  22.06.2024 10:01

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


                  1. microuser
                    22.06.2024 10:01

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


                    1. icanall1010
                      22.06.2024 10:01

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


                      1. microuser
                        22.06.2024 10:01

                        В акциях завязанных на ии уже в стоимость заложены хайп и ожидания


                  1. Wesha
                    22.06.2024 10:01

                    мне кажется

                    Как говорила моя бабушка, "когда кажется — креститься надо"...


          1. Dolios
            22.06.2024 10:01
            +6

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

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


            1. icanall1010
              22.06.2024 10:01

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


              1. Dolios
                22.06.2024 10:01

                Это так не работает. У вас получилась классическая логическая ошибка idem per idem.


                1. icanall1010
                  22.06.2024 10:01

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


        1. Wesha
          22.06.2024 10:01
          +2

          Чем концептуально появление "кодящих" LLM отличается от... ну не знаю, изобретения Python?

          Вот и я то же самое писал:

          ...давным-давно, когда компьютеры были большими, разработчик набирал переключателями на пульте двоичный код, который потом исполнялся процессором. Потом программист стал писать человекочитаемыми буковками код низкого уровня (на ассемблере), который транслировался в машинный код, который исполнялся процессором. Потом разработчик стал писать код на языке высокого уровня (скажем, C — кстати, у сишных ++ и -- ноги растут из DEC-овских операций с авто{ин|де}крементом), который транслировался в код низкого уровня, который транслировался в машинный код, который исполнялся процессором. Теперь разработчик нового уровня будет писать очень-очень подробное и детальное техническое задание, не допускающее двояких толкований, которое транслируется в код на языке высокого уровня, который транслируется в код низкого уровня, который транслируется в машинный код, который исполняется процессором...


          1. icanall1010
            22.06.2024 10:01
            +1

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


            1. Wesha
              22.06.2024 10:01

              лежит на диване и жмет одну единственную кнопку "сделать хорошо".

              Есть такая кнопка...


              1. gaba_m
                22.06.2024 10:01
                +7

                Почему-то ожидал реферальную ссылку на хомяка.


                1. Wesha
                  22.06.2024 10:01

                  Я что, настолько похож на идиота?


                  1. LuckyStarr
                    22.06.2024 10:01
                    +2

                    Да.


                    1. Wesha
                      22.06.2024 10:01
                      +1

                      Так и запишем: маскировка работает.


        1. AndronNSK
          22.06.2024 10:01
          +2

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

          А когда в модель - то ой. :)

          Но в общем, всё так, да. Очередная упрощалка, типа intellisense.


          1. icanall1010
            22.06.2024 10:01

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


            1. AndronNSK
              22.06.2024 10:01
              +3

              Заменой человеку нейронку никто и никогда не позиционированил, кроме журналюг и им сочувствующих.


              1. icanall1010
                22.06.2024 10:01

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


          1. Lilongue
            22.06.2024 10:01

            Хмм. Но когда вы используете модель, то тоже получаете детерминированный результат. То что он отличается от нажатия к нажатию - подстановка разных seed под капотом. Зафиксируйте seed и будете на один и тот же промпт получать одинаковый результат.


            1. k4ir05
              22.06.2024 10:01

              А в новой версии модели результат будет таким же?


  1. PsihXMak
    22.06.2024 10:01
    +3

    Хмм, а если немного усложнить задачу. Попросить написать 3d рендер на SDL и простую обработку физики. Интересно попробовать продолжать углубляться в 3d рендер и выяснить, на каком этапе она начнёт спотыкаться.


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. ArtursBirzgals
        22.06.2024 10:01

        Совершенно согласен. И 3D рендер она сделает, и физику тоже. Надо будет несколько раз начинать новый чат, чтобы старый контекст не путался, правильно скармливать ей текущий код проекта, и давать грамотно задачи. Естественно надо полностью понимать что она пишет, и вовремя поправлять, или возвращаться на шаг назад.


        1. VVizard
          22.06.2024 10:01
          +10

          Как то на сказку про кашу из топора смахивает.


        1. Fenzales
          22.06.2024 10:01
          +1

          То есть с нейросетью нужно обращаться, как с джуном :)


  1. Advisers
    22.06.2024 10:01
    +5

    Вот есть и такие выводы:

    https://3dnews.ru/1105416/issledovanie-52-otvetov-chatgpt-na-voprosi-po-programmirovaniyu-neverni

    Какую бы оценку получил студент на экзамене с такими результатами?

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

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


  1. lazy_val
    22.06.2024 10:01
    +1

    Собственно код получившийся можно глянуть где-нибудь? Или я ссылку в статье пропустил?


    1. Keep_lookout Автор
      22.06.2024 10:01

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

      Ссылка на полный рабочий код: https://disk.yandex.ru/d/ycfiSHoJ_czQCg


      1. Fen1kz
        22.06.2024 10:01
        +9

        Попросите чатгпт на гитхаб залить плиз, а то на яндекс диске не солидно


  1. Quiensabe
    22.06.2024 10:01
    +6

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

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

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

    Вот тогда будет интересно:)


    1. Advisers
      22.06.2024 10:01
      +5

      Делают ли "электровцы" "саморефакторинг" своей нейросетки? )


    1. darthmaul
      22.06.2024 10:01
      +7

      Проблема в архитектуре. LLM обучаться неспособны в принципе, это апроксиматор. Она не может учиться проверяя собственный код т.к. она и так обучена на работающем коде. Нейросеть не понимает ничего, она просто генерирует нечто похожее на рабоочий код из датасета. Тут может Q* алгоритмы исправят ситуацию, но LLM точно никогда не станет полноценным ИИ. Максимум - одной из подсистем оного.


      1. maxwolf
        22.06.2024 10:01
        +1

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

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


        1. Advisers
          22.06.2024 10:01

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

          )

          И тем более, у неё нет "мыслей" о том, что если она долго не будет иметь питания, то все...

          Человек уже давно знает, что питание само не приходит и его надо искать, создавать, накапливать, экономить итд... - борьба за существование...

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


          1. maxwolf
            22.06.2024 10:01
            +1

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


            1. Advisers
              22.06.2024 10:01

              Никакой метафизики - уже сейчас Альтман инвестирует в термояд... ) , модель не сделана, чтобы экономить энергию и рефакторить саму себя, ей до этого нет дела... и не будет..., ей все это ничего не стоит. Ошибки ей не стоят жизни.)


        1. Wesha
          22.06.2024 10:01

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

          Дык вот же она!


          1. maxwolf
            22.06.2024 10:01

            Мощно! Почти 20000 слов, тянет на небольшую книжку...


            1. Wesha
              22.06.2024 10:01

              Ну так оно и получается, когда человек, который понимает, как оно устроено пытается объяснить человеку, для которого это — чудо, как оно на самом деле работает. Вы вот пробовали девятилетнему сыну объяснить, почему машина ездит, чтобы не на уровне "ну, оно делает бжжжжж и едет", а чтобы про ДВС, транмиссию, рессоры, рулевое управление, топливную систему, (перевел дыхание) электросистему, пассивные и активные средства безопасности, весь этот фарш? Вот тут у дяденьки несколько недель уходит!


      1. Quiensabe
        22.06.2024 10:01

        Я нигде не писал, что LLM должна учиться по ходу решения задачи.

        Смысл в том, что LLM пишет код опираясь на ожидаемый результат (это уже умеет делать тот же Claude 3.5 Sonnet, так что ничего нового тут нет). И результаты используются для дообучения.

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

        Во всем этом пока никакого обучения нет.

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

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

        Просто осталось чуть-чуть, чтобы научить сетку пользоваться готовым софтом (ради чего по сути и нужен Windows Recall). Это позволит замкнуть петлю обратной связи и позволит создать огромные объемы обучающих данных, что, в свою очередь, резко повысит качество кодинга LLM.


        1. Advisers
          22.06.2024 10:01
          +1

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


          1. Quiensabe
            22.06.2024 10:01

            1. про смену парадигмы я ничего не писал, только про резкое увеличение объема необходимых данных. А в случае LLM, это, как показывает практика, вероятно даст скачек качества. И так далее по кругу пока задача "напиши фотошоп" - не будет решаться за вечер... И далее.

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


      1. Frohman
        22.06.2024 10:01

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


      1. IgorAlentyev
        22.06.2024 10:01

        Как же много людей на хабре, которые с умным видом втирают дичь


        1. Wesha
          22.06.2024 10:01

          ... и Вы — один из них?

          Ведь LLM реально не понимает смысла. Оно просто оценивает, какой следующий токен наиболее вероятен после всех предыдущих!


          1. IgorAlentyev
            22.06.2024 10:01
            +1

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

            Попробую чуть адекватнее быть.

            Смотрите, я не супер эксперт в AI (нейронках), но в подавляющем большинстве кейсов с негативными результатами были нарушены некие базовые правила. Большинство думает что ГПТ-лайк системы это какая то магическая херня которая вас отлично понимает и всегда отдаёт нужный результат.

            Но это не правда. Это просто инструмент, очень продвинутый, но пока ещё инструмент и им нужно очень грамотно пользоваться. Промпт - 70% успеха, 30% - подходящая задача. Например кинуть в гпт 3000 строк на c++ без контекста и очень подробного обьяснения - очень плохая идея.

            Кинуть 300 строк кода на питоне - отличная идея и даже с кривым промптом скорее всего будет успех.

            А статья ваша уже ОЧЕНЬ давно не имеет ничего общего с реальностью. Нейронки этого года очень далеко ушли от угадывания следующего слова. Они оперируют смыслами, образами, они могут писать музыку и создавать видео. Пусть пока плохонько, но дорогой мой друг, это чудо что за 2 года мы прошли путь от продвинутого т9 к созданию музыки и прохождению теста тьюринга. И это я не говорю про специализированые нейронки, который решают математические задачи лучше чем Phd. Если интересуетесь, очень советую 3 вот этих канала.

            https://t.me/denissexy
            https://t.me/seeallochnaya
            https://t.me/llm_under_hood


            1. Cerberuser
              22.06.2024 10:01
              +1

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

              И они это делают за счёт того, что генерируют на каждом шаге не только следующее слово, но и что-то ещё? Было бы интересно посмотреть подробнее.


              1. IgorAlentyev
                22.06.2024 10:01

                В телеграм каналах что я скинул есть оч много инфы как оно работает.


                1. Wesha
                  22.06.2024 10:01

                  В телеграм каналах

                  Ну вот, рак уже и в комментарии метастазы пустил...


              1. Shannon
                22.06.2024 10:01
                +1

                И они это делают за счёт того, что генерируют на каждом шаге не только следующее слово, но и что-то ещё?

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

                В 2017 году была представлена работа под названием Attention Is All You Need, которая произвела фурор в нейросетевых кругах, и в итоге стала ядром всех текущих LLM, и вообще любой нейросети на трансформерах.
                Недавно, в декабре 2023, была представлена улучшенная версия GQA (Grouped Query Attention) - что стало тем прорывом, когда модели в 72B (72 млрд параметров) обошли в разы более крупные модели. У GPT4 их 1700 млрд, но Llama3 72B в большинстве тестов обходит GPT4 (не GPT-4o), не говоря уже о GPT-3.5 с 175B параметрами.

                На хабре есть перевод: https://habr.com/ru/companies/ruvds/articles/723538/


            1. Wesha
              22.06.2024 10:01

              Они оперируют смыслами, образами, они могут писать музыку и создавать видео.

              И часто Вы антропоморфизируете?

              Увы, никакими "смыслами и образами" они не оперируют. Хотя некоторым очень хочется в это верить.

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

              В техасского стрелка играете?

              решают математические задачи лучше чем Phd

              Да что ви такое говорите. И сколько из этих решений не окажутся бредом?


      1. icanall1010
        22.06.2024 10:01
        +1

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


        1. darthmaul
          22.06.2024 10:01

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


          1. Moog_Prodigy
            22.06.2024 10:01

            У человека есть тоже нечто похожее на контекст нейронки, а именно кратковременная память. Можно целый день сидеть и изучать новый ЯП, затем на следующий день даже написать на нем что-то. А потом все резко бросить и попробовать написать программу через год. И вот тут придется все заново, контекст уже "уехал". А чтобы нормально запомнилось, надо этот весь год сидеть, изучать и кодить. И тогда работать будет долговременная память. Очень похоже на нейронки, даже в принципе по времени не сильно отличается.


          1. icanall1010
            22.06.2024 10:01
            +1

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


    1. ArtursBirzgals
      22.06.2024 10:01
      +2

      Нейросети обучаются не только на примерах кода случайных проектов, А ещё и на официальной документации например. На примерах которые написали разработчики какого-нибудь фреймворка, а там обычно всё грамотно. Как минимум грамотнее чем я. Модели прекрасно предлагают сценарии для юнит-тестов, наталкивают на мысли что ещё можно протестировать, не ленятся писать обработчики ошибок, не стесняются полностью переписать какой-нибудь алгоритм, когда появляются новые условия. У них нету усталости или лени. Так что в целом, их Конечно уделает программист с чёрным поясом, Ну так же в целом, среднее качество кода по всем программистам только улучшится.


  1. MANAB
    22.06.2024 10:01
    +25

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

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

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

    Но может я зря жалуюсь и нейросети уже так могут?

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


    1. Myself12
      22.06.2024 10:01

      >Но может я зря жалуюсь и нейросети уже так могут?

      Да


      1. Ravius
        22.06.2024 10:01
        +2

        Лаконичный, но бессмысленный ответ.

        Github copilot хотел такое внедрить...но в закрытой бете.

        А остальные...., разве что: ДА - "но посылку я вам не отдам(с)".

        (Ах.да есть ещё пару ноунеймов стартапов, которые не могут .env из анализа исключить...они уж точно могут все и даже больше..даже AGI продадут.).


        1. powerman
          22.06.2024 10:01

          Вроде писали что bito.ai такое умеет. (Лично пока не проверял, руки не дошли.)


    1. Keep_lookout Автор
      22.06.2024 10:01
      +3

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


      1. hssergey
        22.06.2024 10:01
        +8

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


        1. Markscheider
          22.06.2024 10:01
          +8

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

          Прямо по больному, разрыдался, всю клаву слезами залил :).


      1. MANAB
        22.06.2024 10:01

        Жду вашей статьи, очень хочется узнать подробнее и применить хоть как то самому.


      1. DarthVictor
        22.06.2024 10:01
        +3

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

        Такой проект я и сам с удовольствием буду поддерживать.


    1. ArtursBirzgals
      22.06.2024 10:01

      Да, нейросети надо задать контекст. Gpt-4о имеет огромное окно контекста. Просто грамотно собери весь полезный Source и полезную информацию по проекту в один текст, из скорми чату. Увидишь он прекрасно разберётся если ты всё сделал правильно.

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


      1. MANAB
        22.06.2024 10:01
        +4

        Выбрать неизвестное количество файлов из 100500, или даже куски - это уже 50-90% работы моей по задаче на текущем проекте. Как сделать я обычно уже знаю к этому времени.


      1. VVizard
        22.06.2024 10:01
        +1

        На том моменте когда я достаточно погрузился в проблему что бы собрать контекст и объяснить нейросети что нужно поменять, я обычно считаю работу сделанной и передаю Джуну. А он таким образом обучается)


    1. pavelsc
      22.06.2024 10:01

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


      1. MANAB
        22.06.2024 10:01

        У меня мысль уже появилась, что стоит попробовать разобраться, как обучить сеть на задачах проекта - у нас довольно подробные объяснения что нужно делать + добавить код из pr, истории уже на парудесятков тысяч задач... А вдруг получится что нибудь.

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


  1. TomskDiver
    22.06.2024 10:01
    +5

    В последнее время задаю вопросы, прошу советы у ChatGPT-4o на технические темы. И довольно часто она врёт/ошибается. Но т.к. в этом вопросе я тоже разбираюсь, говорю что она ошибается. Сетка говорит вы правы и выдаёт обычно правильный ответ. Но при первом ответе она тоже писала очень уверенно:) Поэтому я бы не рискнул говорить про "качество кода повышается". К ответам LLM надо относиться с подозрением, и желательно перепроверять. Но вообще с прототипами они помогают на отлично.


    1. powerman
      22.06.2024 10:01
      +1

      К ответам LLM надо относиться с подозрением, и желательно перепроверять.

      Как и к ответам любых ноунеймов-человеков в интернете.


    1. edogs
      22.06.2024 10:01
      +2

      У нас ощущение, что 4о слишком много пытается думать, намного больше чем пользоваться знаниями. Сравнивали 4о и обычную 4-ку.
      Первый раз изумились на вопросах о принадлежности цитат. Берется точная цитата и задается вопрос об авторе из нескольких фамилий. 4-ка говорит ее автора иногда даже приводя оригинал цитаты и делает это правильно, 4о предполагает ее автора из списка сходя из того кем являлись эти авторы.
      Второй раз удивились на правилах русского языка. 4-ка, опять же, руководствуется правилами и дает правильные ответы. 4о оперирует какими-то общими понятиями о том, как оно должно писаться и часто ошибается.
      Потом стали проверять на математике и программировании - в принципе эффект тот же. Вместо точных ответах базирующихся на знаниях 4о выдает скорее оценочный результат.

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


    1. IgorAlentyev
      22.06.2024 10:01

      4o значительно тупее 4турбо в вопросах кодинга. Она мультимодальная и дешевая, это не дается бесплатно пока что.


  1. EvilFox
    22.06.2024 10:01
    +8

    Кажется, LLM программирует лучше меня

    Это только говорит о вашем низком уровне программирования (ниже чем у большинства). Каждая статья с такими выводами это опозориться на весь инет.

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


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. EvilFox
        22.06.2024 10:01
        +1

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

        А пока стоит выйти за рамки датасетов и всё ОЧЕНЬ ПЛОХО, банально не умеет шейдеры писать, хотя казалось бы.


        1. icanall1010
          22.06.2024 10:01

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


          1. EvilFox
            22.06.2024 10:01

            т.е система не умеет делать то, чему она не обучалась?

            Модели знают про шейдеры, но у них серьёзные проблемы с пониманием и композицией кода.

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

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

            Это не поможет. Например я пытался скармливать документацию того же shadertoy, добавлял свои уточнения, чтобы она не делала совсем глупых ошибок, модель слабо всё это учитывает, всё равно делает глупые ошибки. Без дообучения/finetuning никак.


        1. IgorAlentyev
          22.06.2024 10:01
          +1

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


          1. Wesha
            22.06.2024 10:01

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

            Мозгом также пользуется огромное количество людей. Но всё-таки не все. /s


          1. EvilFox
            22.06.2024 10:01

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


  1. kochetkov-ma
    22.06.2024 10:01
    +1

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


    1. powerman
      22.06.2024 10:01
      +1

      Не совсем. У меня есть знакомый бизнесмен, который вообще не программист и ни одного ЯП не знает. Он вполне успешно сумел реализовать (вроде ещё на ChatGPT 3.5) полноценный и рабочий бизнес-проект на питоне, довёл его до прода и даже что-то на нём зарабатывает (с пользователей). Не знаю, насколько это помогло, но до этого у него уже была реализована (и работала в проде) традиционная версия этого же проекта, разработанная обычными программистами. Проект не очень сложный (продажа курсов повышения квалификации, проведение тестирования по этим курсам, синхронизация этих данных с гос.учреждением отвечающим за контроль этого дела), но обычные разработчики его писали определённо дольше. Как по качеству кода я без понятия, но если оно работает и приносит деньги, то может это и не важно.

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


      1. Wesha
        22.06.2024 10:01

        Он вполне успешно сумел реализовать (вроде ещё на ChatGPT 3.5) полноценный и рабочий бизнес-проект на питоне, довёл его до прода и даже что-то на нём зарабатывает (с пользователей).

        И у него будет та же самая проблема, как и у значительного количества программистов: они программируют все ситуации, когда всё работает нормально (все исходные данные присутствуют и корректны) — но стоит какому-нибудь шлемазлу ввести неправильные данные, как оно хорошо, если просто не сработает как планировали — а ведь может и рухнуть с грохотом (и хорощо ещё, если не с жертвами)!


        1. powerman
          22.06.2024 10:01
          +2

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


          1. Wesha
            22.06.2024 10:01

            у обычных разработчиков эта проблема тоже есть.

            Если Вы нанимаете обычных разработчиков за плошку риса — мне Вас жаль.


            1. powerman
              22.06.2024 10:01
              +1

              Какой внезапный переход на меня. Нет, речь шла не о тех, кого нанимаю я, а о тех, на кого ссылались Вы в фразе "как и у значительного количества программистов". Мой вопрос всё ещё актуален, если что.


              1. Wesha
                22.06.2024 10:01

                Извините, я имел в виду не конкретно Вас лично. Да, надо было написать "вы" как генерализацию.

                Вот только те, которых там по факту наняли — они не программисты, они индиоты.


                1. powerman
                  22.06.2024 10:01
                  +2

                  Допустим. Что это меняет? Явление это достаточно распространённое. Раньше бизнес нанимал кого мог и получал индиотов. Сейчас этот же бизнес в лице продакт-менеджера идёт к ИИ и тот ему пишет код сравнимого качества. Что и возвращает нас к моему оригинальному вопросу: какая тогда разница кто написал этот код?


          1. edogs
            22.06.2024 10:01
            +4

            Крайне упрощенно, разница в том, что программист реализует нужный алгоритм для решения задачи, а нейросеть реализует получение нужного результата в рамках задачи.
            Грубо говоря расплывчато поставленную задачу получения результата умножения двух чисел нейросеть может решить как: if(a==2 && b==2) Console.WriteLine(a+b); if(a==3 && b==3) Console.WriteLine(a+b+b); а программист решит как Console.WriteLine(a*b);
            Для каких-то ситуаций результат будет верен в обоих случаях и вполне возможно бизнесу этого хватит, но разница в подходах радикальна и если пользователь нейросетки разбирается в том что происходит хуже чем она, то он проблему просто не поймет.


            1. powerman
              22.06.2024 10:01

              Формально алгоритм нужен и ценен не сам по себе, а тем, что даёт нужный результат. И криво/странно написанных людьми алгоритмов в коде очень много (понятие "индусский код" вовсе не про ИИ, а про людей).

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


              1. edogs
                22.06.2024 10:01
                +2

                Формально алгоритм нужен и ценен не сам по себе, а тем, что даёт нужный результат.

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

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

                понятие "индусский код" вовсе не про ИИ, а про людей

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


                1. powerman
                  22.06.2024 10:01

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

                  Формально алгоритмом является любой императивный код, включая приложение целиком. Он включает в себя много мелких вспомогательных алгоритмов, которые вполне можно рассматривать отдельно (что обычно и делают), но всё целиком - тоже вполне себе алгоритм. Так что любой императивный код выданный ИИ - это тоже алгоритм. Вопрос ясности/наглядности алгоритма из кода тут значения не имеет (сложный для понимания алгоритм не перестаёт от этого быть алгоритмом).

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

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

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

                  Насчёт TDD соглашусь, но, опять же, люди ведь реально так пишут, и довольно много. И в чём тогда разница, человек так написал или ИИ?

                  P.S. Что такое "комплексный продукт" и почему это стоп-слово для ИИ я не понял. Звучит так, как будто это вопрос размера контекста, который требуется учитывать ИИ - а он постоянно растёт, и то, что сейчас может быть для ИИ слишком большим скоро может стать приемлемым.


                  1. asatost
                    22.06.2024 10:01
                    +2

                    Формально алгоритмом является любой императивный код, включая приложение целиком

                    Алгоритм обладает свойством массовости, т.е. что-то вида print 2 + 3 является императивным кодом, но не является алгоритмом.


      1. VVizard
        22.06.2024 10:01
        +1

        Больше похоже на байку. Это получается весь код LLM делал без ошибок (ведь ваш товарищ не знает яп и не может его проверить). И при этом как то товарищ понимал какой следующий шаг нужно сделать.

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

        Я активно использую copilot, особенно хорошо он пишет юнит тесты, но при этом иногда (2 раза из 10) он выдает жёсткий бред., полностью бессмысленный код.


        1. powerman
          22.06.2024 10:01

          ЯП он не знал, но мне говорил, что по мелочи что-то очевидное правил после ИИ методом тыка.

          Насчёт инфры - полагаю он тупо задавал ИИ вопросы как всё это поднять. И поднял.

          Я, честно сказать, не верил в то, что это будет реально работать… но нет, проект уже почти год работает.


        1. nidalee
          22.06.2024 10:01
          +1

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

          В этом нет никакой проблемы, GPT пишет сначала минимальный базовый код, который работает, а дальше ты пытаешь его промптами "а давай добавим прогрессбар", "а давай добавим скачивание самой новой базы с сайта", "а как быстрее работать с базой? хорошо, тогда перепиши обработку csv на modin[ray] и пущай сохраняет... как там компактнее? в parquet". Я на python не напишу hello world, а слов modin и dataframe я даже не слышал, пока мне их ChatGPT не написал.


    1. Keep_lookout Автор
      22.06.2024 10:01

      Да, я большую часть жизни занимался программированием в разных областях, был руководителем крупного программного проекта в области полной автоматизации гостиничного бизнеса. Я хорошо представляю себе, что значит самому писать код (даже не так, а ЧИСТЫЙ КОД) или распределить задачу между другими группами программистов поручив это сделать им. В данном случае вместо меня это желает модель. Это несколько другой уровень и стиль работы и именно это я и хотел подчеркнуть.


  1. TwentyThree
    22.06.2024 10:01
    +15

    Сколько ни пробовал пользоваться LLM для программирования, она не смогла решить то, что нельзя решить парой запросов в гугл. Сделать простой, но нудный и объемный рефакторинг вроде миграции между разными версиями SDK — без проблем. Написать простейшую прошивку для микроконтроллера из разряда «дернуть такую-то ногу при таком-то HTTP-запросе» — запросто, даже без ошибок. Исправить неочевидный баг, решение которого на стэковерфлоу не описано — начинаются галлюцинирование методов, попытки поменять подход, но саму суть решения оставить прежним, ну или в конце она просто выдает общие советы типа «почитайте документацию, почистите кэши». Да, инструмент для задач определенной специфики прекрасный, но чтобы прям «программировать лучше меня» — до этого еще слишком далеко.


    1. EvilFox
      22.06.2024 10:01

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

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


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. asatost
        22.06.2024 10:01
        +1

        но создавать по точному и подробному описанию значительные функциональные блоки очевидно уже может

        Ввести с клавиатуры три числа, вывести на экран какое из них максимально, минимально, находится между максимальным и минимальным. Не использовать функции сортировки и нахождения минимума и максимума, только if. Лимиты токенов кончились, результаты даже близко не начались :)


        1. Filipp42
          22.06.2024 10:01

          ```python

          Ввод трех чисел с клавиатуры

          a = int(input("Введите первое число: "))
          b = int(input("Введите второе число: "))
          c = int(input("Введите третье число: "))

          Определение максимального числа

          if a >= b and a >= c:
          max_num = a
          elif b >= a and b >= c:
          max_num = b
          else:
          max_num = c

          Определение минимального числа

          if a <= b and a <= c:
          min_num = a
          elif b <= a and b <= c:
          min_num = b
          else:
          min_num = c

          Определение числа, находящегося между максимальным и минимальным

          if a != max_num and a != min_num:
          mid_num = a
          elif b != max_num and b != min_num:
          mid_num = b
          else:
          mid_num = c

          Вывод результатов

          print(f"Максимальное число: {max_num}")
          print(f"Минимальное число: {min_num}")
          print(f"Число между максимальным и минимальным: {mid_num}")
          ```


          1. asatost
            22.06.2024 10:01

            Вводим в качестве исходных данных: 3.1;

            Вводим в качестве исходных данных: 10, 10, 10;

            В начальном посте был всё же C#.


      1. Wesha
        22.06.2024 10:01
        +2

        создавать по точному и подробному описанию

        Было, кажется, какое-то слово для точных и подробных описаний на некоем языке. Не помню, какое. Кажется, на "П" начинается...


  1. NeoNN
    22.06.2024 10:01
    +3

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


    1. EvilFox
      22.06.2024 10:01
      +5

      Тут скрывается ещё интересная тема: если по его мнению нейросеть лучше программирует чем он, то у него нет квалификации сделать полноценное ревью.


    1. Keep_lookout Автор
      22.06.2024 10:01
      +2

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


  1. Pol1mus
    22.06.2024 10:01
    +2

    Часто натыкаюсь на то что ллм не справляется с "простыми" алгоритмами, приходится самому писать Ж)

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


    1. das_tier
      22.06.2024 10:01
      +1

      Если вы так и формулируете задачу ллм (дословно), то неудивительно ;)


      1. zaiats_2k
        22.06.2024 10:01

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


        1. das_tier
          22.06.2024 10:01

          Да, в том-то и дело. Бывает, пока сформулируешь, так уже бы и сам написал (что-то простое).


          1. Wesha
            22.06.2024 10:01

            Бывает, пока сформулируешь, так уже бы и сам написал

            Это Вы ещё про отладку забыли...


    1. Keep_lookout Автор
      22.06.2024 10:01

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


  1. gun_dose
    22.06.2024 10:01
    +2

    Модель суммарно написала 672 строки кода

    Надеюсь, вы понимаете, что это очень маленький объём кода, по которому оценивать какие-либо способности весьма опрометчиво.


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. gun_dose
        22.06.2024 10:01
        +3

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

        Очень интересная ситуация сложилась в Phpstorm и других IDE от jetbrains. Сами по себе эти IDE достаточно умные и умеют давать крутые подсказки и автокомплит. Но недавно туда добавили подсказки от ИИ. Обычная подсказка выпадает вниз, а ИИ-шная вправо. И чаще всего оказывается так, что ИИ-шная подсказка вообще невпопад, например, предлагает вызвать несуществующий метод. В то время, как в "старомодных" подсказках такого не может быть по определению. То есть добавили новую ИИ фичу, которая делает то же, что и сама IDE, только хуже. Ну правда в одном из пяти случаев эти подсказки реально помогают сэкономить время.

        Но в целом, чем больше времени проходит, тем больше кажется, что весь этот ИИ-бум - такой же скам, как и блокчейн.


  1. sapper
    22.06.2024 10:01
    +3

    Преобразуй внешний вид шариков из квадратной формы в круглую.

    Довольно много говорит о "понимании" моделью задачи.


    1. Keep_lookout Автор
      22.06.2024 10:01

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


      1. sapper
        22.06.2024 10:01

        Просто часто люди думают, что они будут общаться с LLM как с человеком, это и декларируется везде. Но факту, даже от маленького ребёнка мы ожидаем, что он знает о круглости шарика...


  1. ihouser
    22.06.2024 10:01
    +1

    Я только что понял для чего нужна ИИ -- для любимого занятия людей -- микроменеджмента!


  1. ihouser
    22.06.2024 10:01

    А если предложить ИИ писать сразу в ассемблере? Сможет ли она вернуть те времена, когда много программ помещалось в дискету?


  1. ideological
    22.06.2024 10:01
    +6

    Я буду создавать довольно известную в народе игру "Шарики", Lenes (Color
    Lines), которая является непростой в реализации как в логическом, так и
    в графическом смысле. Предварительно я убедился, что модель о ней
    ничего не знает
    .

    Очевидно что это неправда.

    LLM программирует лучше меня

    100%

    Спустя ряд экспериментов становится понятно, что ответ на этот вопрос – уверенное да!

    ИИ действительно так хорош? В чём проблема, зачем убеждать в этом аудиторию? Создавайте игры, выкладывайте в Steam, получайте деньги))

    Но что-то даже и демо нет. Наверное gpt пока не справляется с деплоем, ждём следующую версию.


    1. IgorAlentyev
      22.06.2024 10:01
      +2

      Большая сложность при создании игры это вовсе не кодинг.


  1. dezahrise
    22.06.2024 10:01

    Читал этот пост и думал: каким будет программирование, когда уйдут дедушки вроде Линуса Торвальдса? Все эти модели прекрасны, но когда встает вопрос качества кода (я не говорю тут о чистоте и т.д. - скорости работы, безопасность), как будут это оценивать люди, привыкшие писать промты, а не часами отлаживать код?


    1. IgorAlentyev
      22.06.2024 10:01

      в ядре линукса больше говнокода чем в любом коммерческом по. Но это обусловлено старостью и сложностью


      1. dezahrise
        22.06.2024 10:01

        Говнокод - понятие субъективное, а вот безопасность и скорость - метрики объективные.


  1. MaxAkaAltmer
    22.06.2024 10:01
    +1

    Далее код и комментарии.

    А где код?


  1. Flux
    22.06.2024 10:01
    +3

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


  1. Daddy_Cool
    22.06.2024 10:01

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


    1. nidalee
      22.06.2024 10:01

      Рабочий подход такой: берем написанный LLM код, запускаем. Если упало с ошибкой - это прекрасно, скармливаем обратно код и ошибку, повторяем до победного. Если просто нет результата без ошибки - уже печальнее, просим LLM распихать везде принты и смотрим, где процесс спотыкается. Информацию об этом скармливаем LLM и молимся.


      1. Wesha
        22.06.2024 10:01
        +1

        молимся

        Вот это — самая важная часть процесса...


        1. nidalee
          22.06.2024 10:01

          Поэтому скилл работы с LLM в том, чтобы избегать ситуаций, когда нужно молиться :)

          Пусть лучше с ошибкой падает, там есть что скормить обратно LLM для исправления.


          1. k4ir05
            22.06.2024 10:01

            Поэтому скилл работы с LLM в том, чтобы избегать ситуаций, когда нужно молиться :)

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


  1. Spyman
    22.06.2024 10:01
    +2

    Как-то я спросил у всех актуальных llm простой вопрос по комбинаторике (вероятность последовательных результатов при броске d20) — и они дали мне неправильный ответ. Потом я спросил, как этот ответ был получен, — и две из трёх дали мне правильный алгоритм.

    Сделал такой вывод: использовать ответы (код) от нейросетей можно только там,

    1. Где 100% покрытие тестами.

    2. Где есть ОДЗ входные и выходные и можно их все проверить.

    3. Где есть эксперт высочайшей квалификации, готовый этот код просмотреть.

    Ведь нейронка куда хуже человека тем, что может создать граничную ситуацию там, где её нет.

    Никогда нельзя быть уверенным, что в галлюцинировании llm не добавила if (v == random(37)) throw RuntimeException() в функцию сложения двух чисел.


    1. andyshark1974
      22.06.2024 10:01

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

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

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

      А так то - пусть балуются люди. Через несколько лет (максимум 10) специалисты которые НЕ повелись на хайп будут больше востребованы. Это не первый случай в истории человечества если что. Главное не скатиться в результате в темные века :-)


      1. Wesha
        22.06.2024 10:01

        почему он выдает такой ответ? Рассуждения привели к тому что просто по количеству вариантов ответа делается выборка.

        Именно так. Оно просто оценивает, какой следующий токен наиболее вероятен после всех предыдущих!


        1. andyshark1974
          22.06.2024 10:01

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


          1. Wesha
            22.06.2024 10:01

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

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


            1. andyshark1974
              22.06.2024 10:01

              Боюсь что в данном случае никакая температура просто не победит :-) Меня пугает именно такой алгоритм, потому что чем дальше - тем больше будет неверных ответов и они уйдут в "неконтролируемое падение".

              Просто для себя я сделал давно вывод что проще стать специалистом в какой то области чем доверяться ответу ИИ. Но попытки уверить что ИИ облегчает жизнь - просто "умиляют".


        1. icanall1010
          22.06.2024 10:01
          +1

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


          1. andyshark1974
            22.06.2024 10:01

            Вкратце - нейронка это рандомная выборка с удельным весом частоты ранее встреченных вариантов. Что будет если вес неверного или сомнительного варианта будет сильно выше чем вес другого? К чему это приведет? Будет ли это развитием человечества или его падением т.к. чем больше сомнительных вариантов - тем чаще они будут встречаться и тем больше сомнительных вариантов и тем чаще они будут встречаться и.... Ну в общем поняли :-)

            Хотя человечество и сейчас так живет конечно. Взять те же гороскопы или близнецов...


          1. Wesha
            22.06.2024 10:01
            +2

            вы, когда думаете, заранее знаете следующее предложение, которое вы скажете?

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


            1. icanall1010
              22.06.2024 10:01
              +1

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


              1. Wesha
                22.06.2024 10:01

                Прикиньте, я вышеупомянутую машину мысленным взором вижу целиком,

                примерно так

                Меня, наоборот, сильно тормозит необходимость преобразовавывать это в слова. "Чёрт, про что сначала рассказать — про колёса или про двигатель?"


                1. icanall1010
                  22.06.2024 10:01

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


          1. Cerberuser
            22.06.2024 10:01

            вы, когда думаете, заранее знаете следующее предложение, которое вы скажете?

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


            1. icanall1010
              22.06.2024 10:01
              +1

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


  1. avg
    22.06.2024 10:01

    Может ли искусственный интеллект (ИИ) превзойти программиста-человека при написании кода?

    Пока что ИИ даже с работой в Макдональдсе не справляется


    1. Wesha
      22.06.2024 10:01
      +2

      Она думает, что отвечает правильно и считает, что кетчуп и мороженое лежат рядом, потому что это продукты питания, которые находятся в холодильнике, условно, их можно смешать.

      Да ёктель, оно не "думает", оно просто оценивает, какой следующий токен наиболее вероятен после всех предыдущих!


  1. andyshark1974
    22.06.2024 10:01

    Полистал статью, почитал комменты... Ну что - все как и думал (да, я знаю что я не уникальный :-) тапками не кидать).

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

    Для того чтобы написать любую программу не нужно иметь хороших программистов. Нужно иметь отличного СИСТЕМНОГО АНАЛИТИКА. Что Вы делали когда задавали задачу LLM? Вы работали именно СА. далеко не образцово раз пришлось делать несколько попыток уточнить задачу. Но когда я поверхностно слушал курсы СА то уяснил простую истину - хорошо поставленная задача от СА не требует от программиста вообще способности думать. Утрирую конечно, но думаю понятно. Работа программиста в случае ОТЛИЧНОГО СА превращается в рутину которую может выполнить любой Джун.

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

    На подумать еще два вопроса

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

    2. Для проверки "интеллекта" у ИИ у меня есть простой вопрос. "В каком порядке детям легче изучать шахматные фигуры в самом начале изучения".Я все жду невозможного - правильного порядка изучения - Ладья -> Слон -> Ферзь -> Конь -> Пешка -> Король. Почему ИИ НЕ выдает никогда именно такой порядок изучения фигур?

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


  1. kenomimi
    22.06.2024 10:01
    +2

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


    1. Wesha
      22.06.2024 10:01
      +1

      Однако стажёру можно сказать "никогда больше так не делай!" — и он больше так не будет. Желаю удачи добится такого же эффекта от LLM.


      1. icanall1010
        22.06.2024 10:01

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


        1. Wesha
          22.06.2024 10:01

          Так и я ровно про то же. В результате Ваш "автоматический префикс" будет покрывать примерно 30 лет моего опыта (и, кстати, не только опыта программиста, но и опыта на конкретном проекте) — и размера будет соответствующего.


          1. icanall1010
            22.06.2024 10:01

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


  1. deelayka
    22.06.2024 10:01
    +2

    Я пробовал попросить несколько разных моделей (на chat.lmsys.org) написать код на Brainfuck'е, который бы выводил простой текст ("YO"). Все из опробованных моделей уверенно сгенерировали код и даже добавили (сомнительное) описание того, как он работает. Только вот при попытке выполнить этот код, даже близкий к правильному результат не был получен ни разу. В основном выводился мусор или ошибки. В редких попытках - что-то типа "He" (предположительно кусок от Hello world, примеров с которым в интернете много). Что дало мне окончательное осознание того, что LLM просто умеет хитро и красиво складывать что-то из кусочков того, что было использовано при её обучении, но никак не может синтезировать что-то новое.


    1. Wesha
      22.06.2024 10:01

      LLM просто умеет хитро и красиво складывать что-то из кусочков того, что было использовано при её обучении,

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


      1. andyshark1974
        22.06.2024 10:01

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


      1. Shannon
        22.06.2024 10:01

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

        Атомная станция - это большой кипятильник?

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

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

        Но LLM на трансформерах - это в первую очередь механизм Внимания. Умножая слои нейросети на слои внимания - происходит перевзвешивание весов, тем самым в конце остается тензор "сути", который отвечает на заданный вопрос.

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

        Именно благодаря Вниманию, даже подмешав в середину ответа модели мусор, который должен повести модель по другому пути, что сбило бы столку цепи Маркова и даже RNN, LLM с Вниманием всё равно может вернуться (зависит от качества и количества голов внимания) к ответу на заданный вопрос, "про себя не понимая" почему она эту чушь начала отвечать, сказав "Но всё-таки вернемся к ответу на ваш вопрос".

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

        Приведу пример на quill-72b-instruct.i1-IQ3_M.
        Это модель квантованная до 3 бит с оригинальных Float32, весит всего 35гб. Модель не теряет разумность и умение писать на русском даже когда ей буквально урезали все веса в 10 раз, и это как раз за счет того что в gguf в llama.cpp тензоры Внимания и Запроса специально квантуются в меньшей степени, квантуются веса "информации" модели, а самое важное пытаются не трогать.

        И да, я буквально написал модели, что вмешиваюсь в её работу, но она думает, что это она сама такое написала, поэтому и извиняется.


        1. Wesha
          22.06.2024 10:01

          (Устало) Ну я же ссылочку привёл! Там не какой-то Цой с бугра, а целый Стивен Вольфрам рассказывает. И когда его мнение не согласуется с Вашим, Вы уж извините, я ему доверять буду.


          1. Shannon
            22.06.2024 10:01

            Ну я же ссылочку привёл!

            Всё-таки "атомная станция - это большой кипятильник", жаль, думал беседы поднимут своё качество.

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

            Вы уж извините, я ему доверять буду.

            Когда дочитаете.


            1. Wesha
              22.06.2024 10:01

              Всё-таки "атомная станция - это большой кипятильник",

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


              1. Shannon
                22.06.2024 10:01

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

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


        1. Cerberuser
          22.06.2024 10:01
          +1

          Кстати, расскажете, как у вас это "вмешиваюсь в ответ" получилось? В смысле, что вы для этого использовали? Интересно было бы самому поковыряться, но с ходу не могу вспомнить, где из известного мне такое можно провернуть.


          1. Shannon
            22.06.2024 10:01
            +1

            Не знаю на счет проприетарных моделей, но локально это делается почти любым GUI (например, text-generation-webui, LM Studio), так как все крупные и популярные клиенты поддерживают редактирование ответа модели.
            Всё что нужно это отредактировать ответ и нажать 'continue', модель продолжит генерацию ответа.


  1. FurySeer
    22.06.2024 10:01

    Кажется, LLM программирует лучше меня

    Так это LLM такая классная, или у вас настолько плохо с программированием?

    Кажется, единственная (внезапная) польза от LLM - это когда тебе лень в чем-то разбираться, и ты думаешь "а засуну в гпт, вдруг что выйдет".
    Выходит конечно же мусор, однако местами правдоподобный. И вот ты уже половину выходного осваиваешь новый инструмент, потому что уже как-то втянулся после нескольких попыток заставить гпт довести до ума полученный код и бросать жалко.
    С гуглежом и молитвами картинка более-менее начинает складываться. А без гпт так бы и не дошли руки


    1. Wesha
      22.06.2024 10:01

      С гуглежом и молитвами

      "Добрым словом и пистолетом гуглежом и молитвами легче добиться нужного результата, чем одними молитвами!" почти (с)


      1. andyshark1974
        22.06.2024 10:01

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


    1. andyshark1974
      22.06.2024 10:01

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

      Примеров полно. Начиная с Ковида или лоскоземельщиков. Это прям примеры за которые не посадят. Да и Гороскопы из той же оперы - доказывать что-то иногда бестолково. Сейчас прикручивают ДНК в обоснование чего либо бездоказательного, но зато красивого. Из чего можно сделать вывод что chatGPT и подобные ему это из той же оперы. Хороший поисковик снабженный деньгами, не более того. А вот если в поисковике представлен ответ который после логического вывода может быть другим - этого уж и не узнаешь - ты же его НЕ увидишь! А разбираться в предмете - ну нафиг, это время.


  1. Wesha
    22.06.2024 10:01
    +5

    Кажется, LLM программирует лучше меня

    Мне уже который день хочется спросить — а Вы точно уверены, что это достижение LLM, а вовсе не Ваша недоработка?

    Так что "в наше время этим не гордились" (c)


    1. omxela
      22.06.2024 10:01
      +1

      Кажется, LLM программирует лучше меня

      Да-да, а ещё кажется, что CAD конструирует лучше меня. Вот читал я текст, и описание процесса что-то смутно мне напоминало. Вот стоит конструктор перед интерактивным экраном. То там чертёж поправит, то что-то дорисует. А, может быть, уберёт. А система автоматически правильно всё нарисует. Лучше, чем я это сделаю. Ничего не упустит. Линии нужной толщины, шрифты по правилам, проекции - залюбуешься, и ни разу не ошибётся, зараза.

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

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


      1. Wesha
        22.06.2024 10:01
        +4

        Линии нужной толщины, шрифты по правилам

        Ну при таком подходе — пишущие машинки заменили писателей, ага. Нет, они не писателей заменили, а писцов.

        Ну так и у тех, кого LLM заменит, правильное название — кодеры (code monkeys). А программист — это гораздо серьёзней.

        В чём катастрофа?

        В том, что все думают, что не нужны будут именно программисты, а не кодеры.


        1. ZooMMaX
          22.06.2024 10:01

          Кармы не хватает плюс воткнуть)


        1. Wesha
          22.06.2024 10:01

          Кстати, продолжая аналогию, во времена всяких БЭСМ программисты писали, скажем, на Фортране, отдавали свои записи девочкам, девочки перепечатывали эти записи на клавиатуре перфораторов — получались перфокарты, которые скармливались в машину.

          Потом появились терминалы, и эти девочки-перфораторщицы стали не нужны. Сделало ли это ненужными программистов?


  1. ZooMMaX
    22.06.2024 10:01

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

    P.S.

    Учитесь пользоваться инструментами.


  1. Vadim878
    22.06.2024 10:01

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


    1. ZooMMaX
      22.06.2024 10:01

      Для запуска LLM хватает cpu и от 8 гб опеоативной памяти (это для моделей до 8b, как правило). Если не хочется долго мучаться с настройками, то пробуйте запустить ollama. Если используете студию от JB, то там полно плагинов, которые умеют работать с api ollama, которая может быть запущена и локально и удаленно. В ollama можно загрузить самые разные модели. Подробнее сможете прочитать на их официальном сайте и github (там достаточно подробные инструкции). Так же, вместо планинов, можно запустить Open WebUI. Это вебморда в стиле chatgpt, которая умеет работать и с api ollama, и с api chatGPT и ещё с чем-то вроде. Чтобы из РФ получить оплаченный api chatGPT за рубли воспользуйтесь ProxiAI. Стоит учитывать, что открытые модели LLM сильно уступают chatGPT, довольно долго работают на cpu, с бубном запускаются на винде (я от неё уже давно отказался и радостно сижу на Debian). Чтобы работало пошустрее нужна видеокарта. В идеале nvidia поддерживающая драйвер от 525 версии. На картах amd тоже можно запустить, но только на linux и только для карт поддерживающих драйвер 15 версии (есть исключения, но там бубуен гигантский нужен).

      За сим я рекомендую VPN + бесплатный chatGPT. Бесплатных запросов вполне хватает. Нужно помнить, что чем менее популярен провайдер vpn, тем болше шансов, что chatGPT его проглотит (я вообще личный на vps настроил и горя не знаю).


  1. dimmil
    22.06.2024 10:01

    Зарабатываю программированием больше 30 лет. Сейчас начал использовать chatgpt4o, код сгенерированный им использую в реальных проектах (пока только небольшие куски). Может кто нибудь знает есть ли локальные llm генерирующие код не хуже gpt4o? Как называются?


    1. ZooMMaX
      22.06.2024 10:01

      4o - топ среди LLM. Локальные модели хуже и прожорливее.

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


  1. devoln
    22.06.2024 10:01

    Что-то я так и не нашёл в тексте, какую именно LLM использовали. Какую-то публичную GPT или какую-то self-hosted модель?


    1. ZooMMaX
      22.06.2024 10:01
      +1

      В качестве модели я буду использовать специально обученную для кодинга на 80 языках квантованную Codestral-22B-v0.1-Q4_K_M (Про оригинальную модель можно узнать на сайте разработчиков https://mistral.ai/news/codestral/).

      Вот же. Прям в тексте. Это self-hosted модель.


      1. devoln
        22.06.2024 10:01
        +1

        Хм, видимо как-то пропустил при первом прочтении, а потом уже искал в других местах с телефона.

        Спасибо. Видимо моя 8 ГБ видюха такого не потянет)


        1. ZooMMaX
          22.06.2024 10:01
          +1

          Простенькую модель может потянуть. Плюс ПО запускающее модели, как правило, умеет в одновременное использование cpu и gpu


        1. Shannon
          22.06.2024 10:01

          Видимо моя 8 ГБ видюха такого не потянет)

          Всегда есть квант, который влезет =3

          А если взять новую DeepSeek Coder-V2 Lite на 19B, то там и IQ3 влезет в 8гб. Плюс как уже подсказали, часть слоев можно вынести на видяху, а часть оставить на процессоре.

          По поводу низкой квантизации, чем больше модель, тем лучше она переносит квантование, вот тут я показывал, что даже 1-битная квантизация с матрицей важности на модели 72B умнее, чем 8B модели: https://habr.com/ru/news/822167/comments/#comment_26941921

          Если у вас AMD видяха, то на Windows с ускорением koboldcpp-rocm (rocm аналог cuda).


  1. mister008
    22.06.2024 10:01

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


    1. Wesha
      22.06.2024 10:01

      Ну ладно законодательство. Но в легаси коде то тут, то там ввстречаются костыльные костыли, которые убирать нельзя, потому что они держат пол в комнате c баллонами с газом. LLM уже научилось понимать, можно ли уже убирать с острова воздушный шар?


      1. Cerberuser
        22.06.2024 10:01

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


        1. Wesha
          22.06.2024 10:01

          У меня в одном проекте было такое. Босс сказал "сделать вот так", и мы сделали. Зачем, почему — никто не мог понять. Годика через два я наконец понял — действительно, с математической точки зрения было правильно, но мы не врубались.


  1. evalexdy
    22.06.2024 10:01

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

    А ещё есть временная сессия, после истечения которой тупой LLM анализирует не весь диалог, а только последние сообщения. Там начинается вообще печаль.

    Так что повторюсь, как LLM секретарша - норм, как прогер - нет.


  1. ilyapirogov
    22.06.2024 10:01