Vector Search Native: kompletna dokumentacja
Instalacja, konfiguracja dostawców AI, indeksowanie, REST API, hooki i rozwiązywanie problemów wtyczki wyszukiwania semantycznego dla WooCommerce.
Prezentacja
Vector Search Native zamienia wyszukiwanie produktów w WooCommerce w silnik semantyczny. Zamiast porównywać słowa kluczowe litera po literze, wtyczka konwertuje każdy produkt i każde zapytanie na wektory liczbowe (embeddingi) przez model AI, a następnie liczy podobieństwo ich znaczeń. Efekt: klient wpisujący „lekka letnia bawełniana kurtka” znajdzie Twoją „letnią marynarkę lnianą”, nawet bez wspólnego słowa.
Wtyczka obsługuje trzech dostawców embeddingów, OpenAI, Voyage AI i Cohere, wymienialnych jednym kliknięciem, z indeksowaniem przyrostowym, które wywołuje API tylko wtedy, gdy treść produktu faktycznie się zmieniła, oraz z automatycznym fallbackiem do natywnego wyszukiwania po słowach kluczowych, gdy wyszukiwanie wektorowe nie wystarczy.
Wymagania
- WordPress 6.2 lub nowszy
- WooCommerce 7.0 lub nowszy (testowane do 9.4)
- PHP 8.0 lub nowszy
- Klucz API u jednego z trzech dostawców: OpenAI, Voyage AI albo Cohere
- Działający WP-Cron (albo cron systemowy wywołujący wp-cron.php)
Żadne szczególne rozszerzenie MySQL, żaden serwer Redis ani Elasticsearch nie są wymagane. Obliczenie podobieństwa wykonuje się w czystym PHP, dzięki czemu wtyczka działa na dowolnym standardowym hostingu współdzielonym.
Instalacja
- W panelu WordPressa przejdź do Wtyczki → Dodaj nową → Wyślij wtyczkę na serwer.
- Wybierz plik
vector-search-native.zipi kliknij Zainstaluj teraz. - Kliknij Włącz. Wtyczka automatycznie tworzy dwie tabele (
wp_vsn_embeddingsiwp_vsn_index_queue) i planuje swoje zadanie cron. - Pod WooCommerce pojawia się nowe menu Vector Search.
Konfiguracja dostawcy
Przejdź do WooCommerce → Vector Search. Sekcja „Embedding provider” wymienia trzech dostępnych dostawców. Wybierz swojego z listy „Active provider”, wklej klucz API w odpowiedni blok, wybierz model i kliknij Test connection. Zielony komunikat potwierdzający wymiar wektora (na przykład „Connection OK. Embedding dimension: 1536″) potwierdza konfigurację.
Jaki model wybrać
- OpenAI text-embedding-3-small (1536d): najlepszy stosunek jakości do ceny, zalecany domyślnie.
- OpenAI text-embedding-3-large (3072d): maksymalna jakość, około 6 razy droższy.
- Voyage voyage-3 (1024d): świetny retrieval, trenowany pod wyszukiwanie.
- Cohere embed-multilingual-v3.0 (1024d): wybór dla katalogów wielojęzycznych FR/EN/ES/DE/IT.
Zmiana dostawcy albo modelu sprawia, że istniejące wektory stają się niekompatybilne (inne wymiary). Po zmianie zawsze uruchom pełne reindeksowanie.
Indeksowanie początkowe
- Wciąż na stronie Vector Search kliknij Queue all products for reindex. Wszystkie opublikowane produkty trafiają do kolejki.
- Kliknij Auto-process until done. Wtyczka przetwarza kolejkę partiami (domyślnie 25 produktów) aż do wyczerpania, na żywo z Twojej przeglądarki.
- Liczniki „Indexed”, „Queued” i „Stuck” aktualizują się w czasie rzeczywistym.
Możesz też pozwolić WP-Cronowi wykonać pracę w tle: zadanie vsn_process_queue działa według skonfigurowanego interwału (domyślnie 5 minut) i stopniowo opróżnia kolejkę.
Koszt orientacyjny: około 0,02 € za 1 000 produktów przy OpenAI text-embedding-3-small. Indeksowanie przyrostowe po hashu SHA-256 gwarantuje, że niezmieniony produkt nigdy nie wywoła zapytania do API, nawet jeśli kolejka przejdzie przez niego ponownie.
Jak działa wyszukiwanie
Po zakończeniu indeksowania wyszukiwanie produktów WooCommerce (front i standardowe widżety) jest automatycznie przechwytywane. Wtyczka:
- Konwertuje zapytanie odwiedzającego na wektor przez aktywnego dostawcę (z cache 10-minutowym).
- Liczy podobieństwo kosinusowe względem wszystkich zapisanych wektorów produktów.
- Zatrzymuje produkty przekraczające minimalny próg podobieństwa (domyślnie 0,30), w granicach maksymalnej liczby kandydatów (domyślnie 200).
- Wstrzykuje identyfikatory posortowane według trafności do zapytania WordPressa.
Jeśli liczba wyników jest niższa od progu fallbacku (domyślnie 3), wtyczka usuwa się z drogi i pozwala normalnie zadziałać natywnemu wyszukiwaniu po słowach kluczowych WooCommerce. Twoi odwiedzający nigdy nie zobaczą pustej strony z powodu problemu po stronie AI.
Ustawienia zaawansowane
Indeksowana treść
Sekcja „Content to index” pozwala wybrać pola włączane do embeddingu: krótki opis, długi opis, SKU, kategorie, tagi i atrybuty. Tytuł produktu jest indeksowany zawsze. Ograniczenie pól bywa dobre dla trafności w niektórych katalogach; włączenie wszystkich maksymalizuje pokrycie.
Progi i kandydaci
- Minimum similarity (0,0 do 1,0): poniżej tego wyniku kosinusowego produkt nie jest brany. Podnieś do 0,4 do 0,5, aby filtrować agresywnie, zejdź do 0,2, aby poszerzyć.
- Max candidates: liczba produktów zwracanych do WooCommerce po sortowaniu. Paginacja działa potem normalnie.
- Fallback threshold: minimalna liczba wyników wektorowych przed przejściem na słowa kluczowe.
Kolejka i cron
- Cron interval: częstotliwość przetwarzania kolejki (1, 5, 15 minut albo co godzinę).
- Batch size (1 do 100): produkty przetwarzane na tick. Zwiększaj ostrożnie, aby uniknąć limitów zapytań u dostawcy.
- Każdy nieudany produkt jest ponawiany do 5 razy, z zachowaniem ostatniego komunikatu błędu w bazie. Licznik „Stuck” wskazuje produkty, które wyczerpały próby.
REST API
Pięć endpointów udostępnianych pod /wp-json/vsn/v1/, wszystkie zarezerwowane dla użytkowników ze zdolnością manage_woocommerce:
POST /reindex— dodaje wszystkie produkty do kolejki.POST /process— przetwarza partię natychmiast.GET /stats— zwraca liczniki (łącznie, zaindeksowane, w kolejce, zablokowane).POST /test— testuje klucz API (parametry:provider,api_key,model).POST /clear— całkowicie czyści indeks embeddingów.
Przykład pełnego reindeksowania ze skryptu wdrożeniowego:
curl -X POST https://twoj-sklep.pl/wp-json/vsn/v1/reindex
-u admin:HASLO_APLIKACJI
Hooki dla deweloperów
vsn_indexed_text
Personalizuje tekst wysyłany do dostawcy dla każdego produktu. Idealne do wstrzykiwania pól ACF albo meta biznesowych:
add_filter( 'vsn_indexed_text', function ( $text, $product ) {
$material = get_post_meta( $product->get_id(), 'material', true );
if ( $material ) {
$text .= "nMaterial: " . $material;
}
return $text;
}, 10, 2 );
vsn_should_engage
Precyzyjnie kontroluje, kiedy wyszukiwanie wektorowe się włącza:
// Disable vector search for single-word queries.
add_filter( 'vsn_should_engage', function ( $engage, $query ) {
$s = (string) $query->get( 's' );
if ( str_word_count( $s ) < 2 ) {
return false;
}
return $engage;
}, 10, 2 );
Sklepy wielojęzyczne
Przy WPML albo Polylangu każde tłumaczenie jest odrębnym produktem WordPressa: każde jest więc embeddowane osobno, we własnym języku. Dwie rekomendacje:
- Użyj modelu wielojęzycznego (Cohere
embed-multilingual-v3.0albo Voyagevoyage-multilingual-2), aby zapytania i karty produktów trafiały do tej samej przestrzeni semantycznej niezależnie od języka. - Po dodaniu nowego języka albo masowej kampanii tłumaczeniowej uruchom pełne reindeksowanie, aby objąć nowe produkty.
Rozwiązywanie problemów
Produkty pozostają w statusie „Stuck"
Produkt trafia do „Stuck" po 5 kolejnych niepowodzeniach. Częste przyczyny: nieprawidłowy albo wygasły klucz API, limit zapytań u dostawcy, timeout sieciowy. Sprawdź klucz przyciskiem Test connection, popraw, a następnie kliknij Queue all products for reindex: to zeruje liczniki prób.
Wyszukiwanie wydaje się niezmienione
- Sprawdź, czy pole Enabled jest zaznaczone w ustawieniach ogólnych.
- Sprawdź, czy licznik „Indexed" odpowiada liczbie Twoich produktów.
- Jeśli używasz zewnętrznej wtyczki wyszukiwania (FiboSearch, SearchWP i podobne), może ona przechwytywać standardowe zapytanie WordPressa przed naszym przechwyceniem. Wyłącz ją albo skontaktuj się z nami w sprawie dopasowania integracji.
Kolejka nie opróżnia się sama
WP-Cron uruchamia się tylko przy wizytach. W witrynie o niskim ruchu skonfiguruj cron systemowy:
*/5 * * * * curl -s https://twoj-sklep.pl/wp-cron.php > /dev/null 2>&1
Deinstalacja
Wyłączenie wtyczki zawiesza crona, ale zachowuje dane. Usunięcie wtyczki ze strony Wtyczki uruchamia uninstall.php, który kasuje dwie tabele MySQL, opcję ustawień i zaplanowane zadania. Żadnych pozostałości w bazie.
FAQ
Czy mogę używać wtyczki bez klucza API?
Nie, wyszukiwanie semantyczne wymaga dostawcy. Bez klucza wtyczka pozostaje bezczynna, a natywne wyszukiwanie WooCommerce działa dalej normalnie.
Czy klucze API są widoczne po stronie klienta?
Nie. Wszystkie wywołania do dostawców wykonują się po stronie serwera, z PHP. Klucz nigdy nie pojawia się w HTML-u ani w żądaniach przeglądarki.
Jaki wolumen katalogu jest obsługiwany?
Skanowanie kosinusowe w PHP pozostaje bardzo wydajne mniej więcej do 50 000 produktów na standardowym hostingu współdzielonym. Powyżej skontaktuj się z nami, aby omówić integrację z dedykowanym indeksem approximate-nearest-neighbor.