Введение
Коллеги, добрый день. Уже наверно многие знают, что такое искусственный интеллект - далее ИИ, каков принцип его работы и какие задачи он решает. Если нет, можно подробнее узнать, например, по этой ссылке искусственный интеллект. В этой статье хотел бы обратить внимание на нейросеть ChatGPT - в статье речь пойдет о ней. На сегодняшний день ИИ активно входит в нашу жизнь и умение им пользоваться будет необходимостью. Преимущества перед привычным поисковиком в том что например ChatGPT выдает решение по запросу в одном чате наиболее быстро, в этом же чате можно наводящими вопросами уточнять ответ, тогда как поисковик выдает ряд ссылок при этом пользователь анализирует наиболее релевантные на его взгляд статьи, посты, теряя на доп. анализ время.
Как начать пользоваться прямо сейчас бесплатно из России? В России данная нейросеть запрещена, поэтому будем использовать сервисы для подмены IP. Сервис для подмены IP - установим в браузере, например, в Google Chrome, переходим в магазин расширений
Находим, например, расширение Hola сервис для подмены IP - устанавливаем, готово.
Далее переходим на сайт OpenAI или по прямой ссылке ChatGPT, подключаем сервис для подмены IP. При подключении я использую страну Бразилия, заметил более стабильное подключение на ней, если заходите через OpenAI выбираем пункт меню
Заключительным этапом является регистрация - жмем sing in, в качестве почты используем почту, имеющую домен США, например gmail.com, дальше подтверждаем из почты регистрацию, готово, вы можете использовать бесплатную версию ChatGPT 3.5 (далее gpt3). За отдельную плату можете подключить ChatGPT 4, об отличиях версий можно узнать по ссылке 5 ключевых различий между GPT-4 и его предшественниками.
Структура промта для GPT
Промт — это запрос для нейросети, от английского «prompt». На практике у себя применяю следующую структуру промт запроса:
Роль (необязательно)
Цель запроса
Доп. информация (необязательно)
Уточнение (необязательно)
Примеры:
Ты опытный программист 1С (с 10 летним стажем). (Роль)
Объясни мне подробно, что делает данный код. (Цель запроса)
При анализе кода нужно вывести информацию, когда можно применить этот код (Доп. информация)
Перед тем, как ответить, задай любые вопросы чтобы помочь тебе предоставить более точную информацию. (Уточнение)
Кейс № 1. Анализ кода 1С
С помощью chat GPT 3.5 и выше можно анализировать написанный код на 1с, делать пользовательское описание, документацию, можно провести ревью кода, запросить, какие ошибки присутствуют в коде и как улучшить код. Однако ревью, поиск ошибок и улучшение кода версия 3.5 проводит не так глубоко и может закрыть небольшой процент технического долга. В части анализа также существуют проблемы: плохо написанный код, с неинформативными именами переменных, таблиц, псевдонимов, спагетти-код. gpt3 выдает неполную информацию, может пропускать участки кода, но если ему передавать на анализ код структурированный, написанный по стандартам и близким к нему, то нейросеть выдает вполне релевантный анализ, который в последующем можно использовать для создания документации, инструкции и передачи информации, например, аналитику, пользователю, просто сохранить описание работы кода для себя и т.д. Промт нужно составить максимально точно для того, чтобы получить наиболее верный ответ. Пример промта для gpt3, который я использую:
Ты опытный разработчик 1С (с опытом более 10 лет) - тут я ему определяю роль разработчика с большим опытом и язык, которым он владеет, для того, чтобы код был проанализирован максимально экспертно, более 10 лет можно не включать в промт.
Объясни мне (максимально) подробно, что делает данный код (на 1С) - тут я прошу подробный анализ с подробной детализацией кода.
КонтактнаяИнформацияОбъекты = Новый Массив; // Массив из СправочникОбъект
КонтактнаяИнформацияСсылки = Новый Массив;
Если ТипЗнч(Источник) = Тип("Массив") Тогда
СсылкиИлиОбъекты = Источник;
Иначе
СсылкиИлиОбъекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Источник);
КонецЕсли;
Для Каждого СсылкаИлиОбъект Из СсылкиИлиОбъекты Цикл
Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(СсылкаИлиОбъект)) Тогда
КонтактнаяИнформацияСсылки.Добавить(СсылкаИлиОбъект);
Иначе
КонтактнаяИнформацияОбъекты.Добавить(СсылкаИлиОбъект);
КонецЕсли;
КонецЦикла;
Дата = Отбор.Дата;
ТипыКонтактнойИнформации = Неопределено;
Если ЗначениеЗаполнено(Отбор.ТипыКонтактнойИнформации) Тогда
ТипыКонтактнойИнформации = Отбор.ТипыКонтактнойИнформации;
Если ТипЗнч(ТипыКонтактнойИнформации) = Тип("ПеречислениеСсылка.ТипыКонтактнойИнформации") Тогда
ТипыКонтактнойИнформации = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ТипыКонтактнойИнформации);
КонецЕсли;
КонецЕсли;
ВидыКонтактнойИнформации = Неопределено;
Если ЗначениеЗаполнено(Отбор.ВидыКонтактнойИнформации) Тогда
ВидыКонтактнойИнформации = Отбор.ВидыКонтактнойИнформации;
Если ТипЗнч(ВидыКонтактнойИнформации) = Тип("СправочникСсылка.ВидыКонтактнойИнформации") Тогда
ВидыКонтактнойИнформации = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ВидыКонтактнойИнформации);
КонецЕсли;
КонецЕсли;
Результат = НоваяКонтактнаяИнформация(Истина);
Если КонтактнаяИнформацияСсылки.Количество() > 0 Тогда
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
СоздатьВТКонтактнаяИнформация(Запрос.МенеджерВременныхТаблиц, КонтактнаяИнформацияСсылки, ТипыКонтактнойИнформации, ВидыКонтактнойИнформации, Дата);
ДействуетС = ?(ТипЗнч(Дата) = Тип("Дата"), "КонтактнаяИнформация.ДействуетС", "ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)");
Запрос.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Объект КАК Объект,
| КонтактнаяИнформация.Вид КАК Вид,
| КонтактнаяИнформация.Тип КАК Тип,
| КонтактнаяИнформация.Значение КАК Значение,
| КонтактнаяИнформация.ЗначенияПолей КАК ЗначенияПолей,
| КонтактнаяИнформация.НомерСтроки КАК НомерСтроки,
| КонтактнаяИнформация.ИдентификаторСтрокиТабличнойЧасти КАК ИдентификаторСтрокиТабличнойЧасти,
| &ДействуетС КАК Дата,
| КонтактнаяИнформация.Представление КАК Представление
|ИЗ
| ВТКонтактнаяИнформация КАК КонтактнаяИнформация
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДействуетС", ДействуетС);
РезультатСсылка = Запрос.Выполнить().Выгрузить();
Для каждого СтрокаКонтактнойИнформации Из РезультатСсылка Цикл
НоваяСтрока = Результат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнойИнформации);
Если ПустаяСтрока(НоваяСтрока.Значение)
И ЗначениеЗаполнено(НоваяСтрока.ЗначенияПолей) Тогда
НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей, НоваяСтрока.Тип);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Для Каждого КонтактнаяИнформацияОбъект Из КонтактнаяИнформацияОбъекты Цикл
Если СодержитКонтактнуюИнформацию(ТипЗнч(КонтактнаяИнформацияОбъект)) Тогда
Для каждого СтрокаКонтактнойИнформации Из КонтактнаяИнформацияОбъект.КонтактнаяИнформация Цикл
Если Не ЗначениеЗаполнено(СтрокаКонтактнойИнформации.Вид) Тогда
Продолжить;
КонецЕсли;
Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.КонтактнаяИнформацияОбъектаСодержитКолонкуДействуетС(КонтактнаяИнформацияОбъект.Ссылка) Тогда
Если СтрокаКонтактнойИнформации.ДействуетС > Дата Тогда
Продолжить;
КонецЕсли;
ФильтрПоДате = Новый Структура;
ФильтрПоДате.Вставить("Объект", КонтактнаяИнформацияОбъект);
ФильтрПоДате.Вставить("Вид", СтрокаКонтактнойИнформации.Вид);
НайденныеСтроки = Результат.НайтиСтроки(ФильтрПоДате);
Если НайденныеСтроки.Количество() > 0 Тогда
Если НайденныеСтроки[0].Дата < СтрокаКонтактнойИнформации.ДействуетС Тогда
Результат.Удалить(НайденныеСтроки[0]);
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если (ТипыКонтактнойИнформации = Неопределено Или ТипыКонтактнойИнформации.Найти(СтрокаКонтактнойИнформации.Тип) <> Неопределено)
И (ВидыКонтактнойИнформации = Неопределено Или ВидыКонтактнойИнформации.Найти(СтрокаКонтактнойИнформации.Вид) <> Неопределено) Тогда
НоваяСтрока = Результат.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКонтактнойИнформации);
НоваяСтрока.Объект = КонтактнаяИнформацияОбъект;
Если ПустаяСтрока(НоваяСтрока.Значение)
И ЗначениеЗаполнено(НоваяСтрока.ЗначенияПолей) Тогда
НоваяСтрока.Значение = КонтактнаяИнформацияВJSON(НоваяСтрока.ЗначенияПолей, НоваяСтрока.Тип);
КонецЕсли;
Если УправлениеКонтактнойИнформациейСлужебныйПовтИсп.КонтактнаяИнформацияОбъектаСодержитКолонкуДействуетС(КонтактнаяИнформацияОбъект.Ссылка) Тогда
НоваяСтрока.Дата = СтрокаКонтактнойИнформации.ДействуетС;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КодЯзыка = СтрРазделить(Отбор.КодЯзыка, "_", Истина)[0];
Если ЗначениеЗаполнено(КодЯзыка) И КодЯзыка <> ОбщегоНазначения.КодОсновногоЯзыка() Тогда
Для Каждого СтрокаТаблицы Из Результат Цикл
Если СтрокаТаблицы.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда
СтрокаТаблицы.Представление = СтроковыеФункции.СтрокаЛатиницей(СтрокаТаблицы.Представление);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Результат;
-
Сначала создаются два массива: КонтактнаяИнформацияОбъекты
и КонтактнаяИнформацияСсылки
. Эти массивы будут использоваться для хранения контактной информации объектов и ссылок соответственно.
-
Затем происходит проверка типа переменной Источник
. Если Источник
является массивом, то присваивается переменной СсылкиИлиОбъекты
, иначе вызывается функция ЗначениеВМассиве
для преобразования Источник
в массив.
-
Далее происходит цикл по каждому элементу СсылкаИлиОбъект
из массива СсылкиИлиОбъекты
. В зависимости от типа элемента он добавляется либо в массив КонтактнаяИнформацияСсылки
, либо в массив КонтактнаяИнформацияОбъекты
.
-
Затем определяются переменные Дата
, ТипыКонтактнойИнформации
и ВидыКонтактнойИнформации
на основе параметров Отбор.Дата
, Отбор.ТипыКонтактнойИнформации
и Отбор.ВидыКонтактнойИнформации
соответственно.
-
Создается объект Результат
, который будет хранить конечный результат.
-
Если в массиве КонтактнаяИнформацияСсылки
есть элементы, то создается запрос для получения контактной информации по ссылкам. Запрос формируется на основе временной таблицы ВТКонтактнаяИнформация
, которая создается вызовом функции СоздатьВТКонтактнаяИнформация
. Затем выполняется запрос, и его результаты добавляются в объект Результат
. При этом также выполняются дополнительные операции, такие как обновление значений и удаление строк в зависимости от даты и времени.
-
После этого происходит цикл по каждому объекту в массиве КонтактнаяИнформацияОбъекты
. Для каждого объекта проверяется наличие контактной информации, и если она есть, то добавляется в объект Результат
. Также выполняются дополнительные проверки и операции в зависимости от условий.
-
Наконец, если задан параметр Отбор.КодЯзыка
, и он отличается от основного языка системы, то происходит обновление представления контактной информации, если тип контактной информации является адресом.
В конечном итоге функция возвращает объект Результат
, содержащий контактную информацию, обработанную в соответствии с заданными параметрами.
Следующий вопрос:
Опиши код в виде документации?
// Функция: ОбработкаКонтактнойИнформации
// Описание:
// Данная функция предназначена для обработки контактной информации объектов в системе.
// Параметры:
// Источник - входной параметр, может быть массивом объектов или ссылкой на массив объектов, содержащих контактную информацию.
// Отбор - параметр, содержащий дополнительные параметры для фильтрации контактной информации, такие как дата, типы и виды контактной информации.
// Возвращаемое значение:
// Результат - результирующий объект, содержащий обработанную контактную информацию. Каждая строка объекта соответствует отдельному контакту и содержит следующие поля:
// - Объект: ссылка на объект, к которому относится контакт.
// - Вид: тип контактной информации.
// - Тип: дополнительная информация о типе контакта.
// - Значение: конкретное значение контактной информации.
// - ЗначенияПолей: дополнительные поля, связанные с контактной информацией.
// - НомерСтроки: номер строки, в которой хранится контакт в исходном наборе данных.
// - ИдентификаторСтрокиТабличнойЧасти: идентификатор строки табличной части, если контактная информация хранится в таком формате.
// - Дата: дата начала действия контакта, если такая информация доступна.
// - Представление: дополнительное представление контактной информации.
// Пример использования:
// Источник = ПолучитьСписокКлиентов(); // Получаем список клиентов из базы данных
// Отбор = Новый Структура("Дата, ТипыКонтактнойИнформации, ВидыКонтактнойИнформации", ТекущаяДата(), {"Телефон", "Email"}, Неопределено);
// Результат = ОбработкаКонтактнойИнформации(Источник, Отбор);
// // В результате будет обработанный список контактов клиентов, отфильтрованный по текущей дате и определенным типам и видам контактной информации.
А это описание функции из БСП:
////////////////////////////////////////////////////////////////////////////////
// Добавление, изменение и получение контактной информации.
// Возвращает таблицу, содержащую контактную информацию нескольких объектов.
//
// Параметры:
// Источник - Массив - владельцы контактной информации.
// Отбор - см. ОтборКонтактнойИнформации.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * Объект - ЛюбаяСсылка - владелец контактной информации.
// * Вид - СправочникСсылка.ВидыКонтактнойИнформации - вид контактной информации.
// * Тип - ПеречислениеСсылка.ТипыКонтактнойИнформации - тип контактной информации.
// * Значение - Строка - контактная информация во внутреннем формате JSON.
// * Представление - Строка - представление контактной информации.
// * Дата - Дата - дата, с которой действует запись контактной информации.
// * ИдентификаторСтрокиТабличнойЧасти - Число - идентификатор строки этой табличной части
// * ЗначенияПолей - Строка - устаревший XML, соответствующий XDTO пакетам КонтактнаяИнформация или Адрес. Для
// обратной совместимости.
//
Соответственно можно задокументировать существующий код при необходимости или выдать алгоритм работы кода аналитику или пользователю за несколько минут, также можно попробовать выявить ошибки кода и как их исправить, но gpt3 выдает общие рекомендации, поэтому для разработчиков малополезно, хотя можете определить для себя сами. Примеры промтов: "Как его можно было бы улучшить?", "Необходимо найти ошибку в коде, почему он не работает.", "Какие ошибки в данном коде?".
Кейс № 2. Помощь в написании кода 1С
Также у gpt3 можно запросить заготовку кода на 1с, у данной версии код не идеален, поэтому рефакторинг провести придется. Очевидно, что это может быть полезно для первоначальной заготовки каких-то общих процедур и функций, чтобы сократить время их написания, например: загрузка excel файла, написание post, get запросов через http соединение, заготовка текстов запросов из таблицы значений и т.д.
Пример 1, загрузка файла excel в 1с.
Промт.
Ты опытный разработчик 1с с опытом более 10 лет
Напиши мне код на 1с по загрузке excel файла через comОбъект
Процедура ЗагрузитьExcelФайлЧерезCOM()
// Создаем объект для работы с Excel через COM
Эксель = Новый COMОбъект("Excel.Application");
Если Эксель = Неопределено Тогда
Сообщить("Не удалось создать объект Excel через COM");
Возврат;
КонецЕсли;
// Открываем диалоговое окно для выбора файла
Файл = ВыбратьФайл("Выберите файл Excel", "Excel файлы (*.xls;*.xlsx)|*.xls;*.xlsx");
Если Файл <> Неопределено Тогда
// Открываем книгу Excel
Книга = Эксель.Workbooks.Open(Файл);
// Открываем первый лист книги
Лист = Книга.Worksheets.Item[1];
// Проходимся по ячейкам и выводим их значения
Для Строка = 1 По Лист.UsedRange.Rows.Count Цикл
Для Столбец = 1 По Лист.UsedRange.Columns.Count Цикл
Значение = Лист.Cells[Строка, Столбец].Value;
Сообщить(Строка + ", " + Столбец + ": " + Значение);
КонецЦикла;
КонецЦикла;
// Закрываем книгу и Excel
Книга.Close();
Эксель.Quit();
КонецЕсли;
КонецПроцедуры;
Провести рефакторинг, протестировать и вполне сгодится.
Пример 2, сборка запроса из таблицы значений.
Промт.
Ты опытный разработчик 1с
Напиши мне запрос на 1с, с выборкой из ТаблицаЗначений с полями: Сумма, СуммаВозврат, ТипОплаты, Содержание, Контрагент, Договор, Карта, расставь псевдонимы, поля должны быть приведены к типам с помощью функции Выразить
Перем ТЗНаВыборку;
ТЗНаВыборку = Новый ТаблицаЗначений;
ТЗНаВыборку.Колонки.Добавить("Сумма", Тип("Число"));
ТЗНаВыборку.Колонки.Добавить("СуммаВозврат", Тип("Число"));
ТЗНаВыборку.Колонки.Добавить("ТипОплаты", Тип("Строка"));
ТЗНаВыборку.Колонки.Добавить("Содержание", Тип("Строка"));
ТЗНаВыборку.Колонки.Добавить("Контрагент", Тип("Строка"));
ТЗНаВыборку.Колонки.Добавить("Договор", Тип("Строка"));
ТЗНаВыборку.Колонки.Добавить("Карта", Тип("Строка"));
// Заполнение ТаблицыЗначений ТЗНаВыборку данными...
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Выразить(ТЗ.Сумма, Число) КАК Сумма,
| Выразить(ТЗ.СуммаВозврат, Число) КАК СуммаВозврат,
| Выразить(ТЗ.ТипОплаты, Строка) КАК ТипОплаты,
| Выразить(ТЗ.Содержание, Строка) КАК Содержание,
| Выразить(ТЗ.Контрагент, Строка) КАК Контрагент,
| Выразить(ТЗ.Договор, Строка) КАК Договор,
| Выразить(ТЗ.Карта, Строка) КАК Карта
|ИЗ
| &ТаблицаЗначений КАК ТЗ";
Запрос.УстановитьПараметр("ТаблицаЗначений", ТЗНаВыборку);
Результат = Запрос.Выполнить();
Допустил ошибку в функции Выразить, но в целом при небольшом рефакторинге код можно использовать.
Пример 3, загрузка исходников в 1С.
Промт.
Ты опытный devops инженер со стажем более 10 лет
напиши мне скрипт по загрузке исходников в 1с из гитлаба
#!/bin/bash
# Устанавливаем переменные
GITLAB_URL="https://gitlab.com" # URL вашего GitLab
PROJECT_ID="your_project_id" # ID вашего проекта в GitLab
BRANCH="master" # Ветка, из которой вы хотите загрузить исходники
TMP_DIR="/tmp/1c_sources" # Временная директория для загрузки исходников
# Создаем временную директорию, если она не существует
mkdir -p $TMP_DIR
# Клонируем репозиторий из GitLab во временную директорию
git clone -b $BRANCH $GITLAB_URL/$PROJECT_ID.git $TMP_DIR
# Перемещаем исходники в нужную директорию 1C
cp -r $TMP_DIR/* /path/to/your/1c/source/directory
# Опционально: удаляем временную директорию
rm -rf $TMP_DIR
# Выводим сообщение об успешном завершении
echo "Исходники успешно загружены в 1C"
В принципе так и есть исходники сначала клонируем из GitLab, затем с помощью команд vrunner от oscript обновляем конфигурацию 1с.
Кейс № 3. Помощь в написании инструкции
Также gpt3 может подготовить некоторую инструкцию, например.
Промт.
Ты опытный DevOps инженер, со стажем более 10 лет
Опиши подробно инструкцию создания и настройки алертов в Grafana?
Конечно, вот подробная инструкция по созданию и настройке алертов в Grafana:
**Шаг 1: Установка Grafana**
Первым делом убедитесь, что у вас установлен и запущен Grafana на сервере. Вы можете установить Grafana из официального репозитория или использовать контейнер Docker.
**Шаг 2: Подключение источника данных**
1. Зайдите в интерфейс Grafana, используя браузер, и войдите в учетную запись администратора.
2. Перейдите во вкладку "Configuration" (Настройка) и выберите "Data Sources" (Источники данных).
3. Нажмите на кнопку "Add data source" (Добавить источник данных) и выберите тип источника данных, например, Prometheus, InfluxDB, Graphite и т.д.
4. Укажите параметры подключения к вашему источнику данных, такие как URL, имя пользователя, пароль и т.д.
5. Нажмите "Save & Test" (Сохранить и проверить) для сохранения настроек и проверки подключения к источнику данных.
**Шаг 3: Создание дашборда**
1. Перейдите во вкладку "Create" (Создать) и выберите "Dashboard" (Дашборд).
2. Нажмите на кнопку "Add new panel" (Добавить новую панель) и выберите тип графика или метрики, которые вы хотите отобразить.
3. Настройте график или метрику по вашему усмотрению, добавьте необходимые запросы и фильтры.
4. После завершения настройки панели нажмите на кнопку "Save dashboard" (Сохранить дашборд).
**Шаг 4: Создание алертов**
1. На дашборде, на котором вы хотите создать алерт, нажмите на иконку шестеренки в правом верхнем углу и выберите "Edit" (Редактировать).
2. Перейдите во вкладку "Alerts" (Алерты) и нажмите на кнопку "Create alert" (Создать алерт).
3. Нажмите на "Add new alert" (Добавить новый алерт) и настройте условия срабатывания алерта, такие как тип агрегации (например, avg, max, min), условие (например, больше, меньше), пороговое значение и т.д.
4. Укажите длительность времени, в течение которого условие должно выполняться для срабатывания алерта.
5. Укажите имя и описание алерта.
6. Выберите действие, которое должно произойти при срабатывании алерта, например, отправка электронного письма, вызов веб-хука и т.д.
7. Нажмите "Save" (Сохранить) для сохранения алерта.
Теперь у вас есть настроенные алерты в Grafana, которые будут оповещать вас о важных событиях на ваших дашбордах. Не забудьте настроить уведомления так, чтобы получать оповещения в случае срабатывания алертов.
Выдал инструкцию скорее всего не по актуальной версии графана, т.к. gpt3 обучен на данных до 2021 года, но при небольшом изменении и добавления скриншотов можно применить.
Кейс № 4. Помощь в подготовке данных
GPT может помочь собрать данные в JSON, например, для тестирования какой-нибудь функции для загрузки в 1с из JSON, собирает данные любой структуры, причем модифицирует их при необходимости, например: добавить, удалить свойство, добавить, удалить подчиненные свойства и т.д.
Промт.
Создай мне данные в формате json для интернет магазина. Должно быть 5 разных моделей холодильников, в каждом из которых должно быть 6 полей: Name, Article, Code, Brand, Region, SalePrice
{
"refrigerators": [
{
"Name": "Холодильник LG X123",
"Article": "LGX123",
"Code": "1001",
"Brand": "LG",
"Region": "Азия",
"SalePrice": 35000
},
{
"Name": "Холодильник Samsung S456",
"Article": "SAMS456",
"Code": "1002",
"Brand": "Samsung",
"Region": "Европа",
"SalePrice": 42000
},
{
"Name": "Холодильник Bosch B789",
"Article": "BOSB789",
"Code": "1003",
"Brand": "Bosch",
"Region": "Северная Америка",
"SalePrice": 48000
},
{
"Name": "Холодильник Whirlpool W101",
"Article": "WHIW101",
"Code": "1004",
"Brand": "Whirlpool",
"Region": "Азия",
"SalePrice": 39000
},
{
"Name": "Холодильник Electrolux E202",
"Article": "ELEE202",
"Code": "1005",
"Brand": "Electrolux",
"Region": "Европа",
"SalePrice": 41000
}
]
}
Следующий промт к изменению
Добавь еще массив свойств items с полями: resource_id, warehouse_id, quantity, comment
{
"refrigerators": [
{
"Name": "Холодильник LG X123",
"Article": "LGX123",
"Code": "1001",
"Brand": "LG",
"Region": "Азия",
"SalePrice": 35000,
"items": [
{
"resource_id": "RES001",
"warehouse_id": "WH001",
"quantity": 20,
"comment": "На складе"
},
{
"resource_id": "RES002",
"warehouse_id": "WH002",
"quantity": 15,
"comment": "Ожидается поставка через 2 недели"
}
]
},
{
"Name": "Холодильник Samsung S456",
"Article": "SAMS456",
"Code": "1002",
"Brand": "Samsung",
"Region": "Европа",
"SalePrice": 42000,
"items": [
{
"resource_id": "RES003",
"warehouse_id": "WH003",
"quantity": 10,
"comment": "На складе"
}
]
},
{
"Name": "Холодильник Bosch B789",
"Article": "BOSB789",
"Code": "1003",
"Brand": "Bosch",
"Region": "Северная Америка",
"SalePrice": 48000,
"items": [
{
"resource_id": "RES004",
"warehouse_id": "WH004",
"quantity": 5,
"comment": "На складе"
},
{
"resource_id": "RES005",
"warehouse_id": "WH005",
"quantity": 8,
"comment": "Ожидается поставка через 1 неделю"
}
]
},
{
"Name": "Холодильник Whirlpool W101",
"Article": "WHIW101",
"Code": "1004",
"Brand": "Whirlpool",
"Region": "Азия",
"SalePrice": 39000,
"items": [
{
"resource_id": "RES006",
"warehouse_id": "WH006",
"quantity": 18,
"comment": "На складе"
}
]
},
{
"Name": "Холодильник Electrolux E202",
"Article": "ELEE202",
"Code": "1005",
"Brand": "Electrolux",
"Region": "Европа",
"SalePrice": 41000,
"items": [
{
"resource_id": "RES007",
"warehouse_id": "WH007",
"quantity": 12,
"comment": "На складе"
},
{
"resource_id": "RES008",
"warehouse_id": "WH008",
"quantity": 10,
"comment": "Ожидается поставка через 3 недели"
}
]
}
]
}
Следующий промт к изменению
Удали свойство warehouse_id из items
{
"refrigerators": [
{
"Name": "Холодильник LG X123",
"Article": "LGX123",
"Code": "1001",
"Brand": "LG",
"Region": "Азия",
"SalePrice": 35000,
"items": [
{
"resource_id": "RES001",
"quantity": 20,
"comment": "На складе"
},
{
"resource_id": "RES002",
"quantity": 15,
"comment": "Ожидается поставка через 2 недели"
}
]
},
{
"Name": "Холодильник Samsung S456",
"Article": "SAMS456",
"Code": "1002",
"Brand": "Samsung",
"Region": "Европа",
"SalePrice": 42000,
"items": [
{
"resource_id": "RES003",
"quantity": 10,
"comment": "На складе"
}
]
},
{
"Name": "Холодильник Bosch B789",
"Article": "BOSB789",
"Code": "1003",
"Brand": "Bosch",
"Region": "Северная Америка",
"SalePrice": 48000,
"items": [
{
"resource_id": "RES004",
"quantity": 5,
"comment": "На складе"
},
{
"resource_id": "RES005",
"quantity": 8,
"comment": "Ожидается поставка через 1 неделю"
}
]
},
{
"Name": "Холодильник Whirlpool W101",
"Article": "WHIW101",
"Code": "1004",
"Brand": "Whirlpool",
"Region": "Азия",
"SalePrice": 39000,
"items": [
{
"resource_id": "RES006",
"quantity": 18,
"comment": "На складе"
}
]
},
{
"Name": "Холодильник Electrolux E202",
"Article": "ELEE202",
"Code": "1005",
"Brand": "Electrolux",
"Region": "Европа",
"SalePrice": 41000,
"items": [
{
"resource_id": "RES007",
"quantity": 12,
"comment": "На складе"
},
{
"resource_id": "RES008",
"quantity": 10,
"comment": "Ожидается поставка через 3 недели"
}
]
}
]
}
Видим, что с json gpt3 работает хорошо. Таким образом мы можем генерить любые необходимые данные в формате json.
Заключение
ChatGPT 3.5 применим, но с проверкой и рефакторингом результата, т.к. он не всегда релевантен, особенно в части 1С. Надо стараться уметь правильно создавать промты: наиболее подробно описывать, что нужно, какой метод использовать, если результат не совсем соответствует ожидаемому, можно задавать дополнительные вопросы в диалоге. Стоит заметить, что версия не является последней, как поведет себя в этих случаях ChatGPT 4 и ChatGPT 4 turbo, думаю будет выдавать более релевантные ответы. Также минусом ChatGPT 3.5 является то, что ему нельзя отправить более 4 096 «токенов», что примерно равно 8 000 словам, в то время как GPT-4 имеет максимальный размер токенов 32 768, это примерно соответствует 64 000 словам. ChatGPT способен снять некоторую рутину в части написания описаний, инструкций, документаций, генерации данных и т.д. Из удобств: удобно хранить задачи в каждом чате - для новой задачи достаточно завести новый чат, также он хранит историю переписки в каждом чате. Считаю, что пользоваться ИИ нужно со знанием дела лишь для закрытия каких-то рутинных задач и всегда проверять результаты. Также стоит учитывать тот момент, что с каждым годом нейросети будут становиться умнее, т.к. будут обучаться на более актуальных данных, что повлияет на результаты.
Также предлагаю решения вашему вниманию:
Применение cтандартов и методик разработки конфигураций на практике
Шаблоны для применения cтандартов и методик разработки конфигураций 1С
Простой пример разработки регулярного обмена с использованием БСП на примере ERP 2.4 и УПП 1.3.
Универсальный отчет для сравнения записей регистров накопления между базами.
Универсальная выгрузка и загрузка зарегистрированных справочников и документов по узлу.
Загрузка данных из унифицированных форм УПД и ТОРГ-12.
Список документов и их количество в базе.