Серия «История одного вайбкодера»

0

Как я готовил рекламную кампанию для РСЯ с помощью Nano Banana и Gemini 2.5

Часть 4. История о том, как я сэкономил на дизайнере и директологе, заставив ИИ генерировать нескучную рекламу для скучной ниши.

Привет! На связи снова Евгений.

Если вы следили за моими предыдущими статьями, то помните мой путь. Сначала я, не будучи программистом, собрал на Python и Gemini поиск по внутренней базе товаров. Потом мне стало тесно, и я прикрутил к инструменту парсер и модуль анализа цен конкурентов. Мой «комбайн» научился находить товар, сравнивать его с рынком и выдавать аналитику. Также я уже рассказывал о том, как подключил Nano Banana Pro и решил вопрос генерации карточек для маркетплейсов.

Кто работает с маркетплейсами, знает, что сейчас происходит со стоимостью доставки и хранения товара (в зависимости от модели — FBS или FBO). Рентабельность на МП сейчас под большим вопросом, поэтому остро встала задача лидогенерации на собственную площадку. Мы пошли простым путем — Яндекс.Директ. Скажу честно, у меня есть вопросы и к этому виду рекламы, но сейчас речь не об этом.

Партия (руководство) сказала: надо! Комсомол (я) ответил: есть!

Обычно в этот момент бизнес идет на аутсорс: платит агентству за настройку Директа, потом платит дизайнеру за баннеры. Я посмотрел на ценники и вспомнил, что когда-то уже занимался контекстом (еще во времена «Бизнес Молодости»). И решил: зачем платить, если у меня есть свой карманный отдел маркетинга — генеративный ИИ и (вроде бы) светлая голова.

Этап 1: Доверься роботу (Автоматическая настройка)

Погрузившись в Яндекс.Директ, я увидел, что в рекламном кабинете появились мощные автоматические инструменты. Указываешь ссылку на сайт — Яндекс берет все необходимые материалы, определяет тематику, формирует ключевые фразы и описания, генерирует с помощью нейронки дополнительные изображения.

Все, что остается сделать — указать бюджет, геотаргетинг и немного мелочей. Реклама может формироваться и на РСЯ, и на поиске; также понравилась товарная кампания. Собственно, с небольшим моим вмешательством я получил готовую кампанию.

Это быстро и удобно. Но есть нюанс.

Этап 2: Креатив своими руками

Ниша у нас консервативная — спецодежда. Обычно реклама здесь выглядит как «Куртка утепленная рабочая купить недорого» и стандартное фото товара на белом фоне. Это отчасти работает, но это скучно. Рекламная слепота у потенциальных покупателей выработалась колоссальная.

Мне захотелось протестировать гипотезу: сработает ли в B2B-сегменте (и не только) провокационно-шутливая реклама в РСЯ.

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

Семантика без Wordstat

Любая кампания начинается с ключевых слов. Раньше я бы сидел в Wordstat, копировал фразы в Excel, чистил мусор и занимался прочими муторными делами.

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

  • Файл выгрузки из Яндекс.Метрики.

  • Файл из учетной базы 1С (наименование и описание товара).

Далее был написан промпт для Gemini:

«Ты — специалист по контекстной рекламе. На основе загруженных данных составь список целевых ключевых фраз для рекламы в РСЯ. Разбей их на группы: горячие (транзакционные), теплые (по характеристикам) и околотематические. Исключи слова "бесплатно", "скачать", "фото" и прочие. Формат вывода: список через запятую».

Через 20 секунд Gemini выдал мне готовый список. Он сам добавил к названиям моделей слова «купить», «цена», «оптом», «для рабочих». Описательная часть рекламной кампании была готова. Мне оставалось только скопировать этот текст и вставить в рекламный кабинет.

Креатив и провокация

Дальше — самое сложное. Мне нужен был «небольшой кликбейт в визуале» в хорошем смысле слова. Что-то, что зацепит замыленный взгляд снабженца или прораба. Я снова пошел к ИИ и попросил разработать концепции в провокационно-шутливом стиле.

Вот примеры концепций, которые выдал ИИ:

Концепция 1.

  • Визуал: Музейный стенд, изображающий эволюцию человека. Неандерталец, кроманьонец... и следующий в ряду — современный рабочий в полной экипировке (каска, очки, перчатки), который уверенно смотрит вперед. Он выглядит как вершина эволюционной цепочки.

  • Слоган: «Не ждите эволюции. Защитите своих людей сейчас». (Слоганы я потом поменял, это так, для примеров)

Концепция 2.

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

  • Слоган: «Защита, которую не прокусить. Даже если очень хочется». (Слоганы я потом поменял, это так, для примеров)

Слоганы и идеи были готовы. Осталось проработать визуал.

Визуализация: Дизайнер за 0 рублей

Тексты есть, нужны картинки. Для РСЯ нужны разные форматы: квадраты, широкоформатные, вертикальные.

В ранних статьях я рассказывал о том, что прикрутил в свой инструмент модель Nano Banana Pro, и объяснял, в чем её принципиальное отличие от предыдущих версий генерации изображений. На всякий случай напомню: это качественный рендеринг текста прямо на изображениях. Это было критически важно, чтобы получить практически готовые баннеры со слоганами без фотошопа.

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

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

Концепция с бобрами и котами (все любят животных)

Концепция с бобрами и котами (все любят животных)

Концепция с бобрами и котами (все любят животных)

Концепция с бобрами и котами (все любят животных)

Концепция с бобрами и котами (все любят животных)

Концепция с бобрами и котами (все любят животных)

Концепция с Давидом и Венерой

Концепция с Давидом и Венерой

Концепция с зомби

Концепция с зомби

Концепция с зомби

Концепция с зомби

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

Сборка и запуск

В итоге у меня на руках были:

  • Файл с ключевыми словами.

  • Файл с заголовками и текстами объявлений.

  • Папка с уникальными изображениями разных форматов.

Я загрузил всё это в Мастер кампаний Яндекса и отправил на модерацию.
Кампания прошла модерацию без проблем (хотя я переживал за "провокационность", но ИИ, видимо, знает границы дозволенного лучше меня). Вот примеры как баннеры смотрятся в РСЯ:

Выводы

В итоге я получил две работающие рекламные кампании:

  • Сформированную с помощью автоматической настройки Яндекс.Директа.

  • Баннерную, полностью созданную с помощью своего ИИ-инструмента.

По результатам первых недель открутки я пришел к следующему выводу:

