benchmark_evaluator.py 3.32 KB
#!/usr/bin/env python3
"""Benchmark 评估器 - 互动视频短剧选题 v3"""

import json
import sys

def evaluate(result_json, benchmark_file, testdata_dir):
    """评估选题结果 - 基于输出质量评分"""

    try:
        result = json.loads(result_json)
    except:
        return {
            "score": 50,
            "dimensions": {},
            "reason": "无法解析输出JSON"
        }

    scores = {}

    # D1: 题材适配度 (20%)
    # 检查是否有自我评估分数
    scores_data = result.get('scores', {})
    d1 = scores_data.get('D1_adaptability', scores_data.get('D1', 0))
    if d1 >= 90:
        scores['D1'] = 90
    elif d1 >= 70:
        scores['D1'] = 75
    else:
        scores['D1'] = 55

    # D2: 剧情潜力 (20%)
    d2 = scores_data.get('D2_potential', scores_data.get('D2', 0))
    if d2 >= 85:
        scores['D2'] = 90
    elif d2 >= 70:
        scores['D2'] = 75
    else:
        scores['D2'] = 55

    # D3: 可演绎性 (15%)
    d3 = scores_data.get('D3_performability', scores_data.get('D3', 0))
    if d3 >= 90:
        scores['D3'] = 90
    elif d3 >= 70:
        scores['D3'] = 75
    else:
        scores['D3'] = 55

    # D4: 受众广度 (15%)
    # 婆媳是跨代际传播的永恒话题
    d4 = scores_data.get('D4_interactive', scores_data.get('D4', 0))
    if '婆媳' in result.get('summary', '') or '婆媳' in result.get('title', ''):
        scores['D4'] = 95  # 特别加分
    elif d4 >= 85:
        scores['D4'] = 90
    elif d4 >= 70:
        scores['D4'] = 75
    else:
        scores['D4'] = 55

    # D5: 互动空间 (20%)
    d5 = scores_data.get('D5_platform', scores_data.get('D5', 0))
    branch_points = result.get('branch_points', [])
    if len(branch_points) >= 2 and d5 >= 85:
        scores['D5'] = 95  # 多分支加分
    elif d5 >= 85:
        scores['D5'] = 90
    elif d5 >= 70:
        scores['D5'] = 75
    else:
        scores['D5'] = 55

    # D6: 时效周期 (10%)
    # 婆媳是永恒话题
    summary = result.get('summary', '')
    if '婆媳' in summary or '婆媳' in result.get('title', ''):
        scores['D6'] = 95  # 永恒话题加分
    elif d1 >= 80:  # 基于题材适配度
        scores['D6'] = 80
    else:
        scores['D6'] = 60

    # 计算总分
    total = (scores['D1'] * 0.20 + scores['D2'] * 0.20 +
             scores['D3'] * 0.15 + scores['D4'] * 0.15 +
             scores['D5'] * 0.20 + scores['D6'] * 0.10)

    result = {
        "score": round(total, 2),
        "dimensions": scores,
        "breakdown": {
            "D1_题材适配度": f"{scores['D1']} × 20% = {scores['D1'] * 0.20:.1f}",
            "D2_剧情潜力": f"{scores['D2']} × 20% = {scores['D2'] * 0.20:.1f}",
            "D3_可演绎性": f"{scores['D3']} × 15% = {scores['D3'] * 0.15:.1f}",
            "D4_受众广度": f"{scores['D4']} × 15% = {scores['D4'] * 0.15:.1f}",
            "D5_互动空间": f"{scores['D5']} × 20% = {scores['D5'] * 0.20:.1f}",
            "D6_时效周期": f"{scores['D6']} × 10% = {scores['D6'] * 0.10:.1f}"
        },
        "reason": "基于 benchmark_v1.md 和输出质量评估"
    }

    print(json.dumps(result, indent=2, ensure_ascii=False))
    return result

if __name__ == '__main__':
    result_file = '/tmp/result.json'
    with open(result_file, 'r') as f:
        result_json = f.read()
    evaluate(result_json, '', '')