- Регистрация
- 22.03.2019
- Сообщения
- 1 882
- Благодарностей
- 1 262
- Баллы
- 113
Скажу сразу, я не программист, к программированию имею такое же отношению как к строительству мостов – красиво, но непонятно.
Если у тебя возник вопрос «В чем проблема написать снипет для ЗП», значит ты уже постиг дзен и тебе эта тема не нужна, но на форуме масса примеров, когда даже не новичок задается вопросом - «Как мне сделать что бы ...? ГПТ дает нерабочий код». Дьявол как обычно кроется в деталях, а точнее в систем промт. Если сходу вбить в чат свой вопрос, каким бы подробным он не был, все равно ты получишь код, который без доработки напильником с 90% вероятностью работать в кубике ZP не будет.
Я в свое время тоже намучался, давал уточнения и пояснения, что делать, а чего не нужно писать, но все равно, для получения рабочего кода, который будет работать в кубике scharp приходилось попотеть, с первого же раза код, который бы работал не выходил почти никогда. Для ГПТ чата мы все извращенцы со своими тараканами и ненормальными хотелками, которые в правила кодописания не укладываются.
После осознания, что без систем промта не обойтись, я начал его составлять. Задавал правила написания кода, стили, примеры, в том формате, что бы на выходе, в 99% случаях получать валидный результат. Подключал к написанию саму нейросеть, которая вносила своё понимание как нужно писать код для зенки. По прошествии полугода получил то, чем готов поделится с сообществом.
В качестве примера рассмотрим простой вариант, когда нужно обработать JSON и получить необходимые значения в переменные.
напиши код сишарп.
Есть джсон в переменной json:
{"name":"ExampleName","code":"SGVsbG8gd29ybGQh"}
значение name берем в переменную name
значение соде - расшифровываем из бас64 и кладем в переменную code
Можно задание давать в произвольной форме, без сантиментов, но желательно, что бы логические шаги были выстроены так, как Буд-то вы пишете ТЗ для профессионала, как его понимаете вы.
https://chat.qwen.ai/
Что выдает нам чат без использования систем промт
Как видно, тут присутствуют все признаки того, что код не будет работать в кубике, это и using, и static void Main(), и конечно же Console.WriteLine, куде же без него 
А теперь закинем в новый чат наш систем промт и зададим тот же самый вопрос
Как видим, ничего лишнего, только рабочий код.
https://claude.ai/
без систем промт
с использованием системного промта
https://chat.deepseek.com и https://chatgpt.com дают примерно аналогичные результаты
Как видим, ГПТ чаты при использования системного промта справляются с задачей гораздо лучше чем без него. Если же дать гораздо сложную задачу, когда нужно применить криптографические умения, вычисления или сложные преобразования, тот без системного промта вовсе не обойтись. Он вам сэкономит не только время, но и нервы и деньги.
Ну а если выдает простыни кода, просто напиши ему «максимально компактифицируй код» и в ответ получите лаконичный код, без воды.
С данным систем-промтом не нужно создавать сложный запрос с рекомендованной структурой, в простых случаях будет достаточно основных пунктов:
Вводные данные: Указать вводные данные (переменные, формат, методы создания и т.д.)
Задача: мне нужен код который ... (написать примерную последовательность как понимаешь ее ты)
Результат: результат положи в переменную var
Данный промт не окончательный, не претендует на идеал, будет правится, но последняя версия пока будет лежать тут https://github.com/boyhood-fallers0v/Zennoposter-Csharp-SystemPrompt/blob/main/zp_system_prompt.md
Не стесняйся, предлагай дополнения – буду только рад вашим правкам.
Так же, накидайте сюда вопросов к ГПТ, на которые он дает нерабочий код хотя бы в двух чатах. Буду править промт.
НЮАНСЫ
Если код большой и сложный, и появляются ошибки, добавь к запросу:
- Добавь логирование каждого шага
Если полученный результат не тот который ожидал, просто выдели весь лог выполнения кубика и отправь его в чат с пояснениями или без.
БОНУС
Если попросить гпт сделать такой код:
Есть файл C:\profile\profile_name.zpprofile // Замени на свой
распакуй его во временную папку
Прочитай файл browserprofiledata.zpdata
В нем JSON
сделай ему тустринг
то на выходе во вкладке JSON получим все данные нашего браузера.
Не забудьте добавить в GAC необходимые библиотеки.
Так же, его можно сериализовать и снова запаковать но со своими данными, которые изменить средствами ЗП невозможно.
Решенные кейсы пользователей форума
- https://zenno.club/discussion/threads/semrush-svg-parsing.127461/#post-844554
- https://zenno.club/discussion/threads/sgenerirovat-vse-vozmozhnye-stroki-v-7-simvolov-iz-ciferno-bukvennogo-rjada.105234/post-838286
- https://zenno.club/discussion/threads/kak-otredaktirovat-takie-dannye-v-tablice.125038/post-828865
Используя системный промт можно получать рабочий и самодостаточный код, который в ЗП можно реализовать только с использованием внешних библиотек. Я таким образом сделал кубик, который получает список писем авторизуясь по Oauth2 без использования внешних библиотек.

