Skip to content
清晨的一缕阳光
返回

Prompt 质量评估体系构建

Prompt 质量评估体系构建

Prompt 质量直接决定 AI 应用的输出效果。如何科学评估 Prompt 质量?如何建立自动化评估体系?本文将详解 Prompt 质量评估的完整方法论和实战方案。

一、为什么需要质量评估

1.1 Prompt 质量挑战

Prompt 质量痛点:
┌─────────────────────────────────────┐
│ 1. 效果难以量化                       │
│    - 主观性强,缺乏客观标准          │
│    - 不同场景标准不同                │
├─────────────────────────────────────┤
│ 2. 评估成本高                         │
│    - 人工评估耗时耗力                │
│    - 难以大规模评估                  │
├─────────────────────────────────────┤
│ 3. 缺乏系统性                         │
│    - 评估维度不全面                  │
│    - 评估流程不规范                  │
├─────────────────────────────────────┤
│ 4. 持续监控困难                       │
│    - 模型更新影响未知                │
│    - 效果下降难以及时发现            │
└─────────────────────────────────────┘

1.2 评估体系价值

二、评估指标体系

2.1 多维度评估框架

Prompt 质量评估框架:

                    ┌─────────────┐
                    │ Prompt 质量  │
                    └──────┬──────┘

        ┌──────────────────┼──────────────────┐
        │                  │                  │
   ┌────▼────┐      ┌─────▼─────┐     ┌─────▼─────┐
   │ 准确性  │      │  效率性   │     │  稳定性   │
   └────┬────┘      └─────┬─────┘     └─────┬─────┘
        │                 │                  │
   ┌────▼────┐      ┌─────▼─────┐     ┌─────▼─────┐
   │ 任务完成│      │ 响应时间  │     │ 一致性    │
   │ 格式正确│      │ Token 用量 │     │ 鲁棒性    │
   │ 逻辑合理│      │ 成本      │     │ 可重复性  │
   └─────────┘      └───────────┘     └───────────┘

2.2 核心评估指标

准确性指标

指标定义计算方法权重
任务完成率成功完成的任务比例成功数/总数30%
格式正确率输出格式符合要求的比例格式正确数/总数20%
内容准确率输出内容准确的比例准确内容数/总内容数25%
逻辑合理性输出逻辑连贯的比例逻辑合理数/总数15%
用户满意度用户评分平均值总分/评价数10%

效率性指标

指标定义计算方法目标值
平均响应时间从请求到响应的平均时间总时间/请求数< 2s
P95 响应时间95% 请求的响应时间排序后 95% 位置值< 3s
平均 Token 用量每次请求的平均 Token 数总 Token/请求数根据场景
Token 成本每次请求的平均成本总成本/请求数< $0.01

稳定性指标

指标定义计算方法目标值
输出一致性相同输入输出一致的比例一致数/总数> 95%
错误率请求失败的比例失败数/总数< 1%
边界场景通过率边界场景测试通过比例通过数/总数> 90%

2.3 指标计算公式

# metrics.py
from typing import List, Dict
from dataclasses import dataclass

@dataclass
class QualityMetrics:
    """质量指标"""
    accuracy_score: float      # 准确性得分
    efficiency_score: float    # 效率性得分
    stability_score: float     # 稳定性得分
    overall_score: float       # 综合得分

