Obsah

autoresearch – autonomní ML experiment loop

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.

Jak funguje původní repo

Celý cyklus je přímočarý:

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.

Klíčové soubory

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ů.

Instalace

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.

Metrika: val_bpb

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.

Co obsahuje - a co ne

Repo obsahuje:

Repo neobsahuje:

Při spuštění se model inicializuje s náhodnými vahami a trénuje se od nuly.

Co video ukazuje navíc

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:

Prakticky ř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“.

Workflow z videa krok za krokem

Podle videa a následného rozboru přes NotebookLM vypadá demo workflow přibližně takto:

  1. Naklonuje se repozitář autoresearch jako referenční kostra
  2. Spustí se Claude Code v terminálu nebo editoru
  3. Zadá se prompt, aby stejný pattern použil místo ML pro cold email
  4. V test.md se popíše cíl, metrika a test method
  5. V resource.md se drží znalostní báze o tom, co zvyšuje reply rate
  6. orchestrator.py řídí loop harvest → generate → deploy → measure → promote/revert
  7. GitHub Actions nebo cron spouští tick v pravidelných intervalech
  8. Instantly API dodává metriky a umožní nasadit nové varianty

Nejde tedy o to, že by původní ML kód najednou uměl marketing. Původní repo se použije hlavně jako architektonický vzor.

Role člověka vs. role AI agenta

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.

Jednoduchý model

Č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

Pseudokód adaptéru z videa

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.

Jak se systém „učí“

Tady je důležité neplést si dvě různé věci:

V marketingové verzi se systém „učí“ hlavně provozně:

Jinými slovy: nejde o gradient descent nad emaily, ale o automatizovaný experiment loop s pamětí v souborech.

Jak přemýšlet o časových intervalech

Ve videu je potřeba rozlišit dva různé intervaly:

To 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:

Jinými slovy: nejde hledat jeden „správný interval“, ale rozumný kompromis mezi rychlostí iterace, velikostí vzorku a rychlostí návratu signálu.

Kdy tenhle pattern dává smysl

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ě.

Kde by se ten pattern dal použít i mimo ML

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á fakta vs. rozumná interpretace

Potvrzené z videa a zdrojů:

Rozumná interpretace:

Praktické limity adaptace z videa

Typické use cases

Zdroje