Как заставить GPT писать рабочий C# код для ZennoPoster: секреты системных промптов

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 884
Благодарностей
1 275
Баллы
113
Скажу сразу, я не программист, к программированию имею такое же отношению как к строительству мостов – красиво, но непонятно.

❓ Если у тебя возник вопрос «В чем проблема написать снипет для ЗП», значит ты уже постиг дзен и тебе эта тема не нужна, но на форуме масса примеров, когда даже не новичок задается вопросом - «Как мне сделать что бы ...? ГПТ дает нерабочий код». Дьявол как обычно кроется в деталях, а точнее в систем промт. Если сходу вбить в чат свой вопрос, каким бы подробным он не был, все равно ты получишь код, который без доработки напильником с 90% вероятностью работать в кубике ZP не будет.

Я в свое время тоже намучался, давал уточнения и пояснения, что делать, а чего не нужно писать, но все равно, для получения рабочего кода, который будет работать в кубике 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}");
    }
}
Как видно, тут присутствуют все признаки того, что код не будет работать в кубике, это и using, и static void Main(), и конечно же Console.WriteLine, куде же без него :-)

✅ А теперь закинем в новый чат наш систем промт и зададим тот же самый вопрос
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);
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 без использования внешних библиотек.
 

Вложения

Последнее редактирование:

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 516
Благодарностей
592
Баллы
113
Рабочий промт, я тестировал уже несколько раз. Мне зашло, спасиба)
 
  • Спасибо
Реакции: ZennoLab Team и zarufakis
Регистрация
26.05.2020
Сообщения
540
Благодарностей
184
Баллы
43
А я занедорого урвал годовую подписку перплексити и настроил свой space под это дело - тоже неплохо работает. Автору спасибо - добавил в контекст линк на гитхабку :-)

134369


Недавно было сложная задача, и все нейронки тупили безбожно, гоняли по кругу с одинаковыми глюками.
В итоге только бесплатный Gemini справился с задачей в 2 шага. Кажется, эта топ-нейронка для кодинга. Claude не юзал, кстати, для работы с зенно...
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 884
Благодарностей
1 275
Баллы
113
Claude не юзал, кстати, для работы с зенно...
Только им и пользуюсь, по тестам сонет показывает прекрасные результаты в кодинге, но бывает и она глючит. Больше всего раздражают return; в коде, а так, иной раз с первого раза пишет что нужно, главное правильно дать задачу.
 
  • Спасибо
Реакции: Meteorburn
Регистрация
26.05.2020
Сообщения
540
Благодарностей
184
Баллы
43
иной раз с первого раза пишет что нужно, главное правильно дать задачу
ключевое именно "правильно дать задачу". Заметил, что с моим текущим контекстом при этой вводной генерит верный код с 1 раза, изредка с уточенениями. Просто нам лень ее правильно ставить )))
Но я прикладываю например скрин с devtools или таблицей, чтоб не описывать данные, и указываю исходные переменные и выходные. А, ну и саму задачу между ними )))
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 115
Благодарностей
135
Баллы
63
А я занедорого урвал годовую подписку перплексити и настроил свой space под это дело - тоже неплохо работает. Автору спасибо - добавил в контекст линк на гитхабку :-)

Посмотреть вложение 134369

Недавно было сложная задача, и все нейронки тупили безбожно, гоняли по кругу с одинаковыми глюками.
В итоге только бесплатный Gemini справился с задачей в 2 шага. Кажется, эта топ-нейронка для кодинга. Claude не юзал, кстати, для работы с зенно...
А как работать в этих space?
Например, решил одну задачу.
Другую в этом же space, т.е. все внавал, в один контекст?
И еще хотел спросить, куда указывать ссылку на github - на папку непосредственно со сниппетами или главную?
 
Регистрация
26.05.2020
Сообщения
540
Благодарностей
184
Баллы
43
А как работать в этих space?
134397


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

PRO-аккаунт на год брал на диге по цене дешманского кофейку...
 