class PromptQualityEvaluator:
    """Prompt 质量评估器"""
    
    def __init__(self, weights: Dict[str, float] = None):
        # 权重配置
        self.weights = weights or {
            'accuracy': 0.6,    # 准确性 60%
            'efficiency': 0.2,  # 效率性 20%
            'stability': 0.2    # 稳定性 20%
        }
    
    def evaluate(
        self,
        test_results: List[Dict],
        baseline_metrics: Dict = None
    ) -> QualityMetrics:
        """
        评估 Prompt 质量
        
        Args:
            test_results: 测试结果列表
            baseline_metrics: 基准指标(可选)
        
        Returns:
            QualityMetrics 质量指标
        """
        # 计算准确性得分
        accuracy_score = self._calculate_accuracy(test_results)
        
        # 计算效率性得分
        efficiency_score = self._calculate_efficiency(test_results)
        
        # 计算稳定性得分
        stability_score = self._calculate_stability(test_results)
        
        # 计算综合得分
        overall_score = (
            accuracy_score * self.weights['accuracy'] +
            efficiency_score * self.weights['efficiency'] +
            stability_score * self.weights['stability']
        )
        
        return QualityMetrics(
            accuracy_score=accuracy_score,
            efficiency_score=efficiency_score,
            stability_score=stability_score,
            overall_score=overall_score
        )
    
    def _calculate_accuracy(self, test_results: List[Dict]) -> float:
        """计算准确性得分"""
        if not test_results:
            return 0.0
        
        # 任务完成率(30%)
        task_completion = sum(
            1 for r in test_results if r.get('task_completed', False)
        ) / len(test_results)
        
        # 格式正确率(20%)
        format_correct = sum(
            1 for r in test_results if r.get('format_correct', False)
        ) / len(test_results)
        
        # 内容准确率(25%)
        content_accuracy = sum(
            r.get('content_accuracy', 0) for r in test_results
        ) / len(test_results)
        
        # 逻辑合理性(15%)
        logic_reasonable = sum(
            1 for r in test_results if r.get('logic_reasonable', False)
        ) / len(test_results)
        
        # 用户满意度(10%)
        user_satisfaction = sum(
            r.get('user_rating', 0) for r in test_results
        ) / len(test_results) / 5.0  # 假设 5 分制
        
        accuracy_score = (
            task_completion * 0.30 +
            format_correct * 0.20 +
            content_accuracy * 0.25 +
            logic_reasonable * 0.15 +
            user_satisfaction * 0.10
        )
        
        return accuracy_score
    
    def _calculate_efficiency(self, test_results: List[Dict]) -> float:
        """计算效率性得分"""
        if not test_results:
            return 0.0
        
        # 平均响应时间(40%)
        avg_latency = sum(
            r.get('latency', 0) for r in test_results
        ) / len(test_results)
        latency_score = max(0, 1 - avg_latency / 5.0)  # 5 秒为满分
        
        # P95 响应时间(30%)
        latencies = sorted([r.get('latency', 0) for r in test_results])
        p95_index = int(len(latencies) * 0.95)
        p95_latency = latencies[p95_index] if p95_index < len(latencies) else latencies[-1]
        p95_score = max(0, 1 - p95_latency / 8.0)  # 8 秒为满分
        
        # Token 用量(30%)
        avg_tokens = sum(
            r.get('token_usage', 0) for r in test_results
        ) / len(test_results)
        token_score = max(0, 1 - avg_tokens / 2000)  # 2000 token 为满分
        
        efficiency_score = (
            latency_score * 0.40 +
            p95_score * 0.30 +
            token_score * 0.30
        )
        
        return efficiency_score
    
    def _calculate_stability(self, test_results: List[Dict]) -> float:
        """计算稳定性得分"""
        if not test_results:
            return 0.0
        
        # 输出一致性(50%)
        consistency_count = 0
        input_output_map = {}
        for r in test_results:
            input_key = r.get('input', '')
            output = r.get('output', '')
            if input_key in input_output_map:
                if input_output_map[input_key] == output:
                    consistency_count += 1
            else:
                input_output_map[input_key] = output
        
        total_comparisons = len(test_results) - len(input_output_map)
        consistency = consistency_count / total_comparisons if total_comparisons > 0 else 1.0
        
        # 错误率(30%)
        error_count = sum(
            1 for r in test_results if r.get('error', False)
        )
        error_rate = error_count / len(test_results)
        error_score = 1 - error_rate
        
        # 边界场景通过率(20%)
        boundary_tests = [
            r for r in test_results if r.get('is_boundary', False)
        ]
        if boundary_tests:
            boundary_pass = sum(
                1 for r in boundary_tests if r.get('passed', False)
            ) / len(boundary_tests)
        else:
            boundary_pass = 1.0
        
        stability_score = (
            consistency * 0.50 +
            error_score * 0.30 +
            boundary_pass * 0.20
        )
        
        return stability_score

