MBE市场专家模式标注规范

📋 概述

在专家市场和应用市场中,必须明确标注专家使用的是动态专家模式还是训练专家模式,以便用户了解专家的能力和适用场景。


🏷️ 标注位置

1. 专家市场(Expert Marketplace)

1.1 专家卡片列表

在每个专家卡片上显示专家模式标签:

┌─────────────────────────────────┐
│  [专家头像]  专家名称            │
│              [分类标签]          │
│                                 │
│  描述文本...                    │
│                                 │
│  [标签1] [标签2] [标签3]        │
│                                 │
│  ⭐ 4.9  💬 1.2K次              │
│                                 │
│  [模式标签]  [价格]             │
│  🎯 训练专家  ¥0.001/次         │
└─────────────────────────────────┘

模式标签样式:

  • 训练专家: 🎯 训练专家 (绿色/蓝色背景,表示生产标准)
  • 动态专家: ⚡ 动态专家 (灰色/黄色背景,表示原型/测试)

1.2 专家详情页

在专家详情页顶部显示模式信息:

┌─────────────────────────────────┐
│  专家名称                        │
│  [模式标签] [分类] [评分]        │
│                                 │
│  🎯 训练专家模式                │
│  ────────────────────────────   │
│  • 模型大小: 161MB              │
│  • 推理能力: 强(完整模型)      │
│  • 响应速度: 中等(5-8秒)       │
│  • 适用场景: 生产环境、正式应用  │
│  • 套餐要求: BASIC+             │
│                                 │
│  或                              │
│                                 │
│  ⚡ 动态专家模式                │
│  ────────────────────────────   │
│  • 模型大小: 5.1MB              │
│  • 推理能力: 基础(向量检索)    │
│  • 响应速度: 快(3-4秒)        │
│  • 适用场景: 快速原型、测试     │
│  • 套餐要求: FREE可用           │
└─────────────────────────────────┘

1.3 筛选功能

添加专家模式筛选器:

┌─────────────────────────────────┐
│  筛选条件:                       │
│  [全部] [训练专家] [动态专家]   │
│                                 │
│  分类: [全部 ▼]                 │
│  排序: [热门 ▼]                 │
└─────────────────────────────────┘

2. 应用市场(App Marketplace)

2.1 应用卡片

在应用卡片上显示使用的专家模式:

┌─────────────────────────────────┐
│  📱 应用名称                     │
│  作者: @developer               │
│                                 │
│  描述文本...                    │
│                                 │
│  使用专家:                       │
│  • 经济学专家 [🎯 训练]          │
│  • 逻辑学专家 [🎯 训练]          │
│  • 诊断学专家 [⚡ 动态]          │
│                                 │
│  [查看详情] [下载]              │
└─────────────────────────────────┘

2.2 应用详情页

在应用详情页显示专家模式统计:

┌─────────────────────────────────┐
│  应用详情                        │
│                                 │
│  使用的专家 (6个):               │
│  ────────────────────────────   │
│  🎯 训练专家 (4个):             │
│    • 经济学专家                 │
│    • 逻辑学专家                 │
│    • 诊断学专家                 │
│    • 营养治疗师                 │
│                                 │
│  ⚡ 动态专家 (2个):             │
│    • 茶道专家                   │
│    • 建筑专家                   │
│                                 │
│  ⚠️ 注意: 此应用包含动态专家,   │
│     建议升级为训练专家以获得     │
│     更好的性能和质量。           │
└─────────────────────────────────┘

💾 数据模型更新

1. 专家数据模型

需要在专家数据模型中添加 expert_mode 字段:

from enum import Enum

class ExpertMode(str, Enum):
    """专家模式"""
    DYNAMIC = "dynamic"      # 动态专家(原型/测试)
    TRAINED = "trained"      # 训练专家(生产标准)

