Sześć komponentów. Użytkownik pyta, a system w tle: zamienia pytanie na wektor, wyszukuje pasujące dokumenty w BigQuery i prosi model Bielik o odpowiedź opartą na znalezionym kontekście.
Kliknij krok albo użyj ← → (przełącza też rozdziały, gdy dojdziesz do końca listy).
Czym jest embedding
Embedding to zamiana tekstu na listę liczb (wektor). Model EmbeddingGemma zwraca 768 liczb opisujących znaczenie zdania. Zdania o podobnym sensie dają wektory blisko siebie.
wektor (próbka 32 z 768 wymiarów):
Co warto zapamiętać
Wymiar 768 — tyle liczb opisuje jedno zdanie. To „współrzędne" w przestrzeni znaczeń.
Znaczenie, nie słowa — „pies" i „czworonóg" trafiają blisko siebie, mimo innych liter.
Porównywanie — podobieństwo liczymy miarą COSINE (kąt między wektorami).
Ten sam model osadza dokumenty (przy zasilaniu bazy) i pytania (przy wyszukiwaniu) — dlatego da się je porównać.
Przestrzeń wektorowa — pobawmy się
Każda kropka to reguła hotelowa umieszczona wg znaczenia. Kliknij dowolną — stanie się zapytaniem, a system podświetli najbliższe (najbardziej podobne). Dokładnie tak działa wyszukiwanie w RAG.
3
Uproszczenie dydaktyczne: realnie wektory mają 768 wymiarów i porównujemy je miarą COSINE. Tu rzutujemy je na 2 wymiary, by dało się je zobaczyć.
Kliknij regułę po lewej
Wyszukiwanie wektorowe w BigQuery
To, co przed chwilą zrobiłeś klikając kropkę, BigQuery robi jednym zapytaniem SQL — tylko w 768 wymiarach i na tysiącach dokumentów.
top_k — ile najbliższych dokumentów zwrócić (suwak z poprzedniego rozdziału).
distance — odległość COSINE (0 = identyczne znaczenie, większe = dalej).
W aplikacji zamieniamy ją na trafność: score = 1 − distance i pokazujemy % przy kontekście.
Zwracane fragmenty stają się kontekstem dla modelu w następnym kroku.
Jak agent (Bielik) używa kontekstu
Sam model „zna świat", ale nie zna Twojego hotelu. RAG wstrzykuje znalezione fragmenty do promptu — model odpowiada na podstawie faktów, nie zgaduje.
Prompt wysyłany do Bielika
Odpowiedz TYLKO na podstawie kontekstu.
KONTEKST:
- Śniadanie 7:00–10:30 w restauracji na parterze
- Doba hotelowa: 15:00–11:00
PYTANIE:
O której godzinie jest śniadanie?
Baseline vs RAG
/ask_direct bez kontekstu: „Zwykle śniadania serwuje się 7:00–10:00…" — ogólnik, może być zmyślony.
/ask z RAG: „Śniadanie jest serwowane 7:00–10:30 na parterze." — konkret z Twojej bazy.
RAG = wyszukiwanie + generowanie.
Odpowiedź jest weryfikowalna — pokazujemy użyte fragmenty i ich trafność.
Skąd biorą się dane: zasilanie (ingest)
Zanim cokolwiek wyszukasz, dokumenty muszą trafić do bazy jako wektory. To ten sam model embeddingowy co przy pytaniu — dlatego pytania i dokumenty „mówią tym samym językiem".
Przepływ zasilania
1. Reguła tekstowa, np. „Parking 50 zł/doba" (z CSV lub przyciskiem „Dodaj regułę").
2. EmbeddingGemma zamienia ją na wektor 768D.
3. Zapis do BigQuery: {id, content, embedding}.
4. Od teraz reguła jest przeszukiwalna w RAG.
Endpointy
POST /ingest — wgranie pliku CSV (kolumny id, text).
POST /ingest_text — pojedyncza reguła na żywo z UI.
Kropki w playgroundzie (rozdział 3) to właśnie takie zasilone reguły.