Category Archives: Speaking

AI vytěžování dokumentů: GPT Vision [Robert Haken, Vzdělávací okénko, 11.9.2025]

Záznam ze Vzdělávacího okénka HAVIT z 11. září 2025, kde jsem ukazoval specificky techniku vytěžování s pomocí GPT-4o Vision (vstup ve formě bitmapových obrázků přímo předávaných LLM, bez mezipřistání v Markdown).

Co se dozvíte:

  • GPT Vision vs. Markdown přístup – kdy který použít a jaké jsou trade-offs
  • Resizing obrázků na straně klienta před odesláním do GPT (limit 2048×768 px)
  • C# implementace: JSON schéma pro přesnou extrakci strukturovaných dat
  • Multimodální vstup v .NET SDK – předávání image content parts
  • Reálné výsledky na lékařských zprávách a ukázka edge cases

Novinky v .NET 9 a výhled na .NET 10 – záznam a slides [Robert Haken, WUG Days Brno 9/2025]

Záznam z přednášky pro konferenci WUG Days Brno z 5.9.2025, kde jsem telegraficky představoval novinky z „.NET 9 vlny“ a pár přicházejících v „.NET 10 vlně“.

Slides

AI vytěžování dokumentů s OpenAI GPT – Markdown / Vision [WUG Days Brno 09/2025]

Záznam ze přednášky pro konferenci WUG Days Brno z 4. září 2025.
Ukázka dvou implementací (POC) vytěžování dokumentů pomocí moderních AI technik:

  1. Kombinace Azure Document Intelligence (s výstupem do Markdown) a LLM (OpenAI GPT-4o) pro efektivní vytěžování netriviálních dokumentů (zde přijatých faktur i s energetickými přílohami).
  2. OpenAI GPT-4o v režimu Vision pro vytěžování údajů obrázků (fotografií zdravotních zpráv).

AI vytěžování dokumentů s OpenAI GPT [Vzdělávací okénko, 12.6.2025]

Záznam ze Vzdělávacího okénka HAVIT z 12. června 2025.
Ukázka implementace (POC) vytěžování dokumentů pomocí moderních AI technik. Kombinace Azure Document Intelligence (s výstupem do Markdown) a LLM (OpenAI GPT-4o) pro efektivní vytěžování netriviálních dokumentů (zde přijatých faktur i s energetickými přílohami).

O čem přednáška je

Potřebujete z naskenovaných nebo PDF dokumentů dostat strukturovaná data? Tradiční OCR systémy (Kofax, EFlow, starší Azure Forms Recognizer) vyžadují trénování na konkrétních layoutech a ruční definici cílových polí. V této přednášce ukazuji modernější přístup – kombinaci dvou AI služeb, která zvládne i netriviální dokumenty bez předchozího trénování.

Azure Document Intelligence – konverze do Markdown

Prvním krokem je převod vstupního dokumentu (PDF, sken, fotografie) do strojově čitelné podoby. Azure Document Intelligence analyzuje layout dokumentu a výstupem je Markdown – čistý text se zachovanou strukturou tabulek, nadpisů a odstavců. Oproti klasickému OCR výstupu je Markdown ideálním vstupem pro LLM, protože zachovává kontext a vztahy mezi údaji.

OpenAI GPT-4o – extrakce strukturovaných dat

Markdown výstup z Document Intelligence předáváme OpenAI GPT-4o s promptem, který definuje cílovou strukturu JSON výstupu. Model díky function calling vrací přesně typovaný JSON se všemi požadovanými poli – číslo faktury, datum, dodavatel, položky, částky, měrné jednotky a další technické údaje.

Energetické faktury jako netriviální use case

Ukázka pracuje s reálným scénářem zákazníka – vytěžování přijatých energetických faktur. Tyto dokumenty obsahují desítky položek s různými měrnými jednotkami (kWh, MW, Kč/MWh), technické údaje jako činná a jalová složka, distribuční poplatky, rezervované kapacity a smluvní hodnoty. Výstupní JSON se zapisuje přes REST API do cílového systému, kde se jednotlivé řádky mapují na specifická pole včetně netypických zápisů (např. nulová jednotková cena pro technické údaje).

Implementace v .NET

Celý POC je implementován v C# / .NET s využitím Azure SDK pro Document Intelligence a OpenAI SDK pro komunikaci s GPT-4o. Přednáška zahrnuje praktické ukázky kódu, prompt engineering pro strukturovaný výstup a tipy pro nasazení v produkčním prostředí.