Автоматическая кампания от Яндекса нужна для привычного формата. Она дает стабильный, прогнозируемый трафик по стандартным запросам. Это «рабочая лошадка», которая закрывает горячий спрос.

Моя баннерная кампания сработала иначе. Она отлично работает на запоминание бренда. Нестандартные визуальные образы (зомби на стройке, эволюция рабочего) пробивают баннерную слепоту. Люди кликают не просто потому, что ищут «куртку», а потому что их зацепил креатив. Это позволяет охватить ту аудиторию, которая обычно пролистывает стандартные объявления мимо.

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

Всем удачи в ваших начинаниях, благодарю за прочтение!

оригинал статьи

Показать полностью 12
4

Как я внедрил Nano Banana PRO (не только его) для генерации карточек и других материалов

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

С вами снова Евгений. Если вы читали мои предыдущие посты, то знаете мой бэкграунд: я сотрудник компании из сферы СИЗ (спецодежда и средства защиты), который устал от рутины и решил автоматизировать бизнес с помощью Gemini. Я не умею программировать, не знаю синтаксис Python, но имею желании и потихоньку обучился искусству "вайбкодинга"

Ранее я уже рассказал о своем опыте подбора товара по своей базе и про автоматический парсинг с последующим исследованием данных (подбор товара по базам поставщиков/конкурентов и анализ цен).

Какие насущные рутинные (и не только) вопросы я хотел решить с максимально возможной автоматизацией:
1. Создание обучающего материала для вновь прибывшего сотрудника
2. Анализ текстовых данных (тут вопросы были разные и останавливаться подробно не буду. Возможно, это будет отдельная статья)
3. Генерация презентаций
4. Генерация визуального материала для сайта, каталога и прочего
5. И самое насущное СОЗДАНИЕ КАРТОЧЕК ДЛЯ МАРКЕТПЛЕЙСОВ


Под эти задачи было разработано несколько мини инструментов:
Генерация Текста и Документов (он же анализ)
Создание простого текста (или кода)
Создание презентации (PPTX)
Генерация Изображений (с помощью разных моделей nano banana, nano banana pro, imagen4)
Генерация карточек (nano banana pro)

Далее постараюсь подробнее описать, что и как.


Текстовая фабрика ("Создание простого текста")

Оговорюсь, "простой текст" в данном случае - это все, что можно выразить буквами, цифрами и символами. Это может быть и продающая статья, и техническая документация, и даже программный код.
Все началось с простого.  У нас тонны PDF-файлов с ГОСТами, DOCX-инструкции от поставщиков и гигантские Excel-таблицы. Это контент, который невозможно читать, но который нужно превратить в продающие описания, статьи для блога, посты для соцсетей, а также в унифицированные обучающие материалы. Собственно, обучающие материалы и дали толчок для внедрения отдельных типов функций (генерация контента) в мой инструмент.
В один прекрасный момент руководитель компании попросил исследовать возможность создания обучающего материала на основе собственного накопившегося материала и по нашей специфике.
Что может быть интереснее структурирования материала и создания полезного из груды «мусора»?! Да, буквально всё (шучу, перерабатывать и структурировать мне очень нравится).
Назрел небольшой план. Сам себе задал вопросы: «Какой материал нужен был бы мне?», «Как его лучше запоминать?», «Как сделать точки среза?» и прочих подводящих вопросов для выработки стратегии этого материала и соответственно стратегии его создания. Углубляться в саму генерацию не буду, вкратце:
1. Есть материал по специфике (в разных форматах)
2. Есть правильный промпт
3. Есть результат (результат получил в html файлах с тестированием и сохранением результатов)

Первая разработка текстовой генерации:

Первым делом я окинул взглядом "сырье" для будущей базы знаний. Это был структурированный материал из 1С и хаос накопившихся файлов  (ГОСТы в PDF, DOCX-файлы от поставщиков с безумным форматированием и вставленными объектами; гигантские Excel-таблицы с характеристиками товаров и прочее).

Я пошел за помощью все также к гемини. ИИ, будучи послушным исполнителем, предложил мне целый "зоопарк" библиотек: PyPDF2 для PDF, python-docx для Word, openpyxl для Excel. И тут я впервые по-настоящему столкнулся с суровой реальностью:

PDF - это был персональный ад. Первые же попытки прочитать наши ГОСТы выдавали либо пустую строку, либо абракадабру. Кириллица превращалась в "кракозябры", текст из таблиц слипался в одну нечитаемую строку, а колонтитулы и номера страниц нагло лезли в основной контент, ломая всю логику. DOCX и XLSX были дружелюбнее, но тоже со своими причудами: скрытые символы, объединенные ячейки, которые ломали парсинг...

Моя реакция была типичной для "вайбкодера": я не стал читать документацию. Я скопировал кусок "мусорного" текста, который выдавала программа, в чат с Gemini и написал что-то типа: "Смотри, что оно мне выдает! Я не понимаю в этих ваших 'регулярных выражениях', но ты, я уверен, спец. Напиши функцию «санитара» для Python, которая будет вычищать из подобного текста весь мусор: переносы строк посреди слова, номера страниц, колонтитулы и прочую ересь".
Так в моем коде появилась функция clean_text, о существовании которой я и не подозревал. Она стала первым и важнейшим этапом обработки любого файла.

Дальше были работы с промптами и с моделями, тестирование, «допиливание» и так в небольшом цикле. Выбор "мозгов": Для этой задачи я однозначно выделил модель gemini-2.5-pro. Почему? Потому что для работы с большими, сложными документами и многоступенчатыми инструкциями нужен "тяжеловес". У этой модели огромное контекстное окно (она "помнит" очень много текста) и она достаточно хорошо следует строгим указаниям, не "додумывая" факты и минимально галлюцинирует. Flash-модели быстрее, но здесь была важна именно въедливость и точность.

На скрине я выделил файл с данными, промпт. Далее я получил выходной материал  в html, который осталось скопировать в блокнот и сохранить

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

Теперь процесс создания одного учебного модуля выглядит так: я беру папку с документами по теме, скармливаю их инструменту, пишу один главный промпт, и на выходе получаю HTML код, сохраняю его, отдаю на проверку эксперту и заливаю на внутренний портал . Мечта, а не работа.

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


Генератор презентаций: от идеи до готового PPTX-файла