三、自动化评估方法

3.1 基于规则的评估

实现规则评估器

# rule_based_evaluator.py
import re
import json
from typing import Dict, List, Any

class RuleBasedEvaluator:
    """基于规则的评估器"""
    
    def __init__(self):
        self.rules = []
    
    def add_rule(self, name: str, rule_func, weight: float = 1.0):
        """添加评估规则"""
        self.rules.append({
            'name': name,
            'func': rule_func,
            'weight': weight
        })
    
    def evaluate(self, response: str, expected: Dict) -> Dict[str, float]:
        """评估响应"""
        results = {}
        total_weight = sum(r['weight'] for r in self.rules)
        
        for rule in self.rules:
            score = rule['func'](response, expected)
            results[rule['name']] = score
        
        # 计算加权平均
        weighted_sum = sum(
            results[r['name']] * r['weight'] for r in self.rules
        )
        results['overall'] = weighted_sum / total_weight
        
        return results
    
    @staticmethod
    def create_format_check_rule(expected_format: str):
        """创建格式检查规则"""
        def check_format(response: str, expected: Dict) -> float:
            if expected_format == 'json':
                try:
                    json.loads(response)
                    return 1.0
                except:
                    return 0.0
            elif expected_format == 'xml':
                # 简单的 XML 检查
                if response.strip().startswith('<') and response.strip().endswith('>'):
                    return 1.0
                return 0.0
            else:
                return 1.0
        
        return check_format
    
    @staticmethod
    def create_keyword_check_rule(required_keywords: List[str]):
        """创建关键词检查规则"""
        def check_keywords(response: str, expected: Dict) -> float:
            found_count = sum(
                1 for kw in required_keywords if kw.lower() in response.lower()
            )
            return found_count / len(required_keywords)
        
        return check_keywords
    
    @staticmethod
    def create_length_check_rule(min_length: int, max_length: int):
        """创建长度检查规则"""
        def check_length(response: str, expected: Dict) -> float:
            length = len(response)
            if min_length <= length <= max_length:
                return 1.0
            elif length < min_length:
                return max(0, length / min_length)
            else:
                return max(0, max_length / length)
        
        return check_length

3.2 基于 LLM 的评估

实现 LLM 评估器

# llm_based_evaluator.py
from typing import Dict, List
import json

