Architektura KHK Portál úředníka
Drupal version
Drupal 10 a novější

Portál úředníka je neveřejný intranet Krajského úřadu Královéhradeckého kraje. Nahradil původní řešení na platformě Kentico (Windows / ASP.NET) a navrhla a vyvinula ho společnost Macron Software. Cílem nebyla migrace 1:1, ale nová, dlouhodobě udržitelná architektura postavená na Drupalu, která z intranetu dělá strukturovaný nástroj pro práci s dokumenty a znalostmi úřadu.

Obsah a struktura

Informační struktura je oddělená od samotného obsahu. Hierarchii portálu určuje strom taxonomie „Sekce“, ze kterého se automaticky generuje navigace, drobečková navigace i mapa webu. Obsah tvoří tři typy: stránka, článek a wiki článek, přičemž wiki články se řadí pod nadřazené stránky a vytvářejí stromy návodů. Stránky se skládají z modulárních komponent (Paragraphs): text, výpisy článků a dokumentů, přílohy, média. Redaktoři tak mění podobu stránek bez zásahu do šablon. Dokumenty jsou samostatná média s vlastními metadaty a hromadným nahráváním, takže jeden dokument lze použít na více místech intranetu. Přístupová práva jsou vícevrstvá: globální role doplňují oprávnění nastavená na úrovni jednotlivých sekcí.

Napojení na Active Directory

Zaměstnanci se přihlašují jednotným přihlášením (SSO přes Kerberos), uživatelské účty se synchronizují z Active Directory přes LDAP. Z adresářových údajů se automaticky odvozuje i odbor a oddělení. Autentizace je oddělená od autorizace: každý má výchozí roli zaměstnance, vyšší role se přidělují ručně. Telefonní seznam se generuje z uživatelských účtů, fotografie se synchronizují z externího adresáře a zobrazení stavu přítomnosti je napojeno na docházkový systém. Správa identit je tak centrální a bez ruční administrativy.

AI asistent úředníka

Součástí portálu je od června 2026 AI chatbot, se kterým zaměstnanci mluví přirozeným jazykem přímo v intranetu. Zná obsah všech dokumentů nahraných na portál (PDF, MS Office a další) i jejich metadata: sekci, datum zveřejnění, autora nebo to, kdo dokument nahrál. Umí dokumenty vyhledat, shrnout a citovat a ke každé odpovědi připojí odkaz přímo na konkrétní soubor. V konverzaci drží kontext, takže se lze doptávat a dotaz zpřesňovat. Index se aktualizuje automaticky při každém nahrání nebo změně dokumentu a chatbot vždy respektuje přístupová práva přihlášeného uživatele.

Řešení je postavené na modulu Drupal AI a technice RAG (Retrieval-Augmented Generation): dokumenty se rozdělí na menší části, převedou na vektory a při dotazu se vyhledávají podle významu, ne jen podle shody slov. Systémové prompty jsou v češtině a správci je upravují v administraci.

Chatbot pracuje jako agent, který si sám volí vhodný nástroj podle typu dotazu. Vedle významového (vektorového) vyhledávání používá fulltextové vyhledávání nad Apache Solr pro přesné výrazy, jako jsou čísla jednací, názvy nebo zkratky, výpis dokumentů podle metadat pro výčtové dotazy typu „vypiš všechny směrnice“ a u nalezeného dokumentu si umí načíst celý jeho text. Webmaster navíc spravuje glosář úřednických zkratek a interních pojmů, který chatbot používá při hledání i při odpovědích.

Sledování kvality odpovědí

Nejnovějším rozšířením, nasazeným v říjnu 2026, je sledování kvality chatbota postavené čistě v Drupalu, bez externích nástrojů. Zaměstnanci mohou každou odpověď ohodnotit palcem nahoru nebo dolů podle toho, zda chatbot zafungoval dobře. Všechny konverzace se ukládají mimo systémový log Drupalu s automatickou retencí 30 dní. Administrátor je prochází v přehledu postaveném ve Views: filtruje podle období, záporného hodnocení, odpovědí „nenašel jsem“, vyčerpaného limitu kroků agenta nebo textu dotazu a v detailu konverzace vidí dotazy, odpovědi, spotřebu tokenů, hodnocení i nalezené dokumenty. Vybrané konverzace lze exportovat do JSON pro další rozbor, například pomocí AI agenta. K ladění slouží ještě dva doplňkové logy: log kroků agenta ukazuje, kterou metodu vyhledávání u dotazu zvolil a co našel, technický log zachycuje komunikaci s jazykovým modelem. Díky tomu lze u problematické odpovědi dohledat, proč dopadla špatně, a cíleně upravit prompty nebo glosář.

Provoz

Portál běží v Docker Swarmu s replikovanou webovou vrstvou (Apache, PHP-FPM), cache vrstvou Varnish a Memcached, databází v clusteru MariaDB Galera a fulltextovým vyhledáváním Apache Solr přes Search API, které indexuje i obsah přiložených dokumentů. Load balancer rozkládá provoz a zajišťuje kontinuitu při výpadku jednotlivých služeb.

Projekt ukazuje, že Drupal zvládne nejen intranet velkého úřadu s napojením na jeho infrastrukturu, ale i nasazení generativní AI nad interními dokumenty s plnou kontrolou nad daty a přístupovými právy. Více o řešení v seriálech o Portálu úředníka a o AI chatbotu na blogu Macron Software.

Other screenshots
Integrace Drupalu s Active Directory
RAG chat nad Drupalem
Migrace intranetu na Drupal