Realizacje · RAG
Czat, który wie, kiedy powiedzieć „nie wiem”
Zbudowaliśmy bazę wiedzy, z której odpowiada Ebi, asystent na naszej stronie. Każdy tekst zatwierdza człowiek, a gdy czegoś w bazie nie ma, Ebi mówi „nie wiem” zamiast zgadywać.
Publikacja: 31 października 2026
Napisane przez: Bartek
Projekt: E4B · Baza wiedzy
Asystent, który nie zmyśla
Asystent AI na stronie firmy pomaga tylko wtedy, gdy klient może mu wierzyć.
Zwykły model językowy zapytany o firmę odpowie płynnie, nawet jeśli nic o niej nie wie. Poda usługę, cenę i termin. Zabrzmi pewnie, a może to wszystko wymyślić. Klient nie odróżni faktu od zgadywania, a firma potem tłumaczy się z obietnic, których nikt nie złożył.
Dlatego zbudowaliśmy bazę wiedzy, z której korzysta Ebi, asystent na naszej stronie. Zespół wpisuje do niej opisy usług i fakty, a ktoś je zatwierdza. Ebi odpowiada tylko na podstawie tych tekstów i podaje, skąd wziął odpowiedź. Gdy w bazie nie ma odpowiedzi, mówi wprost, że nie ma potwierdzonych informacji.
Poniżej pokazujemy, jak to działa: skąd baza bierze wiedzę, jak ją przeszukuje, kiedy odmawia i jak dobrze szuka w naszym teście. Technika jest w układzie RAG, ale do zrozumienia reszty tekstu nie trzeba jej znać.
Jedno miejsce na wiedzę firmy
Wszystko leży w jednej bazie danych: opisy, ich poprzednie wersje, informacja, kto co zatwierdził, oraz dane potrzebne do wyszukiwania. Nie trzeba pilnować kilku systemów naraz. Baza to PostgreSQL z rozszerzeniem pgvector.
Nic nie trafia do czatu bez zatwierdzenia
Dokument dodaje człowiek. Wpisuje treść w panelu albo wczytuje plik .txt lub .md. Może dopisać krótkie streszczenie, listę faktów i datę źródła. Nowy dokument jest najpierw szkicem i czat go nie widzi.
Żeby szkic trafił do czatu, ktoś musi go zatwierdzić pod swoim nazwiskiem. Zatwierdza konkretną wersję, tę, którą przeczytał. Jeśli w międzyczasie ktoś inny zmienił tekst, system nie przyjmie zatwierdzenia i nie nadpisze po cichu cudzej zmiany. Każda poprawka to nowa wersja do zatwierdzenia, a stara od razu przestaje być używana w odpowiedziach.
Czat ma do bazy osobny dostęp, który widzi tylko aktualne, zatwierdzone teksty. Szkiców i historii nie widzi. Serwer sprawdza to przy każdym starcie i nie uruchomi się, jeśli ten dostęp jest szerszy, niż powinien.
Całą wiedzę da się zapisać do jednego pliku archiwum i odtworzyć: oryginały, wersje, zatwierdzenia i powiązania.
Wiedzę widać jako mapę
Lista dokumentów nie pokazuje, co się z czym łączy. Dlatego zespół ma panel „Mapa wiedzy”. Każdy dokument jest kropką, każde powiązanie linią. Kropki same się rozsuwają, a powiązane trzymają się blisko, podobnie jak graf w Obsidianie.
Poniżej cała nasza baza w podobnym widoku. Zamiast powiązań dodanych ręcznie linie pokazują podobieństwo znaczeniowe: każdy opis łączy się z kilkoma najbliższymi według modelu, którego używa wyszukiwarka. Widać, które usługi tworzą skupiska, a które stoją osobno.
W panelu powiązanie dodaje człowiek i nadaje mu krótką nazwę, na przykład „dotyczy”. Powiązanie jest przypięte do wersji obu dokumentów. Gdy któryś się zmieni, powiązanie przestaje obowiązywać, aż ktoś je sprawdzi. Kropki można przeciągać, mapę przybliżać, a panel mieści do 400 dokumentów.
Panel pilnuje, żeby nie zgubić pracy. Okno edycji nie zamyka się w trakcie zapisu, przy konflikcie wersji wpisany tekst zostaje, a zamknięcie karty z niezapisanymi zmianami najpierw pyta. Dziś mapa służy ludziom do przeglądania i porządkowania wiedzy. Na odpowiedzi czatu jeszcze nie wpływa.
Rozumie pytania zadane innymi słowami
Klient rzadko używa słów z opisu usługi. Pisze „nie odbieramy telefonów po zamknięciu biura”, a opis mówi o recepcjonistce AI i obsłudze po godzinach. Dlatego baza szuka na dwa sposoby naraz: po znaczeniu i po słowach.
Po znaczeniu szuka mały model multilingual-e5-small. Zamienia pytanie i każdy fragment tekstu na wektor, czyli listę liczb opisującą sens, a baza szuka najbliższych. Model działa na naszym serwerze, więc w tym kroku tekst nie wychodzi na zewnątrz.
Po słowach szuka klasyczne BM25, które dobrze łapie nazwy i skróty. Obie listy łączy RRF w jeden ranking. Potem każdy kandydat jest jeszcze raz sprawdzany w bazie: czy to wciąż aktualna, zatwierdzona wersja. Dodatkowo zbudowaliśmy i zmierzyliśmy reranker, który porządkuje wyniki od nowa. Jest opcjonalny i na serwerze go nie włączyliśmy.
Gdy nie wie, mówi to wprost
Czat bierze pięć najlepszych fragmentów i sprawdza każdy w bazie. Jeśli żaden nie przejdzie, model w ogóle nie dostaje pytania, a klient widzi stałe zdanie: „Nie mam potwierdzonych informacji na ten temat”.
Gdy fragmenty są, model dostaje je z numerami i z zasadą: odpowiadaj tylko z nich, oznaczaj źródła [1], [2], nie wymyślaj realizacji, cen ani terminów. Gotowa odpowiedź musi zawierać numer źródła, a każdy numer musi istnieć. Potem źródła są sprawdzane drugi raz, na wypadek gdyby ktoś w międzyczasie wycofał dokument. Jeśli coś się nie zgadza, klient dostaje to samo stałe zdanie zamiast domysłu.
Numer źródła dowodzi, że źródło istnieje i jest zatwierdzone. Nie dowodzi, że każde zdanie odpowiedzi się z nim zgadza.
Przy podłączeniu bazy do Ebi doszły kolejne zabezpieczenia: pamięć kilku poprzednich wiadomości, odpowiedzi po polsku i po angielsku, pisanie na bieżąco całymi zdaniami, blokada odpowiedzi z nieznanym numerem telefonu, kwotą albo obcym linkiem, stałe odpowiedzi na pytania o cenę i termin oraz oznaczony jako niepewny kontekst z internetu o firmie rozmówcy. Odpowiedzi pisze model Anthropic.
Zapytaj sam
Poniżej jest czat w kształcie Ebi z bazą 10 przykładowych opisów usług, tych samych, na których mierzyliśmy wyszukiwanie. Obok widać, co dzieje się w środku, zanim padnie odpowiedź. Wybierz pytanie albo wpisz własne.
Jak dobrze szuka
Do sprawdzenia wyszukiwania napisaliśmy 24 pytania do 10 opisów usług: 18 ma odpowiedź w jednym z opisów, 6 celowo nie ma. Każda kropka poniżej to jedno z 18 pytań z odpowiedzią.
Szukanie po znaczeniu trafia na pierwsze miejsce prawie dwa razy częściej niż po słowach: 15 do 8. W pierwszej piątce E5 ma wszystkie 18 pytań, BM25 tylko 11. Złączenie po równo psuje pierwsze miejsce (9 z 18), choć piątka zostaje pełna. Reranker podnosi pierwsze miejsce do 16 z 18, za to kosztuje około 93 ms na pytanie i około 520 MiB pamięci procesu.
Wszystkie 6 pytań bez odpowiedzi, od ceny wdrożenia po ISO 27001, i tak zwróciło kandydatów przy szukaniu po znaczeniu i po złączeniu. Wyszukiwanie prawie zawsze coś znajdzie, dlatego o odmowie decyduje sprawdzenie numerów źródeł, a nie sam ranking.
Mały test syntetyczny: 10 opisów i pytania pisane przez osobę, która zna dokumenty. To wskazówka do ustawienia wag, a nie wynik z ruchu na stronie.
Przy każdej zmianie kodu GitHub Actions uruchamia 101 testów automatycznych na PostgreSQL 17 z pgvector, razem z testami panelu w przeglądarce Chrome. W przebiegu z 28.10.2026 96 przeszło, 5 pominięto, błędów nie było.
- multilingual-e5-small, wektory, lokalnie
- Claude, odpowiedzi Ebi
Co to może dać Twojej firmie
Taką bazę możemy zbudować na dokumentach Twojej firmy: opisach usług, cennikach, regulaminach, odpowiedziach na częste pytania. Zespół wpisuje wiedzę raz i ją zatwierdza, a asystent na stronie albo w firmie odpowiada z tego jednego miejsca.
Klient dostaje odpowiedź ze wskazaniem źródła albo jasne „nie wiem” zamiast wymyślonej ceny. Poprawka zaczyna działać po zatwierdzeniu, a stara wersja od razu przestaje być używana. Cała wiedza leży w jednej bazie, a mapa pokazuje, co się z czym łączy.
Płacisz za wdrożenie dopasowane do Twoich dokumentów i narzędzi. Zakres i wycenę ustalamy po rozmowie. Najprościej zacząć od rozmowy z Ebi, który działa właśnie na takiej bazie.
Pytania
Czy asystent uczy się z rozmów?
Nie. Wie tylko to, co ktoś z zespołu wpisał i zatwierdził: w panelu, z pliku .txt lub .md albo z archiwum.
Dokąd trafiają pytania?
Wektory liczy model na naszym serwerze, więc w tym kroku nic nie wychodzi na zewnątrz. Pytanie i zatwierdzone fragmenty dostaje dostawca modelu, który pisze odpowiedź. Szkice i historia wersji zostają w bazie.
Czy numer źródła gwarantuje prawdę?
Nie. Gwarantuje, że źródło istnieje, jest aktualne i zatwierdzone. Zgodność każdego zdania z fragmentem to osobna sprawa.
Czy mapa wpływa na odpowiedzi?
Jeszcze nie. Dziś służy zespołowi. Wyszukiwanie nie korzysta ani z powiązań, ani z dat.
Co dalej?
Następny krok to konektory, które same pobierają dokumenty, automatyczne streszczenia i fakty do zatwierdzenia oraz wyszukiwanie korzystające z powiązań z mapy i z dat. Dziś tego nie ma. Wagi wyszukiwania trzeba też ustawić na prawdziwych pytaniach, bo test był mały.
Tekst przygotowany z pomocą AI na podstawie projektu i zatwierdzony przez autora.