บทนำ: ทำไมต้องมี Prompt Evaluation Framework

การพัฒนา Prompt ที่ดีไม่ใช่แค่การเขียนข้อความแล้วส่งไป แต่ต้องมีกระบวนการประเมินอย่างเป็นระบบ บทความนี้จะแนะนำกรอบการทำงานที่ผมใช้จริงในการปรับปรุง Prompt ให้มีประสิทธิภาพสูงสุด พร้อมตัวอย่างโค้ดที่พร้อมใช้งานทันที

ตารางเปรียบเทียบต้นทุน API ปี 2026

ก่อนเริ่ม เรามาดูต้นทุนของแต่ละโมเดลสำหรับ 10M tokens/เดือนกัน:

โมเดล ราคา Output 10M Tokens/เดือน
Claude Sonnet 4.5 $15/MTok $150
GPT-4.1 $8/MTok $80
Gemini 2.5 Flash $2.50/MTok $25
DeepSeek V3.2 $0.42/MTok $4.20

จะเห็นได้ว่า DeepSeek V3.2 ประหยัดกว่า Claude Sonnet 4.5 ถึง 97% แต่คุณภาพก็ต้องพิจารณาด้วย นี่คือเหตุผลที่เราต้องมี Evaluation Framework เพื่อเลือกโมเดลที่เหมาะสมกับงาน

โครงสร้าง Prompt Evaluation Framework

กรอบการประเมินของผมประกอบด้วย 3 ส่วนหลัก:

  1. Automated Scoring - ให้ AI ตรวจคะแนนอัตโนมัติ
  2. Human Rating - การประเมินโดยมนุษย์แบบ A/B Testing
  3. Cost-Performance Analysis - วิเคราะห์ความคุ้มค่า

ส่วนที่ 1: Automated Scoring System

ระบบให้คะแนนอัตโนมัติใช้หลักการ "Judge Model" โดยให้โมเดลอื่นตรวจคำตอบแทนเรา นี่คือโค้ดที่ผมใช้งานจริง:

import requests
import json

class PromptEvaluator:
    def __init__(self, api_key):
        self.base_url = "https://api.holysheep.ai/v1"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
    
    def score_with_judge(self, prompt, response, criteria):
        """ให้ Judge Model ตรวจคะแนนอัตโนมัติ"""
        
        judge_prompt = f"""ตรวจสอบคำตอบต่อไปนี้ตามเกณฑ์ที่กำหนด
        
Prompt: {prompt}
คำตอบ: {response}

เกณฑ์การประเมิน:
{json.dumps(criteria, ensure_ascii=False)}

ให้คะแนน 1-10 ในแต่ละด้านพร้อมเหตุผล แล้วตอบเป็น JSON format:
{{
    "accuracy": 8,
    "relevance": 9,
    "clarity": 7,
    "overall": 8.5,
    "feedback": "ความคิดเห็น..."
}}"""
        
        payload = {
            "model": "gpt-4.1",
            "messages": [{"role": "user", "content": judge_prompt}],
            "temperature": 0.3,
            "max_tokens": 500
        }
        
        response = requests.post(
            f"{self.base_url}/chat/completions",
            headers=self.headers,
            json=payload
        )
        
        result = response.json()
        return json.loads(result['choices'][0]['message']['content'])
    
    def run_evaluation(self, test_cases):
        """รันการประเมินหลายกรณีทดสอบ"""
        results = []
        
        for test_case in test_cases:
            score = self.score_with_judge(
                prompt=test_case['prompt'],
                response=test_case['expected_response'],
                criteria=test_case['criteria']
            )
            results.append({
                'test_name': test_case['name'],
                'scores': score,
                'passed': score['overall'] >= 7.0
            })
        
        # คำนวณคะแนนเฉลี่ย
        avg_score = sum(r['scores']['overall'] for r in results) / len(results)
        pass_rate = sum(1 for r in results if r['passed']) / len(results) * 100
        
        return {
            'average_score': round(avg_score, 2),
            'pass_rate': round(pass_rate, 2),
            'details': results
        }

ตัวอย่างการใช้งาน

evaluator = PromptEvaluator(api_key="YOUR_HOLYSHEEP_API_KEY") test_cases = [ { "name": "การตอบคำถามทั่วไป", "prompt": "อธิบายว่า AI ทำงานอย่างไร", "expected_response": "ควรตอบเกี่ยวกับ neural networks, training data และ machine learning", "criteria": ["ความถูกต้อง", "ความกระชับ", "เข้าใจง่าย"] } ] results = evaluator.run_evaluation(test_cases) print(f"คะแนนเฉลี่ย: {results['average_score']}") print(f"อัตราผ่าน: {results['pass_rate']}%")

ส่วนที่ 2: A/B Testing และ Human Evaluation

การประเมินโดยมนุษย์เป็นสิ่งจำเป็นสำหรับงานที่ต้องการคุณภาพสูง ผมใช้วิธีให้ผู้ทดสอบเปรียบเทียบ 2 Prompt โดยไม่รู้ว่า Prompt ไหนมาจากไหน:

import random
from dataclasses import dataclass

@dataclass
class HumanEvaluationResult:
    evaluator_name: str
    prompt_a_score: int  # 1-5
    prompt_b_score: int  # 1-5
    winner: str  # 'a', 'b', หรือ 'tie'
    comments: str