Я в свое время тоже намучался, давал уточнения и пояснения, что делать, а чего не нужно писать, но все равно, для получения рабочего кода, который будет работать в кубике scharp приходилось попотеть, с первого же раза код, который бы работал не выходил почти никогда. Для ГПТ чата мы все извращенцы со своими тараканами и ненормальными хотелками, которые в правила кодописания не укладываются.
После осознания, что без систем промта не обойтись, я начал его составлять. Задавал правила написания кода, стили, примеры, в том формате, что бы на выходе, в 99% случаях получать валидный результат. Подключал к написанию саму нейросеть, которая вносила своё понимание как нужно писать код для зенки. По прошествии полугода получил то, чем готов поделится с сообществом.
В качестве примера рассмотрим простой вариант, когда нужно обработать JSON и получить необходимые значения в переменные.
напиши код сишарп.
Есть джсон в переменной json:
{"name":"ExampleName","code":"SGVsbG8gd29ybGQh"}
значение name берем в переменную name
значение соде - расшифровываем из бас64 и кладем в переменную code
Можно задание давать в произвольной форме, без сантиментов, но желательно, что бы логические шаги были выстроены так, как Буд-то вы пишете ТЗ для профессионала, как его понимаете вы.
https://chat.qwen.ai/

C#:
using System;
using System.Text;
using System.Text.Json;
class Program
{
static void Main()
{
// Пример JSON строки
string jsonString = "{\"name\":\"ExampleName\",\"code\":\"SGVsbG8gd29ybGQh\"}";
// Десериализация JSON
JsonDocument jsonDoc = JsonDocument.Parse(jsonString);
JsonElement root = jsonDoc.RootElement;
// Извлечение значения name
string name = root.GetProperty("name").GetString();
Console.WriteLine($"Name: {name}");
// Извлечение и декодирование значения code из Base64
string base64Code = root.GetProperty("code").GetString();
byte[] data = Convert.FromBase64String(base64Code);
string code = Encoding.UTF8.GetString(data);
Console.WriteLine($"Decoded Code: {code}");
}
}


C#:
// Допустим, что JSON находится в переменной project.Variables["json"].Value
string json = project.Variables["json"].Value;
// Десериализация JSON
var obj = Global.ZennoLab.Json.JsonConvert.DeserializeObject<dynamic>(json);
// Получение значения name
string name = obj.name;
// Расшифровка значения code из Base64
string codeBase64 = obj.code;
string code = Encoding.UTF8.GetString(Convert.FromBase64String(codeBase64));
// Сохранение значений в переменные проекта
project.Variables["name"].Value = name;
project.Variables["code"].Value = code;
https://claude.ai/

