111 lines
4.2 KiB
Python
111 lines
4.2 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
|
|||
|
|
"""
|
|||
|
|
AI准确率配置
|
|||
|
|
管理AI建议的准确率阈值和相关配置
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from dataclasses import dataclass
|
|||
|
|
from typing import Dict, Any
|
|||
|
|
|
|||
|
|
@dataclass
|
|||
|
|
class AIAccuracyConfig:
|
|||
|
|
"""AI准确率配置类"""
|
|||
|
|
|
|||
|
|
# 相似度阈值配置
|
|||
|
|
auto_approve_threshold: float = 0.95 # 自动审批阈值(≥95%)
|
|||
|
|
use_human_resolution_threshold: float = 0.90 # 使用人工描述阈值(<90%)
|
|||
|
|
manual_review_threshold: float = 0.80 # 人工审核阈值(≥80%)
|
|||
|
|
|
|||
|
|
# 置信度配置
|
|||
|
|
ai_suggestion_confidence: float = 0.95 # AI建议默认置信度
|
|||
|
|
human_resolution_confidence: float = 0.90 # 人工描述置信度
|
|||
|
|
|
|||
|
|
# 入库策略配置
|
|||
|
|
prefer_human_when_low_accuracy: bool = True # 当AI准确率低时优先使用人工描述
|
|||
|
|
enable_auto_approval: bool = True # 是否启用自动审批
|
|||
|
|
enable_human_fallback: bool = True # 是否启用人工描述回退
|
|||
|
|
|
|||
|
|
def get_threshold_explanation(self, similarity: float) -> str:
|
|||
|
|
"""获取相似度阈值的解释"""
|
|||
|
|
if similarity >= self.auto_approve_threshold:
|
|||
|
|
return f"相似度≥{self.auto_approve_threshold*100:.0f}%,自动审批使用AI建议"
|
|||
|
|
elif similarity >= self.manual_review_threshold:
|
|||
|
|
return f"相似度≥{self.manual_review_threshold*100:.0f}%,建议人工审核"
|
|||
|
|
elif similarity >= self.use_human_resolution_threshold:
|
|||
|
|
return f"相似度<{self.use_human_resolution_threshold*100:.0f}%,建议使用人工描述"
|
|||
|
|
else:
|
|||
|
|
return f"相似度<{self.use_human_resolution_threshold*100:.0f}%,优先使用人工描述"
|
|||
|
|
|
|||
|
|
def should_use_human_resolution(self, similarity: float) -> bool:
|
|||
|
|
"""判断是否应该使用人工描述"""
|
|||
|
|
return similarity < self.use_human_resolution_threshold
|
|||
|
|
|
|||
|
|
def should_auto_approve(self, similarity: float) -> bool:
|
|||
|
|
"""判断是否应该自动审批"""
|
|||
|
|
return similarity >= self.auto_approve_threshold and self.enable_auto_approval
|
|||
|
|
|
|||
|
|
def get_confidence_score(self, similarity: float, use_human: bool = False) -> float:
|
|||
|
|
"""获取置信度分数"""
|
|||
|
|
if use_human:
|
|||
|
|
return self.human_resolution_confidence
|
|||
|
|
else:
|
|||
|
|
return max(similarity, self.ai_suggestion_confidence)
|
|||
|
|
|
|||
|
|
def to_dict(self) -> Dict[str, Any]:
|
|||
|
|
"""转换为字典格式"""
|
|||
|
|
return {
|
|||
|
|
"auto_approve_threshold": self.auto_approve_threshold,
|
|||
|
|
"use_human_resolution_threshold": self.use_human_resolution_threshold,
|
|||
|
|
"manual_review_threshold": self.manual_review_threshold,
|
|||
|
|
"ai_suggestion_confidence": self.ai_suggestion_confidence,
|
|||
|
|
"human_resolution_confidence": self.human_resolution_confidence,
|
|||
|
|
"prefer_human_when_low_accuracy": self.prefer_human_when_low_accuracy,
|
|||
|
|
"enable_auto_approval": self.enable_auto_approval,
|
|||
|
|
"enable_human_fallback": self.enable_human_fallback
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@classmethod
|
|||
|
|
def from_dict(cls, data: Dict[str, Any]) -> 'AIAccuracyConfig':
|
|||
|
|
"""从字典创建配置"""
|
|||
|
|
return cls(**data)
|
|||
|
|
|
|||
|
|
# 默认配置实例
|
|||
|
|
DEFAULT_CONFIG = AIAccuracyConfig()
|
|||
|
|
|
|||
|
|
# 配置预设
|
|||
|
|
PRESETS = {
|
|||
|
|
"conservative": AIAccuracyConfig(
|
|||
|
|
auto_approve_threshold=0.98,
|
|||
|
|
use_human_resolution_threshold=0.85,
|
|||
|
|
manual_review_threshold=0.90,
|
|||
|
|
human_resolution_confidence=0.95
|
|||
|
|
),
|
|||
|
|
"balanced": AIAccuracyConfig(
|
|||
|
|
auto_approve_threshold=0.95,
|
|||
|
|
use_human_resolution_threshold=0.90,
|
|||
|
|
manual_review_threshold=0.80,
|
|||
|
|
human_resolution_confidence=0.90
|
|||
|
|
),
|
|||
|
|
"aggressive": AIAccuracyConfig(
|
|||
|
|
auto_approve_threshold=0.90,
|
|||
|
|
use_human_resolution_threshold=0.80,
|
|||
|
|
manual_review_threshold=0.70,
|
|||
|
|
human_resolution_confidence=0.85
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
def get_accuracy_config(preset: str = "balanced") -> AIAccuracyConfig:
|
|||
|
|
"""获取准确率配置"""
|
|||
|
|
return PRESETS.get(preset, DEFAULT_CONFIG)
|
|||
|
|
|
|||
|
|
def update_accuracy_config(config: AIAccuracyConfig) -> bool:
|
|||
|
|
"""更新准确率配置(可以保存到文件或数据库)"""
|
|||
|
|
try:
|
|||
|
|
# 这里可以实现配置的持久化存储
|
|||
|
|
# 例如保存到配置文件或数据库
|
|||
|
|
return True
|
|||
|
|
except Exception:
|
|||
|
|
return False
|