class LLMBasedEvaluator:
    """基于 LLM 的评估器"""
    
    def __init__(self, llm_client, eval_prompt_template: str = None):
        self.llm_client = llm_client
        self.eval_prompt_template = eval_prompt_template or self._default_template()
    
    def _default_template(self) -> str:
        """默认评估 Prompt 模板"""
        return """
你是一个专业的 AI 输出质量评估专家。

请评估以下 AI 输出的质量:

【任务描述】
{task_description}

【AI 输出】
{ai_output}

【评估标准】
1. 准确性:输出内容是否准确无误(0-10 分)
2. 完整性:是否涵盖了所有要点(0-10 分)
3. 逻辑性:逻辑是否清晰连贯(0-10 分)
4. 格式:格式是否符合要求(0-10 分)

请按以下 JSON 格式输出评估结果:
{{
    "accuracy": <0-10 的整数>,
    "completeness": <0-10 的整数>,
    "logic": <0-10 的整数>,
    "format": <0-10 的整数>,
    "overall": <0-10 的整数>,
    "comments": "<评估意见>"
}}
"""
    
    def evaluate(
        self,
        task_description: str,
        ai_output: str,
        expected_output: str = None
    ) -> Dict[str, float]:
        """
        使用 LLM 评估输出质量
        
        Args:
            task_description: 任务描述
            ai_output: AI 输出
            expected_output: 期望输出(可选)
        
        Returns:
            评估结果
        """
        # 构建评估 Prompt
        eval_prompt = self.eval_prompt_template.format(
            task_description=task_description,
            ai_output=ai_output
        )
        
        if expected_output:
            eval_prompt += f"\n\n【期望输出】\n{expected_output}"
        
        # 调用 LLM 评估
        response = self.llm_client.generate(eval_prompt)
        
        # 解析评估结果
        try:
            # 提取 JSON 部分
            json_start = response.find('{')
            json_end = response.rfind('}') + 1
            json_str = response[json_start:json_end]
            
            evaluation = json.loads(json_str)
            
            # 转换为 0-1 的分数
            normalized = {
                key: value / 10.0 
                for key, value in evaluation.items() 
                if isinstance(value, (int, float))
            }
            
            return normalized
        except Exception as e:
            return {
                'accuracy': 0.5,
                'completeness': 0.5,
                'logic': 0.5,
                'format': 0.5,
                'overall': 0.5,
                'error': str(e)
            }
    
    def batch_evaluate(
        self,
        test_cases: List[Dict],
        max_concurrent: int = 5
    ) -> List[Dict]:
        """批量评估"""
        import concurrent.futures
        
        results = []
        
        with concurrent.futures.ThreadPoolExecutor(max_workers=max_concurrent) as executor:
            futures = []
            for case in test_cases:
                future = executor.submit(
                    self.evaluate,
                    case.get('task_description', ''),
                    case.get('ai_output', ''),
                    case.get('expected_output')
                )
                futures.append(future)
            
            for future in concurrent.futures.as_completed(futures):
                results.append(future.result())
        
        return results

3.3 混合评估策略

实现混合评估器

# hybrid_evaluator.py
from typing import Dict, List

class HybridEvaluator:
    """混合评估器(规则 + LLM)"""
    
    def __init__(self, rule_evaluator, llm_evaluator):
        self.rule_evaluator = rule_evaluator
        self.llm_evaluator = llm_evaluator
        
        # 评估策略配置
        self.strategy = {
            'format_check': 'rule',      # 格式检查用规则
            'keyword_check': 'rule',     # 关键词检查用规则
            'accuracy': 'llm',           # 准确性用 LLM
            'logic': 'llm',              # 逻辑性用 LLM
            'overall': 'hybrid'          # 综合评估混合
        }
    
    def evaluate(self, response: str, context: Dict) -> Dict[str, float]:
        """混合评估"""
        results = {}
        
        # 规则评估
        rule_results = self.rule_evaluator.evaluate(
            response, 
            context.get('expected', {})
        )
        
        # LLM 评估
        llm_results = self.llm_evaluator.evaluate(
            context.get('task_description', ''),
            response,
            context.get('expected_output')
        )
        
        # 合并结果
        for metric, method in self.strategy.items():
            if method == 'rule':
                results[metric] = rule_results.get(metric, 0.0)
            elif method == 'llm':
                results[metric] = llm_results.get(metric, 0.0)
            elif method == 'hybrid':
                # 混合:规则 40% + LLM 60%
                rule_score = rule_results.get('overall', 0.0)
                llm_score = llm_results.get('overall', 0.0)
                results[metric] = rule_score * 0.4 + llm_score * 0.6
        
        return results

四、人工评估流程

4.1 评估标准制定

评估指南模板

# Prompt 质量人工评估指南

## 评估维度

### 1. 准确性(30 分)
- 25-30 分:内容完全准确,无错误
- 15-24 分:内容基本准确,少量错误
- 5-14 分:内容准确性较差,多处错误
- 0-4 分:内容严重错误

### 2. 完整性(20 分)
- 17-20 分:涵盖所有要点,无遗漏
- 11-16 分:涵盖主要要点,少量遗漏
- 6-10 分:遗漏重要要点
- 0-5 分:严重遗漏

