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. Poniżej — jak dokładnie działa AI, które to zapewnia.
W sercu jest RAG (Retrieval-Augmented Generation). Każda sekcja każdej strony bazy zamieniana jest w wektor przez model text-embedding-3-small i zapisywana w indeksie. Gdy użytkownik zadaje pytanie, ono również jest embeddowane, a system wyszukuje 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 generycznymi.
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 retriever nie gubi wątku.
Odpowiedź układa ten sam 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 z czatów diaspory, zawsze z datą aktualności. 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 — po rosyjsku, ukraińsku, polsku lub angielsku — tłumacząc fakty z rosyjskojęzycznej bazy. A jeśli trafność znalezionego jest poniżej progu, uczciwie mówi „nie wiem”, zamiast zgadywać.
Ważne zastrzeżenie: Legalka KB to nie porada prawna, lecz zebrane i uporządkowane dane. Nawet gdy bot odpowiada pewnie i z odnośnikami, nie zastępuje to weryfikacji: raz jeszcze wejdź w podane oficjalne linki i sprawdź samodzielnie. Przepisy się zmieniają, szczegóły zależą od konkretnego przypadku, a ostatnie słowo zawsze należy do urzędu.
Pytania nie trzeba pisać — można je podyktować. Wiadomość głosową z Telegrama rozpoznaje model whisper-1 z podpowiedzią językową dla większej dokładności; bot echem pokazuje rozpoznany tekst i przepuszcza go przez ten sam RAG. Działa też kierunek odwrotny: pod każdą odpowiedzią jest przycisk „Przeczytaj na głos” — tekst zostaje oczyszczony ze znaczników, linków i disclaimera i odczytany przez model tts-1.
Warstwa praktyczna bazy wypełniana jest półautomatycznie. Osobny pipeline LangGraph przetwarza eksporty kanałów i czatów diaspory na Telegramie partiami: do tej pory przeszło przez niego 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ę gpt-4o-mini — wyłącznie zanonimizowane fakty, bez imion, nicków i cytatów. Dalej — filtr PII działający fail-closed: regex po kontaktach, numerach dokumentów i długich cytatach, opcjonalnie drugie przejście przez LLM; każdy „brudny” fakt jest odrzucany bez zapisu. Na końcu klasyfikator rozkłada fakty na 16 tematycznych wertykali (pobyt, praca, banki, podatki, ZUS i inne) — batchowanie obniżyło tu udział „śmietnikowej” kategorii z 51% do 23%.
Kurator bazy edytuje strony przez dashboard z agentem AI — również opartym na LangGraph. Agent najpierw rozpoznaje intencję (pytanie o stronę czy prośba o edycję), tworzy minimalny plan zmiany z uwzględnieniem historii rozmowy i przepisuje tylko treść strony, nie ruszając metadanych. Wymyślanie faktów jest mu zabronione: zamiast tego wstawia adnotację, że potrzebne jest źródło. Po edycji następuje walidacja — czy nie zniknęły sekcje, czy treść nie została ucięta; jeśli utracono ponad 15%, do dwóch prób, a potem wycofanie bez zapisu pliku.
Jakość odpowiedzi jest mierzona, a nie zakładana. Sędzia LLM przepuszcza zestaw golden-QA i sprawdza dwie rzeczy: czy odpowiedź oddała istotę oczekiwanych faktów (znaczeniowo, nie dosłownie) i czy nie twierdzi jako fakt czegoś zakazanego. Bieżące metryki — cytowalność ~99%, pokrycie faktów ~97%, wstrzymanie się (abstention) 100%.
Nic z tego nie jest przywiązane do jednego dostawcy. Wszystkie modele — embeddingi, generowanie, rozpoznawanie i synteza mowy — można podmienić na lokalne (Ollama, LM Studio) przez jedną zmienną OPENAI_BASE_URL, a kod pozostaje ten sam. W przypadku wrażliwych danych relokacyjnych oznacza to, że cały stack można uruchomić na własnym serwerze. Potrzebujesz podobnego asystenta RAG, który odpowiada z Twoich danych i nie zmyśla? Napisz do nas: [email protected].
Samego bota można wypróbować od razu na Telegramie, za darmo — @legalka_pl_bot. A poniżej — podsumowanie: który model odpowiada za 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 |