После того как я наладил процесс генерации текстов, я обратил внимание на следующую рутинную задачу, отнимающую много времени - создание презентаций. Этот процесс требует не только сбора и написания контента, но и его структурирования, форматирования и подбора визуальных материалов. Моей целью было создать инструмент, который бы брал на себя основную часть этой работы, позволяя на выходе получить готовый .pptx файл, требующий лишь минимальных правок в павер поинте.

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

Ступень 1: ИИ-планировщик

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

  • title: Заголовок слайда.

  • content: Ключевые тезисы в виде списка.

  • image_prompt: Детальный промпт на английском языке для нейросети, которая сгенерирует подходящее изображение.

Ступень 2: Python-сборщик

Когда план готов, в дело вступает скрипт на Python, использующий библиотеку python-pptx. Он выполняет чисто механическую работу:

  • Читает созданный на первом этапе план.

  • Создает пустую презентацию в формате 16:9.

  • Для каждого элемента в плане последовательно создает новый слайд, добавляя на него текстовые поля с заголовком и тезисами.

  • Отправляет промпт для картинки в API для генерации изображений, получает результат и размещает его на слайде.

В процессе разработки я столкнулся с ожидаемой проблемой: на первых сгенерированных слайдах текст налезал на изображения, а заголовки выходили за границы. Библиотека python-pptx использует свои единицы измерения, и вместо изучения документации я применил практический подход. Я потратил достаточно много времени на подбор нужных координат и размеров для всех элементов, многократно перезапуская скрипт с разными значениями, пока не добился приемлемого вида.

В примере я взял реальную задачу: создать обучающую презентацию по теме «терминология спецодежды». У меня был файл с определениями и описаниями. Я загрузил этот документ в инструмент и дал простую команду: «Сделай презентацию на 3 слайда, объясняющую ключевые термины из этого файла».

Через минуту система выдала готовый .pptx файл. В нем был титульный слайд, 2 контентных слайда, каждый из которых был посвящен отдельной группе терминов, и заключительный слайд. Тезисы были взяты из моего документа, а изображения - сгенерированы ИИ на основе контекста.

Самое главное - сразу можно открыть этот файл в PowerPoint и начать его редактировать при желании. Основная часть механической работы была сделана за меня.

P.S.: даже здесь гугл не смог отойти от инклюзивности ))) для примера оставлю, как есть

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


Генерация изображений с помощью Nano Banana и не только


Изначально генерацию изображений я сделал исключительно «для себя». Не совсем понимал, что вообще можно с этим делать, но это была модель Imagen. Как только в сети хайпанула первая реинкарнация нано банана, пришли мысли о возможной практической пользе. У нас в компании есть магазин неликвида, который получает своих клиентов в основном с Авито. И тут сразу пришло на ум, что нейрофотошоп в виде нано бананы как раз то, что нужно для работы с карточкой товара. Я приведу пример того, что я делал с его помощью.

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

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

Результат был огонь. Модель не просто вырезала объект, она "поняла" его форму и органично вписала в новое окружение. То, на что у дизайнера ушло бы 15-20 минут в Photoshop, ИИ сделал за 30 секунд. Я понял, что нащупал золотую жилу, и начал формализовывать этот процесс, встраивая его в свой основной инструмент.

Как это работает под капотом:

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

Imagen – дешево и сердито

Первой моделью, которую я подключил, была Imagen. Это инструмент, который хорошо справляется с созданием изображений по четкому текстовому описанию. Его главная особенность - необходимость «говорить с ним на его языке». Чтобы получить качественный результат, нужно было разделять запрос на две части (а также к промптам пришлось прикрутить автоматический перевод на буржуйский)

Промпт: Основное описание того, что должно быть на картинке (например, «защитный костюм на манекене»). Этот текст я настроил на автоматический перевод на английский.

Стиль: Дополнительные параметры, определяющие стиль  изображения (например, «professional photo, studio lighting, 8k»).

Imagen стал моим инструментом для быстрых и понятных задач, когда нужно было просто создать объект на нейтральном фоне (но если честно, после появления нано банан gemini flash image я практически перестал им пользоваться).

Вот пример изображения по промпту

Gemini Flash: "Топ за свои деньги" (модель gemini-2.5-flash-image, он же Nano Banana).

ТУТ не хочу даже описывать ничего, это просто нереальный экспириенс. Я добавил возможность редактирования своих изображений и получил этот чертов нейрофотошоп (ну по крайней мере я так думал, пока не попробовал nanobananapro). Теперь я мог загрузить одно или несколько изображений-референсов и попросить ИИ создать что-то новое, но в похожем стиле. Например, я мог загрузить фотографию с определенной цветовой гаммой или композицией и попросить сгенерировать изображение своего товара в том же стиле. Это позволило уйти от подбора слов для описания стиля и просто показывать, что я хочу получить.
Тут я покажу для примера, как я улучшил рандомное изображение с авито.
Вот пример скачанных изображений:

Небольшой промпт и мы получаем чудесное преображение:

И получаем готовое изображение для карточки авито

Решив проблему с Авито, я быстро понял, что этот инструмент можно использовать и для других задач (просто как пример):

«Апскейл (улучшение) изображений»

«Затирание водяных знаков»

Конечно, все эти ваши бизнес сценарии хороши, но куда без баловства. Превращал себя с женой в рокеров, панков, монголов, древних русичей)))

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


Все это подвело меня к следующему, революционному этапу (исключительно по моему мнению, на истину не претендую).

Gemini 3 Pro aka Nano banana PRO

Финальным и самым мощным дополнением к моей «фабрике изображений» стала модель Gemini 3 Pro. Если Imagen требовал четкого разделения запроса и стиля, а Gemini Flash отлично работал с визуальными референсами, то Gemini 3 Pro принес новую функцию -  УМЕНИЕ ПИСАТЬ ТЕКСТ НА ИЗОБРАЖЕНИЯХ. Нельзя преувеличить важность этой функции. Да да, это открыло для всех новые дороги.

Раньше этот процесс был настоящей головной болью. Нужно было сначала сгенерировать идеальную картинку, сохранить ее, затем открыть в Photoshop или Canva, подобрать шрифт, добавить текст, выровнять его, наложить эффекты... Это был многоэтапный, ручной труд, который требовал навыков работы в графическом редакторе. Каждый раз, когда нужно было поменять текст — например, «Скидка 20%» на «Скидка 30%» — всё приходилось начинать заново.

