Bazy wektorowe
Bazy wektorowe umożliwiają wyszukiwanie semantyczne — zamiast szukać po dokładnym dopasowaniu słów, system rozumie znaczenie tekstu i znajduje podobne treści.
Jak to działa?
- Embedding — każdy tekst jest konwertowany na wektor liczbowy (1536 wymiarów) przez model AI
- Przechowywanie — wektory są zapisywane w bazie wraz z oryginalnym tekstem i metadanymi
- Wyszukiwanie — pytanie użytkownika jest zamieniane na wektor i porównywane z zapisanymi wektorami (cosine distance)
- Wyniki — system zwraca najlepiej dopasowane wpisy
Zastosowania
- RAG (Retrieval-Augmented Generation) — wzbogacanie odpowiedzi AI o kontekst z bazy wiedzy
- Wyszukiwarka semantyczna — znajdowanie podobnych dokumentów, artykułów, FAQ
- Chat z bazą wiedzy — zadajesz pytanie, AI odpowiada na podstawie Twoich dokumentów
Wymagania
Baza wektorowa wymaga connectora AI (OpenAI, Gemini lub Claude) z obsługą embeddingów do generowania wektorów.
Wpisy
Każdy wpis w bazie wektorowej zawiera:
- Treść tekstową
- Wektor embedding
- Metadane (np. URL źródła)
- Powiązanie ze źródłem (typ + ID, np. Kb::Entry #35)
- Numer chunka (gdy tekst był dzielony)
Dzielenie tekstu na chunki
Długie teksty są automatycznie dzielone na mniejsze fragmenty (chunki) przed generowaniem embeddingu. Każdy chunk to osobny wpis w bazie wektorowej — ale wszystkie chunki z jednego źródła (np. wpisu KB) są ze sobą powiązane.
Opcja “Chunking włączony”
W ustawieniach bazy wektorowej można włączyć opcję dzielenia na chunki. Zmienia to zachowanie:
| Ustawienie | Rozmiar chunka | Efekt |
|---|---|---|
| Chunking wyłączony | max tokenów modelu (np. 8191 dla OpenAI) | Tekst dzielony tylko gdy przekracza limit modelu. Większe fragmenty, mniej wpisów |
| Chunking włączony | ~500 tokenów (~1-2 paragrafy) | Tekst zawsze dzielony na małe fragmenty. Precyzyjniejsze wyszukiwanie |
Kiedy włączyć chunking
- Włącz gdy źródło ma długie dokumenty (artykuły, regulaminy, dokumentacja) i zależy ci na precyzji wyszukiwania — mały chunk lepiej dopasowuje się do konkretnego pytania
- Zostaw wyłączony gdy wpisy są krótkie (FAQ, pojedyncze pytania/odpowiedzi) — dzielenie krótkich tekstów nie ma sensu
Jak działa dzielenie
- System rozpoznaje strukturę tekstu — nagłówki markdown (
## Sekcja), paragrafy, listy HTML - Nowa sekcja (nagłówek) to naturalna granica chunka
- Każdy chunk dostaje prefix z nagłówkiem sekcji, do której należy — dzięki temu nie traci kontekstu
- Jeśli tekst jest w HTML — system konwertuje go na structured text zachowując nagłówki i paragrafy
- Tokeny liczone dokładnie przez tiktoken (tokenizer OpenAI) — nie zgaduje po znakach
Limity per model
Każdy model embeddingowy ma inny limit tokenów na jedno wywołanie. System automatycznie pobiera limit z connectora:
| Model | Max tokenów | Efekt z chunking OFF | Efekt z chunking ON |
|---|---|---|---|
| OpenAI text-embedding-3-small | 8 191 | chunki do ~7 800 tokenów | chunki do 500 tokenów |
| Cohere embed-v4 (Bedrock) | 128 000 | praktycznie bez dzielenia | chunki do 500 tokenów |
| Gemini embedding | 2 048 | chunki do ~1 900 tokenów | chunki do 500 tokenów |
Przy przełączeniu connectora (np. z OpenAI na Cohere) limity dostosowują się automatycznie — nie trzeba nic zmieniać w ustawieniach bazy.