Вы уже пробовали писать код с помощью инструментов ИИ? В этой статье я поделюсь одним из своих первых опытов кодирования с помощью ИИ.

Предыстория

Делал я когда‑то кастомную систему управления файлами для моих задач. Делал я ее для себя. Для своего удобства в работе и не только. Но сейчас не про эту систему. А про то, что идеальным дополнением этой системы мог бы стать кастомный скриншотер, который обладал бы определенным набором функций редактирования и сохранения скриншотов.

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

И, как часто бывает с задачами, которые делаются для себя и не приносят прямой выгоды (а может, и вовсе не принесут!), я задался вопросом: стоит ли тратить много времени на такой проект? В итоге идея кастомного скриншотера была отложена на неопределенный срок.

И вот теперь, когда появился GenAI, который пишет во много раз быстрее и знает много кода, я решил, что стоит испробовать его возможности для кастомного скриншотера. Благо я прекрасно знал все требования, которые у меня будут...

Краткое отступление: некоторые критикуют GenAI, дескать, хватит постить тут, как вы с помощью GenAI микро‑задачки решаете. Попробуйте с помощью GenAI тяжелый коммерческий монолит написать.

Отвечу на это так: писать тяжелые монолиты в большинстве случаев — это не самая удачная практика. И все инженерное IT сообщество стремится уйти от больших структур логики к малым, которые можно между собой компоновать. Отсюда появилось и ООП и микросервисы.

Мой скриншотер уж точно не претендует на звание сложного или большого приложения. Однако это самостоятельный модуль с законченным набором требований и user value.

Требования к софту (скриншотеру) кратко

Функциональные:

  • Скриншотер должен вызываться из внешней системы с параметрами для сохранения.

  • Скриншотер должен иметь функции рисования поверх стрелочек, прямоугольников, закрашенных прямоугольников, размытие части изображения, обрезка, смена цвета.

UI/UX:

  • Удобное меню (желательно в виде иконок).

  • Горячие клавиши отмены, отмены редактирования и сохранения.

Технические:

  • Скриншот экрана должен сниматься меньше чем за секунду.

  • Для сохранения должен использоваться стандартный формат png.

Окей, требования и понимание, зачем это нужно, есть. Это уже 50% успеха. 

Но на чем заставить писать код GenAI?  

Ведь большинство из них знают много языков. Для меня выбор пал на Python. Почему?

  1. Моя задача не требовательна к ресурсам и скорости.

  2. Я смогу проконтролировать код и понять, если где‑то идет конкретная халтура.

  3. Когда я сам начал писать некоторые вещи на Python, меня больше всего радовало, что 80% решений (если не больше) уже лежит на Stackoverflow, т. е. в открытом доступе. т. е. нейросетки с большей вероятностью тоже знают все эти решения.

Какую GenAI выбрать для создания своего ПО?

  • ChatGPT, как самый популярный и возможно мощный?

  • Claude, который хвалят многие разработчики?

  • Copilot, от Microsoft?

  • Gemini, от Google?

  • Или что‑то еще?...

Мои впечатления от нейросеток в программировании.

Примечание 1: я описываю свой опыт на середину 2024. Сейчас уже вышло огромное количество обновлений и альтернатив. Хотя приведенные мной модели актуальны и в 2025 году.

Примечание 2: т.к. я не являюсь профессиональным программистом и программирую очень редко, то речь идет об LLM доступных через web UI, а не через API.

Я попробовал 3 из перечисленных в прошлом посте, а именно: ChatGPT4o, Claude 3.5 sonnet и Copilot, доступный по умолчанию в Edge.

Сopilot отпал сразу, так как на запрос о скриншотере и еще паре моих идей программ он давал весьма плохие и даже неполноценные ответы. Может быть дело в качестве моих промптов. Но с теми же промптами я пробовал и другие AI.

ChatGPT4o и Claude 3.5 sonnet — очень близко! Но на мой субъективный взгляд:

