15 апреля 2026 • 10 минут чтения

Международная логистика на стеке Python: Почему мы выкинули векторный поиск и создали архитектуру, которая не галлюцинирует

AI-бот для международной логистики

О проекте

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

Задача: Пользователь вводит название товара («кроссовки») или код ТН ВЭД + вес + стоимость. Бот за 2 минуты рассчитывает:

Было: Клиент → менеджер → поиск кода в таблицах → ручной расчет → ответ в течение суток.

Стало: Автоматический расчет за 2 минуты, 24/7.

1. Стек: никакого хайпа, только прагматизм

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

Важно: В продакшене не используются онлайн-запросы к LLM. Скорость ответа < 50 мс, точность абсолютная. Нейросети применяются только офлайн для генерации синонимов и обогащения базы кодов ТН ВЭД.

2. Поиск по 13,279 кодам ТН ВЭД: три уровня без векторов

Классификация товара — фундамент международной логистики. Использован гибридный поиск в три уровня:

  1. Точное совпадение — PostgreSQL ILIKE по описанию
  2. Семантический слой — поиск по массивам ключевых слов и синонимов
  3. Fuzzy-поиск — алгоритм Левенштейна (thefuzz) + морфология (pymorphy2)

Почему не векторный поиск? По запросу "птица массой не более 185 г" система на векторах выдавала «ноутбуки» — фраза «массой не более» есть в обоих описаниях.

Решение: Категорийные бонусы. Если в запросе «птица» — группа «Живые животные» получает +20 баллов. Результат: алгоритм не путает курицу с MacBook, скорость < 50 мс.

3. Расчет: 22 поля стоимости за 2 минуты

Алгоритм из 13 шагов автоматизирует то, на что у менеджера уходит полдня:

Результат — детальная смета с разбивкой каждой копейки: от доставки внутри Китая до итоговой суммы с НДС и без.

Пример расчета

━━━━━━━━━━━━━━━━━━━━━━
📊 ИТОГОВЫЙ РАСЧЕТ ДОСТАВКИ

🚚 Маршрут: Китай → Москва
📦 Транспорт: Море через Владивосток
📋 Товар: наборы конструкторские и игрушки для конструирования прочие: → пластмассовые
🔢 ТН ВЭД: 9503003500
⚖️ Параметры: 150.0 кг | 5.00 м³
💡 Объемный вес: 5,000.0 кг (тарифицируется по объему)
💵 Инвойс: 8,000.00 EUR = 732,513 ₽

━━━━━━━━━━━━━━━━━━━━━━
💰 ПОЛНАЯ СТОИМОСТЬ:

1. Товар: 732,513 ₽

2. Логистика (EXW):
├─ Прекерридж (доставка в Китае): 123,329 ₽
├─ Фрахт: 66,447 ₽
├─ Терминал РФ: 45,000 ₽
└─ Итого: 234,776 ₽

3. Финансовые комиссии:
├─ Платежный агент (1.8%): 13,185 ₽
├─ Валютный контроль (0.07%): 513 ₽
└─ Страховка (0.07%): 513 ₽
└─ Итого: 14,211 ₽

4. Таможенные платежи:
├─ Таможенная стоимость (EXW): 912,835 ₽
├─ Пошлина (10.0%): 91,283 ₽
├─ НДС: 220,906 ₽
├─ Сбор за подачу ДТ: 4,924 ₽
└─ Оформление: 3,000 ₽
└─ Итого: 320,113 ₽

5. Брокер:
├─ Базовый сбор: 14,000 ₽
├─ НДС (22%): 3,080 ₽
└─ Итого: 17,080 ₽

6. Агентское вознаграждение:
├─ Комиссия (4%): 56,348 ₽
├─ НДС (22%): 12,396 ₽
└─ Итого: 68,744 ₽

━━━━━━━━━━━━━━━━━━━━━━
💰 ИТОГОВАЯ СТОИМОСТЬ:

ИТОГО С НДС: 1,477,437 ₽
НДС к возмещению: 236,382 ₽
ИТОГО БЕЗ НДС: 1,241,055 ₽

4. Масштабирование: от Telegram до PDF за секунды

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

5. Три ключевые технические проблемы

Разработка для ВЭД — это работа с огромными массивами данных и сложной математикой. Три критичные проблемы и их решения:

№1: Двухфакторная система идентификации ТН ВЭД

В базе данных 13,279 кодов. Для работы с ними внедрено два сценария:

Сценарий 1. Подбор по наименованию с умным ранжированием

Итоговая выдача формируется на основе системы весов:

Сценарий 2. Поиск по коду с иерархической группировкой

Чтобы пользователь не запутался в тысячах схожих позиций, реализована последовательная детализация через 5-ступенчатую воронку:

1
Группа (2 цифры) — основная категория товара
2
Позиция (4 цифры) — сужение области поиска
3
Субпозиция (6 цифр) — определение специфики
4
Подсубпозиция (8 цифр) — уточнение характеристик
5
Полный код (10 цифр) — финальная верификация товара

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

№2: Производительность — проблема N+1 запросов

Проблема: При сотнях расчетов админка «засыпала». Каждая связанная строка — отдельный запрос к БД.

Решение: Eager loading через joinedload в SQLAlchemy — все связанные данные одним запросом.

Результат: Загрузка страницы: 5 секунд → 200 мс (ускорение в 25 раз).

№3: Математический лабиринт пошлин

Проблема: Пошлины — не только проценты. Есть адвалорные, специфические и комбинированные ставки с разной логикой расчета.

Решение: Система автоматически определяет тип ставки. При адвалорной — процент от стоимости. При специфической — фиксированная сумма (€/кг). При комбинированной — выбирает MAX между обоими вариантами.

Результат: Исключение человеческого фактора. Учет всех параметров: комбинированные пошлины, сборы за подачу ДТ, стоимость оформления.

6. Зачем это нужно в 2026 году

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

Три преимущества автоматизации:

Вывод: Будущее логистики — не в «умных разговорах» с ботом, а в математически выверенной работе систем, которые знают базу ТН ВЭД лучше человека.

Подробные технические кейсы доступны на сайте bezk.pro. Также на сайте вы можете заказать разработку ИИ-агента под задачи вашего бизнеса.