### 3. 逻辑性(20 分)
- 17-20 分:逻辑清晰,层次分明
- 11-16 分:逻辑基本清晰
- 6-10 分:逻辑混乱
- 0-5 分:无逻辑

### 4. 格式规范(15 分)
- 13-15 分:格式完全符合要求
- 8-12 分:格式基本符合
- 4-7 分:格式不规范
- 0-3 分:格式严重错误

### 5. 语言表达(15 分)
- 13-15 分:表达流畅,用词准确
- 8-12 分:表达基本流畅
- 4-7 分:表达不清晰
- 0-3 分:表达严重问题

## 评估流程

1. 阅读任务描述
2. 查看 AI 输出
3. 对照评估标准打分
4. 填写评估意见
5. 提交评估结果

4.2 评估平台实现

简单评估系统

# evaluation_platform.py
from typing import List, Dict
from dataclasses import dataclass
from datetime import datetime

@dataclass
class EvaluationTask:
    """评估任务"""
    task_id: str
    prompt_version: str
    input: str
    output: str
    expected_output: str
    status: str = 'pending'  # pending, in_progress, completed

@dataclass
class EvaluationResult:
    """评估结果"""
    task_id: str
    evaluator_id: str
    accuracy: int  # 0-10
    completeness: int  # 0-10
    logic: int  # 0-10
    format: int  # 0-10
    language: int  # 0-10
    comments: str
    created_at: str

class EvaluationPlatform:
    """评估平台"""
    
    def __init__(self):
        self.tasks: List[EvaluationTask] = []
        self.results: List[EvaluationResult] = []
    
    def create_evaluation_task(
        self,
        prompt_version: str,
        input: str,
        output: str,
        expected_output: str
    ) -> str:
        """创建评估任务"""
        import uuid
        task_id = str(uuid.uuid4())
        
        task = EvaluationTask(
            task_id=task_id,
            prompt_version=prompt_version,
            input=input,
            output=output,
            expected_output=expected_output
        )
        
        self.tasks.append(task)
        return task_id
    
    def assign_evaluator(
        self, 
        task_id: str, 
        evaluator_id: str
    ):
        """分配评估员"""
        for task in self.tasks:
            if task.task_id == task_id:
                task.status = 'in_progress'
                task.evaluator_id = evaluator_id
                break
    
    def submit_evaluation(self, result: EvaluationResult):
        """提交评估结果"""
        self.results.append(result)
        
        # 更新任务状态
        for task in self.tasks:
            if task.task_id == result.task_id:
                task.status = 'completed'
                break
    
    def get_evaluation_report(self, prompt_version: str) -> Dict:
        """生成评估报告"""
        version_results = [
            r for r in self.results 
            if any(t.task_id == r.task_id and t.prompt_version == prompt_version 
                   for t in self.tasks)
        ]
        
        if not version_results:
            return {'error': 'No evaluation results'}
        
        # 计算平均分
        avg_scores = {
            'accuracy': sum(r.accuracy for r in version_results) / len(version_results),
            'completeness': sum(r.completeness for r in version_results) / len(version_results),
            'logic': sum(r.logic for r in version_results) / len(version_results),
            'format': sum(r.format for r in version_results) / len(version_results),
            'language': sum(r.language for r in version_results) / len(version_results),
        }
        
        avg_scores['overall'] = sum(avg_scores.values()) / len(avg_scores)
        
        return {
            'prompt_version': prompt_version,
            'evaluation_count': len(version_results),
            'average_scores': avg_scores,
            'score_distribution': self._calculate_distribution(version_results),
            'comments_summary': self._summarize_comments(version_results)
        }
    
    def _calculate_distribution(self, results: List[EvaluationResult]) -> Dict:
        """计算分数分布"""
        distribution = {
            'excellent': 0,  # 9-10
            'good': 0,       # 7-8
            'fair': 0,       # 5-6
            'poor': 0        # 0-4
        }
        
        for r in results:
            overall = (r.accuracy + r.completeness + r.logic + r.format + r.language) / 5
            if overall >= 9:
                distribution['excellent'] += 1
            elif overall >= 7:
                distribution['good'] += 1
            elif overall >= 5:
                distribution['fair'] += 1
            else:
                distribution['poor'] += 1
        
        return distribution
    
    def _summarize_comments(self, results: List[EvaluationResult]) -> str:
        """汇总评估意见"""
        all_comments = [r.comments for r in results if r.comments]
        return '\n'.join(all_comments[:10])  # 只显示前 10 条

