Przeprowadzka do innego kraju to niemal zawsze stres, a Polska nie jest wyjątkiem. Karta pobytu, wiza, ZUS, konto bankowe, podatki, nostryfikacja dyplomu, łączenie rodzin — na każdym kroku pojawiają się dziesiątki pytań, a odpowiedzi są rozproszone po forach, czatach, nieaktualnych artykułach i okienkach urzędów, gdzie przy sąsiednim stanowisku nierzadko mówią co innego. Łatwo się zgubić, łatwo uwierzyć błędnej poradzie i stracić na tym tygodnie, pieniądze i nerwy. Właśnie z tego chaosu wyrósł nasz projekt.
Legalka KB to darmowy bot Telegram, który pomaga rozeznać się w relokacji do Polski. W przeciwieństwie do zwykłego chatbota — który na takie pytania odpowiada z pełną pewnością, zmyślając numery kont, terminy i adresy urzędów, które nie istnieją — Legalka KB odpowiada wyłącznie ze zweryfikowanej bazy wiedzy i uczciwie mówi «nie wiem», gdy w bazie nie ma odpowiedzi. W tym artykule przystępnie, ale szczegółowo pokażemy, jak system działa od środka: skąd biorą się dane, jak powstaje odpowiedź, co powstrzymuje bota przed zmyślaniem i jak utrzymujemy bazę w aktualności. Po drodze — wszystkie schematy z naszej wewnętrznej dokumentacji.
Główna zasada, na której opiera się wszystko inne, jest prosta: baza wiedzy to sam produkt. Bot nie jest «mądry sam z siebie» — jedynie starannie wydobywa i przekazuje to, co już leży w zweryfikowanej bazie. Nie ma w bazie — nie ma odpowiedzi. Z tej zasady wynika też cała architektura, do której teraz przejdziemy.
Jak zbudowany jest cały system
Zanim zanurzymy się w szczegóły, warto zobaczyć całą mapę. System składa się z czterech dużych części: bazy wiedzy, kolektora praktyki, asystenta z botem Telegram oraz panelu sterowania dla kuratora.
Po lewej — źródła: otwarte czaty i kanały diaspory na Telegramie. Z nich kolektor wydobywa «praktykę» — jak sprawy wyglądają naprawdę. Po prawej — sami użytkownicy, którzy zadają botowi pytania w pięciu językach. W centrum — baza wiedzy podzielona na dwie warstwy oraz asystent, który zamienia pytanie w odpowiedź. Wszystkim tym zarządza kurator przez osobny panel. Dalej omówimy każdy blok po kolei.
Technicznie projekt jest złożony jako jedna całość: każda duża część odpowiada za swój obszar pracy i może rozwijać się niezależnie od pozostałych.
Baza wiedzy: «norma» i «praktyka»
Sercem systemu jest sama baza wiedzy — zbiór ustrukturyzowanych stron. Wiedza w niej jest celowo podzielona na dwie warstwy, których nigdy się nie miesza.
Warstwa «norma» to, czego wymaga prawo. Każde twierdzenie ma odnośnik do źródła (w miarę możliwości do konkretnego artykułu), zostaje oznaczone jako zweryfikowane dopiero po recenzji prawnika i jest sprawdzane ponownie nie rzadziej niż co 60 dni.
Warstwa «praktyka» to, jak to działa w rzeczywistości: terminy, przyzwyczajenia inspektorów, niuanse konkretnych urzędów. To obserwacje wnioskodawców, zawsze z zastrzeżeniem «na podstawie relacji wnioskodawców» i zawsze z datą, po której fakt uznaje się za nieaktualny (nie później niż +90 dni).
Żadna strona nie trafia do użytkowników od razu. Wszystko powstaje jako szkic i musi przejść recenzję — to chroni przed tym, by surowe lub błędne dane poszły «na produkcję».
Dopóki strona jest szkicem, bot może ją mimo to pokazywać, ale uczciwie oznacza taką odpowiedź jako niezweryfikowaną — żeby nie tracić świeżych danych, a zarazem nie podawać ich za ostatecznie sprawdzone.
Jak powstaje odpowiedź
To najważniejsza część — to, po co całość powstała. Gdy użytkownik pisze pytanie, odpowiedź przechodzi przez łańcuch: przeformułowanie → wyszukiwanie → ocena trafności → generowanie ze sprawdzeniem → zapis do informacji zwrotnej. Na każdym kroku system ma możliwość uczciwie się zatrzymać i powiedzieć «nie wiem».
Omówmy to krok po kroku.
Przeformułowanie. Rozmowa rzadko składa się z pełnych pytań. «A jakie dokumenty?», «do tego», «a tam?» — takie wypowiedzi są bezużyteczne dla wyszukiwania w oderwaniu od kontekstu. Dlatego krótkie i odsyłające pytania kompaktowy model gpt-4o-mini przeformułowuje w samodzielne zapytanie, uwzględniając historię rozmowy i wybrane województwo: «a jakie dokumenty?» po pytaniu o pobyt na podstawie działalności zmienia się w «dokumenty do zezwolenie na pobyt czasowy i pracę, mazowieckie». Dzięki temu wyszukiwanie nie gubi wątku.
Wyszukiwanie. Każda sekcja każdej strony bazy jest z wyprzedzeniem zamieniana w wektor przez model text-embedding-3-small i przechowywana w indeksie wyszukiwania. Pytanie również zamieniane jest w wektor, a system znajduje najbliższe znaczeniowo sekcje według podobieństwa kosinusowego. Jeśli użytkownik wybrał województwo, jego strony mają priorytet nad ogólnymi — aby konkrety, takie jak numer konta czy adres urzędu, wygrywały ze stronami ogólnymi.
Ocena trafności. Zanim cokolwiek zostanie wygenerowane, system patrzy wyłącznie na oceny wyszukiwania (to osobny, ściśle przetestowany krok). Jeśli najlepszy wynik jest poniżej ustalonego progu albo nie ma trafień — bot od razu się wstrzymuje. Jeśli dopasowanie jest oczywiście dobre, a pytanie nie było przeformułowane — odpowiada od razu, bez dodatkowego sprawdzenia przez model. W przypadkach pośrednich uruchamia się dodatkowe sprawdzenie.
Sprawdzenie przez model. Porównuje ono PIERWOTNE pytanie użytkownika (a nie przeformułowane zapytanie) ze znalezionymi fragmentami — ponieważ przeformułowanie czasem «zjeżdża» na poprzedni temat i wysoko ocenia niewłaściwą stronę. Jeśli sprawdzenia nie da się jednoznacznie zinterpretować, system skłania się ku odpowiedzi. Bot wstrzymuje się tylko wtedy, gdy kontekst zostanie uznany za nietrafny.
Generowanie. Odpowiedź układa ten sam model gpt-4o-mini — ale wyłącznie ze znalezionych sekcji, bez wiedzy «z głowy». Każdy fakt oznaczany jest jako «norma» (to, czego wymaga prawo) lub «praktyka» (obserwacja wnioskodawców, zawsze z datą). Jeśli w kontekście są konkretne dane — numer konta, kwota, adres — bot podaje je wprost, zamiast odsyłać «dopytaj w urzędzie», i dołącza oficjalne linki do samodzielnej weryfikacji. Odpowiada w języku pytania, tłumacząc fakty z rosyjskojęzycznej bazy. Na końcu — zastrzeżenie.
Zapis i informacja zwrotna. Każda udzielona odpowiedź jest zapisywana (z obowiązkowym usunięciem danych osobowych), aby późniejsze 👍 lub 👎 przypięło się dokładnie do tego, co legło u jej podstaw, i przetrwało restart bota. Głos 👎 jest automatycznie rozkładany na typ — złe wyszukiwanie, złe generowanie albo luka w bazie — i trafia na panel jako sygnał, co naprawić w pierwszej kolejności.
Co bot potrafi dla użytkownika
Odpowiedź wyłącznie z bazy to rdzeń, ale wokół niego zbudowaliśmy cały zestaw udogodnień, aby korzystanie z bota było wygodne.
Głos w obie strony. Pytania nie trzeba pisać — można je podyktować: wiadomość głosową rozpoznaje model whisper-1 z podpowiedzią językową, bot echem pokazuje rozpoznany tekst i traktuje go jak zwykłe pytanie. Działa też kierunek odwrotny: pod każdą odpowiedzią jest przycisk «Przeczytaj na głos» — tekst zostaje oczyszczony z niepotrzebnych elementów i odczytany przez model tts-1.
Przyciski pod odpowiedzią. 👍/👎 — informacja zwrotna; 🔊 — odczytaj; ✍️ — zaproponuj poprawkę (trafia do kolejki propozycji); 📍 — pokaż na mapie, jeśli w odpowiedzi jest polski adres; 🔔 — zapisz się na listę oczekujących, jeśli dla Twojego województwa nie ma jeszcze lokalnej praktyki; 📋 — utwórz listę kontrolną, jeśli odpowiedź wymienia punkty.
Komendy. /topics — przegląd działów bazy z przykładowymi pytaniami; /checklist i /checklists — osobiste, edytowalne listy (np. «Ja» i «Żona»); /region — wybór województwa; /lang — język interfejsu i odpowiedzi; /new, /chats, /reset i inne — pamięć wielu równoległych czatów.
Osobno o językach: interfejs i odpowiedzi są dostępne w pięciu — rosyjskim, ukraińskim, białoruskim, polskim i angielskim. Wybór języka jest «trwały»: raz ustawiony, nie zostanie zmieniony przez przypadkową wiadomość w innym języku. Sama baza pozostaje rosyjskojęzyczna, a model tłumaczy każdą odpowiedź na wybrany język już na etapie odpowiedzi.
Osobiste listy kontrolne to raczej notatnik niż część bazy: edycja listy nigdy nie dotyka samej bazy wiedzy ani wyszukiwania. Usunięcie pozycji, która pochodzi z odpowiedzi bota, usuwa ją tylko z Twojej listy.
Skąd bierze się praktyka
Warstwę normatywną pisze kurator na podstawie oficjalnych źródeł. Natomiast warstwa praktyczna wypełniana jest półautomatycznie — osobnym kolektorem opartym na LangGraph, który zamienia czaty diaspory w zanonimizowane, zdeduplikowane fakty.
Liczby na dziś: przez kolektor przeszło około 2,4 mln wiadomości, z czego 28 091 uznano za istotne, a z nich wyodrębniono 17 284 fakty praktyczne. Ekstrakcją zajmuje się model gpt-4o-mini — wyłącznie zanonimizowane fakty, bez imion, nicków i cytatów.
Kluczowy moment — filtr danych osobowych działa według zasady «najpierw bezpieczeństwo»: najpierw automatyczne wyszukiwanie kontaktów, numerów dokumentów i długich cytatów, a w razie potrzeby dodatkowe sprawdzenie przez model; każdy «brudny» fakt jest odrzucany bez zapisu. Przeniesienie faktu do bazy to zawsze ręczny krok kuratora, nigdy automat.
Kolejny szczegół, o który trzeba było powalczyć, to klasyfikator tematów. Wcześniej wysyłał cały zestaw faktów w jednym zapytaniu do modelu, ten trafiał na limit czasu i po cichu przechodził na grubą heurystykę słów kluczowych, wrzucając przydatne fakty do «śmietnikowej» kategorii zbiorczej. Podzieliliśmy pracę na małe porcje — i udział «śmieci» spadł z 51% do 23%, a przydatnych, lecz źle poukładanych faktów zostało około 3%.
Ładowanie historyczne jest tak zbudowane, by można je było przerwać i wznowić: każdy kanał ma punkt kontrolny, a ponowne uruchomienie nie zaczyna od zera, lecz kontynuuje od miejsca zatrzymania.
Jak utrzymujemy bazę w aktualności
Zebranie faktów to połowa sukcesu. Dalej trzeba je sprawdzić, zredagować i zatwierdzić. Do tego kurator ma lokalny panel sterowania — działa on wyłącznie na jego komputerze i nie jest nigdzie wystawiony na zewnątrz.
Panel ma trzy zakładki: «Zbieranie» — kontrola zbierania faktów, «Recenzja» — przeglądanie, edycja i zatwierdzanie stron, oraz «Sugestie» — sygnały od użytkowników tylko do odczytu (propozycje poprawek, zestawienie 👍/👎, lista oczekujących dla regionów).
Zakładka «Zbieranie» pokazuje status ładowania historycznego i stan każdego kanału Telegram prostymi oznaczeniami — co jest już gotowe, co trwa, co zostało przerwane i wznowi się przy następnym uruchomieniu.
Zakładka «Recenzja» to stanowisko recenzenta: lista stron z filtrami, szczegółowy podgląd ze źródłami i pytaniami kontrolnymi oraz akcje zatwierdzania.
Sam proces zatwierdzania wygląda tak: recenzent otwiera stronę, w razie chęci przepuszcza jej pytania kontrolne przez działającego bota, może poprawić tekst z pomocą AI, a następnie — w roli kuratora lub prawnika — zatwierdza. Zatwierdzenie oznacza stronę jako zweryfikowaną, zapisuje, kto ją sprawdził, oraz dodaje wpis do historii zmian.
Najciekawsze jest tu poprawianie przez dialog z AI. Zamiast ręcznie edytować tekst, kurator po prostu pisze agentowi, czego potrzebuje. Agent sam rozpoznaje, czy to pytanie, czy polecenie poprawki.
Agent dotyka wyłącznie tekstu strony — pola służbowe, źródła i status szkicu pozostają nietknięte. Wymyślanie faktów jest mu zabronione: jeśli nie ma źródła, zostawia adnotację, że jest ono potrzebne, zamiast coś zmyślać. Po edycji następuje kontrola: czy nie zniknęły sekcje, czy tekst nie został ucięty; jeśli utracono zbyt wiele — do dwóch prób, a potem wycofanie bez zapisu.
Z punktu widzenia kuratora wygląda to jak zwykły czat z pamięcią — można dopowiadać «nie, krócej», «wspomnij też o tym», a każdą poprawkę cofnąć jednym przyciskiem.
Jak mierzymy jakość
Jakość odpowiedzi jest u nas mierzona, a nie zakładana. Istnieje zestaw 109 «złotych» pytań, a każda nowa strona dodaje co najmniej jedno. Osobny model-sędzia przepuszcza ten zestaw i sprawdza dwie rzeczy: czy odpowiedź oddała istotę oczekiwanych faktów (znaczeniowo, nie dosłownie) i czy nie twierdzi jako fakt czegoś zakazanego. Sprawdzenie jest celowo zaostrzone, aby «zakazane» uruchamiało się tylko przy wyraźnym twierdzeniu, a nie przy samym wspomnieniu tematu.
Bieżące metryki: cytowalność około 99%, pokrycie faktów około 97%, wstrzymanie się przy pytaniach spoza bazy — 100%.
Własny serwer, własne modele
Nic z tego nie jest przywiązane do jednego dostawcy. Wszystkie modele — rozpoznawanie znaczenia, generowanie, rozpoznawanie i synteza mowy — można podmienić na lokalne (na przykład Ollama lub LM Studio) jednym ustawieniem, a sam kod pozostaje ten sam. W przypadku wrażliwych danych relokacyjnych oznacza to, że cały stos można uruchomić na własnym serwerze i nie wysyłać pytań użytkowników na zewnątrz.
Cały cykl w skrócie
Jeśli złożyć wszystko razem, życie jednego faktu wygląda tak: jest zbierany z czatów, kurator przenosi praktykę lub pisze normę (szkic), recenzent sprawdza i zatwierdza, zmiany zostają zapisane, a następnie wyszukiwanie jest przebudowywane i przed wydaniem uruchamiane są pytania kontrolne.
Podsumowanie
Legalka KB pokazuje, że «inteligentny asystent» i «uczciwy asystent» to nie to samo. Sekret tkwi nie w rozmiarze modelu, lecz w dyscyplinie wokół niego: ścisłe powiązanie ze zweryfikowaną bazą, uczciwe «nie wiem» zamiast zgadywania, obowiązkowe źródła i daty, anonimizacja na wejściu i mierzalna jakość na wyjściu. To właśnie odróżnia przydatnego pomocnika w relokacji od elokwentnego generatora zmyśleń.
Samego bota można wypróbować od razu na Telegramie, za darmo — @legalka_pl_bot. A jeśli potrzebujesz podobnego asystenta, który odpowiada wyłącznie z Twoich danych i nie zmyśla — napisz do nas: development@mi-code.pl.
Który model za co odpowiada
Na koniec — zestawienie: który model realizuje które zadanie.
| Zadanie | Model |
|---|---|
| Indeksowanie bazy wiedzy | text-embedding-3-small |
| Wyszukiwanie (retriever) | text-embedding-3-small |
| Przeformułowanie pytań | gpt-4o-mini |
| Odpowiedź dla użytkownika | gpt-4o-mini |
| Wejście głosowe (STT) | whisper-1 |
| Odczyt odpowiedzi (TTS) | tts-1 |
| Ekstrakcja faktów praktycznych | gpt-4o-mini |
| Kontrola PII (opcjonalnie) | gpt-4o-mini |
| Klasyfikacja tematów | gpt-4o-mini |
| Klasyfikacja intencji | gpt-4o-mini |
| Rewizja stron bazy | gpt-4o-mini |
| Sędzia ewaluacyjny | gpt-4o-mini |
Najczęstsze pytania
- Czym jest Legalka KB i czy korzystanie jest darmowe?
- Legalka KB to darmowy bot Telegram (@legalka_pl_bot), który pomaga rozeznać się w relokacji do Polski — karta pobytu, wiza, ZUS, konto bankowe, podatki, nostryfikacja dyplomu, łączenie rodzin i wiele innych spraw. Można go wypróbować od razu na Telegramie, bez opłat.
- Jak Legalka KB unika zmyślania numerów kont, terminów czy adresów urzędów?
- W przeciwieństwie do zwykłego chatbota Legalka KB odpowiada wyłącznie ze zweryfikowanej bazy wiedzy i nigdy nie korzysta z wiedzy «z głowy». Gdy w bazie nie ma odpowiedzi, uczciwie mówi «nie wiem», zamiast cokolwiek zmyślać.
- W jakich językach mogę korzystać z Legalka KB?
- Interfejs i odpowiedzi są dostępne w pięciu językach — rosyjskim, ukraińskim, białoruskim, polskim i angielskim. Wybór języka jest «trwały», więc przypadkowa wiadomość w innym języku go nie zmieni; sama baza pozostaje rosyjskojęzyczna, a model tłumaczy każdą odpowiedź na wybrany język.
- Jaka jest różnica między «normą» a «praktyką» w odpowiedziach?
- «Norma» to to, czego wymaga prawo: każde twierdzenie ma odnośnik do źródła, jest oznaczane jako zweryfikowane dopiero po recenzji prawnika i sprawdzane ponownie nie rzadziej niż co 60 dni. «Praktyka» to to, jak sprawy wyglądają w rzeczywistości — obserwacje wnioskodawców, zawsze z datą i z zastrzeżeniem «na podstawie relacji wnioskodawców», przy czym fakt uznaje się za nieaktualny najpóźniej po 90 dniach.
- Czy Legalka KB zastępuje poradę prawną?
- Nie — Legalka KB to nie porada prawna, lecz zebrane i uporządkowane dane. Nawet gdy odpowiada pewnie i z odnośnikami, warto wejść w podane oficjalne linki i sprawdzić samodzielnie, bo przepisy się zmieniają, a ostatnie słowo zawsze należy do urzędu.