Ratusz AI ruszył w tym tygodniu pod adresem ratuszai.pl. To czat i wyszukiwarka po dokumentach, jakie produkuje polski urząd gminy: uchwałach, zarządzeniach burmistrza, protokołach sesji, imiennych głosowaniach, budżetach. Zadajesz pytanie zwykłym językiem, dostajesz odpowiedź z cytowaniem do źródłowego PDF-u. To narzędzie dla ludzi pracujących w urzędzie, nie portal dla mieszkańców.
Nie zaczęło się jako produkt. Zaczęło się od tego, że indeksowałem uchwały rady mojego rodzinnego miasta.
Od “czy da się to przeszukać” do subdomeny per gmina
Zaczęło się od jednego małego polskiego miasta, którego dokumenty rady leżą na stronie BIP (standardowy polski Biuletyn Informacji Publicznej), co w praktyce oznacza PDF-y, niespójne nazewnictwo i wyszukiwarkę niewartą tej nazwy. Zbudowałem pipeline RAG i grafu wiedzy, żeby to naprawić: scraping BIP-u, ekstrakcja tekstu (z OCR-em dla skanów), wyłapywanie która uchwała uchyla albo zmienia którą inną, embeddingi wszystkiego i odpowiedzi z systemu, który cytuje źródła zamiast zgadywać.
Zadziałało na tyle dobrze, że przerobienie tego na coś, z czego skorzystałyby inne gminy, wydawało się oczywistym następnym krokiem. Ratusz AI to właśnie to: ten sam pipeline, wielodostępny, jedna subdomena na gminę. Wdrożyłem testową instancję na prawdziwym, wieloletnim archiwum dokumentów jednej gminy, żeby sprawdzić to na realnych danych zamiast zabawkowego zbioru, co ukształtowało produkt bardziej niż jakiekolwiek zgadywanie. To samodzielny test, jeszcze nie zewnętrzny klient pilotażowy.
Jak wygląda “z cytowaniem” w praktyce
Obietnica każdego narzędzia RAG to “odpowiada ze źródłami”. Wartą pokazania jest sytuacja, w której odpowiedź wymaga połączenia kilku dokumentów naraz. Zadałem testowej instancji pytanie w formie, w jakiej faktycznie pytają urzędy:
Kto głosował przeciw uchwale o funduszu sołeckim?
Wskazał radną lub radnego, który był przeciw, numer uchwały i datę, i otagował odpowiedź wykazem głosowań oraz protokołem sesji, z którego wyciągnął ten głos, po czym sprawdził pozostałe uchwały dotyczące tego samego funduszu i wprost napisał, że dla jednej z nich nie ma szczegółowego wykazu głosowań, zamiast go zmyślić. Ta ostatnia część ma większe znaczenie niż sama poprawna odpowiedź: system jest zbudowany tak, żeby “nie mam tej informacji” było dostępnym wynikiem, a nie porażką do zamaskowania.
Jak to jest zbudowane
Celowo nic egzotycznego. Postgres 17 z pgvector trzyma dokumenty, fragmenty i tabelę grafu wiedzy z relacjami (uchyla, na podstawie ustawy, głosował za/przeciw i tak dalej) w jednej bazie. Wyszukiwanie jest hybrydowe, pełnotekstowe i wektorowe połączone przez reciprocal rank fusion, więc dokładny numer uchwały trafia równie pewnie jak rozmyte pytanie w naturalnym języku. Gemini robi embeddingi (gemini-embedding-001) i generację odpowiedzi czatu (gemini-2.5-flash), z cytowaniami wymuszonymi w promptcie, a nie liczonymi na dobrą wolę modelu. Nocne zadanie o 03:00 przyrostowo ściąga wszystko nowe z BIP-u. Całość działa na małym domowym serwerze bez GPU, za tunelem Cloudflare.
Cennik, który omija przetarg
Polska wymaga przetargu powyżej progu około 130 tysięcy złotych wartości zamówienia rocznie. Cennik Ratusz AI celowo mieści się poniżej: miesięczny pilotaż za 0 zł, potem 490 zł/mies. dla gminy albo 990 zł/mies. dla miasta, bez cennika po liczbie mieszkańców, bo ilość dokumentów urzędu nie rośnie z populacją tak, jak można by zakładać. Dzięki temu urząd może podpisać umowę bezpośrednio, zamiast przechodzić procedurę zamówień publicznych po mały abonament SaaS.
Co jest faktycznie potwierdzone, a co nie
Domena ma cztery dni. Pierwsza runda zimnych maili poszła do jedenastu gmin w regionie, z konkretnym pytaniem (jak dziś szukacie starej uchwały) i ofertą demo na ich własnych dokumentach. Zero odpowiedzi jak dotąd. Całą sagę dostarczania tego maila, która okazała się większym projektem niż sama kampania, opisałem w osobnym wpisie.
Ciekawszy sygnał przyszedł od nikogo, do kogo nie pisałem. Oryginalne narzędzie testowe, wciąż działające po cichu bez żadnego marketingu, złapało w jednym odcinku czasu kilku prawdziwych odwiedzających z konkretnymi pytaniami: jaka jest faktyczna stawka podatku od nieruchomości, które uchwały dotyczyły pomocy dla Ukrainy, które głosowania nie były jednomyślne i kto był przeciw. Nikt nie wysłał im linku. To lepszy wskaźnik przydatności niż jakikolwiek wskaźnik odpowiedzi na maile, i to powód, dla którego kontynuuję po pierwszym tygodniu, zamiast uznać to za nieudany eksperyment.
Więcej o samym produkcie i o tym, co dalej, jest na stronie projektów.
