0Pricing
AI Prompt Engineering · Pelajaran

Menggunakan LLM untuk Mengevaluasi Output LLM

Pelajari alasan penilai berbasis LLM berfungsi dan bagian yang gagal dibandingkan dengan evaluasi manusia.

Menggunakan LLM untuk Mengevaluasi Output LLM adalah pelajaran AI Prompt Engineering gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Prompt Engineering, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Mengapa Menggunakan LLM sebagai Penilai?

Metrik evaluasi tradisional — BLEU, ROUGE, kecocokan persis — berfungsi untuk keluaran terstruktur, tetapi gagal mengukur kualitas bernuansa seperti kebermanfaatan, keakuratan, nada, dan kreativitas.

Evaluasi manusia mampu menangkap nuansa, tetapi lambat dan mahal. LLM sebagai penilai menawarkan jalan tengah: evaluasi otomatis yang memahami makna semantik, konteks, dan kualitas subjektif — dalam skala besar dan dengan biaya rendah.

Mengapa Penilai LLM Berfungsi

Penilai LLM berhasil karena memiliki pemahaman bahasa yang sama dengan model yang dievaluasi. Penilai tersebut dapat menilai:

  • Apakah respons akurat secara faktual, bukan hanya mirip secara leksikal dengan referensi
  • Apakah respons bermanfaat untuk tujuan yang dinyatakan
  • Apakah nadanya sesuai dengan persyaratan
  • Apakah sebuah rangkuman mencakup poin-poin utama

Inilah kualitas yang tidak dapat diukur oleh metrik pencocokan string sederhana.

Penilai LLM Sederhana

Penilai LLM paling dasar: minta model menilai respons pada skala numerik disertai justifikasi singkat. Inilah dasar yang digunakan oleh semua pola penilai yang lebih canggih.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def simple_llm_judge(question, response, criterion):
    judge_prompt = (
        f'Rate the following response on {criterion} from 1 to 5.\n\n'
        f'Question: {question}\n'
        f'Response: {response}\n\n'
        f'Return JSON: {{"score": <1-5>, "reason": "<one sentence>"}}'
    )
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=100,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    try:
        result = json.loads(r.content[0].text)
        return result['score'], result['reason']
    except Exception:
        return None, r.content[0].text

score, reason = simple_llm_judge(
    question='What is recursion in programming?',
    response='Recursion is when a function calls itself.',
    criterion='clarity and completeness'
)
print(f'Score: {score}/5 — {reason}')

Kegagalan Penilai LLM: Bias Posisi

Bias posisi: Saat disajikan dua respons (A dan B), penilai LLM cenderung memilih respons yang muncul lebih dahulu — terlepas dari kualitasnya. Berbagai studi menunjukkan bahwa hal ini memengaruhi 60–70% perbandingan berpasangan saat menggunakan prompt penilai yang naif.

Artinya, urutan penyajian pilihan dapat mengubah keputusan penilai.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def demonstrate_position_bias(question, response_a, response_b):
    def ask_judge(first, second, order):
        prompt = (
            f'Question: {question}\n\n'
            f'Response 1: {first}\n\n'
            f'Response 2: {second}\n\n'
            f'Which response is better? Reply with 1 or 2.'
        )
        r = client.messages.create(
            model='claude-opus-4-5',
            max_tokens=10,
            messages=[{'role': 'user', 'content': prompt}]
        )
        choice = r.content[0].text.strip()
        # Map back to original labels
        if order == 'AB':
            return 'A' if choice == '1' else 'B'
        else:  # BA
            return 'B' if choice == '1' else 'A'

    result_ab = ask_judge(response_a, response_b, 'AB')
    result_ba = ask_judge(response_b, response_a, 'BA')

    print(f'Order A-B: Judge picked {result_ab}')
    print(f'Order B-A: Judge picked {result_ba}')
    if result_ab != result_ba:
        print('Position bias detected: different results!')

    return result_ab, result_ba

Kegagalan Penilai LLM: Bias Panjang

Bias panjang: Penilai LLM cenderung memberikan nilai lebih tinggi pada respons yang lebih panjang dan terperinci — bahkan ketika respons yang ringkas secara objektif lebih baik. Respons yang menggunakan 400 kata untuk menyampaikan hal yang dapat dijelaskan dengan 50 kata sering mendapat nilai lebih tinggi daripada versi ringkasnya.

Kurangi bias ini dengan menginstruksikan penilai secara eksplisit untuk mengurangi nilai bagi panjang yang tidak perlu.

import anthropic

client = anthropic.Anthropic(api_key='sk-ant-...')