@dataclass
class Expert:
    """专家定义"""
    id: str
    name: str
    description: str
    # ... 其他字段 ...
    
    # 新增字段
    expert_mode: ExpertMode = ExpertMode.DYNAMIC  # 专家模式
    model_size_mb: Optional[float] = None         # 模型大小(MB)
    has_trained_model: bool = False               # 是否有训练模型
    
    def to_dict(self) -> Dict[str, Any]:
        return {
            # ... 其他字段 ...
            "expert_mode": self.expert_mode.value,
            "model_size_mb": self.model_size_mb,
            "has_trained_model": self.has_trained_model,
        }

2. 市场模型接口

更新 MarketModel 接口:

export interface MarketModel {
  model_id: string
  developer_id: string
  kb_id: string
  name: string
  description: string
  category: ModelCategory
  tags: string[]
  
  // 新增字段
  expert_mode: 'dynamic' | 'trained'  // 专家模式
  model_size_mb?: number              // 模型大小(MB)
  has_trained_model: boolean           // 是否有训练模型
  
  // ... 其他字段 ...
}

3. 数据库Schema

如果使用数据库存储,需要添加字段:

ALTER TABLE experts ADD COLUMN expert_mode VARCHAR(20) DEFAULT 'dynamic';
ALTER TABLE experts ADD COLUMN model_size_mb FLOAT;
ALTER TABLE experts ADD COLUMN has_trained_model BOOLEAN DEFAULT FALSE;

-- 索引
CREATE INDEX idx_experts_mode ON experts(expert_mode);

🎨 UI组件实现

1. 专家模式标签组件

// ExpertModeBadge.tsx
interface ExpertModeBadgeProps {
  mode: 'dynamic' | 'trained'
  size?: 'sm' | 'md' | 'lg'
}

export function ExpertModeBadge({ mode, size = 'md' }: ExpertModeBadgeProps) {
  const config = {
    dynamic: {
      icon: '⚡',
      label: '动态专家',
      bgColor: 'bg-yellow-500/20',
      textColor: 'text-yellow-300',
      borderColor: 'border-yellow-500/30',
      description: '原型/测试'
    },
    trained: {
      icon: '🎯',
      label: '训练专家',
      bgColor: 'bg-blue-500/20',
      textColor: 'text-blue-300',
      borderColor: 'border-blue-500/30',
      description: '生产标准'
    }
  }
  
  const style = config[mode]
  const sizeClass = {
    sm: 'text-xs px-2 py-0.5',
    md: 'text-sm px-3 py-1',
    lg: 'text-base px-4 py-1.5'
  }[size]
  
  return (
    <span className={`
      inline-flex items-center gap-1.5 rounded-full
      ${style.bgColor} ${style.textColor} ${style.borderColor}
      border ${sizeClass}
    `}>
      <span>{style.icon}</span>
      <span className="font-medium">{style.label}</span>
      <span className="opacity-70 text-xs">({style.description})</span>
    </span>
  )
}

2. 专家卡片更新

// ExpertCard.tsx
export function ExpertCard({ expert }: { expert: Expert }) {
  return (
    <div className="expert-card">
      <div className="expert-header">
        <h3>{expert.name}</h3>
        <div className="flex items-center gap-2">
          <ExpertModeBadge mode={expert.expert_mode} size="sm" />
          <CategoryBadge category={expert.category} />
        </div>
      </div>
      
      <p className="expert-description">{expert.description}</p>
      
      {/* 模式说明 */}
      {expert.expert_mode === 'dynamic' && (
        <div className="expert-mode-info">
          <p className="text-xs text-yellow-400">
            ⚠️ 此专家为动态模式,建议升级为训练模式以获得更好性能
          </p>
        </div>
      )}
      
      <div className="expert-footer">
        <Rating rating={expert.rating} />
        <Price price={expert.price} />
      </div>
    </div>
  )
}

3. 筛选器组件