Теперь всё изменилось. Я могу просто написать: «Сделай рекламный баннер с нашим защитным ботинком на фоне стройки, и добавь яркую надпись "НАДЁЖНАЯ ЗАЩИТА" в нижнем правом углу». И Gemini 3 Pro не просто генерирует картинку, он вписывает в неё текст, пытаясь сделать это гармонично.
Вот что было:

Вот что стало:

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

Генерация карточек для маркетплейсов  с Nano Banana PRO

Умение Gemini 3 Pro работать с текстом на изображениях стало тем ключом, который открыл дверь к созданию, пожалуй, самого важного инструмента во всем проекте. Это превратило генератор из интересной «игрушки» в настоящую «производственную линию» для маркетинга. Я понял, что теперь могу автоматизировать не просто отдельные задачи, а целый цикл создания контента для маркетплейсов, и переписал логику, чтобы использовать три главные возможности этой модели.

Я добавил поле ввода описания продукта, поле ввода промпта, поле загрузки референса (пример того, как вы хотите, чтобы выглядело конечное изображение), поле загрузки вашего фото

Давайте разберем пример:

1.  Инфографика для маркетплейсов на основе текста

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

Наше описание:
Ботинки демисезонные
Материал : Натуральная кожа
Подкаладка: Типика
Материал верха - термоустойчивая водоотталкивающая кожа повышенной толщины (1,8 - 2,0 мм)
Подносок: термопласт
Подошва: Двухслойный полиуретан (ПУ+ПУ)
Соответсвует : ГОСТ 12.4.137-2001, ГОСТ 28507-99, ГОСТ 12.4.032-95.
Универсальная модель для тяжелых работ в различных отраслях промышленности: нефтегазовой, горнодобывающей, энергетической, в черной и цветной металлургии, на транспорте , в сельском хозяйстве и в строительстве.

Наш референс:

Наш промпт (сделаем его специально максимально простым):
Сделай карточку для маркетплейса

Результат:

Модель не просто «лепит» текст поверх картинки. Она встраивает его в изображение, подбирая стиль и расположение. Текст может быть изогнут по форме объекта, на него могут быть добавлены тени, чтобы он выглядел органично. На выходе получается готовый слайд, который раньше дизайнер делал бы час.

2. Изображения на основе реальных данных

Но что, если информация на изображении должна быть не просто красивой, а технически верной? Здесь в дело вступает вторая возможность модели — связь с поиском Google.

К примеру, нам нужно разработать для производственного цеха плакат на тему «Правила использования страховочной привязи». Я задаю промпт: «Создай инфографику в виде плаката, показывающую по шагам, как правильно надевать трехточечную страховочную привязь. Покажи точки крепления: спинную, грудную, боковые».

Результат: Модель не выдумывает конструкцию привязи. Она обращается к поиску, находит реальные схемы и инструкции, и на основе этих данных рисует плакат.

3.  Изображение для обучения

Изображение для обучения Есть задача сделать изображение для обучения? Тоже не проблема) Небольшой простой промпт (его конечно можно уточнять, но сейчас просто примеры) «создай изображение для обучающего материала. рабочий ботинок, на нем нужно указать все его детали и рассказать для чего они служат» и всё, смотрим результат:

Единая рабочая среда

Мой проект вырос из набора разрозненных скриптов в цельную рабочую среду. Теперь менеджер находит нужный товар в поисковике, тут же во вкладке «Генератор контента» создает для него презентацию для отдела продаж, а маркетолог в этой же вкладке делает для него карточку товара на сайт. Все происходит в одном окне и на базе единых данных. Я потратил на это ноль рублей на разработку, только время и средства на использование API, но взамен получил инструмент, который экономит часы рутинной работы и позволяет быстро тестировать маркетинговые гипотезы.

Оригинал моей статьи.

Всех благодарю за прочтение!

Показать полностью 23
4

Парсер, анализ цен и подбор товара с помощью ИИ

Часть 2. Путь от простого поисковика по своей базе до инструмента, с помощью которого можно облегчить себе жизнь при работе с конкурентами/поставщиками, да и в общем отслеживать свою товарную нишу.

Меня зовут Евгений. Если вы читали мою первую статью, то знаете, как я, не написав ни строчки профессионального кода, создал с помощью Gemini ИИ-поисковик для нашего сложного ассортимента спецодежды. Это был первый опыт внедрения ИИ в реальные бизнес-процессы. Инструмент заработал, и я мог бы на этом остановиться. Но пытливый ум вел меня дальше. Хотя, в данном случае даже не пытливый ум, а скорее анализ «хотелок» в компании. Вот об этих хотелках и о том, что из этого вышло, я и расскажу.

Эта статья — не о решении проблемы, а о расширении возможностей моего инструмента. Это рассказ о том, как мой внутренний инструмент планомерно эволюционировал в мини-платформу Market Intelligence (это название я узнал уже по факту реализации от того же Gemini). В моем случае это связка «Парсер + Подбор по сторонним данным + Анализ цен». Я хочу не просто поделиться историей, но и на пальцах разобрать логику каждого модуля. Про код рассказывать не буду, так как я не программист, и это в моем случае неуместно. Моя цель — показать, как устроен инструмент, какие бизнес-задачи он решает, и как вы можете применить его в своей нише. В общем, это история о том, как не-программист, вооруженный современным ИИ, может реализовать нужный инструмент.

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

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

Эта идея и стала отправной точкой для разработки второй версии. Я поставил перед собой цель расширить функционал, чтобы приложение могло стать полноценным инструментом для анализа внешнего рынка. Задачи в моей голове были сформулированы следующим образом: нужно было научить систему агрегировать и унифицировать данные из внешних источников, автоматизировать сбор данных с веб-сайтов, создать аналитический модуль для отслеживания изменений и, наконец, интегрировать все это в существующий интерфейс, сохранив простоту использования.

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

Подбор по сторонним данным — решение проблемы унификации

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

Начальная гипотеза заключалась в простом добавлении новых файлов в систему. Однако на практике это оказалось нереализуемым. Анализ нескольких прайс-листов от разных компаний выявил фундаментальную проблему — полное отсутствие стандартизации данных. Уникальный идентификатор товара мог называться "Код номенклатуры", "ID товара" или просто "Арт.". Цены были представлены в различных форматах: "5 000,00 руб.", "5000.00", "5,000.00", а иногда и в виде текстового поля "Цена по запросу". А важные характеристики, такие как материалы или технические спецификации, часто были объединены в одной ячейке с описанием.

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

Как это работает? Пошаговая логика.

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

