Použití CAT pro testování datových agentů

V posledních měsících je jedním z častých scénářů využití AI tvorba agenta, který odpovídá na otázky uživatele na základě vašich dat. Může jít o SQL datový zdroj nebo například Power BI sémantický model. V tomto článku se nebudu zabývat tím, jak takového agenta postavit. Chci se zaměřit na jeden důležitý aspekt datového agenta – spolehlivost.
Výzvy v oblasti důvěry v datové agenty
Pro jednoho zákazníka jsme postavili datového agenta nad Power BI modelem. Jedním z nepříjemných aspektů používání LLM k tvorbě dotazů (v našem případě DAX) je, že model může vytvářet různé DAX dotazy pro stejnou otázku uživatele. Když položíte stejný dotaz třikrát, je velmi pravděpodobné, že dostanete tři více či méně odlišné DAX dotazy. Existují metody, jak v implementaci agenta zvýšit konzistenci, nicméně kreativitu LLM nikdy zcela neodstraníte.
Další úhel pohledu je použití LLM modelu nebo verze LLM modelu. Chci svého agenta testovat s různými modely a porovnat náklady i spolehlivost – protože samozřejmě chci platit co nejméně.
Z těchto (a dalších) důvodů je nutné implementovat automatizované testování nad AI datovými agenty.
Nepřinese vám to 100% jistotu ve stylu „Agent nikdy nehalucinuje!“, ale úroveň důvěry bude co nejvyšší.
Přehled architektury agenta
Na následujícím obrázku je zjednodušený přehled architektury agenta:

Agent obdrží zprávu (otázku) od uživatele, podle metadat modelu převede přirozený jazyk na DAX dotaz a ten spustí proti modelu. Poté vezme vrácený dataset a interpretuje výsledek pro uživatele (tabulka, graf, popis…).
Testování
Testování AI agentů má několik aspektů – výkon, bezpečnost odpovědí, stabilita…
My se zaměříme na nejdůležitější část datového agenta:
Dává agent správná data?
Máte v zásadě dvě možnosti, jak to otestovat:
- Získat z agenta data – například náš agent umožňuje stáhnout odpověď jako CSV.
- Získat dotaz, který datový set vytváří. (Náš agent umí zobrazit i DAX dotaz, který proběhne při odpovědi na otázku.)
My jsme zvolili možnost 2 z několika důvodů:
- můžeme provést porovnání ve stejném čase (nižší riziko změny dat),
- ušetříme tokeny (neprovádíme kroky interpretace a formátování dat).
Co potřebujeme pro testování?
- Sadu testovacích otázek a předpřipravené (správné) DAX dotazy s odpověďmi.
- Agenta, který dokáže vrátit DAX pro vaši otázku.
- Skript, který projde testovací otázky, získá DAX od agenta a vytvoří projekt pro CAT.
- Nástroj na porovnání datasetů – CAT.
- Reporting nad výsledky testů.
Celkové řešení testování přes CAT si můžeme znázornit takto:

V konečném důsledku je řešení jednoduché: máme testovací otázky a ověřené DAXy. Skript volá agenta a získává jeho DAX pro každou otázku.
Tedy pro každou otázku máme dvě verze DAXu:
- Ověřený (správný) DAX,
- DAX vygenerovaný agentem.
Když máme od agenta všechny DAXy, python skript vytvoří YAML soubor (projekt pro CAT).
Každý test potom porovnává dataset vrácený pomocí ověřeného DAXu vs. dataset vrácený agentovým DAXem a vizualizuje výsledek v dashboardu jako na následujícím příkladu reportu.

Úskalí testování datového agenta
Protože je agent kreativní (pokud mu to dovolíme), musíme být v otázkách velmi konkrétní.
Například tato testovací otázka není dost dobrá:
„Which opportunities did Joe Smith won in season 2025 S2?“
Proč ne?
Chybí specifikace, které atributy z Opportunity chceme. Agent někdy vrátí jen jméno, jindy více sloupců. Test by selhal, protože „ověřený“ DAX je předem nadefinovaný a neměnný.
Není uvedeno řazení. Vám osobně to může být jedno, ale CAT vyžaduje dataset setříděný pro validní porovnání.
Správná verze otázky může být:
„Which opportunities did Joe Smith won in season 2025 S2? Bring only Opportunity name and sort it ascending.“
Taková otázka už přinese konzistentnější odpovědi.
Po úspěšném běhu testování si můžete prohlédnout výsledky v dashboardu a identifikovat důvody případných chyb.
Shrnutí
Automatizované testování je klíčovou součástí vývoje a správy datového agenta během celého jeho životního cyklu. Testování a monitorování výsledků agentů v produkci by mělo být minimálně týdenní, ideálně však denní povinností, abyste mohli rychle reagovat na jakékoli změny.
