Uwolnij swój potencjał.

Blog
Blog

Jak zbudowaliśmy inteligentny system kategoryzacji produktów?

Development
[ 8 min reading time ]

Wyobraź sobie sytuację: masz katalog z dziesiątkami tysięcy produktów z branży obróbki metali – od frezów HSS i gwintowników maszynowych przez wiertła kobaltowe po noże tokarskie i narzędzia pomiarowe. Każdy produkt potrzebuje unikalnego opisu SEO z precyzyjnymi specyfikacjami technicznymi, musi być przypisany do odpowiedniej kategorii w hierarchicznej strukturze (np. Frezowanie → Frezy HSS → Frezy walcowe), a dane pochodzą z wielu różnych źródeł dostawców. Ręczne przetwarzanie takiego wolumenu to miesiące pracy.

To właśnie było naszym wyzwaniem. W tym wpisie opowiem o przeszkodach, które napotkaliśmy po drodze, oraz o tym, jak udało nam się zbudować system, który automatyzuje ten proces.

Kontekst projektu

Nasz klient, sklep specjalizujący się w narzędziach do obróbki metali i częściach metalowych – potrzebował rozwiązania, które:

  • Automatycznie generuje opisy produktów zoptymalizowane pod SEO
  • Przypisuje produkty do 3-poziomowej struktury kategorii
  • Agreguje dane z wielu źródeł dostawców
  • Przetwarza dziesiątki tysięcy produktów efektywnie

Główne wyzwania i przeszkody

1. Problem wydajności przetwarzania wsadowego

Wyzwanie: Przy pierwszych testach z katalogiem liczącym ponad 80 tysięcy produktów, przetwarzanie zajmowało nieakceptowalnie długo. System próbował przetworzyć wszystko naraz, co prowadziło do:

  • Nadmiernego zużycia pamięci (system się zawieszał)
  • Długich czasów oczekiwania (godziny przetwarzania)
  • Nieefektywnych zapytań do zewnętrznych źródeł danych

Rozwiązanie: Wprowadziliśmy inteligentny system przetwarzania wsadowego:

  • Porcjowanie danych – produkty są przetwarzane w kontrolowanych partiach o optymalnym rozmiarze
  • Kontrolowana równoległość – konfigurowalna liczba produktów przetwarzanych jednocześnie
  • Optymalizacja zapytań – ograniczenie równoległych zapytań do baz danych dostawców
  • Metryki i monitoring – szczegółowe logowanie czasu przetwarzania, zużycia pamięci i błędów

Efekt: czas przetwarzania skrócił się znacząco, a zużycie pamięci zostało zoptymalizowane do bezpiecznego poziomu.

2. Integracja wielu źródeł danych

Wyzwanie: Produkty pochodziły z różnych systemów dostawców narzędzi i części metalowych, każdy z własnym formatem danych. Niektóre produkty (np. specjalistyczne gwintowniki lub frezy o niestandardowych parametrach) nie były dostępne w źródłach, co powodowało:

  • Wielokrotne próby zapytań do tych samych, nieistniejących produktów
  • Niepotrzebne koszty API (wyszukiwanie Google dla produktów bez danych technicznych)
  • Brak mechanizmu śledzenia, które produkty już sprawdziliśmy – szczególnie problematyczne przy produktach z wieloma wariantami (np. gwintowniki w różnych średnicach i skokach gwintu)

Rozwiązanie: Wprowadziliśmy system flag:

  • Trwałe flagi „not found” – gdy produkt nie zostanie znaleziony w źródle danych, system oznacza go flagą i pomija w kolejnych próbach
  • Mechanizm resetu – możliwość ręcznego resetowania flag, gdy źródła danych się aktualizują
  • Inteligentne pomijanie – system automatycznie pomija produkty oznaczone flagami, oszczędzając czas i zasoby

3. Wydajność interfejsu użytkownika