На этапе подготовки происходит преобразование разнородных файлов в единую, стандартизированную структуру. Все начинается с того, что пользователь просто помещает один или несколько прайс-листов в специальную папку. Дальше система все делает сама. Сначала происходит автоматическое распознавание схемы, или маппинг. Система считывает каждый файл и анализирует названия его колонок. Затем она обращается к настраиваемому "словарю сопоставления" в формате JSON, где для каждого стандартного внутреннего поля (например, code для артикула) прописан список возможных синонимов. Так система определяет, какая колонка содержит артикулы, какая — цены, и так далее, игнорируя все лишнее.

После распознавания следует этап трансформации и очистки. Для каждого исходного файла создается новая, виртуальная таблица со стандартной структурой. Данные из распознанных колонок копируются в стандартные поля: product, code, price, description. На этом же шаге цена из текстовой строки "1 234,56 руб." преобразуется в числовой формат 1234.56, а из текстовых полей удаляются лишние пробелы и служебные символы. К каждой строке с товаром добавляется мета-информация — имя исходного файла, что позволяет в результатах поиска всегда видеть источник данных.

Когда данные очищены, они отправляются на создание поискового индекса. Чтобы поиск был не просто сравнением строк, а интеллектуальным процессом, все текстовые поля проходят через лемматизацию с помощью библиотеки Natasha. Этот процесс приводит все слова к их базовой словарной форме. Это позволяет системе находить релевантные товары, даже если в запросе используются другие формы слов. Наконец, итоговая, обработанная таблица со всеми товарами от всех внешних источников кешируется. Она сохраняется в единый, оптимизированный для быстрого чтения бинарный файл (это как мне объяснил сам Гемини), что обеспечивает высокую скорость отклика при последующих запусках.

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

Пользователь вводит в строку поиска запрос: "костюм сварщика летний брезент". Сначала этот запрос отправляется на анализ и расширение в ИИ-модель "Помощник". Gemini разбивает его на смысловые группы (концепции) и подбирает синонимы. С этим расширенным набором ключевых слов система переходит к первичному отбору кандидатов. Она производит очень быстрый локальный поиск по своему проиндексированному кешу, отсеивая 99% ненужных товаров и формируя список потенциальных "кандидатов" с предварительной оценкой релевантности.

Далее в дело вступает финальное ИИ-ранжирование. Лучшие 20-40 товаров из списка кандидатов отправляются на повторную, уже более глубокую оценку в ИИ-модель "Ранжировщик". Важно, что в ИИ отправляется не весь каталог, а только небольшая выборка. Модель получает не просто список товаров, а и исходный запрос пользователя с инструкцией. Именно на этом этапе происходит основной подбор, так как ИИ понимает семантическую связь и может поставить на первое место товар с фразой "предназначен для использования в жаркое время года" по запросу "летний".

Чтобы пользователь не просто получил список, а понял, почему система выбрала именно эти товары, для лучших 5 позиций запускается генерация ИИ-отчета. ИИ-модель "Эксперт" получает полные данные о товаре и запрос клиента с инструкцией, что именно нужно указать в отчете. В итоге пользователь видит не скучную таблицу, а интерактивные карточки найденных товаров с ключевой информацией и ценным ИИ-анализом, который объясняет релевантность выбора.

Здесь мы получаем результат с описанием и сравнительным анализом. То есть я получаю информацию, сразу с ссылками, артикулом, ценами и прочей нужно информацией. То есть, если собрать достаточно большое количество данных, то можно оперативно изучить рынок на наличие необходимого товара без ручного поиска по интернету или прайсам поставщиков. Тут мы плавно подошли к одному из очень важных вопросов «как собрать эти данные в большом количестве и быстро

Парсер сайтов — с помощью искусственного интеллекта

После успешной реализации модуля для обработки файлов стало очевидно, что это лишь часть решения. Наиболее ценная и актуальная информация — цены, наличие, акции, новинки — находится непосредственно на сайтах конкурентов и поставщиков. Эти данные редко предоставляются в виде удобных для скачивания файлов. Чтобы оставаться в курсе рыночной ситуации, необходимо было научить мой инструмент собирать информацию прямо из ее первоисточника и дело в том виде, в котором мне удобно эту саму. информацию далее обрабатывать. Так я приступил к разработке модуля веб-парсинга.
Сразу небольшое видео работы инструмента


Как это работает?

Ранее у меня уже был опыт парсинга с помощью других инструментов (Zennoposter, Content Downloader), я даже что-то делал на PHP (но это не точно). Хорошие когда-то были времена: парсим, перерабатываем и получаем трафик. Но сейчас не об этом.

Я понимал, что не существует универсального скрипта, который мог бы "читать" все сайты одинаково. Каждый сайт имеет свою уникальную структуру и методы защиты. Где-то работают простые GET-запросы, где-то нужно парсить HTML, а где-то — эмулировать действия в браузере. Моей задачей было собрать все это в один инструмент, который мог бы адаптироваться к любому типу контента.

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

На этапе подготовки и настройки пользователь, не обладая техническими знаниями, фактически создает уникальную программу для парсинга конкретного сайта. Первым делом необходимо определить источники — составить список страниц для сбора данных. Простой путь — это ручной ввод ссылок. Но если товаров тысячи, это неэффективно. Поэтому основной путь — автоматический поиск через Sitemap (в статье буду рассматривать только работу во вкладке парсинг по сайтмеп, так как принципиально работа инструментария отличается только как мы собираем ссылки). Пользователь указывает ссылку на "карту сайта" (sitemap.xml), и система скачивает ее. Чтобы отделить "зерна от плевел", этот огромный список URL отправляется в ИИ-модель, которая получает четкую инструкцию отфильтровать только те ссылки, которые похожи на страницы товаров, и удалить все служебные. Так из нескольких тысяч ссылок система получает точный (ну или почти точный) список целевых страниц товаров. СРАЗУ оговорюсь, парсить моим инструментом я могу не только страницы товаров (статьи, контакты и прочее)

С помощью ИИ мы получаем список URLов, которые отвечают нашим заданным требованиям

Далее пользователь определяет поля для сбора, просто перечисляя в текстовом поле, какую информацию он хочет получить: "Наименование товара", "Артикул", "Цена" и так далее (может быть пользователь захочет спарсить метатеги, ссылки на картинки и прочее).