ChatGPT4o более творческий и отлично подходит для прототипирования приложения. Claude 3.5 sonnet более четкий и отлично подходит для допиливания приложения (хотя и для полного цикла работ отлично подходит).

Хотя на момент написания статьи (07.2025) я бы под данную задачу выбрал Claude Sonnet 4.

Какой промт нужен, чтобы ИИ создал для вас готовое ПО?

Как я описывал ранее, ChatGPT4o мне показался наиболее подходящим для старта создания приложения, поэтому покажу здесь версию, которую удалось с ним получить.

Я не знал, как лучше задать промпт к ИИ: в виде подробного описания требований сразу или же в духе цепочки рассуждений. Но так как моя задача не являлась оригинальной, то я начал с весьма простого запроса, понадеявшись, что ИИ меня поймет и выдаст мне решение для довольно стандартного скриншотера.

Мой первый запрос:

Write a python script that allows to make an instant screenshot with editing tools of the screenshot like: draw an arrow, draw a rectangle, blur an area, change color. The script should save screenshots to a folder wich is a parameter in command line.

Результат вы можете увидеть ниже. Собственно сам виноват. Какой был запрос, такой и ответ.

Поэтому уточняем, что мы хотим:

I need to specify: after screenshot is taken, I want to see a menu that offers me to draw a red arrow, red rectangle with my mouse, change color of previous tools and blur some rectangle area with my mouse. Please add those functions to the script.

И в ответ на второй запрос уже получаем внятное решение. Исправляем небольшую ошибку зависимостей и вуаля! Результат ниже.

Результаты после первых промптов
Результаты после первых промптов

Итак первая версия ПО, написанного с помощью ИИ готова!

В ней были только основные функции. Также в ней были баги сохранения и отрисовки стрелочек, и простейшее меню: текст вместо иконок.

Но самое главное, что ИИ справился. С этим можно работать. Тем более что за 5 минут такой прототип сам не напишешь.

Ну а далее... на то мы специалисты, чтобы доводить какой-то код до конечного результата.

На данном этапе можно даже сказать, что опыт Product owner-а возможно был бы более полезен в работе с ИИ, чем опыт разработчика. Но это только начало.

Что дальше?

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

Например баг сохранений исправляем с помощью следующего промпта.

ok, great. Now I need to save all screenshots with its data and time in title.

Еще один фикс - отрисовка стрелочек:

Now let's improve draw_arrow function. 1. Now I see the arrows only when I released mouse button. I want to see what I am drawing while I am holding the left button of the mouse. 2. I want to fix the bug: now the top of the arrow always looking down. I want all parts of the arrow were transformed according to its direction.

Готово.

Добавляем ещё фичи, которые мне были нужны.

Т. е. все фичи скриншотера для меня были разделены на несколько уровней:

  • 0 — без этих фичей приложение не было смысла даже делать

  • 1 — также нужные фичи, с ними будет уже совсем юзабельно

  • 2 — если ещё и эти фичи будут, то вообще идеально

Чтобы не путать исполнителя (нашего ИИ), вначале сделали и довели до ума фичи с приоритетом 0. Потом доделываем фичи из уровня 1. Ну и если есть ресурс, чтобы сделать уровень 2, то делаем его.

По ходу реализации функционала из уровня 1. всплыла новая фича, — дизайнерская, но все‑таки в этом же приорите.

Во время таких инструментов, как рисование прямоугольников, обрезка кадра или размытие нужна анимация, чтобы мы понимали координаты области инструмента. Просим добавить и ее.

Could you please add preview feature to draw_rectangle and blur_area functions. If blur_area function is high source costed, you may just draw temporary dotted line rectangle while holding the mouse button and make blure_area function after releasing the mouse button.

ИИ меня прекрасно понимает и дописывает.

Хотя стоп. После тестирования приложения я понял — последняя функция не так уж и идеальна. Поэтому нам нужно исправить функцию предварительного просмотра:

