รูปแบบ LLM ในบทบาทผู้ตัดสิน
ทำความเข้าใจวิธีเขียนพรอมต์ให้ LLM ที่มีความสามารถสูงให้คะแนนหรือเปรียบเทียบผลลัพธ์ตามเกณฑ์ เช่น ความถูกต้อง ประโยชน์ใช้สอย และน้ำเสียง รวมถึงเหตุใดวิธีนี้จึงขยายขนาดได้ดีกว่าการประเมินโดยมนุษย์
รูปแบบ LLM ในบทบาทผู้ตัดสิน เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงจำเป็นต้องประเมินโดยอัตโนมัติ
การประเมินผลลัพธ์จาก LLM ด้วยตนเองใช้เวลานานและมีค่าใช้จ่ายสูง ทีมผู้ประเมินที่เป็นมนุษย์อาจประเมินผลลัพธ์ได้เพียงไม่กี่ร้อยรายการต่อสัปดาห์ แต่ระบบที่ใช้งานจริงสร้างผลลัพธ์หลายพันรายการต่อวัน การใช้ LLM เป็นผู้ประเมินใช้โมเดลภาษาที่มีความสามารถสูงประเมินคุณภาพผลลัพธ์จาก LLM อื่น ๆ ในปริมาณมาก ทำให้สามารถทดสอบการถดถอยโดยอัตโนมัติและติดตามคุณภาพอย่างต่อเนื่อง โดยไม่ต้องจ้างผู้ติดป้ายกำกับจำนวนมาก
แนวคิดหลัก: LLM หนึ่งตัวประเมินอีกตัวหนึ่ง
ในการใช้ LLM เป็นผู้ประเมิน คุณจะส่งพรอมต์ระบบที่กำหนดเกณฑ์การประเมิน คำถามต้นฉบับ คำตอบของโมเดล และอาจรวมคำตอบอ้างอิง ไปยังโมเดลผู้ประเมิน ซึ่งโดยทั่วไปคือ GPT-4o หรือ Claude จากนั้นผู้ประเมินจะส่งคืนคะแนนตัวเลข ป้ายกำกับ หรือการจัดอันดับ วิธีนี้ใช้ได้ผลเพราะโมเดลชั้นนำในปัจจุบันเข้าใจแนวคิดด้านคุณภาพได้เพียงพอ เช่น ความถูกต้อง ความเป็นประโยชน์ และความสอดคล้อง
JUDGE_SYSTEM_PROMPT = '''
You are an expert evaluator of AI-generated responses.
Given a question and an AI-generated answer, score the answer on:
- Correctness (0-5): Is the information factually accurate?
- Completeness (0-5): Does it fully address the question?
- Clarity (0-5): Is it easy to understand?
Return a JSON object with scores and a brief rationale.
'''การเขียนพรอมต์สำหรับผู้ประเมิน
พรอมต์สำหรับผู้ประเมินที่ดีจะระบุ เกณฑ์การให้คะแนนอย่างชัดเจนพร้อมคำจำกัดความของคะแนน แทนการใช้คำกว้าง ๆ เช่น 'ดี' หรือ 'แย่' ให้กำหนดอย่างเป็นรูปธรรมว่าคะแนน 5, 3 และ 1 หมายถึงอะไรสำหรับแต่ละเกณฑ์ ระบุคำถาม คำตอบที่ต้องประเมิน และอาจรวมคำตอบอ้างอิง ขอให้ผู้ประเมินแสดงเหตุผลก่อนให้คะแนน (การคิดเป็นลำดับขั้น) เพื่อลดการให้คะแนนตามอำเภอใจ
def build_judge_prompt(question: str, answer: str, reference: str = None) -> str:
ref_section = f'Reference answer:\n{reference}\n\n' if reference else ''
return f'''
Question: {question}
{ref_section}Answer to evaluate:
{answer}
Score this answer on correctness (1-5) where:
5 = Completely accurate, no factual errors
3 = Mostly accurate with minor errors
1 = Contains significant factual errors
First explain your reasoning, then provide the score as JSON:
{{"correctness": <1-5>, "rationale": "..."}}
'''การเรียกใช้โมเดลผู้ประเมิน
เรียกใช้โมเดลผู้ประเมินด้วยพรอมต์การประเมินของคุณ แล้วแยกวิเคราะห์คำตอบ JSON เพื่อดึงคะแนนออกมา โปรดใช้ผลลัพธ์ที่มีโครงสร้างหรือโหมด JSON เสมอ เพื่อให้แน่ใจว่าผู้ประเมินส่งคืนข้อมูลที่แยกวิเคราะห์ได้ การใช้โมเดลเดียวกันทั้งในระบบที่กำลังทดสอบและเป็นผู้ประเมินอาจทำให้เกิดอคติได้ — ควรเลือกโมเดลอื่น หรืออย่างน้อยใช้การกำหนดค่าที่แตกต่างกันสำหรับผู้ประเมิน
from pydantic import BaseModel
import instructor
from openai import OpenAI
class JudgeScore(BaseModel):
correctness: int
completeness: int
clarity: int
rationale: str
judge_client = instructor.from_openai(OpenAI())
def judge(question: str, answer: str) -> JudgeScore:
return judge_client.chat.completions.create(
model='gpt-4o', # Use stronger judge than the model being tested
response_model=JudgeScore,
messages=[
{'role': 'system', 'content': JUDGE_SYSTEM_PROMPT},
{'role': 'user', 'content': build_judge_prompt(question, answer)}
]
)การประเมินแบบไม่มีคำตอบอ้างอิงเทียบกับแบบมีคำตอบอ้างอิง
การใช้ LLM เป็นผู้ประเมินมีสองโหมด การประเมินแบบไม่มีคำตอบอ้างอิงขอให้ผู้ประเมินประเมินคุณภาพโดยไม่มีคำตอบจริงเป็นเกณฑ์ — เหมาะเมื่อไม่มีคำตอบจริง เช่น การสนทนาแบบปลายเปิด การประเมินแบบมีคำตอบอ้างอิงให้คำตอบมาตรฐานระดับทองคำ แล้วขอให้ประเมินว่าคำตอบของโมเดลตรงกับคำตอบนั้นหรือไม่ — เหมาะกว่าสำหรับการตอบคำถามเชิงข้อเท็จจริงที่ทราบคำตอบที่ถูกต้อง หากคุณมีชุดข้อมูลทดสอบที่มีป้ายกำกับ ให้ใช้การประเมินแบบมีคำตอบอ้างอิง
# Reference-free: good for open-ended generation
judge_result = judge(question='What is machine learning?', answer=model_answer)
# Reference-based: better for factual QA
judge_result = judge(
question='What year was Python created?',
answer=model_answer,
reference='Python was created by Guido van Rossum and released in 1991.'
)การควบคุมอคติของผู้ประเมิน
ผู้ประเมินที่เป็น LLM มีอคติที่ทราบกันอยู่ ได้แก่ ชอบคำตอบที่ยาวกว่า (อคติด้านความยืดเยื้อ) ชอบคำตอบที่ฟังดูมั่นใจ และชอบคำตอบที่ตรงกับรูปแบบจากข้อมูลฝึกสอนของตน ลดอคติด้านความยืดเยื้อด้วยการลงโทษความยาวที่ไม่จำเป็นอย่างชัดเจนในเกณฑ์การให้คะแนน ลดอคติด้านตำแหน่งในการเปรียบเทียบเป็นคู่ด้วยการสุ่มว่าคำตอบใดจะแสดงก่อน และหาค่าเฉลี่ยคะแนนจากการเรียงลำดับทั้งสองแบบ
# Anti-verbosity note in rubric:
ANTI_VERBOSITY_CLAUSE = '''
Note: A concise, accurate answer should score higher than a long,
rambling answer that happens to contain the correct information.
Do not reward length for its own sake.
'''
# Position-debiasing for pairwise comparison:
async def debiased_pairwise(q, a, b):
score_ab = await compare(q, answer_a=a, answer_b=b)
score_ba = await compare(q, answer_a=b, answer_b=a)
# A wins if it wins in both orderings
a_wins = (score_ab == 'A' and score_ba == 'B')
return 'A' if a_wins else 'B' if (score_ab == 'B' and score_ba == 'A') else 'tie'การประเมินเป็นชุดเพื่อเพิ่มความเร็ว
เรียกใช้การประเมินโดยผู้ประเมินแบบขนาน เพื่อประเมินชุดข้อมูลทดสอบขนาดใหญ่ได้อย่างรวดเร็ว เมื่อใช้ asyncio และสัญญาณไฟจราจร คุณจะประเมินผลลัพธ์ได้หลายร้อยรายการต่อนาที โปรดจัดสรรขีดจำกัดอัตราการเรียกใช้แยกต่างหากสำหรับการเรียกผู้ประเมิน (เนื่องจากใช้โทเค็นเช่นกัน) และพิจารณาใช้โมเดลผู้ประเมินที่เล็กกว่าแต่ยังมีความสามารถ เช่น GPT-4o-mini สำหรับเกณฑ์ที่ไม่ต้องใช้การให้เหตุผลเชิงลึก โดยเก็บ GPT-4o ไว้สำหรับเกณฑ์ที่สำคัญที่สุด
import asyncio
async def batch_judge(qa_pairs: list, concurrency: int = 20) -> list:
sem = asyncio.Semaphore(concurrency)
async def judge_one(item):
async with sem:
return await async_judge(item['question'], item['answer'])
return await asyncio.gather(
*[judge_one(item) for item in qa_pairs],
return_exceptions=True
)การรวมคะแนนจากผู้ประเมิน
หลังจากประเมินชุดข้อมูลทดสอบแล้ว ให้รวมคะแนนเป็นสถิติสรุป ได้แก่ mean, median และเปอร์เซ็นต์ของคำตอบที่ได้คะแนนสูงกว่าเกณฑ์คุณภาพ (เช่น ความถูกต้อง ≥ 4) เปรียบเทียบค่าสรุปเหล่านี้ระหว่างรุ่นของโมเดลหรือรูปแบบพรอมต์ หากอัตราคำตอบที่สูงกว่าเกณฑ์ลดลงมากกว่า 5% ควรเริ่มการตรวจสอบก่อนนำรุ่นใหม่ไปใช้งาน
import statistics
def summarize_judge_results(scores: list) -> dict:
correctness = [s.correctness for s in scores if isinstance(s, JudgeScore)]
return {
'n': len(correctness),
'mean_correctness': round(statistics.mean(correctness), 2),
'median_correctness': statistics.median(correctness),
'pct_above_4': round(100 * sum(1 for s in correctness if s >= 4) / len(correctness), 1)
}การเปรียบเทียบรุ่น LLM ด้วยผู้ประเมิน
ใช้การประเมินโดย LLM เพื่อเปรียบเทียบระบบสองรุ่น เช่น ก่อนและหลังเปลี่ยนพรอมต์ ให้ทั้งสองรุ่นทำงานกับชุดคำถามทดสอบเดียวกัน ประเมินผลลัพธ์ทั้งหมด แล้วคำนวณอัตราการชนะ ซึ่งคือเปอร์เซ็นต์ของกรณีที่รุ่น B ได้คะแนนสูงกว่ารุ่น A อัตราการชนะที่สูงกว่า 55% จากตัวอย่างมากกว่า 100 รายการ โดยทั่วไปมีนัยสำคัญทางสถิติเพียงพอที่จะสนับสนุนการนำรุ่นใหม่ไปใช้งาน
async def ab_compare(test_questions: list, version_a, version_b) -> dict:
a_wins = b_wins = ties = 0
for q in test_questions:
answer_a = await version_a.answer(q)
answer_b = await version_b.answer(q)
winner = await debiased_pairwise(q, answer_a, answer_b)
if winner == 'A': a_wins += 1
elif winner == 'B': b_wins += 1
else: ties += 1
total = len(test_questions)
return {'a_win_rate': a_wins/total, 'b_win_rate': b_wins/total, 'tie_rate': ties/total}การปรับเทียบคะแนนของผู้ประเมินกับมนุษย์
ตรวจสอบผู้ประเมินของคุณโดยเปรียบเทียบคะแนนกับการตัดสินของมนุษย์ในชุดข้อมูลปรับเทียบจำนวน 50-200 ตัวอย่าง คำนวณ สหสัมพันธ์เพียร์สันระหว่างคะแนนของผู้ประเมินกับคะแนนของมนุษย์ ค่าสหสัมพันธ์ที่สูงกว่า 0.7 แสดงว่าผู้ประเมินมีความน่าเชื่อถือ หากค่าสหสัมพันธ์ต่ำ ให้ตรวจสอบพรอมต์ของผู้ประเมินเพื่อดูว่ามีจุดใดที่ไม่ตรงกับมนุษย์ และเพิ่มตัวอย่างหรือคำชี้แจงลงในเกณฑ์การให้คะแนน อย่านำผู้ประเมินไปใช้งานโดยไม่ปรับเทียบเด็ดขาด
from scipy.stats import pearsonr
def calibrate_judge(human_scores: list, judge_scores: list) -> dict:
corr, p_value = pearsonr(human_scores, judge_scores)
mean_abs_error = sum(abs(h - j) for h, j in zip(human_scores, judge_scores)) / len(human_scores)
return {
'pearson_r': round(corr, 3),
'p_value': round(p_value, 4),
'mean_abs_error': round(mean_abs_error, 2),
'reliable': corr >= 0.7
}กรณีที่ไม่ควรใช้การประเมินโดย LLM
การประเมินโดย LLM ไม่เหมาะกับสถานการณ์ประเมินทุกประเภท ควรหลีกเลี่ยงเมื่อ: เกณฑ์นั้นต้องใช้ความเชี่ยวชาญเฉพาะด้านที่โมเดลผู้ประเมินไม่มี (เช่น ความถูกต้องของการวินิจฉัยทางการแพทย์ หรือการปฏิบัติตามกฎหมาย) เมื่อจำเป็นต้องมีการประเมินที่สามารถใช้เป็นหลักฐานทางกฎหมายได้ (ต้องมีการตรวจสอบโดยมนุษย์) เมื่อประเมินโมเดลที่มีความสามารถสูงกว่าผู้ประเมิน (ผู้ประเมินไม่สามารถให้คะแนนผลลัพธ์ที่ตนเองไม่สามารถสร้างได้อย่างน่าเชื่อถือ) หรือเมื่องบประมาณการประเมินมีจำกัดเกินกว่าจะรองรับค่าใช้จ่าย API เพิ่มเติม ในกรณีเหล่านี้ ให้ใช้การประเมินโดยมนุษย์หรือตัวชี้วัดที่กำหนดแน่นอน
# Appropriate uses of LLM-as-judge:
# YES: General helpfulness, clarity, tone, factual accuracy (general knowledge)
# YES: Code correctness for common languages
# YES: Translation quality comparison
# YES: Content safety classification
#
# NOT appropriate:
# NO: Medical/legal/financial accuracy (needs domain expert)
# NO: Evaluating GPT-4o with GPT-4o (same capability ceiling)
# NO: Formal compliance audits (non-deterministic judge)
# NO: Streaming quality at individual token levelตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับรูปแบบการประเมินโดยใช้ LLM เป็นผู้ประเมิน
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า การใช้ LLM เป็นผู้ประเมินใช้โมเดลที่มีความสามารถสูงประเมินคุณภาพในปริมาณมากโดยใช้เกณฑ์การให้คะแนนที่ชัดเจน โหมดแบบไม่มีคำตอบอ้างอิงและแบบมีคำตอบอ้างอิงเหมาะกับสถานการณ์ประเมินที่แตกต่างกัน และ การปรับเทียบกับการตัดสินของมนุษย์ช่วยตรวจสอบว่าผู้ประเมินของคุณมีความน่าเชื่อถือก่อนนำไปใช้ในระบบจริง ต่อไป เราจะนำกลยุทธ์การประเมินแบบรายรายการและแบบจับคู่มาใช้
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “รูปแบบ LLM ในบทบาทผู้ตัดสิน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “รูปแบบ LLM ในบทบาทผู้ตัดสิน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบ LLM ในบทบาทผู้ตัดสิน”
ทำความเข้าใจวิธีเขียนพรอมต์ให้ LLM ที่มีความสามารถสูงให้คะแนนหรือเปรียบเทียบผลลัพธ์ตามเกณฑ์ เช่น ความถูกต้อง ประโยชน์ใช้สอย และน้ำเสียง รวมถึงเหตุใดวิธีนี้จึงขยายขนาดได้ดีกว่าการประเมินโดยมนุษย์ คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “รูปแบบ LLM ในบทบาทผู้ตัดสิน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม
ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- รูปแบบ LLM ในบทบาทผู้ตัดสิน
- การประเมินแบบรายรายการและแบบจับคู่
- การปรับเทียบโมเดลผู้ตัดสินกับมนุษย์
- การสร้างกระบวนการประเมินผลอย่างต่อเนื่อง