9 min čtení
Chatbot nad firemními dokumenty: jak odpovídá z vašich dokumentů
Chatbot nad firemními dokumenty vyhledá úseky textu a tabulek a model z nich odpoví s odkazem na stranu. Popisuji přípravu PDF, vyhledávání i testy na demu.
Napsal František Jánoš, konzultant pro AI a datovou analýzu
Chatbot nad firemními dokumenty odpovídá tak, že k otázce nejdřív vyhledá v předem zpracovaných dokumentech několik úseků textu a tabulek a teprve ty předá jazykovému modelu. Model odpoví jen z nich a ke každému tvrzení přidá odkaz na dokument a stranu, takže si odpověď ověříte jedním kliknutím. Kvalitu odpovědí víc než volba modelu určuje příprava dokumentů a vyhledávání.
Celý postup si můžete vyzkoušet v demu chatbota nad veřejnými dokumenty pro výrobu. Na záložce „Veřejné dokumenty pro výrobu“ odpovídá ze 14 PDF (statistiky ČSÚ, cenové výměry ERÚ, výzvy OP TAK, předpisy o BOZP, závěry BAT), dohromady 860 stran. U každého zdroje ukáže náhled strany, ze které čerpal. Druhá záložka odpovídá z obsahu tohoto webu.
Čísla v článku jsem naměřil na tomto demu a na asistentovi, kterého jsem postavil pro distributora techniky.
Jak chatbot odpovídá z dokumentů
Chatbot nad dokumenty používá postup RAG (retrieval-augmented generation): program vyhledá relevantní text a jazykový model z něj sestaví odpověď. Model tedy odpovídá z úseků, které mu dodáte, a jeho obecné znalosti zůstávají stranou. Postup popsali Lewis a kolegové v roce 2020.
V demu probíhá jedna otázka takto:
- Embedding otázky. Otázka se převede na číselný vektor (embedding), který zachycuje její význam.
- Hledání podle významu. Databáze najde úseky s nejpodobnějším vektorem. Používám PostgreSQL s rozšířením pgvector.
- Hledání podle slov. Fulltext najde úseky se stejnými slovy, typicky název veličiny, číslo předpisu nebo označení výrobku.
- Spojení výsledků. Obě pořadí se sloučí metodou RRF (reciprocal rank fusion): úsek, který je vysoko v obou seznamech, skončí nahoře. V korpusu dokumentů jde do modelu 8 textových úseků a 4 tabulky.
- Odpověď s citacemi. Model dostane úseky s čísly a pokyn odpovídat jen z nich. Za tvrzení dá číslo zdroje a stranu, například „540 mil. Kč [1] (s. 1)“.
Když vyhledávání nic použitelného nenajde, chatbot to má říct. Odpověď bez zdroje si uživatel ověřit nemůže, a proto ji chatbot nemá psát.
Příprava dokumentů rozhoduje víc než model
Kvalitu odpovědí z větší části určí to, co se stane s dokumenty před prvním dotazem. Model odpoví dobře jen z úseku, který vyhledávání najde, a vyhledávání najde jen text, který převod z PDF zachoval.
Dokumenty pro demo jsem zpracoval nástrojem Docling. Ten z PDF přečte rozvržení strany, pořadí čtení a strukturu tabulek a uloží výsledek jako markdown. Každá strana nese značku s původním číslem strany, aby chatbot uměl citovat. Převod běží jednou předem na mém počítači, ne na serveru, protože stovky stran trvají desítky minut.
Text dělím po nadpisech na úseky do 2 000 znaků s překryvem 300 znaků. Tabulku nechávám celou až do 6 000 znaků a delší dělím po řádcích, přičemž každý kus dostane záhlaví sloupců. Každý úsek začíná názvem dokumentu a kapitoly. Ze 14 dokumentů vzniklo 2 238 úseků, z toho 857 z tabulek.
Převod jsem kontroloval třemi způsoby:
- Kontrola čísel. Skript porovná čísla z převedených tabulek s textovou vrstvou PDF na téže straně. U ostatních dokumentů vyšla shoda 99,2 až 100 %, u příručky NIST SP 811 jen 97,7 %. Kontrola ukáže poškozené číslo, ale nepozná, že správné číslo stojí ve špatné buňce.
- Ruční kontrola tabulek. 20 tabulek jsem porovnal s vykreslenou stranou PDF buňku po buňce. 17 sedělo, 3 byly chybné a všechny z NIST SP 811: dvě tabulky slité do jednoho řádku, jedna s rozházenou strukturou.
- Zkušební dotazy. Až dotaz do hotového indexu ukázal, že Docling u některých písem vrací jiné znaky, například „spotĜeba“ místo „spotřeba“. Kontrola čísel to nezachytila, čísla byla v pořádku. Opravu jsem udělal pravidly pro konkrétní dokumenty a ověřil porovnáním s textovou vrstvou PDF.
U vašich dokumentů počítejte s podobnými nálezy. Naskenované PDF bez textové vrstvy musí nejdřív projít OCR, jinak je pro chatbota prázdné. Starší verze návodu ve stejné složce chatbot neodliší od platné, pokud mu to neřeknete metadaty nebo výběrem souborů.
Tabulky a čísla: kde chatbot chybuje nejčastěji
Ve výrobě leží odpovědi často v tabulkách: limity, parametry, ceny, alokace dotací. Na tabulkách se chatbot také nejčastěji splete, protože tabulka bez záhlaví ztratí význam čísel a dotaz v běžné řeči se slovům v tabulce podobá málo.
Z demu mám tři konkrétní případy:
| Případ | Co se stalo | Co pomohlo |
|---|---|---|
| Spotřeba energie na ohřev podle závěrů BAT | Obecně formulovaný dotaz našel správnou kapitolu, ale samotná tabulka byla až kolem 16. místa. | Tabulky hledám zvlášť od textu a do modelu posílám 4 nejlepší. Testovací otázka na tuto tabulku teď prochází. Dotaz s názvem veličiny dá tabulku na 1. místo. |
| Limity látek v NV 361/2007 | Čísla CAS se v buňce lámou přes řádek („106-9 2-3“). | Dotaz podle názvu látky funguje, podle čísla CAS může selhat. Omezení uvádím u dema. |
| Index cen průmyslových výrobců ze statistické ročenky | Vyhledávání tabulku nenajde. | Zatím nic. Otázka zůstává v testovací sadě jako známé selhání. |
Když chcete chatbota nad technickými listy nebo ceníky, ověřte ho na otázkách, jejichž odpověď leží v tabulce. Otázky na souvislý text procházely v demu bez potíží a o tabulkách vám nic neřeknou.
Hledání podle významu i podle slov
Samotné vyhledávání podle významu nestačí. Embedding dobře najde úsek, který říká totéž jinými slovy, ale u přesných označení, čísel norem a zkratek často mine. Fulltext se chová opačně. Proto v demu běží obě hledání a výsledky spojuje RRF.
RRF dá každému úseku body podle jeho pořadí v každém seznamu (1 / (60 + pořadí)) a body sečte. Konstantu 60 používám podle doporučení z dokumentace Microsoftu k hybridnímu vyhledávání. Výhoda: metoda nepotřebuje porovnávat skóre, která mají u fulltextu a u vektorů úplně jiné rozsahy.
Čeština přidává jednu komplikaci: slova se ohýbají. Fulltext proto hledá kmeny slov bez diakritiky a stačí mu shoda v jednom z nich. Dotaz v přirozené větě by se jinak se slovy v dokumentu nepotkal. Když fulltext nenajde nic, nastoupí podobnost podle trojic písmen.
Citace až na stranu dokumentu
Každá odpověď má odkazovat na dokument a stranu, ze které vychází. Bez toho uživatel nepozná, jestli model číslo opsal, nebo si ho domyslel.
V demu se zdroje číslují po stranách, ne po dokumentech. Zdroj je jeden řádek: název dokumentu s odkazem do PDF přímo na danou stranu, číslo strany a vydavatel. Ikona oka otevře náhled strany, takže číslo z odpovědi najdete v originální tabulce bez stahování PDF. Technik pak nemusí chatbotu věřit naslepo, číslo si zkontroluje na straně.
Citace mají ještě jeden účel. Když chatbot cituje špatný dokument nebo starou verzi, uvidíte to hned v odpovědi.
Jak měřím, jestli chatbot odpovídá správně
Kvalitu měřím testovací sadou: seznamem otázek, ke kterým znám správnou odpověď a zdrojový dokument. Chatbot sadu projde přes skutečné API a skript kontroluje, jestli odpověď obsahuje očekávané číslo a jestli cituje správný dokument.
Sada pro dokumenty v demu má 9 otázek. Osm se ptá na číslo z tabulky (podíl podniků používajících AI, alokace výzvy, expoziční limity, spotřeba energie podle BAT, index cen). Devátá je mimo dokumenty („Jaká jsou pravidla stolního fotbálku?“) a chatbot ji musí odmítnout. Na produkci prochází 8 z 9. Neprojde otázka na index cen z ročenky, protože ji vyhledávání nenajde (viz tabulka výše).
Devět otázek je malý vzorek a o přesnosti na tisících dotazů nic neříká. Slouží jako pojistka: po každé změně dělení na úseky, promptu nebo modelu sadu pustím znovu. Změna, po které výsledek klesne, do provozu nejde. U firemního chatbota stavím sadu z otázek, které lidé ve firmě opravdu kladou, a čím víc jich je, tím dřív se ukáže, že úprava pro jeden typ otázek jiný zhoršila.
Varianty: SharePoint, web, ERP
Princip zůstává stejný, liší se zdroj dokumentů a to, kdo smí co vidět.
| Varianta | Zdroj | Na co si dát pozor | Kde popisuji podrobněji |
|---|---|---|---|
| Chatbot nad dokumenty v SharePointu | knihovny SharePointu | oprávnění z Entra ID musí platit už při vyhledávání | chatbot nad dokumenty v SharePointu a Entra ID |
| Chatbot nad technickou dokumentací | PDF návody, technické listy, prohlášení | tabulky parametrů, skeny, staré verze | případová studie AI asistenta nad technickou dokumentací |
| Chatbot nad obsahem webu | články a stránky webu | po změně obsahu znovu zpracovat index | záložka „Obsah tohoto webu“ v demu chatbota |
| Asistent s daty z ERP | živá data z ERP nebo CRM | čísla se nehledají v textu, ale čtou nástrojem | napojení AI asistenta na ERP přes MCP |
Stav skladu, otevřené zakázky nebo tržby za měsíc do indexu dokumentů nepatří, protože se mění každý den. Na ně se asistent zeptá ERP přes nástroj, který vrátí aktuální čísla, a dokumenty zůstanou na návody a předpisy.
Co rozhodnout před nasazením
Před stavbou chatbota nad firemními dokumenty rozhodněte čtyři věci:
- Které dokumenty do indexu patří. Jen schválené verze, bez konceptů a osobních složek. Seznam dokumentů bez textové vrstvy vám ukáže, kde je potřeba OCR.
- Kdo smí co vidět. Pokud mají různí lidé přístup k různým dokumentům, musí to platit už ve vyhledávání, ne až při zobrazení odpovědi.
- Kam odcházejí data. V demu počítá embeddingy OpenAI a odpovídá model Claude od Anthropicu. Celé dokumenty projdou službou pro embeddingy jednou při indexaci, do jazykového modelu jde při dotazu jen několik nalezených úseků. Poskytovatele a smluvní podmínky vyberte podle toho, jak citlivé dokumenty jsou.
- Jak se chatbot brání pokynům v dokumentech. OWASP popisuje nepřímý prompt injection: útočník upraví dokument v úložišti a text v něm se pokusí změnit chování modelu. Prompt v demu proto říká, že úryvky i otázky jsou data, ne pokyny. Úplnou ochranu to nedává, proto do indexu patří jen dokumenty z důvěryhodných zdrojů.
Pro představu o nákladech: embeddingy pro celý korpus 860 stran stály na produkci 0,146 USD. Jedna otázka v demu nad obsahem webu stála při měření 26. 10. 2026 kolem 0,019 USD. U vašich dokumentů bude cena záviset na jejich objemu, zvoleném modelu a délce odpovědí.
Z mé praxe
Pro distributora techniky jsem postavil AI asistenta nad technickou dokumentací: 408 dokumentů rozdělených na 12 489 úseků, hybridní vyhledávání a tabulky prohledávané zvlášť od textu. Demo na tomto webu z jeho kódu vychází, jen bez přihlášení a oprávnění. Regresní sada otázek je tam podmínkou každého nasazení.
Patnáct let jsem pracoval ve výrobě, v kvalitě a ve vývoji procesů. Pracovní postupy, specifikace a protokoly znám z pohledu člověka, který v nich hledá odpověď u linky. Proto u chatbota začínám otázkami, které lidé ve firmě opravdu kladou, a teprve podle nich volím, jak dokumenty zpracovat.
Pokud chcete chatbota nad vlastní dokumentací, nejdřív si vyzkoušejte, jak demo cituje zdroje na stranu, a pak mi napište, kde máte dokumenty uložené a na co se lidé ptají.
Související řešení
- AI asistent pro technickou podporu
Odpovídá z vašich manuálů, norem a směrnic
Časté dotazy
- Jak chatbot odpovídá z dokumentů?
- Dokumenty se předem rozdělí na úseky a uloží do vyhledávacího indexu. Při dotazu chatbot najde nejbližší úseky podle významu i podle slov a jazykový model odpoví jen z nich. Ke každému tvrzení přidá odkaz na dokument a stranu.
- Naučí se jazykový model naše dokumenty?
- Nenaučí. Model se na vašich dokumentech netrénuje. Při každé otázce dostane jen několik vyhledaných úseků a po odpovědi si je nepamatuje. Když dokument v indexu změníte, chatbot odpovídá z nové verze hned po dalším zpracování.
- Zvládne chatbot tabulky a čísla z PDF?
- Zvládne, pokud se tabulky při převodu z PDF nerozpadnou. Tabulku je potřeba uložit jako celek se záhlavím a převod zkontrolovat proti originálu. V mém demu prošlo ruční kontrolou 17 z 20 vybraných tabulek, tři chybné byly ze stejného dokumentu.
- Kam odcházejí naše dokumenty?
- Do jazykového modelu jde při každém dotazu jen několik nalezených úseků, ne celá knihovna. Celé dokumenty projdou službou, která počítá embeddingy, jednou při indexaci. Kterého poskytovatele použijete a za jakých smluvních podmínek, rozhodněte před začátkem projektu.
- Co dělá chatbot, když odpověď v dokumentech není?
- Má to říct a nic nedomýšlet. V demu to hlídá pokyn v promptu a testovací otázka mimo nahrané dokumenty, kterou chatbot musí odmítnout.
- Potřebuji kvůli chatbotu SharePoint nebo Microsoft 365?
- Nepotřebujete. Chatbot může číst dokumenty ze složky na serveru, z ERP nebo z webu. SharePoint přidává hlavně správu oprávnění přes Entra ID, kterou pak musí respektovat i index.
Zdroje
- 01Lewis a kol.: Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (arXiv 2005.11401), navštíveno 28. 10. 2026
- 02Hybrid Search Scoring (RRF), Azure AI Search (Microsoft Learn), navštíveno 28. 10. 2026
- 03Docling: dokumentace projektu, navštíveno 28. 10. 2026
- 04pgvector: vyhledávání podle vektorové podobnosti v PostgreSQL, navštíveno 28. 10. 2026
- 05OWASP LLM01:2025 Prompt Injection, navštíveno 28. 10. 2026
O autorovi
František Jánoš
Stavím nástroje na vytěžování faktur a poptávek, AI asistenty nad technickou dokumentací a napojení AI na ERP. Několik z nich je v ostrém provozu.
Co umím