let's make a small fix of draw_dashed_rectangle function. When I am using instruments from top‑left to bottom‑right, draw_dashed_rectangle works perfectly. But if I change the direction, draw_dashed_rectangle can render incorrectly sometimes.

Что дальше? Дальше я хотел добавить некоторые функции из уровня 1.

Я не хочу загружать вас всеми функциями, исправлениями, промптами и примерами кода. Но я покажу вам ключевые изменения и промпты проекта в следующей части статьи.

Улучшение меню

Для создания оптимизированного меню я обратился к ИИ со следующим запросом:

Now I want to improve the menu. Instead of vertical menu “Edit” I want to see all options on the top of horizontal menu. So I don't need to extra click to reach features.

Draw_bar and Draw_text функции

Промпт:

Now add new functions: 1. draw_bar function. It looks almost the same like draw_rectangle function, but the bar should be filled with the color inside its area. 2. draw_text function. It allows to write text over the screenshot with the chosen color. Add those function to the menu.

Функция Cut_image

Промпт:

Let's add “cut image” function. I want to have ability to choose rectangle area to save.

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

great. But could you make the cut image function more user friendly? For this let's make next logic: 1. after cut function is complete, show only cut area in the app window. Other tools should be available to use on the cut area. 2. after "save" button is pressed, save the result image.

Функция Undo

Промпт:

Now let'sadd “Undo” function. When I use “Undo” function after some editing, I want to see previous states of image.

Горячие клавиши

Промпт:

let's add hotkeys for the app: 1. 'ctrl-z' for Undo function, 2. 'enter' for saving current version of image and exit

На какой стадии создания ПО с помощью ИИ нужны инженерные навыки?

Из последнего уровня фичей для меня было меню в виде больших и удобных для восприятия иконок. Хотя сейчас я понимаю что это тоже было из уровня 1.

И вот на этом этапе появился баг, который без технического бэкграунда я бы не решил.

Дело в том, что при просьбе заменить текстовое меню на иконки, меню исчезало. И на просьбу просто исправить это, ИИ не мог дать решения. Без углубленного анализа, по коду создание меню выглядело корректно. Почитав несколько форумов и stekoverflow, а также попробовав пару туториалов по добавлению иконки в меню, я пришёл к выводу, что иконки не рендерятся в стандартном tkinter меню для Windows (ну или у меня и у многих других не вышло).

Ок. Тогда заставим ИИ сменить подход.

Try to change tkinter menu bars to icon buttons that placed from left to right

На этот раз подобная концепция уже должна работать, но меню так и нет. Судя по дебажной информации, все иконки найдены и все создалось. Что же может быть проблемой?

Если вы когда‑нибудь прогали интерфейсы, то у вас, наверное, уже в голове светиться вопрос о том на какой позиции и глубине создалось это меню.

according to debug information the buttons are created. Let's make sure in code that buttons always will be in front of other layers

Просим ещё немного:

unfortunately, I still do not see the buttons. Can you offer another solution to exclude overlapping layers of app and showing buttons in the top of the app?

И получаем решение.

Итоговый GUI скриншотера
Итоговый GUI скриншотера

Примечание: я не из тех, кто считает, что можно задалбывать ИИ вопросами «переделай, чтобы работало». Если ИИ выдал нерабочий или некачественный код более 2 раз подряд, то скорее всего вам надо разобраться самому, как сделать данное решение правильно.

Финальная часть моего рассказа про создание скриншотера с помощью ИИ.

Приложение скриншотер, написанное с помощью ИИ было готово!

Репозиторий с кодом финальной версии.

Частично оно было написано с помощью ChatGPT4o и частично с Claude 3.5 Sonnet. С меня требовались: четкие требования, проверка кода и анализ технического решения, а также тестирование для устранения чатботами багов.

Возражения и выводы.

