Drugi blogi
Že mesece me muči vprašanje: kako v resnici vem, ali spremembe mojega agenta za 3D modeliranje dejansko izboljšujejo stvari? Odgovor so evalvacije (evaluacije), vendar izdelava pravega sistema evalvacij za kompleksnega AI agenta ni preprosta.
Zame so evalvacije ponovljivi eksperimenti nad celotnim agentom. Vsaka uporablja nabor promptov in specifično konfiguracijo, izvede celoten potek od začetka do konca ter ustvari ocene, ki jih lahko primerjam med različnimi izvajjanji. Izvajanja proizvedejo artefakte (koda, predogled, 3MF) in metrike, ki so pomembne, tako da sprememba bodisi zmaga bodisi izgubi brez slepega ugibanja.
Ker so standardizirane in enostavne za izvajanje, sem se začel močno naslanjati nanje. V času pisanja je komplet ustvaril 1050 generacij v 29 izvajanjih za skupaj $186.26 (približno $6.42 na izvajanje). Skupni čas: 2664m 13s, približno 91m 52s na izvajanje. Obseg ni velik, ampak zadostuje za vsakodnevno iteracijo.
Najprej sem preizkusil preprost "battleground", kjer sem lahko primerjal dva različna modela drug ob drugem. Bil je začetek, a se je hitro podrl. Moj agent ni samo en klic LLM. To je večstopenjski potek dela. Kaj če želim uporabiti hitrejši, cenejši model samo za popravljanje generirane kode? Kaj če prilagodim sistemski prompt? Battleground je bil preveč tog.

Obstoječi okvirji za evalvacije tudi niso bili primerni. Večina je zasnovanih za preprost tok klic -> odgovor. Prav tako se osredotočajo na generične metrike kot so "halucinacije". Iskreno, halucinacije me ne zanimajo. Zanima me, ali agent ustvari odličen, natisljiv 3D model. To je pomenilo, da potrebujem prilagojeno rešitev.
Torej, glavni problem je bil izdelati prilagodljiv evalvacijski sistem, ki lahko:
Po dolgem premisleku sem pristal na rešitvi: git commit je edini vir resnice.
Katerokoli spremembo, ki jo želim testirati - nov model, drugačen prompt, predelan potek dela - commitam. Nato lahko zaženem evalvacijo proti temu specifičnemu commitu. To zajame celotno stanje agenta in njegove konfiguracije. Preprosto in močno.
Vendar kaj dejansko merimo? Za generiranje 3D modelov sem definiral nekaj ključnih metrik:
Prvi dve sta subjektivni. Za reševanje tega uporabljam dvojni pristop:
Za doslednost lastnih ocen sem ustvaril jasno lestvico. Mislim, da je to super pomembno, ker čez šest mesecev ne bom več vedel, kaj je pomenila ocena "0.3" pri aesthetics.
Okay, zdaj imam vse te metrike. Kako jih združim v eno samo oceno, ki mi pove, ali je sprememba dobra ali slaba? S tehtano enačbo.
To mi omogoča, da prilagodim, kaj mi je najbolj pomembno. Na primer, lahko naredim adherence, ocenjeno s strani človeka, kot najpomembnejši dejavnik in hitrost kot sekundarno, pri čemer ignoriram vse ostalo.

Ali pa lahko naredim stroške dvakrat pomembnejše kot hitrost.

Tukaj je moja trenutna nastavitev za sprejemanje odločitev:

Moje prioritete so:
Moje lastne ocene tehtam bistveno bolj kot ocene AI.
Ena težko pridobljena lekcija iz ocenjevanja 1000+ modelov: moje lastno ocenjevanje drsi. Tudi z rubriko na zaslonu sem pogosto končal s hitrim pass/fail na pragu 0.4 (ali bi bil pripravljen pokazati to uporabniku ali ne). To me je potisnilo proti preprostejšemu človeškemu signalu. Eksperimentiram z binarnim yes/no za adherence, nato pa dovolim, da tehtana ocena to uporablja kot močno značilnost. To zmanjša šum, pospeši preglede in se ujema s tem, kako dejansko sprejemam odločitve pod časovnim pritiskom. AI lahko ohrani kontinuirano oceno; moja ocena je lahko jasna in preverljiva.
Poglejmo to v akciji. Nedavno sem spremenil "reasoning effort" agenta na "high", vendar nisem bil prepričan, da dejansko pomaga. Bilo je zagotovo počasneje in dražje. Lahko se zadovoljim z "medium" ali "low" effort in razpolovim čas generacije?
Imam dva nabora promptov za evalvacije: "base" nabor s 7 prompti in "extra" nabor s 27. Vsak prompt se izvede 3-krat, da se upošteva variabilnost, tako extra izvajanje generira 81 modelov. Običajno začnem z base setom za splošno sliko. Če so rezultati pretesni, zaženem celoten extra set. Ni velik vzorec, ampak je bistveno boljši kot letenje v temi. Že tako stane približno $5 na base izvajanje in približno $15 na extra izvajanje, in to je stranski projekt...
Rezultati so bili jasni:
Zmagovalec je bil očiten: Medium reasoning effort. Zagotavljal je enako kakovost kot High pri polovici stroškov in časa. Vse rezultate lahko vidite na evals strani.
Od takrat je izšel GPT-5.1 (18.11.2025). Zgodnja izvajanja na isti nastavitvi "medium" reasoning kažejo 2-3x hitrejše zaključke kot GPT-5 z rahlo nižjo kakovostjo pri adherence in aesthetics. Pri splošni zmogljivosti je med Gemini 2.5 Pro in GPT-5 za moje delo. Glede na hitrost zdaj prednostno uporabljam GPT-5.1 za generiranje modelov, ko potrebujem hitro iteracijo, in se vrnem na GPT-5, ko je pomemben tisti zadnji košček kakovosti. Oba ostajata v sistemu, tako da odloča scoreboard, ne občutki.

