Jak zbudowaliśmy inteligentny system kategoryzacji produktów?
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:
- 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
- Warstwa przetwarzania
- System workerów do przetwarzania w tle
- Integracja z AI do generowania opisów i kategoryzacji
- Inteligentny scoring wyników wyszukiwania
- 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
- 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ł)
- 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ń
- Generowanie opisu – AI analizuje wszystkie dostępne dane i generuje unikalny opis SEO z precyzyjnymi informacjami technicznymi, materiałami wykonania, zakresem zastosowań i normami
- 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
- 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
- Wydajność od początku – nie można odkładać optymalizacji na później przy dużych wolumenach danych
- Inteligentne pomijanie – czasem najlepszym rozwiązaniem jest nie próbować ponownie
- Użytkownik w centrum – nawet najlepszy backend nie pomoże, jeśli UI jest wolne
- Elastyczność konfiguracji – potrzeby zmieniają się, system musi to uwzględniać
- 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.
Podobał Ci się ten artykuł?