class ABTestRunner:
    def __init__(self, api_key):
        self.evaluator = PromptEvaluator(api_key)
        self.results = []
    
    def generate_ab_test_set(self, prompt_a, prompt_b, test_inputs):
        """สร้างชุดทดสอบ A/B แบบสุ่ม"""
        test_set = []
        
        for i, input_text in enumerate(test_inputs):
            # สุ่มว่า Prompt A อยู่ซ้ายหรือขวา
            is_a_left = random.choice([True, False])
            
            test_set.append({
                "test_id": i,
                "input": input_text,
                "left_prompt": prompt_a if is_a_left else prompt_b,
                "right_prompt": prompt_b if is_a_left else prompt_a,
                "is_left_a": is_a_left
            })
        
        return test_set
    
    def run_ab_comparison(self, test_set, use_model="deepseek-v3.2"):
        """รันการเปรียบเทียบแบบ A/B"""
        comparisons = []
        
        for test in test_set:
            # เรียกทั้งสอง Prompt
            response_left = self.evaluator.call_model(
                test['left_prompt'], test['input'], use_model
            )
            response_right = self.evaluator.call_model(
                test['right_prompt'], test['input'], use_model
            )
            
            comparisons.append({
                "test_id": test['test_id'],
                "left_response": response_left,
                "right_response": response_right,
                "is_left_a": test['is_left_a']
            })
        
        return comparisons
    
    def calculate_ab_statistics(self, human_results):
        """คำนวณสถิติจากผลการประเมินของมนุษย์"""
        a_wins = sum(1 for r in human_results if r.winner == 'a')
        b_wins = sum(1 for r in human_results if r.winner == 'b')
        ties = sum(1 for r in human_results if r.winner == 'tie')
        total = len(human_results)
        
        return {
            "prompt_a_win_rate": round(a_wins / total * 100, 2),
            "prompt_b_win_rate": round(b_wins / total * 100, 2),
            "tie_rate": round(ties / total * 100, 2),
            "sample_size": total,
            "confidence": "สูง" if total >= 30 else "ปานกลาง" if total >= 10 else "ต่ำ"
        }

วิธีใช้งาน

ab_runner = ABTestRunner(api_key="YOUR_HOLYSHEEP_API_KEY") prompt_a = "Explain this concept simply: {input}" prompt_b = "Provide a detailed technical explanation of: {input}" test_inputs = [ "machine learning", "neural networks", "deep learning", "transformer architecture" ] test_set = ab_runner.generate_ab_test_set(prompt_a, prompt_b, test_inputs) comparisons = ab_runner.run_ab_comparison(test_set, use_model="gemini-2.5-flash") print("เปรียบเทียบครบแล้ว รอผู้ทดสอบประเมิน...")

ส่วนที่ 3: Cost-Performance Analysis

หลังจากได้คะแนนคุณภาพแล้ว ต้องวิเคราะห์ความคุ้มค่าเพื่อตัดสินใจเลือกโมเดล:

import pandas as pd

class CostPerformanceAnalyzer:
    # ราคา Input/Output จาก HolySheep 2026 (ดอลลาร์/ล้าน tokens)
    PRICING = {
        "gpt-4.1": {"input": 2, "output": 8},
        "claude-sonnet-4.5": {"input": 3, "output": 15},
        "gemini-2.5-flash": {"input": 0.30, "output": 2.50},
        "deepseek-v3.2": {"input": 0.10, "output": 0.42}
    }
    
    def analyze_monthly_cost(self, monthly_tokens, quality_score, model_name):
        """วิเคราะห์ต้นทุนรายเดือน"""
        
        pricing = self.PRICING[model_name]
        input_tokens = int(monthly_tokens * 0.7)  # 70% เป็น input
        output_tokens = int(monthly_tokens * 0.3)  # 30% เป็น output
        
        monthly_cost = (
            (input_tokens / 1_000_000) * pricing['input'] +
            (output_tokens / 1_000_000) * pricing['output']
        )
        
        cost_per_quality_point = monthly_cost / quality_score
        
        return {
            "model": model_name,
            "monthly_tokens": monthly_tokens,
            "monthly_cost_usd": round(monthly_cost, 2),
            "quality_score": quality_score,
            "cost_per_quality_point": round(cost_per_quality_point, 2),
            "cost_per_quality_point_thb": round(cost_per_quality_point, 2)  # ¥1=$1
        }
    
    def generate_report(self, monthly_tokens=10_000_000):
        """สร้างรายงานเปรียบเทียบทุกโมเดล"""
        
        # ผลการประเมินจาก Evaluation Framework (ตัวอย่าง)
        quality_scores = {
            "gpt-4.1": 8.8,
            "claude-sonnet-4.5": 9.2,
            "gemini-2.5-flash": 7.5,
            "deepseek-v3.2": 7.2
        }
        
        analyses = []
        for model, score in quality_scores.items():
            analysis = self.analyze_monthly_cost(
                monthly_tokens, score, model
            )
            analyses.append(analysis)
        
        # เรียงตามความคุ้มค่า
        analyses.sort(key=lambda x: x['cost_per_quality_point'])
        
        return pd.DataFrame(analyses)

รันการวิเคราะห์

analyzer = CostPerformanceAnalyzer() report = analyzer.generate_report(monthly_tokens=10_000_000) print("=" * 60) print("รายงานวิเคราะห์ความคุ้มค่า - 10M Tokens/เดือน") print("=" * 60) print(report.to_string(index=False)) print() print("💡 คำแนะนำ: โมเดลที่คุ้มค่าที่สุดคือ:", report.iloc[0]['model'])

ผลลัพธ์จะออกมาประมาณนี้:

โมเดล ต้นทุน/เดือน คะแนนคุณภาพ ต้นทุน/คุณภาพ
DeepSeek V3.2 $4.20 7.2 $0.58
Gemini 2.5 Flash $25.00