← На главную | ← Назад к блогу

Автоматическое сопоставление номенклатуры для 1С через AI: как я разработала систему, которая распознаёт более 90% позиций

Автоматическое сопоставление номенклатуры для 1С через AI: как я разработала систему, которая распознаёт более 90% позиций

Как я разработала программу, которая распознаёт заявки клиентов, сопоставляет товары с базой 1С и сокращает обработку заказа из 100 позиций с 30 минут до 2 минут.

Осенью 2025 года мне прилетела задача от импортёра инструментов — Инструментально-подшипниковой компании (ИПК). Нужно было сделать программу, которая номенклатуру из заявок клиентов переводила бы в формат компании, чтобы её можно было сразу вставить в 1С.

Дело в том, что клиенты этой компании присылали заявки в самом разнообразном виде. Например:

Сверла ф5 - 1, ф10 - 3...

И стандартное сопоставление номенклатуры в 1С это распознать не могло. Функционал номенклатуры поставщиков в этом случае тоже не работал, потому что клиент просто копировал позиции из какой-нибудь тендерной заявки и присылал это в ИПК.

Разумеется, указание позиций было, мягко говоря, разнообразным.

Так как заявок было очень много, а позиций в них обычно 20+, то у ИПК заявки забивали 8 офис-менеджеров, чтобы не тратить ценный ресурс менеджеров по продажам. Руководство, конечно, хотело всё это дело автоматизировать.

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

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

С чего всё началось

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

Я знаю Битрикс, 1С, но разработать с нуля программу с AI... Это были не мои компетенции на тот момент.

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

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

Claude предложил написать несложное приложение на Python с несколькими библиотеками для нечеткого сопоставления слов, типа FuzzyWuzzy, и накоплением базы сопоставлений.

Я обрадовалась, захлопала в ладоши и попросила написать мне такое приложеньице.

И он написал.

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

Я решила, что это лишь первый шаг, и пошла дальше.

К этому моменту я уже договорилась с клиентом: если мне удастся сделать реально рабочее приложение, мне его оплатят.

Для самой меня это был вызов. До этого я с нейросетями делала только сайты и писала на языках, которые сама знаю. А тут Python и Claude Code как мой верный друг и программист.

Хотя последний часто не мог разрулить все проблемы, и мне приходилось лезть в код самой. Особенно это касалось визуала. Но эту-то часть я и без Claude знала ;-)

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

Появился Matcher

Главный экран для программы по сопоставлению номенклатуры

Но вернёмся к Matcher. Так Claude назвал мою программу, и это название прижилось.

Сначала я поняла, что мне нужен многопользовательский режим и веб-версия, которая легко развернётся на любом сервере. Поэтому дальше я шла в связке с Docker.

Появился backend на Python, frontend на React и база данных PostgreSQL.

Уже красиво. Офис-менеджеры все смогут работать.

За маленьким но: программа всё так же сопоставляла 1%.

Первая попытка с нейросетями

Дальше решили прикрутить нейросети.

Разворачивать нейросеть для сопоставления у себя было невыгодно. Поэтому выбор пал на облачные решения.

Так как клиент в России, то сначала выбирали из YandexGPT и GigaChat. Я решила попробовать YandexGPT. Вроде как-то посерьёзнее.

Первая идея — кидать сразу всю номенклатуру нейросети для выбора подходящего варианта — была отвергнута.

У клиента около 8 тысяч позиций. Это уйма токенов, плюс огромное количество времени на каждый запрос.

Надо было действовать как-то иначе.

Claude опять подсказал, что нашу задачу сопоставления традиционно решают с помощью Embeddings. Это когда слова переводят в числовые векторы, по схожести которых идёт дальнейшее сопоставление.

Ну ок.

В Yandex Cloud зарегистрировалась. Embeddings получила. Попробовали сопоставить...

Ну 1% превратился, может, в 5%.

Отдельное приключение — распознавание заявки

Плюс была большая проблема с расшифровкой текста заказа.

Он мог быть написан вообще как угодно: таблица, текст, обобщающее слово, а дальше перечисление диаметров и моделей.

Короче, одна расшифровка заказа была отдельным приключением.

Поэтому я решила отправлять текст заказа на расшифровку в YandexGPT.

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