Последнее редактирование модератором:
  • Спасибо
Реакции: bizzon

Brabus_bots

Client
Регистрация
13.04.2019
Сообщения
867
Благодарностей
568
Баллы
93
Действительно полезная тема для статьи. Многим зеноводам, уверен, будет полезно.

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

Новичкам в c# советую понять основы кодинга (перемнные, циклы,массивы и т.п.) и основы ООП хотя бы на уровне "знаю, что такое класс и объект класса".

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

Основы кодинга можно изучить по моим статьям:
• Начинаем кодить на c# (часть 1). Основы
• Начинаем кодить на c# (часть 2). Что такое ООП? Принципы ООП. Примеры в Zennoposter

Или же в гугле\ютубе\учебниках. Если честно - без разницы, т.к. основы везде будут описаны плюс минус одинаково)
 
  • Спасибо
Реакции: bizzon и zarufakis

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 884
Благодарностей
1 275
Баллы
113
Эти базовые знания в комбинации с темой, которую поднял автор в данной статье - дадут вам ощутимый буст в написании шаблонов
Из последних моих решенных кексов - код для похождения "PRESS & HOLD" при регистрации Микрософт акаунтов. Сам код не большой, 1k символов, но повозится пришлось двое суток, что бы найти как его правильно проходить.
Если бы не мой систем промт, не факт, что это решение бы реализовалось. Не говоря уже о других кейсах, которых в паблике точно не будет.
 
  • Спасибо
Реакции: Brabus_bots

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 967
Благодарностей
1 718
Баллы
113
Блин я в шоке, какие промты зачем? непользовался и не собираюсь. Общаюсь с ChatGPT прекрасно друг друга понимаем, вот ну прям честно. Если я ему говорю напиши мне код для зенки или для зенно постер, или мне нужен сниппет для зенно то он мне пишет без проблем, без методов, без юзингов, по нормальному все. Какие то промты выдумывают... без них отлично живется)
 

zarufakis

Client
Регистрация
22.03.2019
Сообщения
1 884
Благодарностей
1 275
Баллы
113
Блин я в шоке, какие промты зачем? непользовался и не собираюсь. Общаюсь с ChatGPT прекрасно друг друга понимаем, вот ну прям честно. Если я ему говорю напиши мне код для зенки или для зенно постер, или мне нужен сниппет для зенно то он мне пишет без проблем, без методов, без юзингов, по нормальному все. Какие то промты выдумывают... без них отлично живется)
Для таких как ты и было написано вступление первого абзаца. Спасибо.
 

kelvin

Client
Регистрация
25.10.2019
Сообщения
12
Благодарностей
6
Баллы
3
aistudio.google.com отлично справляется с кодом для зеннопостера. Крайне рекомендую. Кстати, не забывайте про яваскрипты, которые работают как отдельно, так в коде с#: на одном сайте никак не мог быстро вставить в форму данные, кроме как через буфер обмена ( или медленно эмуляцией клавиатуры). Но в итоге получил код на яваскрипте - все вставляется моментально, сайт принимает. При многопотоке ошибок нет.

За промпт - спасибо, дополнил свой )
 
  • Спасибо
Реакции: smartmail и Brabus_bots

smartmail

Client
Регистрация
18.04.2015
Сообщения
419
Благодарностей
210
Баллы
43
aistudio.google.com отлично справляется с кодом для зеннопостера. Крайне рекомендую. Кстати, не забывайте про яваскрипты, которые работают как отдельно, так в коде с#: на одном сайте никак не мог быстро вставить в форму данные, кроме как через буфер обмена ( или медленно эмуляцией клавиатуры). Но в итоге получил код на яваскрипте - все вставляется моментально, сайт принимает. При многопотоке ошибок нет.

За промпт - спасибо, дополнил свой )
тоже на одном из сайтов столкнулся с подобным - grok решил проблему именно яваскриптом
 

Кто просматривает тему: (Всего: 2, Пользователи: 1, Гости: 1)