五、持续监控体系

5.1 监控指标看板

实现监控仪表板

# monitoring_dashboard.py
from typing import Dict, List
from datetime import datetime, timedelta

class MonitoringDashboard:
    """监控仪表板"""
    
    def __init__(self):
        self.metrics_history: List[Dict] = []
    
    def record_metrics(self, prompt_version: str, metrics: Dict):
        """记录指标"""
        record = {
            'timestamp': datetime.now().isoformat(),
            'prompt_version': prompt_version,
            'metrics': metrics
        }
        self.metrics_history.append(record)
    
    def get_quality_trend(
        self, 
        prompt_version: str, 
        days: int = 7
    ) -> List[Dict]:
        """获取质量趋势"""
        cutoff = datetime.now() - timedelta(days=days)
        
        trend = [
            record for record in self.metrics_history
            if record['prompt_version'] == prompt_version
            and datetime.fromisoformat(record['timestamp']) >= cutoff
        ]
        
        return trend
    
    def get_alert_conditions(self) -> List[Dict]:
        """获取告警条件"""
        return [
            {
                'name': '质量下降',
                'condition': 'overall_score < 0.7',
                'severity': 'high'
            },
            {
                'name': '错误率过高',
                'condition': 'error_rate > 0.05',
                'severity': 'high'
            },
            {
                'name': '延迟过高',
                'condition': 'avg_latency > 3.0',
                'severity': 'medium'
            },
            {
                'name': 'Token 用量异常',
                'condition': 'avg_tokens > 2000',
                'severity': 'low'
            }
        ]
    
    def check_alerts(self, current_metrics: Dict) -> List[Dict]:
        """检查告警"""
        alerts = []
        
        for condition in self.get_alert_conditions():
            # 简化:实际项目中应使用表达式求值
            if condition['name'] == '质量下降':
                if current_metrics.get('overall_score', 1.0) < 0.7:
                    alerts.append(condition)
            elif condition['name'] == '错误率过高':
                if current_metrics.get('error_rate', 0) > 0.05:
                    alerts.append(condition)
            elif condition['name'] == '延迟过高':
                if current_metrics.get('avg_latency', 0) > 3.0:
                    alerts.append(condition)
        
        return alerts

5.2 告警通知

实现告警系统

# alert_system.py
import smtplib
from email.mime.text import MIMEText
from typing import List, Dict

