autoresearch je open-source framework od Andreje Karpathyho, který umožňuje AI agentovi autonomně provádět opakované ML experimenty bez zásahu člověka. Podle README je původní záměr jednoduchý: agent upravuje trénovací kód, spustí krátký běh, změří výsledek a podle metriky rozhodne, jestli změnu ponechat. Ve videu Claude Code + autoresearch je ten samý princip ukázaný i jako obecný pattern pro autonomní experimentování mimo ML.
Celý cyklus je přímočarý:
program.mdtrain.py - architekturu, hyperparametry, optimizerval_bpb
Za noc tak může proběhnout přibližně 100 experimentů. Člověk nastaví pravidla hry v program.md, agent dělá experimenty sám.
prepare.py - jednosměrná příprava dat. Stáhne trénovací data, natrénuje BPE tokenizer a obsahuje pomocné runtime utility. Tento soubor se nemá upravovat.
train.py - jediný soubor, který agent edituje. Obsahuje architekturu GPT-like modelu, optimizer (Muon + AdamW) a celý trénovací loop. Agent může měnit hloubku modelu, batch size, attention pattern, regularizaci i scheduling.
program.md - instrukce pro agenta. Tento soubor upravuje člověk; nastavuje výzkumný směr, omezení a cíle experimentů.
Potřebuješ NVIDIA GPU a Python 3.10+.
curl -LsSf https://astral.sh/uv/install.sh | sh uv sync uv run prepare.py uv run train.py
Repo je primárně dělané pro NVIDIA GPU. V README jsou zmíněné i komunitní forky pro macOS, Windows a AMD.
Všechny experimenty se v původním repu porovnávají podle jedné metriky - validation bits per byte (val_bpb). Čím nižší číslo, tím lepší model. Fixní časový rozpočet 5 minut zajišťuje, že jednotlivé běhy jsou přímo srovnatelné na stejném hardware.
Repo obsahuje:
Repo neobsahuje:
Při spuštění se model inicializuje s náhodnými vahami a trénuje se od nuly.
Video neprezentuje autoresearch jako hotový nástroj pro marketing. Používá ho hlavně jako pattern / framework pro autonomní experimentování: existuje baseline, objektivní metrika, experimentální varianta, vyhodnocení a rozhodnutí keep/discard.
V ukázce se tedy nemění train.py a neoptimalizuje se val_bpb. Místo toho se princip přenáší do cold email workflow:
baseline.md s copy kampaněresource.mdresults.logPrakticky řečeno: video neukazuje „spusť repo a dostaneš marketingový autopilot“, ale „vezmi logiku autoresearch a přepiš ji pro jiný problém s měřitelným výsledkem“.
Podle videa a následného rozboru přes NotebookLM vypadá demo workflow přibližně takto:
autoresearch jako referenční kostratest.md se popíše cíl, metrika a test methodresource.md se drží znalostní báze o tom, co zvyšuje reply rateorchestrator.py řídí loop harvest → generate → deploy → measure → promote/revertNejde tedy o to, že by původní ML kód najednou uměl marketing. Původní repo se použije hlavně jako architektonický vzor.
Video docela dobře ukazuje i rozdělení práce:
Praktický posun je v tom, že člověk je z velké části vytažený ze samotné experimentální smyčky. Nestará se o každou jednotlivou variantu, ale nastavuje systém a čte výsledky.
Člověk:
- nastaví cíl
- dodá API klíče
- připraví počáteční know-how a omezení
Soubory:
baseline.md = aktuální nejlepší varianta
resource.md = shrnuté poznatky a heuristiky
results.log = historie pokusů a výsledků
test.md = cíl, metrika, test method
orchestrator.py = pravidla smyčky
Smyčka:
1. HARVEST
- stáhni výsledky starších experimentů
- porovnej baseline vs challenger
2. PROMOTE / REVERT
- challenger vyhrál -> stane se nový baseline
- challenger prohrál -> zahodit
3. GENERATE
- vezmi baseline + resource + historii
- vytvoř 1 nový challenger
4. DEPLOY
- pošli baseline i challenger na nové leady
5. WAIT
- po vyhodnocovacím okně se výsledek vrátí do další iterace
def scheduler_tick(): matured = harvest_finished_experiments(older_than_hours=48) append_results_log(matured) if has_decisive_winner(matured.latest_pair): if matured.latest_pair.challenger_reply_rate > matured.latest_pair.baseline_reply_rate: promote_challenger_to_baseline() update_resource_md(with_lessons_from=matured.latest_pair) else: record_failed_hypothesis(matured.latest_pair) keep_current_baseline() prompt_context = { "baseline": read("baseline.md"), "resource": read("resource.md"), "goal": read("test.md"), } challenger = llm_generate_one_challenger(prompt_context) save_challenger(challenger) baseline_leads, challenger_leads = split_fresh_leads_evenly() deploy_campaign("baseline", read("baseline.md"), baseline_leads) deploy_campaign("challenger", challenger, challenger_leads)
Tento pseudokód není opsaný zdroják z videa. Je to zjednodušený model toho, co je na obrazovce a v komentáři videa vidět.
Tady je důležité neplést si dvě různé věci:
V marketingové verzi se systém „učí“ hlavně provozně:
resource.mdJinými slovy: nejde o gradient descent nad emaily, ale o automatizovaný experiment loop s pamětí v souborech.
Ve videu je potřeba rozlišit dva různé intervaly:
scheduler interval - jak často se spouští orchestrátor, na screenu zhruba každé 4 hodinymeasurement window - jak dlouho se čeká na použitelný výsledek experimentu, na screenu zhruba 48 hodinTo znamená, že čtyřhodinový tick není doba vyhodnocení experimentu. Je to jen cadence, ve které systém:
Praktický dopad je tento:
Dává to smysl hlavně jako průběžně naplňovaná pipeline, ne jako jednorázová dávka pokusů.
Rozumné přínosy takového rozdělení intervalů jsou:
Současně to má i slabiny:
resource.mdJinými slovy: nejde hledat jeden „správný interval“, ale rozumný kompromis mezi rychlostí iterace, velikostí vzorku a rychlostí návratu signálu.
Z videa i z reportu vychází tři praktické podmínky, bez kterých se takový systém rozpadá:
Proto se ten pattern hodí hlavně tam, kde existuje měřitelný signál a kde lze experiment rozumně nasadit i vyhodnotit strojově.
Video i report zmiňují, že stejný princip by šel přenést i na další typy experimentů mimo trénování modelů. Typicky jde o situace, kde lze měnit vstup, měřit výsledek a iterovat:
Tady je ale potřeba stejná opatrnost jako u cold emailů: čím pomalejší nebo hlučnější metrika, tím slabší bude celý loop.
Potvrzené z videa a zdrojů:
train.py a optimalizuje val_bpbbaseline.md, ne ML trénovací kódresource.mdRozumná interpretace:
resource.md funguje jako pracovní paměť nebo komprimovaná znalostní bázeval_bpbresource.md a historii výsledků, takže je potřeba průběžná konsolidace