Chat GPT в помощь программисту
Хороший инструмент, хотя, конечно, есть и недостатки...
С них и начну:
- Количество символов сообщения ограничено 1000 или около того: большой код Chat GPT не сможет написать.
- Продолжение иногда корректно срабатывает: может начать писать код заново или выделить только одну функцию из кода...
- Если задача поставлена нечётко, скорее всего напишет неправильно...
- Вероятно, есть и другие минусы, о которых забыл...
Но всё перевешивает плюс: порой помогает значительно экономить время (зависит от сложности).
Для чего эта статья?
Вы наверное подумали, что я совсем отдалился от читателей, раз пишу о своём - программистском. Но нет:
Фишка в том, что вам ИИ (не считаю Chat GPT искусственным интеллектом - грамотно сделанная нейронная сеть с машинным обучением, но для сокращения будем обозначать так) тоже может помочь...
Правила работы с Chat GPT
- Небольшие задачи
- Пишем 1, 2, 3 при пояснении.
- Указываем, что Chat GPT - профессиональный программист {язык программирования}.
- Если пишет ерунду, делим задачу на ещё более мелкие.
Практическая задача
Я уже писал про макросы в ноябре прошлого года https://t.me/blind_dev/915" target="_blank">https://t.me/blind_dev/915
Но тогда не было Chat GPT... Давайте создадим аналогичный документ сейчас с его помощью.
1. Создаём промпт
Промп = запрос.
- В начале пишем, что ИИ профессионал:
"Ты - профессионал в программировании макросов Libreoffice calc на VBA". - Пишем вводные:
"Есть calc документ: строка a: Название, доход, расход, остаток.
Строка 2: a2: "Результат", B2-D2 - формула суммы значений в соответствующих столбцах.
С третьей строки и далее идут уже разные доходы и расходы". - Ставим задачу:
"Создай макрос, который:
1. Вставит в столбец D в строках, где есть заполнение B или C формулу Bn - Cn (где n - строка).
2. В строке 2 добавит формулы сумм значений. Например, у B2 это будет сумма от B3 до B19, если числа есть с 3 по 19 строку.
У C2 будет формула от C3 до C17, если есть значения в этих строках.
В D - сумма остатков с D3 по D19". - Добавляем важное, чтоб гарантировать чёткость исполнения:
"Важно:
Цикл вставок должен опираться на данные в документе, а не на мной указанные числа".
Отправил запрос, и получил ответ:

Код:

Вставляем в Libreoffice calc или ваш редактор. Для этого в моём случае иду в Сервис, Макрос, редакировать макросы, выбираю текущий документ, и перехожу в редактор для Standart:

f5:

Ошибка. Смотрим её, строку:
lastRowB = Range("B" & Rows.Count).End(xlUp).Row
И пишем chat gpt, что он допустил ошибку. У вас может быть иная, т. к. используете другой редактор...

Chat GPT исправил код, но все равно неправильно:

Кстати, вникать в код нет необходимости: достаточно нажимать "Copy code" и вставлять в редактор макросов...
Продолжаю переписку:


Учёл, что я использую Libreoffice calc, но все равно ошибся:

Короче, копируем ошибки и вставляем.. до тех пор, пока не получим рабочий код:

Запускаем, и видим немного неточный результат:

Пишем уточнения:
"Код работает, но почему-то формула для вычитания B3-C3 оказалась в D4, B4-C4 в D5 и так далее.
Кроме того, вставлены формулы в строках с 7 по 20, хотя в них нет вовсе данных...
Исправь ошибку, и отправь код. Благодарю."

И опять прислал Chat GPT код с ошибкой...
В общем, вставляю ошибки и получаю ответы:

В итоге надоело, написал:
"Сделай реализацию через условие, проверяющее значение ячейки. если оно пустое, цикл прерывается."

Наверное, весь код (не знаю, влез или нет на скриншот):

"Программа Libreoffice calc после запуска подвисает, будто цикл выполняется без перерыва. При этом, ячейки не заполнены.
Через минуты две появилась ошибка:
"Ошибка времени выполнения Basic.
Свойство или метод не найдены: setCellType."
Строка:
sheet.getCellByPosition(1, 1).setCellType(com.sun.star.table.CellContentType.VALUE)"

В общем, тупит...
Возможно, что codex работает лучше - не пробовал...
Иногда ИИ выводит конкретную строку - тогда надо нажать в редакторе макросов ctrl+f, вставить строку старую, нажать "Enter", и заменить на новую.
В итоге я остановился на этом коде, т. к. он хотя бы работает...:

Единственное, попросил исправить ошибку с перемещением формулы ниже нужного...
Для этого написал:
"Ты ранее писал код:
... тут код
Но в столбце D почему-то вычитания вставляются на следующей строке... Допустим, в D4 B3-C3, В D5 B4-C4 и так далее...
Исправь это."
Ответ:

Заметьте: нет форматированного кода. В этом случае его придётся скопировать вручную.
Далее попросил:
"Можно ли вместо фиксированного числа 19 запрашивать его у пользователя при запуске макроса? Если да, измени код соответствующим образом."
Он ответил, но вернул ошибку. Указал на это:
"Отлично. И исправь ещё раз ошибку с переносом формулы на следующую строку (В d3 должно быть значение для B3-C3, и т. д.)"
Почему-то на это был дан ответ со старым кодом, в котором ошибка...
После вставки нужного с просьбой исправить, он отдал код без исправления.
Лишь когда указал конкретную ошибку вставки формулы в следующие строки, чем нужно, получилось...
Итоговый код:


Вставил в редактор макросов, и нажал F5:

Запрошен номер строки. Ввожу.
Иду в документ, и вижу введённые формулы:

Допустим, добавили новые данные. Захожу в "Сервис" -> "Макросы" -> "Выполнить макрос":

Нахожу свой:

Ввожу номер строки:

И получаю обновлённые данные:

Итог по задаче
Возможно не программисту будет сложновато, но всегда можно писать уточнения, а если не получится все равно, выбрать то, что работает...
Напоминаю кстати, что в варианте из видео в моём канале я создавал макрос с простой вставкой результата (без формулы), а также делал 2 макроса для указания профита или убытка...
Что ещё делал с Chat GPT
- Вчера было уже поздно: мне было лень делать вручную, поэтому попросил Chat GPT сделать express api скрипт на основе своего другого:

Полученный ответ:

На удивление, получилось с первого раза.
Далее пытался добиться создания авто документации от ИИ, но не получилось... Показывать уже не стану...
2. А здесь попросил сделать мне модальное окно на основе страницы в dpos.space:

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

И код бесполезный:

Дальше уже показывать не буду...
3. Можно спросить у Chat GPT, знает ли он о каком-то проекте / репозитории:

Далее отправил свой код с комментариями знающих людей о том, что не доделал:

И ИИ исправил:

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

Лишь после отправки полученного кода с просьбой доработать, получил корректный ответ:

Упрощаем задачи
Если поставить Chat GPT большую задачу, типа
"Создай html страницу.
Используй библиотеки minter-js-sdk и bip39-address-key2value.js (файл index.bundle.js).
Документация:
[Здесь код из Github]
..."
И т.д. Моя цель не ввести весь запрос, который большой, а сказать, что такое не сработает... Вспомните про то, что ИИ не может отправить больше 1000 символов.
Поэтому поступим иначе: запросим по частям...
"Ты отличный html и Javascript программист.
Создай html страницу с подключением minter-js-sdk и index.bundle.js.
Создай в секции head функции кодирования и декодирования согласно этой документации:
[здесь дока из Github]
В случае декодирования возвращается text."

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

Далее пишу:
"Добавь к существующему коду страницы функцию получения url.
В зависимости от него выводится тот или иной контент.
В body <div id="body"></div>
url могут иметь формат #dao/create, #dao/view/address
И пр.
Структура задаётся в переменной route.":

Указал, чтоб сделал объект без switch:
"Сделай объект роута вместо switch.
Пример:
let route = {
dao: {
create: <h1>Create dao</h1>
,
view: {
"$address": <h1>View DAO by {address}</h1>
}
}
}
Где address - произвольные данные, названные переменной address.":

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

Выше показал, что начинает не с того, с чего закончил...
Да ещё и разделил участки кода:

"Напиши только функцию обработки url и роута.":

Как-то так...
Всё
Показал вроде бы все возможности Chat GPT.
Использовать ли его в качестве помощника разработчику, решать вам. Я решил, что буду ставить небольшие задачи...
Например, вместо "Добавь к коду страницы ..." указать "Напиши функцию". А уже потом вставлять...
С вами был незрячий программист. Подписывайтесь на https://t.me/blind_dev," target="_blank">https://t.me/blind_dev, чтоб получать новые обзоры и новости по моим разработкам.
Comments