Prompt management: Prompty jako kód
Přejít na sekci
Proč prompty nepatří do kódu
V prototypu máte prompt jako string v kódu. V produkci se prompt mění 10x častěji než okolní logika. Každá změna promptu vyžaduje deploy, code review a build pipeline. To je zbytečná brzda. Prompty potřebují vlastní lifecycle — verzování, testování, rollback — nezávisle na kódu aplikace.
Prompt management má tři úrovně zralosti. Level 1: prompty v kódu jako template strings. Level 2: prompty ve vlastních souborech s proměnnými a verzováním přes git. Level 3: prompt registry — centrální služba, která servíruje prompty přes API, umožňuje A/B testing a sleduje metriky kvality na každou verzi.
Prompt jako šablona s proměnnými
Každý produkční prompt je šablona. Obsahuje statickou část (instrukce, formát, omezení) a dynamické proměnné (uživatelský vstup, kontext, few-shot příklady). Oddělte je explicitně. Použijte Mustache, Handlebars, nebo prostý string interpolation — ale mějte jasný kontrakt, jaké proměnné prompt očekává.
// prompts/summarize.v2.yaml
// name: summarize
// version: 2
// variables: [document, max_length, language]
// model: claude-sonnet-4-20250514
const promptTemplate = `
Summarize the following document in {{language}}.
Maximum length: {{max_length}} words.
Focus on actionable insights, skip background.
Document:
{{document}}
Output format: bullet points, each starting with a verb.
`;
function renderPrompt(
template: string,
vars: Record<string, string>
): string {
return template.replace(
/\{\{(\w+)\}\}/g,
(_, key) => vars[key] ?? ''
);
}Verzování a rollback
Každá verze promptu by měla být immutable. Verze 2 nikdy nepřepíše verzi 1 — obě existují paralelně. Nová verze se nejdřív nasadí na canary traffic (5-10 % requestů), porovná se kvalita oproti baseline, a teprve pak se stane defaultem. Pokud nová verze degraduje, rollback je otázka jednoho konfiguračního přepnutí.
Nejjednodušší implementace: prompty v YAML souborech v git repozitáři, s verzí v názvu souboru (summarize.v1.yaml, summarize.v2.yaml). Konfigurace říká, která verze je aktivní. Složitější setup: prompt registry jako microservice s REST API, databází verzí a webhooky pro deployment.
// Simple file-based prompt registry
interface PromptVersion {
name: string;
version: number;
template: string;
model: string;
variables: string[];
metadata: { author: string; changedAt: string; reason: string };
}
class PromptRegistry {
private prompts = new Map<string, PromptVersion[]>();
getActive(name: string): PromptVersion {
const versions = this.prompts.get(name);
if (!versions?.length) throw new Error(`Prompt '${name}' not found`);
return versions[versions.length - 1];
}
getVersion(name: string, version: number): PromptVersion {
const v = this.prompts.get(name)?.find(p => p.version === version);
if (!v) throw new Error(`Prompt '${name}' v${version} not found`);
return v;
}
}A/B testování promptů
Změna jednoho slova v promptu může změnit kvalitu výstupu o 20 %. Bez A/B testování to nezjistíte. Základní setup: přiřaďte každý request náhodně k variantě (A = aktuální verze, B = kandidát), logujte variantu spolu s výstupem, a po dostatečném vzorku porovnejte metriky.
Metriky závisí na use case: pro sumarizaci měřte délku, pokrytí klíčových bodů a uživatelský rating. Pro klasifikaci měřte accuracy a F1 skóre. Pro generování kódu měřte, zda se kód zkompiluje a projdou testy. Vždy mějte alespoň jednu automatickou metriku a jednu lidskou.
// A/B test assignment
function assignVariant(
userId: string,
testName: string,
variants: string[],
weights?: number[]
): string {
// Deterministic assignment based on user+test hash
const hash = createHash('sha256')
.update(`${userId}:${testName}`)
.digest();
const bucket = hash.readUInt32BE(0) % 100;
const w = weights ?? variants.map(() => 100 / variants.length);
let cumulative = 0;
for (let i = 0; i < variants.length; i++) {
cumulative += w[i];
if (bucket < cumulative) return variants[i];
}
return variants[variants.length - 1];
}Prompt composition a chain-of-thought
Složité tasky vyžadují kompozici promptů — rozložení problému na kroky, kde výstup jednoho promptu je vstupem dalšího. Klasický vzor: první prompt extrahuje relevantní informace z dokumentu, druhý je analyzuje, třetí generuje výstup. Každý krok má vlastní prompt s vlastním verzováním.
Chain-of-thought (CoT) v produkci není jen 'think step by step'. Je to strukturovaný formát, kde model nejdřív vygeneruje reasoning (který logujete, ale nezobrazujete uživateli), a pak finální odpověď. CoT zlepšuje kvalitu u analytických úloh o 10-30 %, ale zvyšuje token count a latenci.
Prompt je produkční artefakt jako kód — potřebuje verzování, review, testování a rollback. Chovejte se k němu tak od prvního dne.
Logujte ke každému API volání verzi promptu, model a hash vstupních proměnných. Až budete debugovat špatný výstup, budete přesně vědět, co model dostal.
Přidejte do prompt metadat 'reason' pole — proč byla tato verze vytvořena. Za měsíc nebudete vědět, proč jste změnili formulaci, pokud to nenapíšete teď.
Vytvořte jednoduchý prompt registry: 1) Uložte dvě verze jednoho promptu do YAML souborů. 2) Napište funkci, která na základě user ID deterministicky přiřadí variantu (50/50 split). 3) Logujte do konzole variantu, prompt verzi a (simulovaný) výstup modelu. 4) Po 100 simulovaných requestech spočítejte, kolik requestů šlo na kterou variantu.
Nápověda
Deterministické přiřazení přes hash zajistí, že stejný uživatel vždy dostane stejnou variantu — to je klíčové pro konzistentní UX a validní A/B test.
Implementujte jednoduchý prompt versioning systém pro váš projekt. Požadavky: 1) Prompty jsou uložené v souborech (ne hardcodované), 2) Každý prompt má verzi, 3) Změny v promptech jsou trackované v gitu, 4) A/B testování dvou verzí promptu je jednoduché. Nemusíte použít specializovaný nástroj — stačí složka s YAML/JSON soubory a jednoduchý loader.
Nápověda
Zdokumentujte svůj postup a výsledky — poslouží jako reference pro budoucí podobné úkoly.
Implementujte pipeline ze 3 promptů pro analýzu dokumentu: 1) Prompt 1 extrahuje klíčové informace z textu (entity, fakta, čísla). 2) Prompt 2 analyzuje extrahované informace a vytvoří závěry. 3) Prompt 3 generuje strukturovaný report. Každý prompt má vlastní verzi a model konfiguraci. Změřte kvalitu: lepší výsledky dává pipeline nebo jeden velký prompt?
Nápověda
Pipeline je lepší pro složité úlohy, kde každý krok vyžaduje jiný typ reasoningu. Pro jednoduché úlohy je overhead zbytečný.
- Prompty se mění rychleji než kód — potřebují vlastní lifecycle
- Každá verze promptu je immutable, rollback je přepnutí konfigurace
- A/B testování odhalí rozdíly v kvalitě, které při ručním testování přehlédnete
- Logujte verzi promptu a model ke každému volání — bez toho je debugging nemožný
V příští lekci se ponoříme do Evaluace AI výstupů: Jak měřit kvalitu — technika, která vám dá jasnou převahu. Odemkněte celý kurz a pokračujte hned.
2/7 hotovo — pokračujte!