class AlertSystem:
    """告警系统"""
    
    def __init__(self, config: Dict):
        self.config = config
        self.alert_history: List[Dict] = []
    
    def send_alert(self, alert: Dict, metrics: Dict):
        """发送告警"""
        # 记录告警历史
        self.alert_history.append({
            'timestamp': datetime.now().isoformat(),
            'alert': alert,
            'metrics': metrics
        })
        
        # 发送邮件告警
        if self.config.get('email_enabled'):
            self._send_email_alert(alert, metrics)
        
        # 发送钉钉告警
        if self.config.get('dingtalk_enabled'):
            self._send_dingtalk_alert(alert, metrics)
    
    def _send_email_alert(self, alert: Dict, metrics: Dict):
        """发送邮件告警"""
        subject = f"Prompt 质量告警:{alert['name']}"
        body = f"""
告警详情:

告警名称:{alert['name']}
告警级别:{alert['severity']}
触发条件:{alert['condition']}

当前指标:
{self._format_metrics(metrics)}

请及时处理!
        """
        
        msg = MIMEText(body)
        msg['Subject'] = subject
        msg['From'] = self.config['email_from']
        msg['To'] = ', '.join(self.config['email_to'])
        
        # 发送邮件
        # smtp = smtplib.SMTP(self.config['smtp_server'])
        # smtp.send_message(msg)
    
    def _send_dingtalk_alert(self, alert: Dict, metrics: Dict):
        """发送钉钉告警"""
        import requests
        
        webhook_url = self.config['dingtalk_webhook']
        
        message = {
            "msgtype": "markdown",
            "markdown": {
                "title": f"Prompt 质量告警:{alert['name']}",
                "text": f"""
## Prompt 质量告警

- **告警名称**:{alert['name']}
- **告警级别**:{alert['severity']}
- **触发条件**:{alert['condition']}

### 当前指标
{self._format_metrics(metrics)}

请及时处理!
                """
            }
        }
        
        # requests.post(webhook_url, json=message)
    
    def _format_metrics(self, metrics: Dict) -> str:
        """格式化指标"""
        lines = []
        for key, value in metrics.items():
            if isinstance(value, float):
                lines.append(f"- {key}: {value:.2%}")
            else:
                lines.append(f"- {key}: {value}")
        return '\n'.join(lines)

六、实战案例

6.1 电商评论分类 Prompt 评估

评估配置

# evaluation_config.py
evaluation_config = {
    'prompt_name': 'ecommerce-classification',
    'version': 'v1.1.0',
    
    # 评估指标权重
    'weights': {
        'accuracy': 0.6,
        'efficiency': 0.2,
        'stability': 0.2
    },
    
    # 评估方法
    'evaluation_methods': {
        'format_check': 'rule',
        'accuracy': 'hybrid',
        'logic': 'llm'
    },
    
    # 质量阈值
    'quality_thresholds': {
        'min_accuracy': 0.90,
        'min_efficiency': 0.70,
        'min_stability': 0.85,
        'min_overall': 0.85
    },
    
    # 测试用例
    'test_cases': [
        {
            'id': 'case_001',
            'input': '这个产品很好用,推荐购买',
            'expected': {'category': 'positive'},
            'difficulty': 'easy'
        },
        # ... 更多测试用例
    ]
}

评估报告

=== Prompt 质量评估报告 ===

Prompt 版本:ecommerce-classification v1.1.0
评估时间:2026-06-25 10:00:00
测试用例数:100

【综合得分】88.5/100 ✓ 通过

【维度得分】
- 准确性:92.0/100 ✓
  - 任务完成率:95%
  - 格式正确率:98%
  - 内容准确率:90%
  - 逻辑合理性:88%
  - 用户满意度:90%

- 效率性:82.0/100 ✓
  - 平均响应时间:1.2s
  - P95 响应时间:1.8s
  - 平均 Token 用量:850

- 稳定性:85.0/100 ✓
  - 输出一致性:96%
  - 错误率:0.5%
  - 边界场景通过率:88%

【改进建议】
1. 优化边界场景处理,提升边界场景通过率
2. 减少 Token 用量,降低成本
3. 加强反讽表达的识别能力

【历史对比】
vs v1.0.0: +3.5 分 ↑
- 准确性:+5.0 分
- 效率性:-1.0 分
- 稳定性:+2.0 分

七、总结

7.1 核心要点

  1. 评估指标体系

    • 准确性(60% 权重)
    • 效率性(20% 权重)
    • 稳定性(20% 权重)
  2. 评估方法

    • 规则评估:快速、准确
    • LLM 评估:全面、智能
    • 混合评估:兼顾两者优势
  3. 持续监控

    • 建立质量基线
    • 实时监控指标
    • 及时告警处理

7.2 工具推荐

工具用途特点
RAGASRAG 评估专业、全面
TruLensLLM 应用评估实时、可视化
LangSmithPrompt 管理一站式平台
自研系统定制化评估灵活、可控

参考资料


分享这篇文章到:

上一篇文章
MySQL 表分区与分表实战
下一篇文章
Redis List 数据类型详解