Wyzwanie: Strona z produktami ładowała się wolno, a częste automatyczne odświeżanie powodowało:

  • Nadmierne obciążenie serwera
  • Słabą responsywność interfejsu
  • Problemy z wydajnością przy dużych zbiorach danych

Rozwiązanie: Przeprowadziliśmy kompleksową optymalizację:

  • Usunięcie auto-refresh – zastąpione przyciskiem ręcznego odświeżania
  • Paginacja po stronie serwera – zmniejszenie domyślnej liczby produktów wyświetlanych jednocześnie
  • Debouncing wyszukiwania – opóźnienie przed wykonaniem zapytania, redukujące liczbę niepotrzebnych requestów
  • Lazy loading – stopniowe ładowanie danych w miarę potrzeby
  • Memoization komponentów – redukcja niepotrzebnych re-renderów

4. Dokładność przypisywania kategorii

Wyzwanie: Automatyczne przypisywanie produktów do kategorii wymagało wysokiej dokładności, szczególnie w branży technicznej, gdzie błędna kategoryzacja może prowadzić do problemów z wyszukiwaniem. Przykład: gwintownik maszynowy metryczny M8 musi trafić do „Gwintowanie → Gwintowniki maszynowe → Gwintowniki maszynowe metryczne”, a nie do kategorii gwintowników ręcznych czy narzynek. Standardowe podejście dawało zadowalające, ale nie idealne wyniki.

Rozwiązanie: Wdrożyliśmy zaawansowany system kategoryzacji:

  • Iteracyjne myślenie – system analizuje produkt wielokrotnie, poprawiając przypisanie w każdej iteracji
  • Scoring pewności – każda kategoria otrzymuje wynik pewności (confidence score)
  • Automatyczna ewaluacja – system ocenia dokładność przypisania i sugeruje poprawki
  • Historia decyzji – zapis procesu decyzyjnego dla audytu i uczenia

5. Zarządzanie konfiguracją workera

Wyzwanie: System przetwarzania w tle (worker) wymagał elastycznej konfiguracji, ale ustawienia musiały być trwałe między restartami.

Rozwiązanie:

  • Konfiguracja w bazie danych – ustawienia workera są zapisywane w bazie NoSQL i przetrwają restart serwera
  • Zmienne środowiskowe jako domyślne – możliwość ustawienia wartości początkowych przez zmienne środowiskowe
  • Interfejs użytkownika – panel kontrolny pozwala na zmianę parametrów bez restartu systemu
  • Metryki w czasie rzeczywistym – monitoring postępu przetwarzania i statystyk

Jak to działa (wysokopoziomowo)

Architektura systemu

System składa się z kilku kluczowych komponentów:

  1. Warstwa danych
  • Główna baza danych do przechowywania produktów, kategorii i konfiguracji
  • Integracja z systemami dostawców jako źródło danych produktowych
  • Integracja z wyszukiwarką internetową do wzbogacania danych
  1. Warstwa przetwarzania
  • System workerów do przetwarzania w tle
  • Integracja z AI do generowania opisów i kategoryzacji
  • Inteligentny scoring wyników wyszukiwania
  1. Warstwa prezentacji
  • Nowoczesny interfejs webowy
  • Dashboard z metrykami w czasie rzeczywistym
  • Narzędzia do importu i zarządzania produktami

Proces przetwarzania produktu

Przykład: gwintownik maszynowy metryczny M8

  1. Import danych – produkt jest importowany z systemu dostawcy lub ręcznie przez interfejs. System otrzymuje podstawowe dane: SKU, nazwę, parametry techniczne (średnica, skok gwintu, materiał)
  2. Wzbogacanie danych – system wyszukuje informacje o produkcie w Google, oceniając trafność wyników. Dla narzędzi technicznych szczególnie ważne są specyfikacje producenta, normy (np. DIN, ISO), zakres zastosowań
  3. Generowanie opisu – AI analizuje wszystkie dostępne dane i generuje unikalny opis SEO z precyzyjnymi informacjami technicznymi, materiałami wykonania, zakresem zastosowań i normami
  4. Przypisanie kategorii – system przypisuje produkt do odpowiedniej kategorii w hierarchii (np. Gwintowanie → Gwintowniki maszynowe → Gwintowniki maszynowe metryczne), używając iteracyjnego procesu decyzyjnego, który uwzględnia specyfikę techniczną produktu
  5. Ewaluacja — automatyczna ocena dokładności przypisania i sugestie poprawek, szczególnie ważne przy produktach technicznych, gdzie błędna kategoryzacja może prowadzić do problemów z wyszukiwaniem