C#:
using System;
using System.Text;
using Newtonsoft.Json;
class Program
{
static void Main()
{
// JSON строка
string json = "{\"name\":\"ExampleName\",\"code\":\"SGVsbG8gd29ybGQh\"}";
// Десериализация JSON
dynamic jsonObject = JsonConvert.DeserializeObject(json);
// Получение значения name
string name = jsonObject.name;
// Получение значения code и декодирование из Base64
string base64Code = jsonObject.code;
byte[] codeBytes = Convert.FromBase64String(base64Code);
string code = Encoding.UTF8.GetString(codeBytes);
// Вывод результатов
Console.WriteLine($"Имя: {name}");
Console.WriteLine($"Декодированный код: {code}");
}
}

C#:
// Предполагаем, что JSON строка уже хранится в переменной проекта
string json = project.Variables["json"].Value;
// Парсим JSON
project.Json.FromString(json);
// Получаем значение "name" и сохраняем в переменную "name"
if (!project.Variables.Keys.Contains("name")){
object obj = project.Variables;
obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj, new Object[]{"name"});
}
project.Variables["name"].Value = project.Json.name;
// Получаем значение "code", декодируем из Base64 и сохраняем в переменную "code"
string base64Code = project.Json.code;
string decodedCode = Encoding.UTF8.GetString(Convert.FromBase64String(base64Code));
if (!project.Variables.Keys.Contains("code")){
object obj = project.Variables;
obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj, new Object[]{"code"});
}
project.Variables["code"].Value = decodedCode;
// Логирование для проверки (опционально)
project.SendInfoToLog($"Имя: {project.Variables["name"].Value}", false);
project.SendInfoToLog($"Раскодированный код: {project.Variables["code"].Value}", false);
Как видим, ГПТ чаты при использования системного промта справляются с задачей гораздо лучше чем без него. Если же дать гораздо сложную задачу, когда нужно применить криптографические умения, вычисления или сложные преобразования, тот без системного промта вовсе не обойтись. Он вам сэкономит не только время, но и нервы и деньги.
Ну а если выдает простыни кода, просто напиши ему «максимально компактифицируй код» и в ответ получите лаконичный код, без воды.
С данным систем-промтом не нужно создавать сложный запрос с рекомендованной структурой, в простых случаях будет достаточно основных пунктов:
Вводные данные: Указать вводные данные (переменные, формат, методы создания и т.д.)
Задача: мне нужен код который ... (написать примерную последовательность как понимаешь ее ты)
Результат: результат положи в переменную var
Данный промт не окончательный, не претендует на идеал, будет правится, но последняя версия пока будет лежать тут https://github.com/boyhood-fallers0v/Zennoposter-Csharp-SystemPrompt/blob/main/zp_system_prompt.md
Не стесняйся, предлагай дополнения – буду только рад вашим правкам.
Так же, накидайте сюда вопросов к ГПТ, на которые он дает нерабочий код хотя бы в двух чатах. Буду править промт.
НЮАНСЫ
Если код большой и сложный, и появляются ошибки, добавь к запросу:
- Добавь логирование каждого шага
Если полученный результат не тот который ожидал, просто выдели весь лог выполнения кубика и отправь его в чат с пояснениями или без.
БОНУС
Если попросить гпт сделать такой код:
Есть файл C:\profile\profile_name.zpprofile // Замени на свой
распакуй его во временную папку
Прочитай файл browserprofiledata.zpdata
В нем JSON
сделай ему тустринг
то на выходе во вкладке JSON получим все данные нашего браузера.
Не забудьте добавить в GAC необходимые библиотеки.
Так же, его можно сериализовать и снова запаковать но со своими данными, которые изменить средствами ЗП невозможно.
Решенные кейсы пользователей форума
- https://zenno.club/discussion/threads/semrush-svg-parsing.127461/#post-844554
- https://zenno.club/discussion/threads/sgenerirovat-vse-vozmozhnye-stroki-v-7-simvolov-iz-ciferno-bukvennogo-rjada.105234/post-838286
- https://zenno.club/discussion/threads/kak-otredaktirovat-takie-dannye-v-tablice.125038/post-828865
Используя системный промт можно получать рабочий и самодостаточный код, который в ЗП можно реализовать только с использованием внешних библиотек. Я таким образом сделал кубик, который получает список писем авторизуясь по Oauth2 без использования внешних библиотек.
Вложения
-
18 КБ Просмотры: 27
Последнее редактирование: