March 4, 2023

Chat GPT в помощь программисту

Хороший инструмент, хотя, конечно, есть и недостатки...
С них и начну:

  1. Количество символов сообщения ограничено 1000 или около того: большой код Chat GPT не сможет написать.
  2. Продолжение иногда корректно срабатывает: может начать писать код заново или выделить только одну функцию из кода...
  3. Если задача поставлена нечётко, скорее всего напишет неправильно...
  4. Вероятно, есть и другие минусы, о которых забыл...

Но всё перевешивает плюс: порой помогает значительно экономить время (зависит от сложности).

Для чего эта статья?

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

Фишка в том, что вам ИИ (не считаю Chat GPT искусственным интеллектом - грамотно сделанная нейронная сеть с машинным обучением, но для сокращения будем обозначать так) тоже может помочь...

Правила работы с Chat GPT в качестве программиста

  1. Небольшие задачи
  2. Пишем 1, 2, 3 при пояснении.
  3. Указываем, что Chat GPT - профессиональный программист {язык программирования}.
  4. Если пишет ерунду, делим задачу на ещё более мелкие.

Практическая задача

Я уже писал про макросы в ноябре прошлого года https://t.me/blind_dev/915

Но тогда не было Chat GPT... Давайте создадим аналогичный документ сейчас с его помощью.

Создаём промпт

Промп = запрос.

  • В начале пишем, что ИИ профессионал:
    "Ты - профессионал в программировании макросов 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

  1. Вчера было уже поздно: мне было лень делать вручную, поэтому попросил 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, чтоб получать новые обзоры и новости по моим разработкам.у