Как я, не умея программировать, создал умный поисковик для своего бизнеса с помощью Gemini и на Gemini
Привет всем! Меня зовут Евгений, и я хочу поделиться историей, которая, надеюсь, вдохновит многих. Это рассказ о том, как жгучая рабочая «боль» и упрямство заставили меня, человека, далекого от программирования, с нуля создать сложный 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, лемма, синоним, синоним]
Происходил поиск по манифесту нужных файлов
Происходил поиск по индексу самых подходящих из файлов товаров (на стороне python, без отправки большого количества данных ИИ)
Ранжирование в зависимости от типа товара и важных характеристик.
Отправка топ 20 от первичного «отранжированных» товаров ИИ
Ранжирование самим ИИ
Написание отчета – Результат
Какая модель лучше?! А может использовать несколько?
В данной логике у меня было несколько ИИ ролей (создание лемм синонимов, подбор файлов в манифесте, ранжирование, написание отчета). Как вы знаете у gemini есть несколько моделей, разница которых состоит в качестве, скорости и цене. Я тестил все последние модели, и в зависимости от моделей результаты были разные. К примеру, gemini-2.5-pro давал самые корректные результаты, но время на исполнения было очень долгим.
Решение: "Ролевая модель ИИ". Идея пришла сама собой: а что если разбить одну сложную задачу на несколько простых и дать каждой свою модель ИИ?
Один ИИ (Помощник) будет только общаться с пользователем, задавать вопросы при необходимости
Другой (Диспетчер) — только выбирать нужные файлы
Третий (Ранжировщик) — только подбирать товар из отранжированных данных
И четвертый (Эксперт) — писать короткие отчеты

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

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

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

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

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

Инструмент можно адаптировать под любые ниши.
В Админ-панели я могу:
Адаптировать промпты.
Настроить любые колонки. Система будет работать с любой структурой Excel-файла.
Менять AI-модели. Вышел новый gemini-3.5? Интуитивно просто добавить его в код и выбрать его из списка в настройках. Так я получил полный контроль над "мозгами" AI-консультанта.
Я прошел этот путь, чтобы решить свою проблему, и в процессе понял, что создал не просто "поисковик для спецодежды", а универсальный инструмент, который может быть полезен в нишах, где достаточно тяжелый «вход» в профессию из-за большого количества номенклатуры и ее сложности.
Надеюсь, что мой опыт может быть полезен многим.
Это не просто программа. Это доказательство того, что сегодня один мотивированный человек, вооруженный современными AI-инструментами, может создавать решения, на которые раньше требовались целые команды разработчиков. НО ЭТО ВСЕ РАВНО ИНСТРУМЕНТ САМОУЧКИ и сравнивать это с продуктами профессионалов будет неправильно
P.S.: Честно я очень долго собирался написать статью на Хабре. Старался подойти внимательно ко всем аспектам (после написания очень сильно респектую авторам, так как только сейчас понял, какая это тяжелая работа). И пока шла работа над статьей, я работал и над своим инструментом и он разросся дополнительными функциями:
Подбор сторонний (я научил работать инструмент с товарами конкурентов/поставщиков/производителей)
Поиск резюме (HH.ru) - научил подбирать резюме релевантно своим хотелкам и давать рейтинг (подходит/не подходит)
Генератор контента - добавил генерацию текстов, изображений, презентаций и редактирование изображений с помощью хайповой сейчас нана банана
Аудио/Видео и Текст - добавил транскрибацию аудио/видео и текст в речь
Парсинг сайтов - сделал полностью автоматический парсинг сайтов (по урлам или по сайтмапе с указанием обычными словами какие поля нужно парсить), как раз для информации по которой идет сторонний подбор. Хотя парсер можно использовать, как угодно, он максимально универсален.
Анализ цен (динамика цен сторонних производителей)
Если аудитории Хабра будет интересно, то я сделаю обзоры и на них.
Благодарю всех за ваше время отведенное на прочтение статьи!!!
GrishaYeager
Высказываю уважение Вашему упорству, такое многоитерационное исследование/программирование только высокомотивированный человек может выполнить. Да и ещё не слишком близкий к программированию непосредственно...
RS_AI Автор
Благодарю! Очень приятно слышать такое. Да, работа была долгая. С утра до ночи пытался вырабатывать стратегии. И Вы верно заметили, внутренняя мотивация толкала вперёд.