// ExpertModeFilter.tsx
export function ExpertModeFilter({ 
  value, 
  onChange 
}: { 
  value: 'all' | 'dynamic' | 'trained'
  onChange: (mode: 'all' | 'dynamic' | 'trained') => void 
}) {
  return (
    <div className="flex gap-2">
      <button
        onClick={() => onChange('all')}
        className={value === 'all' ? 'active' : ''}
      >
        全部
      </button>
      <button
        onClick={() => onChange('trained')}
        className={value === 'trained' ? 'active' : ''}
      >
        🎯 训练专家
      </button>
      <button
        onClick={() => onChange('dynamic')}
        className={value === 'dynamic' ? 'active' : ''}
      >
        ⚡ 动态专家
      </button>
    </div>
  )
}

📊 显示规则

1. 自动检测专家模式

系统需要自动检测专家的模式:

def detect_expert_mode(expert_id: str, kb_id: str) -> ExpertMode:
    """自动检测专家模式"""
    
    # 1. 检查是否有训练模型
    trained_model_path = f"training/checkpoints/expert_{kb_id}_best.pt"
    if Path(trained_model_path).exists():
        return ExpertMode.TRAINED
    
    # 2. 检查知识库状态
    kb = get_knowledge_base(kb_id)
    if kb and kb.status == "ready":
        # 检查是否有训练任务记录
        training_tasks = get_training_tasks(kb_id)
        if any(task.status == "completed" for task in training_tasks):
            return ExpertMode.TRAINED
    
    # 3. 默认返回动态专家
    return ExpertMode.DYNAMIC

2. 显示优先级

  • 训练专家优先显示: 在列表中,训练专家应该排在动态专家前面
  • 明确标注: 所有专家都必须明确标注模式,不能模糊
  • 升级提示: 动态专家应该显示升级提示

3. 搜索和筛选

  • 支持按模式筛选: 用户可以筛选只看训练专家或动态专家
  • 搜索建议: 搜索时可以根据模式提供建议
  • 排序选项: 可以按模式排序(训练专家优先)

⚠️ 重要提示

1. 用户购买前提示

当用户选择动态专家时,应该显示提示:

⚠️ 此专家为动态模式(原型/测试)
   
   特点:
   • 响应速度快(3-4秒)
   • 推理能力基础
   • 适合快速原型和测试
   
   建议:
   • 生产环境请使用训练专家
   • 升级为训练专家可获得更强推理能力
   
   [继续购买] [查看训练专家]

2. 应用使用提示

当应用包含动态专家时,应该显示提示:

⚠️ 此应用包含动态专家
   
   影响:
   • 部分功能可能使用动态专家模式
   • 建议升级为训练专家以获得更好性能
   
   包含的动态专家:
   • 茶道专家
   • 建筑专家
   
   [查看详情] [升级为训练专家]

📝 实施检查清单

数据层

  • 添加 expert_mode 字段到专家数据模型
  • 添加 model_size_mb 字段
  • 添加 has_trained_model 字段
  • 更新数据库Schema(如适用)
  • 实现自动检测专家模式的函数

API层

  • 更新专家列表API,包含 expert_mode 字段
  • 更新专家详情API,包含模式信息
  • 添加按模式筛选的查询参数
  • 更新应用市场API,包含使用的专家模式

UI层

  • 创建 ExpertModeBadge 组件
  • 更新专家卡片,显示模式标签
  • 更新专家详情页,显示模式信息
  • 添加模式筛选器
  • 添加升级提示组件
  • 更新应用卡片,显示使用的专家模式
  • 更新应用详情页,显示模式统计

文档

  • 更新API文档,说明 expert_mode 字段
  • 更新用户指南,说明两种模式的区别
  • 更新开发者文档,说明如何标注模式

✅ 总结

在专家市场和应用市场中标注专家模式是必须的,因为:

  1. 透明度: 用户需要知道他们购买的是什么类型的专家
  2. 决策支持: 帮助用户选择最适合的专家
  3. 质量保证: 明确区分生产标准和测试原型
  4. 升级引导: 引导用户从动态专家升级到训练专家

核心原则: 所有专家都必须明确标注模式,不能模糊或隐藏。