Inteligentne funkcje

  • Dynamiczne słowa kluczowe – system automatycznie wyciąga frazy z nazw kategorii (np. „gwintowniki maszynowe”, „frezy HSS”, „wiertła kobaltowe”) i używa ich do oceny wyników wyszukiwania. Dla branży technicznej szczególnie ważne są frazy wielowyrazowe, które lepiej identyfikują specjalistyczne produkty
  • Scoring hybrydowy – kombinacja różnych czynników oceny wyników wyszukiwania. System premiuje wyniki zawierające normy techniczne (DIN, ISO), specyfikacje materiałów (HSS, węglik) i parametry techniczne
  • Zarządzanie blokadami – mechanizm zapobiegający równoczesnemu przetwarzaniu tego samego produktu, szczególnie ważny przy dużych importach narzędzi z różnymi wariantami (np. różne średnice gwintowników)
  • Audyt i historia – pełna historia zmian i decyzji dla każdego produktu, pozwalająca na weryfikację poprawności przypisania kategorii dla specjalistycznych narzędzi

Wnioski i lekcje

Co zadziałało dobrze

  • Modularna architektura – podział na warstwy ułatwił rozwój i utrzymanie
  • Konfigurowalność – możliwość dostosowania parametrów bez zmiany kodu
  • Monitoring i metryki – szczegółowe logowanie pomogło w identyfikacji problemów
  • Iteracyjne podejście – stopniowe ulepszanie zamiast rewolucji

Najważniejsze lekcje

  1. Wydajność od początku – nie można odkładać optymalizacji na później przy dużych wolumenach danych
  2. Inteligentne pomijanie – czasem najlepszym rozwiązaniem jest nie próbować ponownie
  3. Użytkownik w centrum – nawet najlepszy backend nie pomoże, jeśli UI jest wolne
  4. Elastyczność konfiguracji – potrzeby zmieniają się, system musi to uwzględniać
  5. Monitoring jest kluczowy – bez metryk nie wiesz, gdzie są problemy

Podsumowanie

Budowa systemu automatyzacji kategoryzacji produktów to była podróż pełna wyzwań technicznych i organizacyjnych. Od problemów z wydajnością przez integrację wielu źródeł danych po optymalizację interfejsu użytkownika – każdy problem wymagał przemyślanego rozwiązania.

Kluczem do sukcesu okazało się:

  • Systematyczne podejście – identyfikacja problemów, planowanie rozwiązań, implementacja i weryfikacja
  • Elastyczność – gotowość do zmiany podejścia, gdy pierwsze rozwiązanie nie działa
  • Skupienie na użytkowniku – zarówno wewnętrznym (operatorzy systemu), jak i końcowym (klienci platformy)
  • Ciągłe ulepszanie – system nie jest statyczny, ewoluuje wraz z potrzebami

Dziś system efektywnie przetwarza dziesiątki tysięcy produktów z branży obróbki metali od frezów przez gwintowniki po narzędzia tokarskie – generując unikalne opisy techniczne i precyzyjnie przypisując je do odpowiednich kategorii. To nie tylko oszczędność czasu i kosztów, ale także lepsze doświadczenie dla klientów końcowych – profesjonalistów z branży metalowej, którzy mogą szybciej znaleźć potrzebne narzędzie o odpowiednich parametrach technicznych.

Author Krystian Kacik Web Developer
Spis treści

Podobał Ci się ten artykuł?

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.