Вы конечно можете сказать: «Скриншотер, серьёзно. Может ещё калькулятор напишешь? «. Но, как человек, работающий в отрасли скажу: в большинстве компаний большая часть задач, которую ставят в той же джире, не является чем‑то супер оригинальным. Это нормально и правильно. И даже если у вас очень новая и оригинальная система, то все равно в ней будет достаточно много стандартных изначально решений, поверх которых вы уже будете творить что‑то по настоящему новое.

Многих интересует вопрос: «Можно ли создать что‑то качественное с ИИ, но без квалификации в этом?» Может быть, да.

Меня, как специалиста больше всего интересовал вопрос:

«Можно ли решать объемные задачи, которые вы и сами могли бы решать, но быстрее и легче за счет ИИ?»

Ответ — 100%.

Комментарии (17)


  1. CEOCTO
    30.07.2025 22:49

    Когда появился ChatGPT и Grok я подумал почему, почему здесь на сайте ссут кипятком и не любят статьи про Gen AI и минусят их, потом понял, что боятся что их говн""ды больше не нужны будут компаниям и код будут писать AI. Но написал сам множество пет проектов с помощью AI Gen, понял что, нефига. Навыки программиста необходимы, так как часто Gen AI уходит в рекурсию багов и не правильных архитектурных решений. Поэтому им нужно уметь оркестрировать, устранять ошибки.

    Поэтому Gen AI хорошо подходит для старта, идей, скелетов приложений поиска бага , оптимизации, рефакторинга. Но полностью написать серьёзный проект пока не может.


    Вообще, как итог, по эффективности с Gen AI, я бустанул процентов на 500

    P.S. есть лайфхак, проверять и оптимизировать написанный код Chat GPT отдавая его в Grok.


    1. Maxim_Stelmakh Автор
      30.07.2025 22:49

      Согласен. Если сам не способен написать этот код, то рано или поздно упрешься в какой-то затык. И тут просить ИИ просто переделать это все равно, что джуну вместо реальной помощи и мозгового штурма на проблему сказать "ну напиши по-другому, авось заработает".
      А как буст к скорости и скилам ИИ просто шикарно работает.


      1. levge
        30.07.2025 22:49

        Если хорошо протестировать то неплохо получаеться, я например в фронт вообще не знаю (и не хочу), но с помощью Clode Code вполне себе работает.
        Конечно здравый смысл подсказывает чего делать не стоит, в моём случае я прикрываюсь Azure - пользователи через Entra ID (это Active Directory), хост там же - в одно нажатие настраиваиться TLS, HTTPS и даже CI/CD прямо в GitHub.
        (да я не в РФ)


  1. NeriaLab
    30.07.2025 22:49

    Максим, со всем уважением, но есть две "претензии" к Вам:

    1. Хорошая, спасибо Вам за статью, где Вы описываете личный опыт. Я обожаю такие статьи, когда человек говорит о своём пути в ИТ

    2. Плохая - Вы не знаете терминов и плаваете в них, как пример: "Мои первые впечатления от программирования в ИИ" - В ИИ нельзя программировать. Можно программировать "при помощи того-то и того-то" и подобного в статье очень много. Просто складывается впечатление, что - Вы молодой специалист, который только только пришел в ИТ индустрию. Старайтесь не использовать аббревиатуру GenAI - Вы же не употребляете в повседневной жизни выражение - "масло масляное". Есть общий термин - ИИ, которому уже около 80 лет и есть глупый термин GenAI, который недавно появился. Лучше лишний раз не использовать хайповое слово ИИ, его каждый дурак использует, чтобы как-то выделиться. Правильней использовать то слово, которое наиболее верно описывает технологию, которой Вы пользуетесь - LLM

    Спасибо за статью


    1. Maxim_Stelmakh Автор
      30.07.2025 22:49

      Спасибо за коментарий. Изначально писал статью на английском. А для хабра уже адаптировал на русский. Поэтому, хоть и перечитывал несколько раз, но могут быть ошибки (глаз замылился, пока переводил). Благодаря Вашему коментарию поправлю.

      А вот по поводу терминов не соглашусь. ИИ общее и самое популярное сегодня понятие, поэтому для привлечения внимания к статье его использую чаще чем LLM. И это вполне нормально, т. к. для аудитории, которая придёт по заголовку с "ИИ" эта статья релевантна.

      GenAI также популярное и абсолютно корректное для ллмок понятие. Таким образом мы отделяем нейросети, которые генерируют контент от тех, что его распознают.


      1. NeriaLab
        30.07.2025 22:49

        Что касается GenAI - ты прав: термин стал массовым, и он действительно помогает отделить генеративные модели от, скажем, классификаторов или систем распознавания. В этом смысле он функционален.

        Однако, в научном и исследовательском сообществе, особенно среди тех, кто работает с альтернативными парадигмами (нейроморфные вычисления, когнитивные архитектуры, символические ИИ и т.д.), этот термин часто воспринимается как маркетинговая надстройка, а не строгое определение.

        Почему?

        Потому что "генеративный искусственный интеллект" - это как сказать "еда, которую можно съесть". Само понятие "искусственный интеллект" уже предполагает активность, порождение, принятие решений - то есть, по сути, генерацию. Когда мы выделяем только генеративные модели как "GenAI", мы косвенно объявляем, что остальные формы ИИ - "не совсем ИИ", что, конечно, неверно.

        Более того, все LLM - генеративные, но не все генеративные модели - ИИ. LLM не думают, не планируют, не понимают - они воспроизводят паттерны. Называть это "генерацией в смысле интеллекта", значит стирать грань между статистическим предсказанием и когнитивной деятельностью.

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

        Сегодня GenAI звучит как "умный ИИ" - то есть, как плеоназм, за которым стоит попытка присвоить статус "интеллекта" тому, что пока остаётся продвинутым автозаполнением.

        Я понимаю, что в публичном дискурсе эти нюансы часто сглаживаются и это нормально для популяризации. Но если цель быть услышанным не только в мейнстриме, но и в среде исследователей, скептиков и инженеров, то стоит быть чуть строже к терминологии.

        Не потому что "так модно", а потому что точные слова — признак точного мышления.

        Именно поэтому я и позволил себе уточнение, не как критику, а как попытку вместе говорить точнее.


        1. Maxim_Stelmakh Автор
          30.07.2025 22:49

          Спасибо. Я это ценю. Просто не сталкивался с таким восприятием. Несколько лет назад я работал с проектами компьютерного зрения. И мы говоря о наших приложениях говорили, что это ИИ, а вот тот же Stable diffusion это ГенИИ. Именно, подчеркивая разницу между анализом и генерацией.

          Про умный и не умный ИИ. Все воспринимают по-разному. Но, если брать градацию ISTQB то делится только на ИИ (читай, содержит под капотом нейросеть) и конвенциональные системы (содержит алгоритмы, статистические механизмы, эвристические анализы.. все то, что нельзя назвать сходу нейросеткой). Мне данное разделение не нравится, но уж как есть.


          1. NeriaLab
            30.07.2025 22:49

            Да, в индустрии действительно сложилась практика называть всё подряд "ИИ", особенно если там есть нейросеть. И выделение GenAI как отдельной категории - это, скорее, маркетинговое и бытовое разделение, призванное отличить "генераторы текста/картинок" от систем анализа. Но с научной и инженерной точки зрения, термина "GenAI" в строгой классификации не существует. Это не общепринятая категория, как, скажем, "обучение с учителем" или "рекуррентные сети". Это жаргон, удобный для обсуждений в мейнстриме, но не для проектирования систем.

            Я сейчас занимаюсь разработкой прото-ИИ на основе LBS (Logic-Based Systems) - систем, где поведение строится не на статистике и обучении, а на формальной логике, правилах, онтологиях и выводах. Это путь, альтернативный нейросетевому подходу, и он был актуален ещё до "эры LLM".


            В таких системах:

            • Нет "генерации" в смысле предсказания следующего токена.

            • Есть логический вывод, рассуждение, целеполагание.

            • Система понимает контекст, а не имитирует его.

            Именно поэтому я стараюсь избегать термина GenAI, так как он сливает воедино совершенно разные парадигмы:

            • Генерация через статистику (LLM)

            • Генерация через синтез (например, procedural content generation)

            • Генерация через рассуждение (LBS, символьные ИИ)

            Для меня "ИИ" - это не про наличие нейросети, а про способность к адаптации, обучению, пониманию и автономному принятию решений. А всё остальное - интеллектуальные системы, автоматизация, ассистенты, но не ИИ в полном смысле.

            Разделение ISTQB, к сожалению, упрощает до точки, где теряется суть. Но как раз поэтому нам, инженерам, важно не принимать упрощения как данность, а сохранять чёткость в терминах, особенно когда мы строим что-то, что должно мыслить, а не предсказывать.

            Так что да - "GenAI" звучит удобно, но, как ты и отметил, всё воспринимается по-разному. А я просто стараюсь, чтобы моё восприятие было как можно ближе к сути.


            1. Maxim_Stelmakh Автор
              30.07.2025 22:49

              К сожалению у меня не хватает кармы, чтобы лайкнуть Ваш последний ответ. Да, именно поэтому мне не нравится классификация ISTQB. В ней нейросеть, которая может только отделить очевидных кошек от собак считается ИИ. В то время, как какая нибудь сложная самодообучающася система будет считаться конвенциональной, если в ней нет очевидной нейросети. Это, на мой взгляд, довольно тупо.

              Поэтому буду очень благодарен, если дадите ссылки на именитые источники с корректной классификацией.


              1. NeriaLab
                30.07.2025 22:49

                "Artificial Intelligence: A Modern Approach" - Stuart Russell & Peter Norvig

                Самый авторитетный учебник по ИИ
                Главы:
                Ch. 1: "Introduction" - даёт чёткую классификацию: Systems that think like humans vs Systems that act rationally
                Ch. 26: "Philosophical Foundations" - обсуждает границы ИИ, тест Тьюринга, сознание

                https://aima.cs.berkeley.edu/
                Авторы критикуют узкое определение ИИ через "наличие нейросети" и предлагают функциональный подход - что делает система, а не из чего она сделана.

                "On Defining Artificial Intelligence" - Pei Wang

                Научная статья, посвящённая проблеме определения ИИ
                Ключевая идея: ИИ - это система, которая учится и адаптируется в условиях неполной информации и ресурсов

                https://arxiv.org/abs/1811.08055
                Автор предлагает альтернативу традиционным определениям, фокусируясь на гибкости, обучаемости и рациональности, а не на архитектуре.

                Stanford «AI Index Report»

                Ежегодный отчёт, публикуемый Stanford Institute for Human-Centered AI
                Чётко разделяет:

                • Narrow AI (включая LLM)

                • Foundational Models

                • AGI (как цель, а не реальность)

                https://aiindex.stanford.edu/
                Это не маркетинг, а научно-обоснованный анализ. Они не называют LLM «ИИ» в полном смысле, а рассматривают их как инструменты с ограниченной обобщаемостью.

                "The Society of Mind" - Marvin Minsky

                Классика: один из отцов ИИ предлагает модель интеллекта как системы взаимодействующих агентов
                Идея: ИИ - это не одна сеть, а архитектура, способная к рефлексии, планированию, метапознанию

                Показывает, что настоящий ИИ - это не генерация текста, а организация познавательных процессов

                "Rebooting AI" - Gary Marcus & Ernest Davis

                Книга, где авторы (включая когнитивиста Гэри Маркуса) жёстко критикуют LLM как "не-ИИ"

                Тезис: Современные системы не обладают пониманием, причинностью, логикой — а значит, не являются ИИ в полном смысле.

                https://rebootingai.org/

                Прямой ответ на твою проблему - "Почему система, которая просто предсказывает слова, считается ИИ, а сложная символьная система — нет?"