Становилось лучше, но не намного.

Так как Embeddings работали плохо, то после Embeddings я решила отправлять получившийся топ-10 позиций в YandexGPT для выбора наилучшего варианта.

Стало получше. Теперь, может, 10% сопоставлялось.

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

Заказ на 50 позиций сопоставлялся минут 10, что было совершенно неприемлемо.

Ещё я заметила, что в топ-10 кандидатов попадали товары из других категорий. То есть в кандидаты для сверла спокойно мог попасть метчик. А правильное сверло — не попасть.

Ведь кандидаты оценивались только по семантическому сходству. Категории товаров Embeddings не интересовали.

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

В итоге я решила, что мне нужна категоризация и GPT от OpenAI.

Переход на GPT

С ChatGPT всё было легко. VPN и иностранная карта позволили купить токены, и вместо YandexGPT заработал GPT.

Стало значительно лучше.

Косяков, конечно, тоже было достаточно, но где-то 30% позиций начали сопоставляться.

После этого я взялась за категоризацию.

Категоризация, которая сначала не взлетела

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

Казалось бы, чего тут сложного?

Но нет. Трудности были.

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

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

Главной сложностью стала категория «Прочее», где лежала 1000 позиций, которые клиент решил не категоризировать.

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

В итоге, убив кучу времени на категоризацию таким образом, я решила от неё отказаться и найти что-то иное.

Фильтры вместо категорий

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

Уже к этому моменту я придумала фильтрацию.

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

Не думала, что жизнь меня заставит разбираться в инструментах, ан нет.

И наоборот — фильтры позволяли убирать позиции с критической характеристикой, если в заказе клиента её не было.

Тогда я подумала, что категории — это по сути те же фильтры.

Если у нас сверла, так давайте фильтровать по сверлам. Оставляем лишь то, что содержит «сверл». То же самое с метчиками, плашками и так далее.

Итого у меня вышло 42 варианта категорий.

Дальше я поняла, что эта схема реально рабочая.

Начало сопоставляться более 50% позиций.

Осталось довести фильтрацию и промпты до идеала и можно сдавать.

Легко сказать, но трудно сделать :-)

Что появилось в финальной версии

В итоге после нескольких месяцев работы появились:

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

  1. Пользователь вставляет текст заказа.
  2. GPT распознаёт заказ и разбивает его на позиции.
  3. Фильтры оставляют самое нужное.
  4. Если осталось более 30 позиций, подключаются Embeddings.
  5. Топ-10 после Embeddings отправляется в GPT для выбора лучшего варианта.
  6. Если осталось меньше 30 позиций, все кандидаты сразу отправляются в GPT.
  7. Если у позиции высокий уровень соответствия по Embeddings, она уже была подтверждена вручную или точно повторяет позицию номенклатуры клиента, программа сопоставляет её автоматически.

После сопоставления все позиции одной кнопкой копируются для вставки в заказ 1С.

Ведётся история сопоставления, а позиции, сопоставленные вручную, копятся для дальнейшего использования в системе.

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

Как это работает у клиента

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

Офис-менеджеры заходят по доменному имени, авторизуются и сопоставляют позиции.

Все настройки визуально может править администратор.

Программа всё так же крутится в Docker, что позволяет примерно за час развернуть её на любом сервере.

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

Результат внедрения

За программу мне в итоге заплатили.

Теперь она сопоставляет более 90% позиций, иногда и под 100%.

Раньше офис-менеджер тратил около 30 минут на обработку заказа из 100 позиций.

Теперь такой заказ обрабатывается примерно за 2 минуты.

То есть программа экономит около 28 минут на каждом заказе из 100 позиций.

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

А я рада, что всё получилось.

Но я не осталась на этом. Теперь я написала saas версию программы, которая автоматом подтягивает все фильтры по категориям и характеристикам, на основании анализа файла номенклатуры. И может быть доступна любой компании без дополнительной настройки (а еще в нее включен подробный гайд, который проведет пользователя по всем важным моментам, которые необходимо настроить перед началом использования). Хотите попробовать? 30 дней тыкайтесь совершенно бесплатно!


Комментарии

Комментариев пока нет. Будьте первым!

Оставить комментарий

← Вернуться к списку статей