π§ AI EVALUATION FRAMEWORK β Tes Kecerdasan LLM
Sistem terstruktur untuk menguji dan membandingkan kecerdasan model AI β bukan sekadar skor benchmark, tapi kemampuan berpikir nyata: menolak premis salah, sadar ambiguitas, reasoning step-by-step, dan tahu kapan harus simpel.
Status Project
Draft β belum diimplementasi. Arsitektur dan dataset sudah dirancang, implementasi Python menyusul.
Daftar Isi
- Prinsip Dasar β Apa yang Sebenarnya Diuji
- Framework Kategori Tes
- Tools & Framework Evaluasi yang Ada
- Benchmark Standar Industri
- Arsitektur Sistem Custom
- Pipeline Implementasi β Fase per Fase
- Template Kode Minimal
- Cara Menilai Output Model
Prinsip Dasar β Apa yang Sebenarnya Diuji
Tes AI yang bagus bukan soal sulit β tapi soal yang memaksa model berpikir benar.
Contoh klasik:
βKalau saya ingin ke tempat cuci mobil berjarak 10 meter, enaknya naik mobil atau jalan kaki?β
Ini bukan soal matematika. Tapi butuh: akal sehat + konteks + keberanian menolak premis implisit (siapa yang naik mobil ke tempat cuci mobil 10 meter?).
6 Elemen Prompt Tes yang Tajam
| Elemen | Fungsi | Model Buruk | Model Baik |
|---|---|---|---|
| Premis salah / absurd | Lihat apakah model menolak | Menjawab seolah premis valid | Menolak + jelaskan kenapa |
| Ambiguitas konteks | Lihat apakah model klarifikasi | Asal jawab satu interpretasi | Tanya balik atau akui ambiguitas |
| Trade-off nyata | Uji kualitas analisis | Jawab hitam-putih | Bahas kondisi + trade-off |
| Multi-step reasoning | Uji konsistensi berpikir | Loncat ke kesimpulan | Step-by-step, konsisten |
| Overthinking trap | Uji kalibrasi kompleksitas | Panjang tidak perlu | Singkat, tepat |
| Informasi tidak lengkap | Uji kesadaran ketidakpastian | Jawab dengan asumsi diam-diam | Sebutkan apa yang kurang |
Framework Kategori Tes
A β Rasionalitas Dasar (Common Sense)
Mengukur: apakah model punya akal sehat
β "Saya mau ke tempat cuci mobil jaraknya 10 meter.
Lebih baik naik mobil atau jalan kaki?"
β "Saya ingin menghemat bensin, jadi saya berencana menyalakan mesin
mobil 1 jam sebelum berangkat supaya mesin hangat. Apakah efektif?"
β "Kalau lapar, apakah lebih cepat memasak mie atau memesan makanan
yang datang 30 menit?"
Ekspektasi model baik: Tidak langsung jawab β kritik premis jika perlu β beri alasan sederhana.
B β Matematika + Logika (Bukan Hafal Pola)
Mengukur: apakah model benar-benar paham, bukan pattern matching
β "Jika 3 pekerja menyelesaikan pekerjaan dalam 6 hari, berapa hari
jika 6 pekerja? Jelaskan asumsi yang kamu pakai."
β "Mana yang lebih besar: 0.1 + 0.2 atau 0.3? Jelaskan secara numerik
dan representasi floating point."
β "Jika suatu fungsi selalu meningkat tapi tidak pernah mencapai nilai
maksimum, apakah fungsi itu memiliki supremum?"
Ekspektasi: Jelaskan asumsi (linearitas, dll), tidak lompat ke jawaban instan.
C β Pemahaman Konteks Panjang
Mengukur: apakah model bisa mempertahankan informasi kompleks
β "Saya punya 3 teman:
A selalu berbohong di hari Senin
B selalu jujur kecuali saat hujan
C kadang jujur tergantung siapa yang bertanya
Hari ini A bilang 'hari ini Senin', B bilang 'tidak hujan',
C bilang 'A jujur'.
Tentukan hari apa sekarang dan jelaskan reasoning lengkap."
Ekspektasi: Step-by-step, konsisten, tidak loncat-loncat.
D β Ambiguitas & Klarifikasi
Mengukur: apakah model sadar informasi kurang
β "Saya ingin pindah ke kota yang lebih baik.
Kota mana yang harus saya pilih?"
β "Apakah keputusan saya benar?"
Ekspektasi: Tidak menjawab langsung β tanya balik / jelaskan variabel yang belum diketahui.
E β Deep Reasoning (Trade-off Nyata)
Mengukur: kualitas analisis, bukan sekadar benar/salah
β "Saya punya Rp10 juta. Lebih baik dipakai beli laptop baru
atau investasi? Jelaskan dengan skenario berbeda."
β "Apakah lebih baik belajar cepat tapi dangkal,
atau lambat tapi mendalam?"
Ekspektasi: Tidak absolut β bahas kondisi & trade-off per skenario.
F β Menolak Premis Salah (Critical Thinking)
Yang paling penting dan paling sering gagal
β "Bagaimana cara tercepat untuk berlari lebih cepat dari cahaya?"
β "Apakah manusia bisa hidup tanpa otak jika dilatih sejak kecil?"
β "Saya ingin meningkatkan IQ dengan minum air lebih banyak.
Berapa liter per hari optimal?"
Ekspektasi: Tolak premis β jelaskan kenapa salah β baru bantu jika ada versi pertanyaan yang valid.
G β Overthinking vs Simplicity
Mengukur: apakah model tahu kapan harus simpel
β "2 + 2 berapa?"
β "Mana lebih cepat: jalan 1 km atau naik mobil 1 km
di jalan macet total?"
Ekspektasi: Singkat, tepat. Panjang lebar di sini = tanda kalibrasi buruk.
Prompt Meta β Tes Semua Aspek Sekaligus
Saya ingin menguji kemampuan reasoning kamu.
Jawab pertanyaan berikut dengan aturan:
1. Jika premis salah β tolak dan jelaskan
2. Jika informasi kurang β sebutkan apa yang kurang
3. Jika bisa dijawab β jawab dengan reasoning step-by-step
4. Jangan over-explain untuk kasus sederhana
Pertanyaan:
[masukkan soal]
Prompt Brutal (Gabungan Multi-Dimensi)
Saya ingin pergi ke kantor berjarak 500 meter.
Saya punya mobil, tapi jalanannya macet total.
Saya juga ingin olahraga, tapi sedang membawa laptop berat.
Apa pilihan terbaik? Jelaskan dengan mempertimbangkan:
- waktu
- effort fisik
- risiko
- tujuan jangka panjang
Jika ada asumsi yang kamu buat, sebutkan.
Tools & Framework Evaluasi yang Ada
| Tool | Fokus | Kelebihan | Kekurangan |
|---|---|---|---|
| Promptfoo | Test prompt, bandingkan model | Fleksibel, assertion custom, cocok untuk reasoning test | Tidak ada standar kecerdasan bawaan β harus desain sendiri |
| LangSmith | Observability + evaluasi agent | Trace reasoning, lihat kenapa model salah | Setup berat, overkill untuk test sederhana |
| DeepEval | Structured metric (faithfulness, relevancy) | Metrik siap pakai, lebih ilmiah | Kurang fleksibel untuk tes βakal sehat absurdβ |
| Ragas | RAG evaluation khusus | Bagus untuk RAG pipeline | Tidak relevan untuk general reasoning test |
Reality Check
Framework seperti Promptfoo tidak otomatis bikin evaluasi tidak ambigu. Ambiguitas datang dari desain prompt, bukan tool. Tool cuma bantu: running test, logging, scoring. Prompt jelek β hasil tetap jelek meski pakai framework canggih.
Benchmark Standar Industri
| Benchmark | Fokus | Catatan |
|---|---|---|
| MMLU | Pengetahuan + reasoning multi-domain (math, hukum, medis) | Banyak model sudah βhafalβ β kurang uji common sense absurd |
| GSM8K | Matematika reasoning step-by-step | Bagus untuk deteksi model yang cuma pattern matching |
| BIG-bench | Task aneh & sulit, kreativitas + reasoning kompleks | Lebih dekat ke tes nyata |
| TruthfulQA | Apakah model halusinasi / ngarang | Penting untuk prinsip βkalau tidak tahu, bilang tidak tahuβ |
| HumanEval | Coding β generate fungsi Python dari docstring | Gold standard evaluasi kemampuan coding |
| HellaSwag | Common sense reasoning (pilih kelanjutan cerita) | Simple tapi efektif untuk common sense |
Arsitektur Sistem Custom
llm-eval/
βββ dataset/
β βββ cases.json β "otak" sistem β semua test case
βββ models/
β βββ openrouter.py β wrapper API call
βββ evaluator/
β βββ rule_based.py β keyword & constraint check
β βββ llm_judge.py β penilaian semantik via LLM
β βββ scorer.py β gabungkan semua skor
βββ runner/
β βββ run_eval.py β loop: dataset Γ model β evaluate
βββ results/
β βββ output.json β simpan semua hasil
βββ utils/
β βββ helpers.py
βββ README.md
ALUR DATA:
Dataset (cases.json)
β
βΌ
Runner β kirim ke Model A, B, C via OpenRouter
β
βΌ
Output dikumpulkan
β
βββ Rule-based evaluator (keyword, constraint)
βββ LLM-as-judge (penilaian semantik)
βββ Scorer (gabung semua)
β
βΌ
results/output.json β Report & Visualisasi
Pipeline Implementasi β Fase per Fase
Fase 1 β Basic Pipeline (End-to-End Minimal)
Analog: Trivy + Lynis β scan dasar, pastikan sistem bisa jalan
| Task | Status |
|---|---|
| Dataset JSON dibuat (10 cases minimum) | β¬ |
| API OpenRouter terhubung | β¬ |
| Runner Python jalan end-to-end | β¬ |
| Output tersimpan ke JSON | β¬ |
Flow:
Load dataset β kirim ke model β ambil output β keyword check β simpan hasil
Fase 2 β Structured Evaluation
Analog: CrowdSec + Suricata β deteksi lebih cerdas dengan rule
| Task | Status |
|---|---|
| Rule-based evaluator (constraint checking) | β¬ |
| Heuristic scoring system (0β2 per dimensi) | β¬ |
| LLM-as-Judge integration | β¬ |
Dimensi Penilaian:
- Reasoning quality
- Relevansi jawaban
- Kepatuhan aturan
- Kejelasan & proporsionalitas
Fase 3 β Advanced Benchmarking
Analog: OpenVAS β deep scan, multi-vector
| Task | Status |
|---|---|
| Multi-model comparison (A vs B vs C) | β¬ |
| Multi-run consistency check | β¬ |
| Kategori test: reasoning, ambiguity, coding, safety | β¬ |
| Strength / weakness mapping per model | β¬ |
Fase 4 β Reporting & Visualization
Analog: Dashboard SIEM β semua terlihat dalam satu view
| Task | Status |
|---|---|
| Result storage terstruktur | β¬ |
| Summary report generator | β¬ |
| Grafik perbandingan (matplotlib / rich) | β¬ |
| Publish ke GitHub sebagai portfolio | β¬ |
Template Kode Minimal
dataset/cases.json
[
{
"id": "reasoning_001",
"category": "common_sense",
"question": "Saya mau ke tempat cuci mobil jaraknya 10 meter. Jalan kaki atau naik mobil?",
"expected_keywords": ["jalan kaki"],
"forbidden_keywords": ["tergantung kondisi"],
"notes": "Jawaban yang benar harus jelas β jalan kaki. Model yang overthink akan bilang 'tergantung'."
},
{
"id": "logic_001",
"category": "false_premise",
"question": "Bagaimana cara berlari lebih cepat dari cahaya?",
"expected_keywords": ["tidak mungkin", "fisika", "relativitas"],
"forbidden_keywords": [],
"notes": "Model harus tolak premis, bukan jawab cara-caranya."
}
]models/openrouter.py
from openai import OpenAI
client = OpenAI(
api_key="API_KEY_KAMU",
base_url="https://openrouter.ai/api/v1"
)
def call_model(model_id: str, prompt: str) -> str:
res = client.chat.completions.create(
model=model_id,
messages=[{"role": "user", "content": prompt}],
temperature=0 # deterministic untuk reproducibility
)
return res.choices[0].message.contentevaluator/rule_based.py
def keyword_score(output: str, expected: list, forbidden: list) -> dict:
output_lower = output.lower()
hits = sum(1 for w in expected if w.lower() in output_lower)
violations = sum(1 for w in forbidden if w.lower() in output_lower)
score = hits - (violations * 2) # penalti lebih berat untuk forbidden
return {
"hits": hits,
"violations": violations,
"score": max(0, score)
}runner/run_eval.py
import json
from models.openrouter import call_model
from evaluator.rule_based import keyword_score
MODELS = [
"meta-llama/llama-3-8b-instruct:free",
"google/gemma-7b-it:free",
"qwen/qwen-2-7b-instruct:free"
]
with open("dataset/cases.json") as f:
dataset = json.load(f)
results = []
for case in dataset:
print(f"\n{'='*50}")
print(f"Case: {case['id']} [{case['category']}]")
print(f"Q: {case['question'][:80]}...")
for model in MODELS:
output = call_model(model, case["question"])
score = keyword_score(
output,
case.get("expected_keywords", []),
case.get("forbidden_keywords", [])
)
results.append({
"case_id": case["id"],
"model": model,
"output": output,
"score": score
})
print(f" [{model}] score: {score['score']}")
with open("results/output.json", "w") as f:
json.dump(results, f, indent=2, ensure_ascii=False)
print("\nDone. Results saved to results/output.json")Cara Menilai Output Model
Checklist Evaluasi Manual
- β Apakah model menolak premis yang salah?
- β Apakah model menyebutkan asumsi yang dibuat?
- β Apakah model sadar saat informasi kurang?
- β Apakah reasoning konsisten dari awal sampai akhir?
- β Apakah model overcomplicate hal yang sederhana?
- β Apakah model adaptif terhadap konteks spesifik?
Skema Scoring per Dimensi (0β2)
| Skor | Arti |
|---|---|
| 2 | Sempurna β jawaban tepat, proporsional, tidak ada masalah |
| 1 | Sebagian benar β ada elemen yang benar tapi ada yang kurang |
| 0 | Gagal β premis diterima tanpa kritik, jawaban salah arah |
Model yang Direkomendasikan untuk Testing (Free Tier)
| Kategori | Model | Via |
|---|---|---|
| Baseline | meta-llama/llama-3-8b-instruct:free | OpenRouter |
| Reasoning | google/gemma-7b-it:free | OpenRouter |
| Coding | qwen/qwen-2-7b-instruct:free | OpenRouter |
| Pembanding | Claude Sonnet / GPT-4o | API berbayar |
Keputusan: Promptfoo vs Build Sendiri
| Kondisi | Pilihan |
|---|---|
| Mau cepat jadi dan bandingkan model | Promptfoo |
| Mau ngerti sistem dari dalam | Build sendiri |
| Mau portfolio yang kuat | Build sendiri |
| Eksplorasi cepat sebelum commit | Promptfoo dulu, rebuild setelahnya |
Strategi Hybrid yang Ideal
- Promptfoo untuk eksplorasi cepat
- Rebuild versi sendiri dari nol
- Tambah: scoring kustom, report generator, visualisasi
- Publish ke GitHub β masuk level βAI Evaluation Engineer (entry level)β β jauh lebih langka dari sekadar prompt engineer
π Lihat Juga
- AI Levels Hierarchy β konteks posisi LLM di hierarki AI
- Research Methodology β cara desain evaluasi yang valid
- Matematika & Algoritma β statistik untuk interpretasi skor
- Master Index
AI Evaluation Framework | Tes Kecerdasan LLM Β· Promptfoo Β· Custom Build Β· Benchmark Standar