ИИ-менеджер, который считает стоимость промо-продукции с нанесением

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

Заказчик: Интернет-магазин корпоративных подарков и промо-продукции
Стек: Python, FastAPI, LangChain / LangGraph, GigaChat / Ollama, SpaCy (NER), aiogram (Telegram-бот), xmltodict (XML-прайсы поставщиков), openpyxl (Excel-прайсы), Celery + Redis (загрузка прайсов по расписанию), MinIO, PostgreSQL

Задача

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

Результат

Клиент пишет запрос в Telegram обычным текстом, а бот сам находит товар в прайсах, разбирает параметры запроса и считает стоимость тиража с нанесением. Прайсы поставщиков (XML и Excel) загружаются по расписанию, поэтому расчёт идёт по актуальным ценам. Мелкие запросы бот закрывает сам, освобождая менеджеров под крупные заказы.

Это кейс про ИИ-менеджера расчёта стоимости промо-продукции — бота, который принимает запрос клиента в Telegram и считает цену тиража сувениров с нанесением логотипа. Магазин получает поток запросов вида «посчитайте бутылку с брендингом, тираж 492 шт» — и раньше каждый такой считался вручную по прайсам десятков поставщиков.

В чём была проблема

Промо-продукция — это тысячи позиций у множества поставщиков, у каждого свой прайс и свои правила нанесения. Клиент пишет свободным текстом, часто без артикула: «платки 50×50, искусственный шёлк, 10–20 шт», «стикеры-закладки, 350 шт, 1 цвет». Менеджер тратит время на поиск товара и расчёт, а мелкие запросы отвлекают от крупных сделок. Отсюда и родилась идея оценивать средний чек запроса: мелочь отдать боту, крупное — менеджеру.

Решение: NER + прайсы поставщиков + LLM

Пайплайн из трёх частей. Сначала запрос разбирает NER на SpaCy — вытаскивает тип товара, тираж, цвет, параметры нанесения. Затем ищем товар в прайсах поставщиков, которые загружаются по расписанию через Celery — XML-фиды разбираем через xmltodict, Excel-прайсы через openpyxl:

import xmltodict
with open(feed_path, encoding="utf-8") as f:
    data = xmltodict.parse(f.read())
for item in data["catalogue"]["product"]:
    upsert_product(article=item["@id"], name=item["name"],
                   price=item["price"])

Дальше LLM (GigaChat или локальная модель через Ollama) собирает из найденного товара, тиража и правил нанесения человекочитаемый расчёт и отвечает клиенту в Telegram через aiogram.

Почему NER, а не только LLM

Прогонять каждый запрос и весь поток номенклатуры через большую LLM дорого и медленно. Быстрый разбор запроса берёт на себя SpaCy, а LLM подключается там, где нужен именно язык — собрать итоговый расчёт и ответ. Ту же связку мы отдельно разбираем в кейсе про извлечение характеристик товара из наименования — это как раз кусочек этого большого проекта.

Актуальность прайсов

Цены у поставщиков меняются, поэтому прайсы не грузятся руками: Celery по расписанию забирает свежие XML- и Excel-фиды и обновляет базу. Так бот считает по актуальным ценам, а не по прайсу месячной давности. Про массовую обработку прайсов есть отдельная статья — обработка 12 000 позиций за 20 секунд.

Хотите ИИ-менеджера под свой магазин

Если ваши продавцы вручную считают запросы по прайсам поставщиков — это автоматизируется: разбор запроса, поиск товара, расчёт и ответ клиенту. Как собрать такой пайплайн на NER и LLM, разбираем на курсе по ChatGPT и нейросетям для 1С.

Частые вопросы

Нужен похожий проект?

Опишите задачу — оценю сроки и стоимость.