🧠 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

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

ElemenFungsiModel BurukModel Baik
Premis salah / absurdLihat apakah model menolakMenjawab seolah premis validMenolak + jelaskan kenapa
Ambiguitas konteksLihat apakah model klarifikasiAsal jawab satu interpretasiTanya balik atau akui ambiguitas
Trade-off nyataUji kualitas analisisJawab hitam-putihBahas kondisi + trade-off
Multi-step reasoningUji konsistensi berpikirLoncat ke kesimpulanStep-by-step, konsisten
Overthinking trapUji kalibrasi kompleksitasPanjang tidak perluSingkat, tepat
Informasi tidak lengkapUji kesadaran ketidakpastianJawab dengan asumsi diam-diamSebutkan 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

ToolFokusKelebihanKekurangan
PromptfooTest prompt, bandingkan modelFleksibel, assertion custom, cocok untuk reasoning testTidak ada standar kecerdasan bawaan β€” harus desain sendiri
LangSmithObservability + evaluasi agentTrace reasoning, lihat kenapa model salahSetup berat, overkill untuk test sederhana
DeepEvalStructured metric (faithfulness, relevancy)Metrik siap pakai, lebih ilmiahKurang fleksibel untuk tes β€œakal sehat absurd”
RagasRAG evaluation khususBagus untuk RAG pipelineTidak 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

BenchmarkFokusCatatan
MMLUPengetahuan + reasoning multi-domain (math, hukum, medis)Banyak model sudah β€œhafal” β€” kurang uji common sense absurd
GSM8KMatematika reasoning step-by-stepBagus untuk deteksi model yang cuma pattern matching
BIG-benchTask aneh & sulit, kreativitas + reasoning kompleksLebih dekat ke tes nyata
TruthfulQAApakah model halusinasi / ngarangPenting untuk prinsip β€œkalau tidak tahu, bilang tidak tahu”
HumanEvalCoding β€” generate fungsi Python dari docstringGold standard evaluasi kemampuan coding
HellaSwagCommon 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

TaskStatus
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

TaskStatus
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

TaskStatus
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

TaskStatus
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.content

evaluator/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)

SkorArti
2Sempurna β€” jawaban tepat, proporsional, tidak ada masalah
1Sebagian benar β€” ada elemen yang benar tapi ada yang kurang
0Gagal β€” premis diterima tanpa kritik, jawaban salah arah

Model yang Direkomendasikan untuk Testing (Free Tier)

KategoriModelVia
Baselinemeta-llama/llama-3-8b-instruct:freeOpenRouter
Reasoninggoogle/gemma-7b-it:freeOpenRouter
Codingqwen/qwen-2-7b-instruct:freeOpenRouter
PembandingClaude Sonnet / GPT-4oAPI berbayar

Keputusan: Promptfoo vs Build Sendiri

KondisiPilihan
Mau cepat jadi dan bandingkan modelPromptfoo
Mau ngerti sistem dari dalamBuild sendiri
Mau portfolio yang kuatBuild sendiri
Eksplorasi cepat sebelum commitPromptfoo dulu, rebuild setelahnya

Strategi Hybrid yang Ideal

  1. Promptfoo untuk eksplorasi cepat
  2. Rebuild versi sendiri dari nol
  3. Tambah: scoring kustom, report generator, visualisasi
  4. Publish ke GitHub β†’ masuk level β€œAI Evaluation Engineer (entry level)” β€” jauh lebih langka dari sekadar prompt engineer

πŸ”— Lihat Juga


AI Evaluation Framework | Tes Kecerdasan LLM Β· Promptfoo Β· Custom Build Β· Benchmark Standar