Blazor performance – záznam a slides [TechEd Praha 2025]

Záznam z přednášky pro konferenci TechEd Praha 2025, kde jsem ukazoval některé zajímavé aspekty výkonnosti Blazor (WebAssembly) aplikací.

  • Specifika výkonu Blazor WebAssembly vs. Server — kde jsou skutečná výkonová úzká hrdla
  • JavaScript interop overhead — proč ho chápat jako inter-process komunikaci
  • Optimalizace download size — Map Static Assets a fingerprintování v .NET 9
  • Component lifecycle a change detection — kdy a proč Blazor přerenderuje
  • Jak zastavit lavinu přerenderování — @key direktiva a správná struktura komponent
  • Výkonový overhead při velkém počtu komponent (měření Blazor týmu)
  • Server prerendering pro lepší UX i SEO
  • WebAssembly profiling v .NET 10 — nativní Browser DevTools profiling (preview)

Slides

Novinky v C# 12, 13 a 14 (.NET 8, 9 a 10) – záznam [TechEd Praha 2025]

Přehled novinek C# 12 (.NET 8), C# 13 (.NET 9) a preview C# 14 (.NET 10) – praktické ukázky ve Visual Studiu.

  • C# 12: primary constructors – DI pattern, capture, naming konvence
  • C# 12: collection expressions, inline arrays, spread operátor
  • C# 12: type aliases, default lambda parametry, [Experimental] atribut, interceptory
  • C# 13: nová třída Lock – modernizované zamykání vláken s using
  • C# 13: params collections (Span, IEnumerable) a výkonové výhody
  • C# 13: partial properties, indexery a ref struct vylepšení
  • C# 14: extension members – extension bloky, properties, statické metody
  • C# 14: klíčové slovo field, null conditional assignment (?=), dictionary expressions

Přednáška zazněla na konferenci TechEd Praha 2025.

FluentValidations vs Today [Robert Haken, Vzdělávací okénko, 5.6.2025]

Po půlnoci hlásil validátor: datum vystavení faktury nesmí být v budoucnosti – ale porovnával se včerejším datem. Proč?

  • Záhadný bug v Blazor WebAssembly: fakturační validátor po půlnoci odmítá dnešní datum
  • FluentValidation validátory jsou scoped-service – v Blazor WASM to prakticky znamená singleton
  • Pravidla jako LessThanOrEqualTo(datum) se vyhodnotí jednou v konstruktoru a hodnotu zmrazí
  • Řešení: Must(x => x <= timeProvider.GetLocalNow()) – lambda se vyhodnocuje při každé validaci
  • Přidej custom error message – Must generuje pouze generické hlášení

Vzdělávací okénko prezentoval Robert Haken.

OpenAPI + Scalar UI [Alexandr Hájek, Vzdělávací okénko, 22.5.2025]

Swagger UI v .NET 9 na odchodu? Scalar UI – moderní alternativa s dark mode, vyhledáváním a výměnou za jeden řádek kódu.

  • Proč Microsoft v .NET 9 opouští Swagger generátor a co ho nahrazuje
  • Scalar UI: dark/light mode, integrované vyhledávání a classic layout jako Swagger
  • Jak přidat Scalar UI do projektu – výměna jednoho řádku kódu
  • Konfigurace OIDC autentizace s Microsoft OpenAPI generátorem (access token, scopes)
  • Kompatibilita Scalar UI se staršími verzemi .NET a jinými OpenAPI generátory
  • MIT licence – open source s aktivní komunitou a rychlými opravami

Vzdělávací okénko prezentoval Alexandr Hájek.

Web Accessibility a EAA [Michal Melena, Vzdělávací okénko, 15.5.2025]

Záznam Vzdělávacího okénka HAVIT z 15. května 2025, kdy nám Michal Melena povídal o Accessibility a aktuálních povinnostech webových aplikací v této oblasti.

Seedy, UoW a Created v HAVIT stacku [Robert Haken, Vzdělávací okénko, 15.5.2025]

Technická změna v seedech, kde se nyní používá Unit of Work. Není potřeba explicitně nastavovat Created atribut, protože se o to postará systém. Taktéž je vhodné použít ExcludeUpdate, aby se Created hodnota nepřepisovala.