После этого наступает ключевой и самый технологичный шаг — генерация кода для парсинга с помощью ИИ. Пользователь нажимает кнопку "Подобрать алгоритм". Система автоматически скачивает HTML-код первой страницы из списка и отправляет его в Gemini вместе с перечнем полей и специальной инструкцией. ИИ анализирует структуру HTML-документа, находит, в каких тегах и классах содержится нужная информация, и генерирует готовый, работающий Python-код. Этот код система сохраняет в памяти для дальнейшего использования. Таким образом, сложнейшая часть парсинга полностью автоматизируется.

Наконец, пользователь выбирает режим загрузки страниц в зависимости от сложности сайта (об этом я подробно не рассказал, здесь будет вкратце):

  • Стандартный режим: Быстрый и экономичный, отправляет прямой HTTP-запрос. Идеален для простых, статичных сайтов. В данном случае все было просто и при разработке все «завелось» практически с самого начала

А вот далее мне пришлось попотеть. Мне интересно было парсить ВБ и Озон (исключительно для ознакомления это делал), ну как вы поняли первые попытки были неудачными. Динамическая подгрузка контента не давала мне спокойно жить. Теоретически я понимал, как это нужно сделать, но отсутствие знаний программирования на python играло не в мою пользу. Я не знал, как эмулировать браузер, и повозиться пришлось достаточно долго. Решение пришло с библиотекой Selenium. Путем проб и ошибок, а главное путем постоянного тестирования пришло готовое решения из 2 вариантов Selenium:

  • Режим Selenium (Standard): Необходим для сайтов, где контент подгружается динамически с помощью JavaScript. Запускает управляемый браузер, который дожидается полной загрузки страницы.

  • Режим Selenium (Undetected): "Стелс-режим" для сайтов с продвинутой защитой от ботов. Маскирует браузер под действия обычного пользователя, что позволяет обходить большинство блокировок.

Когда все настроено (мы отобрали ссылки с помощью ИИ, задали нужные данные, сделали предварительный парсинг)

Начинается автоматический сбор данных. Пользователь нажимает кнопку "Запустить полный парсинг". Система запускает конвейер, который последовательно обрабатывает каждую ссылку, используя выбранный режим и сгенерированный ИИ код для извлечения данных. Для ускорения процесса используется многопоточность. Результаты по каждой странице постепенно накапливаются, а пользователь в реальном времени видит прогресс-бар.

На финальном этапе происходит формирование и выгрузка результата. Все собранные данные собираются в единую таблицу pandas DataFrame, которая отображается в интерфейсе для предварительного просмотра. Рядом находятся кнопки для скачивания результата в форматах .xlsx или .csv. Эти файлы полностью готовы для дальнейшего использования: их можно загрузить в модуль «Анализ цен» или «Подбор по сторонним данным» (о котором я писал выше в статье). То есть я получил инструмент, который может практически без технических знаний парсинга собрать информацию с сайтов производителя/конкурента/поставщика, и тут же использовать эти данные для подбора товара по ним.

Анализ динамики цен с помощью Python

Сбор данных с помощью модуля парсинга является первым шагом в процессе анализа рынка. В результате мы получаем массивы информации о предложениях конкурентов и поставщиков, которые на этапе парсинга можно еще структурировать и очищать. Однако сами по себе эти данные, представляющие статический срез рынка на определенный момент времени, имеют ограниченную ценность (ну как минимум можно подбирать товар по своим запросам). Конкурентное преимущество дает анализ этих данных во времени, то есть понимание происходящих изменений. Именно для решения этой задачи и был спроектирован модуль "Анализ цен". Его цель — сделать анализ цен.

Сразу небольшой обзор

Как это работает? От сравнения наборов данных к визуализации.

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

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

После этого происходит самый важный шаг подготовки — последовательное объединение данных. Система обрабатывает отсортированные файлы один за другим, чтобы построить единую "историческую" таблицу. Она берет самый старый файл, извлекает из него ключевые колонки и переименовывает колонку с ценой, добавляя к ней дату. Эта таблица становится основой. Затем следующий файл аналогичным образом объединяется с уже созданной таблицей по колонке-ключу. Для объединения используется метод "внешнего соединения" (outer join в pandas), который гарантирует, что в итоговую таблицу попадут все товары, даже те, что присутствуют только в некоторых файлах.

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

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

  • "Новый товар" присваивается, если в колонке со старой ценой значение отсутствует, а в новой — присутствует.

  • "Товар исчез" присваивается в обратной ситуации.

  • "Цена выросла", "Цена снизилась" или "Без изменений" — в зависимости от сравнения старой и новой цены.
    В результате этого этапа таблица обогащается двумя новыми, аналитическими колонками: "Изменение, %" и "Статус (Финальный)".

Финальный этап — визуализация и выгрузка отчета. Система строит отчет, располагая колонки в логическом порядке, и применяет условное форматирование. Ячейки в колонке "Статус" раскрашиваются в зависимости от значения: "Цена выросла" — в красный, "Цена снизилась" — в зеленый, "Новый товар" — в голубой. Ячейки в колонке "Изменение, %" получают фоновый градиент от зеленого до красного. В итоге отформатированная таблица отображается в интерфейсе как наглядный аналитический дашборд. Рядом с ним расположена кнопка, позволяющая скачать этот отчет в формате .xlsx для дальнейшей обработки. ЕСЛИ ВКРАТЦЕ, то Анализ и сравнение цен – это автоматический ВПР в эксель с таким же автоматическим форматированием и добавлением некоторых данных. Да, это все можно сделать вручную, но я сделал это все в более удобном виде и в едином цифровом пространстве.

Заключение: От внутреннего проекта к универсальной платформе

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

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

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

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

Благодарю всех за уделенное время на прочтение моей статьи!

Показать полностью 10 2
1

Подбор товара по своим базам с помощью ИИ

Привет, Всем! Меня зовут Евгений, и я хочу поделиться историей, которая, надеюсь, вдохновит многих. Это рассказ о том, как жгучая рабочая "боль" и упрямство заставили меня, человека, далекого от программирования, с нуля создать сложный AI-инструмент (по крайней мере сложный для меня). Сразу оговорюсь, что программирование для меня - это что-то где-то рядом, но я человек, который в это самое программирование не умеет. Умею писать ТЗ для программистов, чуть-чуть тестить при приеме работы, но не более. Так что не судите строго.

Сразу скажу что за время написания статьи инструмент разросся новыми функциями и позже будут новые статьи и обзоры (если это будет интересно аудитории Пикабу).