Nenehno prilagajam spremenljivke kot te in ponovno izvajam evalvacije:
const INITIAL_MODEL = "openai/gpt-5";
const INITIAL_REASONING_EFFORT = "medium";
const CODE_ERRORS_MAX = 4;
const FIX_MODEL = "openai/gpt-5-mini";
const FIX_REASONING_EFFORT = "low";
const VISUAL_ADHERENCE_MIN = 0.4;
const VISUAL_ERRORS_MAX = 1;
const VISUAL_EVALUATION_MODEL = "2.5-flash";
const VISUAL_FIX_MODEL = "openai/gpt-5";
const VISUAL_FIX_REASONING_EFFORT = "low";
Verjetno se sprašujete o tistih VISUAL_ spremenljivkah. Tu postane zanimivo. Implementiral sem funkcijo "visual check", kjer AI model pogleda renderirano sliko 3D modela in oceni njegovo adherence prompta. Če je ocena prenizka, agent poskusi znova.
Moj občutek je bil, da ne pomaga dovolj, da bi upravičil dodatni čas in stroške. Generacije so trajale trikrat dlje. Izvajanje extra prompt seta je potrdilo to domnevo. Vizualni pregledi niso bili dovolj konsistentni. Zakaj? Je bila ocena AI preprosto naključna? Je bil moj prag prenizek, kar je povzročilo nepotrebne ponovne poskuse?
Slišal sem za linearno regresijo, vendar zanjo nisem imel prave uporabe. Do zdaj. Imam pare ocen za isti model: (AI ocena, človeška ocena). To je popolna uporaba.
Preprosto povedano, linearna regresija najde ravno črto, ki najbolje ustreza nizu podatkovnih točk. V mojem primeru so podatkovne točke pari (AI ocena, človeška ocena). Če je AI dober sodnik, bi morale njegove ocene imeti linearno razmerje z mojimi ocenami. Na primer, ko AI da 0.2, bi lahko konsistentno dal 0.3. Ko da 0.8, bi lahko dal 0.7. Linearna regresija najde formulo za to črto.
To je uporabno iz dveh razlogov. Prvič, omogoča mi, da treniram majhen model za napovedovanje moje ocene na osnovi ocene AI. Še pomembneje, mi daje vrednost, imenovano R-squared (R²). To mi pove, kako dobro ocene AI napovedujejo človeške ocene. R² vrednosti 1 pomeni popolno napoved; 0 pomeni popolnoma brez korelacije. Bil bi zadovoljen z čimer koli nad 0.4.
Kar sem odkril:
2.5-flash.Po prilagajanju vizualnih pregledov s temi podatki sem znova zagnal benchmarke.

Začetni rezultati so pokazali neko izboljšanje v "pass rate" - število modelov z adherence oceno nad 0.4. Ko sem pa poglobil z extra prompt setom, je bil R² dejansko bližje 0.1 (ali 10%). To je... ni dobro. To pomeni, da je ocena AI slab napovedovalec moje lastne.
Zato sem za zdaj onemogočil vizualne preglede. Ni samo vprašanje čakanja, da se osnovni vision modeli izboljšajo. Obstajajo druge stvari, ki jih moram raziskati, kot je izboljšanje sistemskega prompta za visual check LLM ali renderiranje modela iz več kotov, da dam AI boljši pogled. Dobra novica je, da imam celoten sistem pripravljen, tako da lahko enostavno testiram te ideje in preklopim stikalo, ko bodo pregledi dovolj zanesljivi.
Ta sistem ni popoln, seveda. Testni dataset je majhen, tako da rezultati niso statistično neprebojni, ampak je odličen začetek. Človeška evalvacija sem samo jaz in včasih moja punca, tako da obstaja osebna pristranost. Končno, AI evalvacija je še vedno v delu; R² vrednosti 0.1 kaže, da je še dolga pot.
Še eno opozorilo: ne vse zgodovinske evalvacije so bile konfigurirane identično. Na začetku sem odkril nekaj implementacijskih napak in nekatera izvajanja so uporabljala rahlo različno računovodstvo, tako da so nekateri stroški ali časi napačni. Stran /evals je še vedno uporabna, vendar obravnavaj starejše vnose kot indikativne in ne natančne. Ohranjam jih za potomce in bom začel označevati kot "Legacy", ko se okvir stabilizira, tako da primerjave ostanejo poštene.
Ta evalvacijski sistem je bil ključen za sprejemanje informiranih odločitev. Nadomesti ugibanje s podatkovnim pristopom, kar je bistveno pri delu z veliko spremenljivkami.
Zdaj lahko sistematično testiram hipoteze in kvanificiram vpliv sprememb:
Okvir omogoča metodično, iterativno izboljševanje. Za solo razvijalca, ki gradi kompleksen sistem, robusten testni sistem kot je ta ni samo lepo imeti, ampak nujnost.