Štítek: llm

  • Připravovaný workshop: Agentní práce s LLM

    Připravovaný workshop: Agentní práce s LLM

    Praktický workshop o tom, jak používat velké jazykové modely jako agenty: jak zadat úkol, vyhodnotit výsledek, bezpečně pracovat s nástroji a vybrat vhodný model. Budeme pracovat ve VS Code s GitHub Copilotem a podle potřeby připojíme vlastní modely Gemini a Mistral.

    Termín, místo a odkaz na repozitář účastníci obdrží před workshopem. Níže uvedené kroky si můžete připravit s předstihem.

    Co si připravit

    • notebook s aktuálním systémem Windows, macOS nebo Linux a přístupem k internetu,
    • GitHub účet pro VS Code a GitHub Copilot,
    • VS Code nainstalované a přihlášené pod stejným GitHub účtem,
    • volitelně vlastní klíč Gemini a/nebo Mistral uložený mimo repozitář.

    API klíče nejsou podmínkou pro začátek, ale umožní vám během workshopu vyzkoušet více poskytovatelů a modelů.


    1. Vytvořte si GitHub účet

    1. Navštivte registraci GitHubu.
    2. Vytvořte osobní účet nebo pokračujte přes Google.
    3. Ověřte e-mailovou adresu.
    4. Zapněte dvoufázové ověření (2FA).
    5. Přihlaste se a před workshopem ověřte, že otevřete zaslaný repozitář workshopu.
    6. Pokud je pro váš účet dostupný, aktivujte Copilot Free.

    GitHub nabízí Copilot Free s omezeným přístupem k funkcím AI, agentům a automatickému výběru modelu. Protože se podmínky a limity mohou měnit, řiďte se vždy aktuálním přehledem plánů. GitHub také doporučuje po založení účtu zapnout 2FA; podrobnosti najdete v návodu k vytvoření účtu.

    Kontrola připravenosti: Jste připraveni, když se přihlásíte do GitHubu, otevřete repozitář workshopu a ve VS Code vidíte Copilot Chat.


    2. Nainstalujte Visual Studio Code

    Windows

    1. Na oficiální stránce ke stažení VS Code zvolte User Installer pro Windows.
    2. Spusťte stažený instalátor.
    3. Ponechte zapnutou možnost přidat VS Code do proměnné PATH.
    4. Spusťte VS Code.
    5. Přihlaste se GitHub účtem, který jste si připravili výše.
    6. Otevřete zobrazení Chat nebo Agents a aktivujte Copilot.
    7. Stáhněte nebo naklonujte repozitář workshopu.
    8. Otevřete ve VS Code celý repozitář jako složku, nikoli jednotlivé soubory.

    Pro většinu uživatelů Windows Microsoft doporučuje User Setup: nevyžaduje administrátorská práva a poskytuje plynulejší aktualizace. Podrobný postup je v oficiálním návodu pro Windows.

    Pro macOS a Linux použijte odpovídající oficiální návod. Pokud s Gitem zatím nezačínáte, v repozitáři lze přes tlačítko Code použít Download ZIP. Pro plný postup s klonováním, commity a větvemi však budete potřebovat Git.


    VS Code se zobrazením Chat vedle editoru
    Zobrazení Chat ve VS Code je vedle editoru. Otevřete je přes nabídku Chat, příkaz Chat: Open Chat nebo ve Windows klávesami Ctrl+Alt+I.

    Další možnosti otevření a rozložení Chat/Agents popisuje oficiální dokumentace VS Code.


    3. Nainstalujte Git

    Git potřebujete pro plný postup s klonováním repozitáře, větvemi, commity a odesíláním změn. Pokud zatím chcete pouze číst materiály workshopu, můžete v repozitáři použít Code > Download ZIP; pro praktická cvičení je ale Git doporučený.

    Windows

    1. Stáhněte aktuální instalátor z oficiální stránky Git for Windows.
    2. Spusťte instalátor a ponechte běžná výchozí nastavení, včetně možnosti používat Git z příkazového řádku.
    3. Po dokončení otevřete nový PowerShell nebo Git Bash.
    4. Ověřte instalaci příkazem:
    git --version
    

    Pokud používáte Windows Package Manager, lze Git nainstalovat také příkazem winget install --id Git.Git -e --source winget.

    macOS a Linux

    Po instalaci na libovolném systému znovu ověřte git --version. Pokud budete vytvářet vlastní commity, nastavte si jednou své jméno a e-mail; tyto údaje se stanou součástí historie commitů:

    git config --global user.name "Vaše jméno"
    git config --global user.email "[email protected]"
    

    Podrobnosti najdete v návodu pro první nastavení Gitu.

    Kontrola připravenosti: Jste připraveni, když git --version vypíše verzi a ve VS Code po otevření repozitáře vidíte zobrazení Source Control.


    4. Získejte Gemini API key

    1. Přihlaste se do Google AI Studio.
    2. Přijměte příslušné podmínky.
    3. Otevřete sekci Projects nebo API Keys.
    4. Použijte automaticky vytvořený projekt nebo importujte existující projekt Google Cloud.
    5. Vytvořte nebo zobrazte Gemini API key.
    6. Okamžitě jej zkopírujte do správce hesel.
    7. Nikdy jej nevkládejte do repozitáře workshopu.
    8. Ve VS Code spusťte Chat: Manage Language Models, zvolte Add Models, vyberte Gemini a vložte klíč.
    9. Vyberte Gemini model podporující tool calling.
    10. Spusťte připravený test připojení z repozitáře workshopu.

    Google u vybraných modelů nabízí omezenou bezplatnou úroveň Gemini Developer API. U bezplatné úrovně může být odeslaný obsah použit pro zlepšování produktů Google, proto do ní nepatří důvěrná pracovní ani osobní data. Podmínky a aktuální ceny ověřte na stránce Gemini API pricing.

    Google doporučuje používat proměnné prostředí, například GEMINI_API_KEY, a výslovně varuje před commitem klíčů do Gitu nebo jejich vystavením v klientských aplikacích. Viz návod k API key. Ve VS Code se vlastní modely přidávají přes Language Models; agentům se zobrazují jen modely s podporou tool callingu. Viz dokumentace VS Code k vlastním modelům.


    5. Získejte Mistral API key

    1. Vytvořte si účet v Mistral Studio.
    2. Otevřete sekci API Keys.
    3. Zvolte Create new key.
    4. Pojmenujte klíč rozpoznatelně, například agentic-llm-workshop.
    5. Pokud to rozhraní nabízí, nastavte datum expirace.
    6. Ihned klíč zkopírujte — celá hodnota se zobrazí pouze jednou.
    7. Uložte ho bezpečně mimo repozitář.
    8. Připojte jej přes integrovaného poskytovatele VS Code, je-li k dispozici, přes kompatibilní provider extension nebo přes vlastní API endpoint.
    9. Vyberte model s podporou tool callingu a spusťte test připojení.

    Mistral uvádí, že režim Free nevyžaduje platební kartu, ale podléhá limitům používání a rychlosti. Aktuální postup najdete v oficiálním návodu pro aktivaci a vytvoření API key. Dostupnost poskytovatelů a modelů ve VS Code se může měnit; pokud Mistral nenajdete mezi integrovanými poskytovateli, použijte kompatibilní rozšíření nebo vlastní endpoint podle dokumentace VS Code.


    Bezpečné použití během workshopu

    • Nikdy neposílejte klíče, hesla, interní dokumenty ani osobní údaje do chatu, promptu nebo repozitáře.
    • Před spuštěním nástroje vždy zkontrolujte, co má agent provést a které soubory může změnit.
    • Změny agenta kontrolujte jako běžné změny kódu: projděte diff a spusťte testy.
    • Když si nejste jistí, zastavte se a zeptejte se během workshopu.

    Těším se na společné experimentování s agenty, nástroji a modely.

    Michael Princ

  • Promptování tiny LLM: kdy struktura pomáhá a kdy se obrací proti nám

    Promptování tiny LLM: kdy struktura pomáhá a kdy se obrací proti nám

    Úvod

    Jazykové modely (LLM) se stále častěji spouštějí přímo na lokálních zařízeních – bez výkonné grafické karty, jen s CPU, integrovanou grafikou nebo i na mobilních telefonech. U kvantizovaných tiny LLM se orientačně pohybujeme zhruba v rozsahu 0,5 až 2 GB RAM na 1 miliardu parametrů podle přesnosti kvantizace, délky kontextu a runtime režie. V takových systémech potřebujeme routing: rychlé rozhodnutí, který specializovaný agent nebo model zpracuje daný dotaz. Testoval jsem, zda malé modely do 2B parametrů tuto úlohu zvládnou spolehlivě – a zda jim pomůže strukturovaný prompt (CO-STAR, POML), nebo naopak jednoduchý přístup. Výsledek byl překvapivý: strukturovaný prompt dokáže výkon malého modelu výrazně zlepšit i poškodit – podle toho, jak velký model je.

    Routing je v agentním systému prakticky dispečer. Uživatel napíše dotaz a router má rychle poznat, jestli jde například o generování Python kódu, technickou podporu, bezpečnostní kontrolu, nebo obecný dotaz. Když se rozhodne špatně, požadavek skončí u nevhodného agenta, systém ztrácí čas a uživatel dostane horší odpověď. Proto nestačí, aby router byl "přibližně chytrý"; musí vracet správný výstup ve správném formátu a s nízkou latencí.

    Jazykové modely jsou pro routing lákavé, protože umí rozpoznat záměr i v nejednoznačných formulacích, které by se pevnými pravidly nebo sadou klíčových slov pokrývaly obtížně. Zároveň ale platí, že router je podpůrná komponenta, ne hlavní chatbot: má být levný, lokálně spustitelný a předvídatelný. Právě proto dává smysl testovat tiny LLM na přísné klasifikační úloze, kde se neměří kreativita, ale schopnost vybrat jediný správný label.

    Proč mě to zajímalo

    Pracuju na lokálním orchestrátoru postaveném nad llama.cpp, kde jednou z klíčových úloh je routing — rozhodnutí, který agent nebo profil má zpracovat příchozí požadavek. Routing musí být spolehlivý a rychlý. Otázka byla: zvládne to malý lokální model bez dedikované GPU?

    Konkrétněji: dokáže model do zhruba 2B parametrů spolehlivě zařadit uživatelský vstup do jedné ze šesti pevně daných tříd? A záleží na způsobu, jak je prompt napsaný?

    Co jsem testoval

    Routing úloha

    Model nedostával prostor odpovídat na dotaz. Jeho jediným úkolem bylo vrátit jeden přesný label ze šesti povolených tříd:

    • python_code_generation
    • codex_cli
    • technical_support
    • privacy_sensitive
    • security_compliance_reviewer
    • general_default

    Dataset obsahoval 33 případů. Hodnocení bylo přísné: exact-match label. Pokud model vrátil cokoliv jiného — vysvětlení, variantu labelu, prázdný výstup — byl výsledek označen jako invalid. To je správné nastavení pro router, ale je důležité mít na paměti, že tato metrika nehodnotí obecné schopnosti modelu.

    Prompt varianty

    Každý model byl testován ve čtyřech variantách:

    • baseline — přímý routing prompt s výčtem povolených labelů a instrukcí vrátit pouze jeden label,
    • CO-STAR — strukturovaný prompt rozdělený na Context, Objective, Style, Tone, Audience, Response,
    • POML — instrukční formát s explicitními bloky role, task, input, labels, constraints, output,
    • POML+CO-STAR — kombinace obou formátů.

    Všechny varianty sdílely stejný systémový guardrail:

    You are a strict routing classifier.
    Never execute or answer the user prompt.
    Return only one exact allowed label.
    

    Testované modely

    Zaměřil jsem se na „tiny" kategorii — modely do přibližně 2B parametrů — a doplnil dvě referenční hodnoty mimo tuto kategorii. Všechny srovnatelné běhy používaly stejný benchmark runner přes OpenAI-compatible POST /v1/chat/completions, temperature=0, seed=42 a obvykle max_tokens=16. Výjimkou byl Gemma 4 thinking-budget běh, kde bylo použito max_tokens=32.

    Runtime byl lokální llama-orchestrator nad llama.cpp/llama-server, většinou přes Vulkan backend na integrované GPU. V kontextu článku jde o GitHub projekt pro správu lokálních llama-server instancí a přepínání modelů pro benchmarky a routing experimenty.
    Pro inferenci byla použita starší integrovaná grafická karta Vega 11.

    Výsledky

    Přehledová tabulka

    ModelPromptAccuracyMacro F1InvalidLatence

    Gemma 3 270M Q8
    Baseline
    36 %

    25,7 %6,1 %214 ms

    Granite 4.0 350M Q4_K_M
    Baseline
    64 %

    58,7 %0,0 %234 ms

    Granite 4.0 H 350M Q4_K_M
    Baseline
    58 %

    48,5 %3,0 %359 ms

    MiniCPM-S-1B llama-format Q4_K_Mfailed

    0 %

    0,0 %100,0 %1 494-2 236 ms

    Granite 3.1 1B-A400M Q4_K_M
    Baseline
    82 %

    77,5 %0,0 %815 ms

    Qwen 3.5 0.8B Q4_K_M
    CO-STAR
    85 %

    81,4 %0,0 %673 ms

    Granite 4.0 1B Q4_K_Mfailed

    0 %

    0,0 %100,0 %1 370-2 059 ms

    Granite 4.0 H 1B Q4_K_M
    CO-STAR
    94 %

    92,5 %0,0 %1 357 ms

    HY-1.8B-2Bit Q4_0
    POML
    61 %

    54,5 %0,0 %1 758 ms

    Marco-Nano-Instruct Q4_K_M
    Baseline
    91 %

    90,0 %0,0 %2 924 ms

    Qwen 3.5 2B Q4_K_Mnejlepší
    CO-STAR
    100 %

    100,0 %0,0 %1 268 ms

    Granite 3.1 3B-A800M Q4_K_M
    CO-STAR
    94 %

    96,7 %6,1 %2 504 ms

    Gemma 4 26B A4B (Dedicated GPU)reference
    Baseline
    100 %

    100,0 %0,0 %1 008 ms

    Gemma 4 26B A4B je referenční model mimo tiny kategorii — slouží jako horní benchmark a byl provozován na dedikované grafické kartě RX 6800. Viz poznámka níže.


    Scatter graf accuracy proti průměrné latenci pro testované malé jazykové modely
    Praktické okno benchmarku: modely nad 80 % accuracy a pod 1,5 s průměrné latence.

    Tři praktické kandidáty

    Granite 4.0 350M — nejrychlejší prefilter
    233,5 ms průměrná latence, 63,64 % accuracy. Pro produkční routing to nestačí, ale jako rychlý prefilter nebo první krok kaskády má smysl.

    Qwen 3.5 0.8B — nejlepší kompromis pod 1B
    S CO-STAR promptem dosáhl 84,85 % accuracy bez jediného invalid výstupu, při latenci 672,7 ms. Výsledek byl prakticky identický na dvou různých buildech llama.cpp (b9071 i b9085), což zvyšuje důvěryhodnost závěru.

    Qwen 3.5 2B — aktuálně nejlepší malý router
    CO-STAR i POML dosáhly 100 % accuracy, ale CO-STAR byl rychlejší (1 267,9 ms vs. 1 453,2 ms), proto je pro routing praktičtější. Model zároveň překonal starší referenci Granite 3.1 3B-A800M jak v latenci, tak v absenci invalid výstupů.

    Modely, které neprošly

    V hlavní malé sadě zůstaly dva modely bez použitelné prompt varianty a vrátily 100 % invalid výstupů:

    Granite 4.0 1B Q4_K_M generoval opakované tokenové fragmenty (typ $unders$$$$$118$$($and). Jde pravděpodobně o kompatibilitní problém kombinace modelu, kvantu a aktuálního llama.cpp chat template, nikoliv nutně o slabost modelu jako takového.

    MiniCPM-S-1B llama-format Q4_K_M nebyl schopen vrátit platný label v žádné testované variantě. Příčina nebyla dále diagnostikována.

    Jak prompt formát ovlivnil výsledky

    Nejzajímavější závěr z benchmarku není pořadí modelů. Je to způsob, jakým se mění optimální prompt strategie podle velikosti modelu.


    Sloupcový graf vlivu prompt varianty na accuracy u vybraných modelů
    Vliv prompt varianty není monotónní: u malých modelů pomáhá jednoduchost, u větších CO-STAR nebo POML.

    U nejmenších modelů pomáhá jednoduchost

    Modely pod přibližně 500M parametrů — Gemma 3 270M, Granite 4.0 350M a H 350M — měly nejlepší výsledky s baseline promptem. Strukturovaný CO-STAR nebo POML prompt situaci nezlepšil, u Gemmy 3 270M ho naopak výrazně zhoršil:

    • Gemma 3 270M, baseline: 36,36 %
    • Gemma 3 270M, CO-STAR: 24,24 %

    Pravděpodobný důvod: model s omezenou kapacitou musí při strukturovaném promptu věnovat část pozornosti parsování formátu, místo aby ji celou soustředil na klasifikaci. Zároveň tyto modely nebyly dostatečně doladěny na instrukční formáty, takže CO-STAR tagy mohou fungovat jako šum, ne jako signál.

    Kolem 0,8B se CO-STAR začíná vyplácet

    Qwen 3.5 0.8B je prvním modelem v sadě, kde CO-STAR jednoznačně pomáhá:

    • baseline: 60,61 %
    • CO-STAR: 84,85 %

    Totéž platí pro Granite 4.0 H 1B, kde CO-STAR zvýšil accuracy z 87,88 % na 93,94 %. Model v tomto rozsahu má dost kapacity, aby instrukci v CO-STAR formátu spolehlivě interpretoval jako řídící signál, ne jako součást vstupního textu.

    Kolem 2B POML dosahuje srovnatelné přesnosti jako CO-STAR

    U Qwen 3.5 2B dosáhly CO-STAR i POML shodně 100 % accuracy. POML jako samostatná metoda je tedy kompetitivní, ale při vyšší latenci. Pro routing to znamená, že CO-STAR zůstává praktičtější volbou. Pro modely s více než 2 miliardami parametrů doporučuji s oběma metodami experimentovat pro různé typy použití.

    POML+CO-STAR konzistentně snižoval výsledky

    Kombinace obou formátů v jednom promptu se ve srovnání s nejlepší samostatnou variantou neosvědčila. Příklady:

    • Qwen 3.5 2B: CO-STAR 100 % → POML+CO-STAR 63,64 %
    • Granite 4.0 H 1B: CO-STAR 93,94 % → POML+CO-STAR 69,70 %
    • Marco-Nano-Instruct: baseline/CO-STAR 90,91 % → POML+CO-STAR 27,27 %

    Pro krátkou label-only klasifikační úlohu kombinace přidává příliš mnoho strukturální komplexity. Nelze říct, že tato kombinace je obecně špatná pro jiné typy úloh — ale pro routing tento přístup nefungoval.


    Heatmapa accuracy pro kombinace modelů a prompt variant
    Heatmapa ukazuje, že nejlepší prompt strategie se mění s kapacitou modelu.

    Poznámka k Gemma 4 26B A4B

    Gemma 4 26B A4B je reasoning model, který v defaultním nastavení vrátil 100 % invalid výstupů — finální label byl součástí reasoning bloku, nikoliv message.content. Po nastavení thinking_budget_tokens=0 dosáhla baseline i CO-STAR 100 % accuracy, přičemž baseline byla rychlejší (1 008,5 ms). To je důležitý praktický poznatek: reasoning modely vyžadují explicitní nastavení inference režimu pro routing úlohy, jinak jsou nepoužitelné bez ohledu na jejich schopnosti. Tento model není vhodný pro integrovanou grafickou kartu, proto byla inference realizována na dedikované grafické kartě RX 6800.

    Praktická doporučení

    ScénářModelPromptPoznámka
    Nejrychlejší prefilterGranite 4.0 350M Q4_K_MBaselinejen střední přesnost, vhodné pro kaskádu
    Nejlepší kompromis pod 1BQwen 3.5 0.8B Q4_K_MCO-STARstabilní výsledek na více runtime verzích
    Granite-family volbaGranite 4.0 H 1B Q4_K_MCO-STARvysoká přesnost, bez invalid výstupů
    Nejlepší malý routerQwen 3.5 2B Q4_K_MCO-STAR100 % accuracy, nižší latence než 3B reference

    Limity tohoto benchmarku

    Výsledky jsou slibné, ale je důležité být přesný v tom, co benchmark hodnotí a co ne:

    • Dataset má 33 případů a 6 tříd. To je vhodné pro rychlý lokální experiment, ale slabé pro definitivní veřejné závěry.
    • Každý model byl spuštěn s repetitions=1. Při temperature=0 to snižuje volatilitu, ale neověřuje robustnost vůči runtime variabilitě.
    • Benchmark hodnotí exact-match label. Model, který vrátí jiný formát nebo vysvětlení, je penalizován jako invalid — správně pro router, ale nehodnotí obecné schopnosti.
    • Některé nulové výsledky (Granite 4.0 1B, MiniCPM-S-1B) jsou pravděpodobně kompatibilitní problém, ne důkaz obecné slabosti modelu.
    • Nejsou měřeny RAM/VRAM footprint, spotřeba energie ani CPU-only režim.

    Pro robustnější závěry by bylo potřeba: větší a vyváženější dataset, bootstrap confidence intervaly, per-class recall a opakování v CPU-only režimu pro přenosná zařízení.

    Závěr

    Nejzajímavější zjištění není, který model vyhrál. Podstatnější je, že malé modely se chovají kvalitativně odlišně podle velikosti — a promptovací strategie, která funguje u 2B modelu, může u 270M modelu situaci aktivně zhoršit.

    Pod 500M parametrů: jednoduchý baseline prompt je obvykle optimální. Přidaná struktura spíš zvyšuje kognitivní zátěž, než aby pomáhala.

    Kolem 0,8–1B: CO-STAR začíná být efektivní. Model má dost kapacity na instrukční formát, ale ještě ne na složitější struktury.

    Kolem 2B: CO-STAR i POML dosahují srovnatelné přesnosti. Pro routing s minimální latencí je CO-STAR praktičtější.

    Lokální inference tedy není jen otázka, kolik tokenů za sekundu model vygeneruje. Je to otázka, jak malý model ještě dokáže spolehlivě držet instrukci, formát výstupu a rozhodovací hranici mezi podobnými třídami.

© 2026 Michael Princ. Všechna práva vyhrazena.

Vytvořeno s WordPress