Для чего вообще мне понадобился такой инструмент

Я работаю в довольно специфичной нише — продажа спецодежды и средств индивидуальной защиты (СИЗ). Это не тот рынок, где можно просто загуглить «синий костюм». Здесь много своих нюансов (собственно, как и в других отраслях) — ГОСТы, классы защиты, материалы, пропитки и сотни других неочевидных характеристик.

Главная боль нашей компании (как и любой другой) была до боли знакомой: новые сотрудники очень долго «въезжали» в ассортимент. Если человек пришел не из нашей ниши, то адаптация была долгой. Новичок, получив запрос от клиента "нужен костюм для сварщика, летний, брезентовый, но чтобы не самый дорогой", еще что-то может и находил, так как запрос был достаточно конкретный, но вот уточнение «первый класс защиты» уже ставил в тупик. А изучить все модели из перечня номенклатуры не представляется возможным в краткие сроки.

Страдали не только они. Даже опытные менеджеры, готовя спецификацию для крупного тендера, могли упустить какой-то важный аналог, потому что физически невозможно держать в голове 5000+ SKU со всеми их особенностями. (сразу оговорюсь, мой инструмент скорее всего не полетит на огромном количестве SKU, но инструмент изначально для этого и не предназначался)

Я давно пользуюсь AI-инструментами и видел их потенциал. Даже на заре gpt3 получилось немного привлечь его для создания огромного количества контента для своих сайтов (хорошие были времена, траффик шел, но потом поисковики выдали метки бесполезного контента и на этом все закончилось). С тех пор я смотрел на ChatGPT, Claude и краем глаза на Gemini и думал, как бы сделать файнтюн (уже читал, что такое возможно), чтобы можно было использовать свои данные. Долгие поиски привели меня изначально к RAG (сразу скажу, с ним у меня не срослось, моих познаний для реализации эмбеддингов и чанков не хватило по разным причинам)

Моя идея была простой: я хотел программу, которая понимает наш товар, помогает новичкам оперативно находить нужное и освобождает опытных сотрудников от рутинного подбора и чем быстрее, тем лучше (мгновенного подбора, конечно не получилось, но результатам я всё-таки остался доволен).

В рот мне ноги, вайбкоддинг в зубы

Мой бэкграунд? Я немного занимался сайтами, парсингом, понимаю немного в HTML/CSS, люблю Excel, периодически пишу ТЗ программистам 1С и CMS Битрикс, и постоянно как  пользователь средней руки юзаю разные модели ИИ. Даже приходилось их подключать по API в тот самый excel (после таких удачных подключений был безумно рад. Это так, для понимания степени моего около нулевого левела в программировании). Про интеграцию ИИ в свои хотелки, на просторах того же хабра читал, что подходит Python (мол универсальная платформа, есть «какие-то библиотеки» и прочие неясные для меня слова). Веб-интерфейс для меня привычен, но Python? Я не написал на нем ни единой строчки кода и не знал ни про какие pandas или streamlit.

