Miezi minane ndani ya foleni ya kuunganisha (merge queue) ya GitHub Actions inakufundisha kitu ambacho miji ya kulinganisha vipengele (feature comparison matrices) haitawahi kufanya. Framework inaweza kutoa vipimo hamsini, dashibodi nzuri, na nukuu kutoka maabara za utafiti zinazoheshimika. Ikiwa inazuia uwekaji wako (deploy) kwa sababu alama ya "vibe check" imetoka 0.72 hadi 0.68 dhidi ya kodi ile ile, ni mbaya zaidi ya kutokuwa na faida. Inakuwa tishio la moja kwa moja kwa kasi yako ya kutoa bidhaa (shipping velocity).
Hilo ndilo chujio ambalo mrundikano mwingi wa tathmini za LLM hukosa. Wanahesabu uwezo. Mara chache huuliza swali pekee linalojali katika foleni ya kuunganisha: je, ukaguzi huu unapita na kushindwa kwa njia ile ile kila wakati unapofanya kazi?
Nilijifunza hili kwa kufanya kazi ngumu isiyo na starehe. Niliunganisha framework sita za tathmini za LLM za chanzo huru (open-source) kwenye mfumo halisi wa CI pipeline. Zilifanya kazi dhidi ya pull requests za uzalishaji (production) kwa miezi minane. Mbili zilistahili kubaki kama walinzi (gatekeepers). Zingine zilishushwa hadhi na kuwa dashibodi za ushauri, kuhamishiwa kwenye kazi za usiku (nightly jobs), au kuondolewa kabisa. Somo lilikuwa kali na lenye gharama: muundo wa uhakika (deterministic structure) unashinda ubora wa uwezekano (probabilistic quality) unapokuwa unalinda tawi kuu (main branch).
Kazi Halisi ya Mlango wa Kuunganisha (Merge Gate)
Mlango wa CI si mazingira ya utafiti. Ni mlinzi (bouncer). Kusudi lake lote ni kuangalia mabadiliko fulani na kujibu ndiyo au hapana. Ndiyo, PR hii inaweza kujiunga na tawi kuu. Hapana, haiwezi. Jibu hilo linapaswa kufika ndani ya sekunde chache, liwe na gharama ndogo sana, na lisibadilike kinyume cha wakati. Ukirudia pipeline ile ile dhidi ya commit ile ile siku ya Jumanne tulivu na Ijumaa yenye harakati nyingi, matokeo lazima yawe sawa.
Hapa ndipo framework nyingi za tathmini za LLM zinapokwama. Zimeundwa na wanasayansi wa data kwa ajili ya wanasayansi wa data. Zinalenga kutoa maarifa, uchunguzi, na alama zenye utofauti mdogo. Foleni ya kuunganisha inalenga maamuzi ya binary, kasi, na kutokuwa na utofauti usio wa lazima (zero flakiness). Malengo hayo mawili yanaingiliana kwa sehemu tu.
Kwa Nini LLM-as-Judge Inavuruga Foleni
Zana zilizoanguka katika jaribio langu zilikuwa na kosa moja la usanifu: zilitegemea sana wito wa LLM-as-judge kama utaratibu mkuu wa mlango.
Prompt ya LLM-as-judge huomba modeli kutoa alama kwa matokeo kwenye kiwango cha moja hadi kumi, au kuchagua jibu bora kati ya mawili, au kutathmini usahihi wa ukweli. Mbinu hiyo ni yenye nguvu kwa kuelewa mienendo ya ubora. Ni sumu kwa ukaguzi wa CI unaozuia (blocking CI check). Ingizo lile lile linaweza kutoa alama tofauti siku tofauti kwa sababu ya temperature, toleo la modeli, na mpangilio wa prompt vyote huleta kelele (noise). Wakati alama hiyo inapounganishwa na kiwango kigumu (hard threshold) na kodi ya kutoka (exit code) iliyowekwa, foleni yako inazuiliwa na vitu visivyoeleweka (ghosts).
Mapungufu yanajirudia kwa haraka. Ukaguzi usio wa uhakika (nondeterministic check) husababisha foleni kuzidiwa. Wahandisi wanajifunza kujaribu tena mpaka namba ipatikane kwa upendeleo, jambo ambalo huifundisha timu kupuuza ujenzi (builds) wenye rangi nyekundu. Gharama za token zinaongezeka kwa sababu kila jaribio jipya hutumia zaidi API credits. Mbaya zaidi, ishara inakuwa haina maana. Ujenzi mwekundu unapaswa kumaanisha "umeleta hitilafu (bug)." Ikiwa inamaanisha "model ya jaji imeamka ikiwa na ushabiki leo," uaminifu unapotea.
Kile Ambacho Walionusurika Wanatofautisha
Promptfoo na DeepEval vilinusurika kwa sababu vinachukulia ukaguzi wa uhakika (deterministic checks) kama kipaumbele cha kwanza na alama za jaji za LLM kama ishara za pili zisizozuia. Vinatambua kuwa mlango unahitaji kodi ya kutoka (exit code), si namba ya floating-point yenye maoni.
Promptfoo, iliyotolewa chini ya leseni ya MIT, imeundwa kwa ajili ya command line. Inafanya uthibitisho (assertions) kama regex matches, JSON schema validation, contains checks, na ulinganishaji sahihi wa maandishi (exact string comparisons). Hizi si mambo ya kifahari. Ni amri za grep na jq zilizoboreshwa. Hiyo ndiyo sababu hasa zinafanya kazi katika CI. Regex ama inalingana au hailingani. JSON schema ama inathibitisha au inatoa kosa. Promptfoo inarudisha Unix exit codes za kawaida, hivyo GitHub Actions inaelewa asili yake wakati wa kusimamisha kuunganisha (merge). Haitegemei lugha yoyote (language-agnostic) kwa sababu inafanya kazi kama zana ya CLI. Huhitaji kusakinisha mfumo wa Python ndani ya repo ya huduma ya Node.js ili tu kuthibitisha matokeo.
DeepEval, iliyopewa leseni chini ya Apache 2.0, ni chaguo kwa timu za Python. Inaunganishwa kama pytest. Unaandika majaribio katika sintaksi inayofahamika, na kushindwa kunazuia seti nzima (suite) kiasili. DeepEval inatoa orodha kubwa ya vipimo, lakini jambo muhimu ni kwamba lazima uzitumie kwa uangalifu. Tegemea vipimo vya uhakika (deterministic) au vya kulinganisha (heuristic) kwa ajili ya milango. Ikiwa utatumia G-Eval au wapimaji wengine wanaotegemea jaji, uwaweke kwenye vizalishaji vya ripoti zisizozuia badala ya hard asserts. Inapotumiwa kwa njia hii, DeepEval inakupa urahisi wa matumizi wa mfumo wa majaribio bila kutokuwa thabiti kwa daftari la utafiti (research notebook).
Mahali Ambapo Nyingine Nne Zinapofaa
Framework nne ambazo hazikunusurika kama milango bado zina thamani. Zinapaswa tu kuwa mahali pengine katika mfululizo wako wa zana (toolchain).
Future AGI (Apache 2.0) inakuja na zaidi ya vipimo hamsini na inawalenga timu zinazounda SDK maalum. Vipimo hivi ni vya kina. Tatizo ni kwamba zana hii inatarajia uandike mfumo wako mwenyewe wa kuendesha (harness) ili kuitumia kwenye foleni ya CI. Katika muktadha wa utafiti, huo ni mabadilishano ya kuridhisha. Katika foleni ya kuunganisha (merge queue), kila tabaka la uunganishaji wa kustom ni chanzo kipya cha kutokuwa thabiti. Ni injini ya tathmini yenye uwezo, lakini si msimamizi wa mlango (gatekeeper) aliye tayari.
RAGAS (Apache 2.0) ni bora katika kupima ubora wa retrieval-augmented generation. Vipimo vyake vya uaminifu (faithfulness) na uhusiano wa jibu (answer relevance) ni muhimu kweli kwa kuelewa jinsi msingi wa maarifa unavyofanya kazi baada ya muda. Kwa bahati mbaya, vipimo hivyo vinategemea sana majaji wa LLM. Ni bora kwa kazi ya ubora ya usiku inayoweka mwelekeo kwenye Slack. Ni walinzi wabaya kwa pull request. Ihamishe RAGAS kwenye mtiririko wako wa uchambuzi uliopangwa, si kwenye vizuizi vyako vya kuunganisha (merge blockers).
Arize Phoenix inatumia Elastic License 2.0 na iko katika mwelekeo tofauti kabisa. Inaunganisha ufuatiliaji wa kusambazwa (distributed tracing) na tathmini, ikikupa uwezo wa kuona (observability) kwa nini modeli ilitenda kwa njia fulani. Unahitaji hii unapotatua hitilafu ya uzalishaji (production incident) au unapotafuta chanzo cha hallucination hadi kwenye kipande kibaya cha upatikanaji (retrieval chunk). Hutaki zana ya ufuatiliaji kuamua ikiwa tawi la kipengele (feature branch) la mwanachama mdogo wa timu ya watengenezaji linaweza kupelekwa hewani. Usanifu wake umeundwa kwa ajili ya ufahamu, si kwa ajili ya milango ya kibiashara (binary gates).
MLflow Evaluate (Apache 2.0) inatokana na asili yake ya ufuatiliaji wa majaribio. Ni nzito. Kuivuta kwenye picha nyepesi ya CI huongeza muda wa kuanza na utegemezi zinazochelewesha kila kazi. Ikiwa ni lazima uitumie ndani ya mtiririko (pipeline), shikamana na vipimo vyake vya kimsingi (heuristic metrics) kwa ajili ya ukaguzi wa muundo. Hata hivyo, unakuwa unapambana na usanifu wa msingi wa mfumo huo. MLflow inataka kurekodi mzunguko (log runs) na kulinganisha majaribio kwa wiki kadhaa. Foleni ya kuunganisha (merge queue) inataka uamuzi ndani ya chini ya dakika moja.
Kanuni za Vitendo za Udhibiti (Gating)
Kama hutachukua kitu kingine chochote kutoka kwenye jaribio hili, chukua kanuni hizi tatu.
Kwanza, dhibiti muundo, si hisia (vibe). Unaweza kulazimisha kuwa matokeo ni JSON halali. Unaweza kulazimisha kuwa yana funguo (keys) zinazohitajika. Unaweza kulazimisha lebo ya uainishaji iwe katika enum inayoruhusiwa. Ukaguzi huu ni wa haraka, wa gharama nafuu, na unaotabirika (deterministic). Huwezi kulazimisha kwa uhakika kuwa muhtasari ni "rafiki" au kwamba uandishi upya ni "mbunifu." Sifa hizo ni za mapitio ya kibinadamu au tathmini ya kikundi ya mara kwa mara, si katika milango ya kiotomatiki.
Pili, ikiwa alama inabadilika kwenye ingizo lisilobadilika, ipunguze daraja mara moja. Endesha seti yako ya tathmini mara mbili dhidi ya artifact ile ile. Ikiwa kipimo chochote kitabadilika kutoka kufaulu kwenda kufeli, kimepoteza haki yake ya kuzuia kuunganisha (merge). Ihamishe kwenye dashibodi ya ushauri ambapo tofauti (variance) inatarajiwa na inavumilika.
Tatu, heshimu nambari ya kutoka (exit code). Ripoti nzuri ya HTML yenye bango jekundu haizuia kuunganisha. Exit code isiyo sifuri huzuia. Zana yako ya tathmini lazima izungumze lugha asilia ya jukwaa lako la CI. Standard out ni kwa ajili ya binadamu. Exit codes ni kwa ajili ya mashine.
Hitimisho
Bado tuko mapema katika kuelewa jinsi ya kupima programu zinazoendeshwa na LLM. Kishawishi ni kutendea tathmini kama mwongozo wa ufaulu wa kibinadamu: yenye nuances, muktadha, na upendeleo kidogo. Hiyo inafanya kazi katika karatasi ya utafiti. Inafeli katika foleni ya kuunganisha (merge queue).
Baada ya miezi minane ya trafiki ya uzalishaji, mtiririko wangu sasa unatumia Promptfoo kwa ajili ya uthibitisho wa muundo na schema kwenye huduma mbalimbali, na DeepEval kwa ajili ya ukaguzi wa kitabia upande wa Python unaolingana vizuri na hali ya kufaulu-kufeli. Kila kitu kingine kinaripoti kwenye dashibodi za usiku. Foleni ni thabiti. Ishara ni safi. Timu inaamini build nyekundu tena.
Huhitaji vipimo vingi zaidi kwenye mlango wako. Unahitaji vipimo vichache vinavyosema ukweli kila wakati.
Kulingana na majaribio na maandishi ya asili yaliyoshirikiwa kwenye Dev.to. Kwa majadiliano zaidi kuhusu ujenzi wa mifumo ya AI inayotegemeka, jiunge na jumuiya ya GyaanSetu kwenye Telegram.