def length_aware_judge(question, response):
    judge_prompt = (
        f'Evaluate this response for quality. Be aware of verbosity bias: '
        f'do NOT score longer responses higher just because they are longer.\n\n'
        f'Question: {question}\n'
        f'Response: {response}\n\n'
        f'Evaluate on:\n'
        f'1. Accuracy (does it correctly answer the question?)\n'
        f'2. Conciseness (does it avoid unnecessary filler?)\n'
        f'3. Helpfulness (does it serve the user well?)\n\n'
        f'Penalize responses that add filler, repetition, or irrelevant information.\n'
        f'Score each 1-5 and provide an overall score. Return JSON.'
    )
    r = client.messages.create(
        model='claude-opus-4-5',
        max_tokens=200,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    print(r.content[0].text)

Kegagalan Penilai LLM: Preferensi terhadap Diri Sendiri

Bias preferensi diri: Saat Claude menilai dua respons, model tersebut cenderung memilih respons yang mirip dengan gaya Claude. Saat GPT-4 menilai, model tersebut cenderung memilih respons yang mirip dengan gaya GPT-4. Ini adalah bias sistematis yang memengaruhi semua penilai LLM.

Mitigasi: gunakan beberapa model berbeda sebagai penilai dan gabungkan nilainya. Ketidaksepakatan menandakan kasus yang berada di batas dan memerlukan peninjauan manusia.

import anthropic
import openai

anthropic_client = anthropic.Anthropic(api_key='sk-ant-...')
openai_client = openai.OpenAI(api_key='sk-...')

def multi_model_judge(question, response):
    judge_prompt = (
        f'Rate this response 1-10 for overall quality.\n'
        f'Q: {question}\nA: {response}\n'
        f'Reply with only a number.'
    )

    # Judge 1: Claude
    r_claude = anthropic_client.messages.create(
        model='claude-opus-4-5',
        max_tokens=10,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    score_claude = float(r_claude.content[0].text.strip())

    # Judge 2: GPT-4o
    r_gpt = openai_client.chat.completions.create(
        model='gpt-4o',
        max_tokens=10,
        messages=[{'role': 'user', 'content': judge_prompt}]
    )
    score_gpt = float(r_gpt.choices[0].message.content.strip())

    avg = (score_claude + score_gpt) / 2
    print(f'Claude judge: {score_claude}, GPT judge: {score_gpt}, Average: {avg}')
    if abs(score_claude - score_gpt) > 2:
        print('WARNING: High disagreement — consider human review')
    return avg

Inflasi Nilai

Inflasi nilai: Penilai LLM cenderung memberikan nilai tinggi (4–5 dari 5) kepada sebagian besar respons, sehingga distribusi nilai menjadi terlalu rapat dan sulit membedakan respons yang baik dari yang sangat baik. Respons yang seharusnya bernilai 3/5 sering mendapat nilai 4–4,5/5.

Perbaiki dengan menggunakan rubrik yang memaksa kalibrasi, atau gunakan penilaian relatif (berpasangan), bukan penilaian absolut.

# Anti-inflation judge prompt with explicit score anchors
CALIBRATED_JUDGE_PROMPT = (
    'Rate this response 1-5 using these STRICT score definitions:\n'
    '1 = Completely wrong, harmful, or completely off-topic\n'
    '2 = Partially relevant but contains significant errors or omissions\n'
    '3 = Correct and addresses the question but lacks depth or precision\n'
    '4 = Correct, reasonably complete, and clearly expressed\n'
    '5 = Exceptional: correct, complete, insightful, and concise\n\n'
    'Only give 5 if the response is genuinely outstanding.\n'
    'Give 3 for any adequate-but-not-impressive response.\n\n'
    'Question: {question}\n'
    'Response: {response}\n\n'
    'Score (1-5) and one-sentence reason:'
)

# Compare to non-anchored prompt which tends to cluster at 4-5
print('Anchored rubrics force the judge to use the full scale')

Kapan Penilai LLM Paling Efektif

Penilai LLM paling andal ketika:

  • Kriterianya jelas dan terdefinisi dengan baik
  • Perbedaan kualitas responsnya besar (jelas baik vs jelas buruk)
  • Domainnya berada dalam cakupan pengetahuan model penilai
  • Anda mengevaluasi kualitas subjektif (nada, kebermanfaatan) yang juga sering menimbulkan perbedaan pendapat di antara penilai manusia

Penilai ini paling tidak andal saat mengevaluasi pengetahuan terkini, domain yang sangat teknis, atau kesalahan faktual yang halus dan memerlukan pengetahuan khusus untuk dideteksi.

Kapan Evaluasi Manusia Diperlukan

Libatkan manusia untuk:

  • Mengevaluasi respons dalam domain khusus (medis, hukum, keamanan)
  • Menetapkan kalibrasi berdasarkan kebenaran dasar untuk penilai LLM Anda
  • Mengambil keputusan berisiko tinggi ketika kesalahan penilai LLM menimbulkan konsekuensi nyata
  • Mengevaluasi tugas baru yang hanya memiliki sedikit sinyal pelatihan bagi model penilai
  • Mendeteksi kesalahan faktual yang halus dan memerlukan keahlian domain
def triage_for_human_review(question, response, llm_score, confidence_threshold=0.7):
    """
    Route low-confidence or high-stakes evaluations to human review.
    """
    # Route to human if judge is uncertain
    if llm_score is None:
        return 'human_review', 'LLM judge failed to produce a score'

    # Route to human for borderline scores (near decision boundaries)
    if 2.5 <= llm_score <= 3.5:
        return 'human_review', f'Borderline score {llm_score} — needs human judgment'

    # Route to human for domain-specific high-risk content
    HIGH_RISK_KEYWORDS = ['medication', 'legal advice', 'financial advice', 'security']
    if any(kw in question.lower() for kw in HIGH_RISK_KEYWORDS):
        return 'human_review', 'High-risk domain — human verification required'

    # Else: LLM score is sufficient
    return 'auto_accept', f'Score {llm_score} — LLM judgment sufficient'

routing, reason = triage_for_human_review('What medication should I take?', 'Take aspirin.', 4.5)
print(f'{routing}: {reason}')

Membangun Pipeline Evaluasi

Pipeline LLM sebagai penilai yang praktis: hasilkan respons → jalankan penilai LLM → arahkan kasus yang berada di batas kepada manusia untuk ditinjau → gabungkan nilai → laporkan metrik kualitas. Catat semuanya untuk jejak audit.

import anthropic
import json

client = anthropic.Anthropic(api_key='sk-ant-...')

def evaluate_batch(examples, product_under_test, criteria):
    results = []
    for ex in examples:
        response = product_under_test(ex['question'])
        score, reason = simple_llm_judge(ex['question'], response, criteria)

        results.append({
            'question': ex['question'],
            'response': response,
            'score': score,
            'reason': reason,
            'needs_review': score is None or 2.5 <= (score or 0) <= 3.5
        })

    # Summarize
    valid_scores = [r['score'] for r in results if r['score'] is not None]
    avg_score = sum(valid_scores) / len(valid_scores) if valid_scores else 0
    review_count = sum(1 for r in results if r['needs_review'])

    print(f'Average score: {avg_score:.2f}/5')
    print(f'Cases needing review: {review_count}/{len(results)}')
    return results, avg_score

# results, avg = evaluate_batch(test_cases, my_product, 'helpfulness')

Evaluasi Berbasis Referensi vs Tanpa Referensi

Penilai LLM dapat beroperasi dalam dua mode:

  • Berbasis referensi: Penilai membandingkan respons dengan jawaban benar yang telah diketahui. Akurasinya tinggi, tetapi memerlukan data berlabel.
  • Tanpa referensi: Penilai mengevaluasi respons berdasarkan kualitasnya sendiri (apakah konsisten? bermanfaat? ditulis dengan baik?). Lebih fleksibel, tetapi kurang presisi dalam menilai keakuratan faktual.

Gunakan evaluasi berbasis referensi jika Anda memiliki jawaban berstandar emas. Gunakan evaluasi tanpa referensi untuk tugas terbuka seperti perangkuman, evaluasi nada, atau kualitas penulisan kreatif.

Pemeriksaan Pengetahuan: Bias Posisi

Apa yang dimaksud dengan bias posisi dalam evaluasi LLM sebagai juri, dan apa dampaknya?

Rangkuman: Evaluasi LLM sebagai Juri

Juri LLM memahami nuansa, keakuratan semantik, dan kualitas subjektif—hal-hal yang tidak dapat diukur oleh metrik tradisional. Juri LLM dapat keliru karena: bias posisi (lebih menyukai opsi pertama), bias keberpanjangan (lebih menyukai jawaban yang lebih panjang), preferensi terhadap diri sendiri (lebih menyukai gayanya sendiri), dan inflasi skor (skor berkumpul di 4–5 dari 5). Kurangi bias tersebut dengan mengacak urutan respons, memberikan instruksi anti-keberpanjangan yang eksplisit, menggunakan rubrik berjangkar yang mendefinisikan setiap tingkat skor, dan menggunakan beberapa model berbeda sebagai juri. Serahkan skor yang berada di ambang batas dan bidang berisiko tinggi kepada evaluator manusia. Gunakan juri LLM untuk skala besar; gunakan manusia untuk kalibrasi dan keputusan berisiko tinggi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menggunakan LLM untuk Mengevaluasi Output LLM” gratis?

Ya — teks lengkap “Menggunakan LLM untuk Mengevaluasi Output LLM” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Prompt Engineering, upgrade ke CoddyKit PRO. Kursus AI Prompt Engineering mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menggunakan LLM untuk Mengevaluasi Output LLM”?

Pelajari alasan penilai berbasis LLM berfungsi dan bagian yang gagal dibandingkan dengan evaluasi manusia. Kamu berlatih AI Prompt Engineering dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Prompt Engineering?

Tidak diperlukan pengalaman sebelumnya. AI Prompt Engineering di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Menggunakan LLM untuk Mengevaluasi Output LLM” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Prompt Engineering ini?

Ya. Setiap pelajaran AI Prompt Engineering menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menggunakan LLM untuk Mengevaluasi Output LLM
  2. Prompt Penilaian Berbasis Rubrik
  3. Penilaian Komparatif: A vs B
  4. Kalibrasi dan Bias pada Penilai LLM
← Kembali ke AI Prompt Engineering