Мой путь начался с простого, почти наивного запроса к ИИ (сразу начал работать с Gemini, так как уже где-то читал, что скорость и корректность кода у него достаточно высокие. НО И 300$ в подарок сыграло роль (да, для новых пользователей в гугл клауде дает такую сумму на пробу).

«Я хочу сделать программу для подбора товара из Excel‑файлов. Слышал, это можно сделать на Python. Я не программист. Можешь дать пошаговую инструкцию, с чего начать?» — ВСЁ с этого началось. Gemini рассказал про установку Python, про виртуальные окружения, про первые библиотеки. Первые трудности были не в коде, а в окружении: настройка самого Python, установка библиотек через pip. Но ИИ выдавал инструкции для полных чайников, а я именно такой, поэтому все прошло гладко.
Самая сложная часть была с настройкой Google Cloud и получением ключей API. На это ушла уйма времени и нервов, даже с учетом инструкций от ИИ gemini (а гугл клауд, как никак, для гемини должен быть родным). Так как я первый раз это делал, интерфейс мне показался очень неинтуитивным (все эти создания проектов, включение api инструментов, выдача прав и прочее далось нелегко). Также на моменте Биллинга пришлось заморочиться с созданием зарубежной карты (до этого момента как-то не особо нужна была), но с этим как раз проблем не было.

После всех настроек я наконец создал (навайбкоддил) свой первый .py и получил свой первый прототип рабочего инструмента. Честно скажу, я был рад. Это был мой первый Hello world, который уже умел криво-косо подбирать товар из базы товаров организации. Хоть мой первый рабочий прототип был далек от идеала, но он уже работал. Он находил что-то, но часто не то. Первый "релевантный" товар он нашел далеко не с первой попытки. Но я описывал проблематику ИИ, просил варианты решения, копировал ошибки из консоли в чат с ИИ, спрашивая: "Что это значит и как это исправить? Как улучшить? Что если так? Что если вот так?" и так далее. И шаг за шагом, через бесконечные пробы, тесты и корректировки логики, система начала оживать.

Эволюция инструмента. От тупого поиска к умной системе

"Неточный поиск". У меня был один файл выгруженный из базы 1С, в котором было очень много данных хоть и структурированных. В один прекрасный момент я понял, что при подборе все данные из файла каждый раз отправляются ИИ, и он там уже ищет нужные данные. Кто бы знал, что все - да не все. У ИИ модели есть ограничения на исходящие токены. В этом была первая причина, ИИ просто не видел все товары (к тому же отправлять каждый раз все товары, это полная дичь с точки зрения скорости и цены, а главное с точки зрения здравого смысла).

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

РАЗДЕЛИЛ ТОВАРЫ НА ФАЙЛЫ – ДОПИСАЛ С ПОМОЩЬЮ ИИ ИНСТРУМЕНТ, КОТОРЫЙ ДЕЛАЕТ ФАЙЛ МАНИФЕСТ .json (в котором хранится базовая информация про товары каждого из файлов).

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

В общем, этот инструмент после оптимизации промптов показал себя с очень хорошей стороны. Товары уже по «человеческим запросам» находились очень корректно.

«Масштабирование»

Но встал вопрос о масштабировании. А если товаров в каждом файле будет также много?!
Первое вроде бы лежащее на поверхности решение «RAG» (уже ранее читал про него). Я отправился изучать основы, искать эмбеддинг модели, изучать чанки и прочее. Не хочу досконально описывать процесс, но вкратце все закончилось «лимитами на гугл клауде» - это с их моделями эмбеддинга и некорректным результатами подбора после внедрения RAG с помощью моделей, которые я взял на huggingface. Честно скажу, к RAG я возвращался несколько раз и каждый раз терпел неудачу. После проб и ошибок с RAG я пришел к другому методу: «Лемматизация» и «Синонимизация» (хромой аналог рага).

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

Схематично работа приложения теперь выглядела вот так:

  1. При первичной загрузке (или изменений) файлов с данными происходило индексирование и создавался манифест

  2. Вводился запрос. Если запрос был очень общий, то ИИ задавал доп. вопросы, для более точного поиска

  3. Запрос разбивался на группы [слово1, лемма, синоним, синоним], [слово2, лемма, синоним, синоним]

  4. Происходил поиск по манифесту нужных файлов

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

  6. Ранжирование в зависимости от типа товара и важных характеристик.

  7. Отправка топ 20 от первичного «отранжированных» товаров ИИ

  8. Ранжирование самим ИИ

  9. Написание отчета – Результат

Какая модель лучше?! А может использовать несколько?

В данной логике у меня было несколько ИИ ролей (создание лемм синонимов, подбор файлов в манифесте, ранжирование, написание отчета). Как вы знаете у gemini есть несколько моделей, разница которых состоит в качестве, скорости и цене. Я тестил все последние модели, и в зависимости от моделей результаты были разные. К примеру, gemini-2.5-pro давал самые корректные результаты, но время на исполнения было очень долгим.

Решение: "Ролевая модель ИИ". Идея пришла сама собой: а что если разбить одну сложную задачу на несколько простых и дать каждой свою модель ИИ?

  • Один ИИ (Помощник) будет только общаться с пользователем, задавать вопросы при необходимости

  • Другой (Диспетчер) — только выбирать нужные файлы

  • Третий (Ранжировщик) — только подбирать товар из отранжированных данных

  • И четвертый (Эксперт) — писать короткие отчеты

Вы можете увидеть еще 2 роли: аналитик и промпт-инженер. Аналитик создает файл манифеста (было выше), промпт-инженер адаптирует промты для других тематик товара на основе файла манифеста (об этом будет позже).

Это позволило использовать для каждой роли свою, наиболее подходящую модель: быстрые и дешевые flash-версии для простых задач и тяжелую артиллерию pro только там, где это действительно нужно. Эффективность выросла. Таким образом я увеличил скорость, но в тот же момент не потерял в качестве. Конечно же тестов никаких не будет, просто мои субъективные ощущения и секундомер в руках (тут я реально не шучу).

Как пользоваться данным инструментом моим коллегам

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

"Локальность и Streamlit". Я остановился на простом решении: данные хранятся локально в папке, а доступ к интерфейсу можно организовать по IP внутри офисной сети.

Для самого интерфейса ИИ подсказал мне Streamlit. Библиотека, которая позволяет превратить Python-скрипт в интерактивный веб-интерфейс буквально несколькими строчками кода. Это было именно то, что нужно человеку с моим бэкграундом. Честно, даже не пробовал другие варианты, возможно есть что-то лучше, но мне стримлита хватило с головой (хотя вру, мне немного не хватило полноценного CSS).
Что я получил?! Запуск приложения на любом ПК и возможность его «расшарить» для других пользователей без всяких заморочек.

А если вдруг я захочу оперативно перенести инструмент на другой ПК

Манипуляции с python и библиотеками при первичной настройки меня немного напрягали. Пришла идея сделать мой инструментарий portable. Руку промтов я уже к этому моменту набил да и работа с python особо уже не пугала, поэтому реализация оказалась быстрая. В общем, теперь у меня появилась портативная версия и развернуть на любой другой машине для меня не составляет труда. Далее сделать первичную настройку и все готово.

Что получилось в итоге

Десктопная портативная платформа, которую можно настроить под любые структурированные в excel-е данные (да, структурированные, раскидывать мусор придется самим)

Как работает инструмент?

  1. Копируем портабле версию в нужное место

  2. Добавляем файлы для поиска (индекс для Natasha создается автоматом при запуске)

  3. Настраиваем файл манифеста (автоматом с помощью ИИ)

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

Адаптируем промты для своей тематики (автоматизировал с помощью дополнительной роли, но оставил возможность редактировать вручную)

Собственно, все — мы получили готовый инструмент подбора товар по своей базе товаров

Инструмент можно адаптировать под любые ниши.
В Админ-панели я могу:

  • Адаптировать промпты.

  • Настроить любые колонки. Система будет работать с любой структурой Excel-файла.

  • Менять AI-модели. Вышел новый gemini-3.5? Интуитивно просто добавить его в код и выбрать его из списка в настройках. Так я получил полный контроль над "мозгами" AI-консультанта.

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

Надеюсь, что мой опыт может быть полезен многим.

Это не просто программа. Это доказательство того, что сегодня один мотивированный человек, вооруженный современными AI-инструментами, может создавать решения, на которые раньше требовались целые команды разработчиков. НО ЭТО ВСЕ РАВНО ИНСТРУМЕНТ САМОУЧКИ и сравнивать это с продуктами профессионалов будет неправильно

P.S.: Честно я очень долго собирался написать статью на Пикабу. Старался подойти внимательно ко всем аспектам (после написания очень сильно респектую авторам, так как только сейчас понял, какая это тяжелая работа). И пока шла работа над статьей, я работал и над своим инструментом и он разросся дополнительными функциями:

  • Подбор сторонний (я научил работать инструмент с товарами конкурентов/поставщиков/производителей)

  • Поиск резюме (HH.ru) - научил подбирать резюме релевантно своим хотелкам и давать рейтинг (подходит/не подходит)

  • Генератор контента - добавил генерацию текстов, изображений, презентаций и редактирование изображений с помощью хайповой сейчас нана банана

  • Аудио/Видео и Текст - добавил транскрибацию аудио/видео и текст в речь

  • Парсинг сайтов - сделал полностью автоматический парсинг сайтов (по урлам или по сайтмапе с указанием обычными словами какие поля нужно парсить), как раз для информации по которой идет сторонний подбор. Хотя парсер можно использовать, как угодно, он максимально универсален.

  • Анализ цен (динамика цен сторонних производителей)

    Если аудитории Пикабу будет интересно, то я сделаю обзоры и на них.

Благодарю всех за ваше время отведенное на прочтение статьи!!!

Показать полностью 6
Отличная работа, все прочитано!