LLM Eval Harness — Diff Regresi Prompt untuk CI
179 tes offline; terverifikasi live terhadap DeepSeek, gemini-2.5-flash-lite, dan endpoint kompatibel Anthropic

- Proyek open source
- Evaluasi & Keamanan AI
- Indonesia
- 16 Agustus 2026
⚠ Ini proyek open source, bukan pekerjaan klien. Angka demo di bawah dihasilkan mock provider dan mock judge deterministik — ia mendeskripsikan fixture, bukan akurasi sistem nyata mana pun. Angka dari run live ditandai secara eksplisit.
Masalahnya
Pertanyaan yang harus dijawab sebelum sebuah perubahan prompt dikirim hanya satu: apakah ini membuat sesuatu menjadi lebih buruk? Kebanyakan tooling eval melaporkan satu angka per run — dan satu angka memberi tahu arah perubahan, tidak pernah bentuknya. Perubahan yang menaikkan mean tetap bisa merusak tiga kasus yang paling dipedulikan pelanggan terbesar Anda; perubahan yang menurunkan mean bisa jadi keputusan yang benar jika ia menghilangkan halusinasi.
Yang dibangun
Harness evaluasi golden-dataset: suite didefinisikan dalam YAML, dijalankan
terhadap endpoint OpenAI-compatible mana pun, dinilai dengan scorer deterministik
(regex, exact match, JSON Schema, budget latensi/biaya) dan judge LLM terstruktur
(faithfulness, relevance, rubric milik sendiri). Judge selalu meminta output
terstruktur {"score": 0..1, "reasoning": "..."} yang divalidasi sebelum dipakai
— tidak ada yang meng-scrape “Score: 4/5” dari prosa.
Inti alatnya adalah llm-eval diff: dua run dicocokkan kasus per kasus, tiap
kasus diklasifikasikan regressed / improved / unchanged terhadap pita toleransi,
dan kebijakan gate yang Anda pilih menggagalkan build. Gerak yang lebih kecil dari
toleransi dilaporkan sebagai unchanged, karena alat yang berteriak “regresi” atas
jitter judge adalah alat yang akan diabaikan orang. Artefak run adalah JSON polos
ber-schema_version, jadi baseline bisa diarsip di CI dan dibandingkan berminggu-
minggu kemudian.
Demo yang sengaja jujur
make demo menjalankan suite 6 kasus terhadap prompt v1, lalu v2, lalu
men-diff keduanya. v2 menambahkan instruksi grounding dan memperbaiki kasus
halusinasi (student-discount, +0,450) — tapi mean justru turun 0,917 → 0,860
karena dua jawaban yang tadinya benar menjadi terlalu ringkas untuk dinilai
grounded. Tiga kasus regresi, satu membaik, dua tidak berubah; gate gagal dengan
exit code 1 dan CI memblokir merge. Temuan spesifik itu — pertahankan instruksi
grounding, setel ulang instruksi keringkasan — tidak terlihat di agregat.
Mock judge menilai grounding dari overlap kata dengan konteks, sehingga jawaban ringkas ter-skor lebih rendah bahkan ketika benar. Itu properti fixture offline, bukan klaim tentang judge sungguhan — dan sengaja dipertahankan karena menghasilkan hasil campuran yang jujur, bukan demo di mana prompt baru memenangkan segalanya.
Yang ditemukan saat live
Adapter openai diverifikasi live terhadap endpoint OpenAI-compatible DeepSeek,
gemini terhadap gemini-2.5-flash-lite, dan anthropic terhadap permukaan
Anthropic-compatible DeepSeek — semuanya pada 2026-08-16; api.anthropic.com sendiri
dinyatakan belum teruji. Run live pertama menemukan bug yang tidak bisa ditemukan
mock: fallback JSON-mode yang mati karena mencocokkan prosa error satu vendor, dan
model reasoning yang menghabiskan max_tokens sebelum menjawab sehingga respons
judge terpotong — yang tampak seperti varians judge (tiga run identik ter-skor
0,931 / 1,000 / 0,986) padahal itu bug token budget, dan repeat sampling justru
memperburuknya. Keduanya kini punya tes regresi.
Satu pelajaran lagi dari run live: suite enam kasus yang sama dinilai 1,000 oleh
deepseek-v4-flash dan 0,944 oleh gemini-2.5-flash-lite. Model judge adalah
bagian dari definisi eval Anda, bukan detail yang bisa ditukar — itulah mengapa
model judge dicatat di setiap artefak run.
Menjalankannya sendiri
make install
make demo # demo regresi A/B di atas, offline, tanpa API key
make test # 179 tes, offline
Repo publik: github.com/ridwanspace/llm-eval-harness.
Ada proses serupa di tim Anda?
Ceritakan alur kerja dan kendalanya. Kita mulai dengan lingkup yang bisa dijelaskan dan diperiksa.


