model_selector重构

model_selector.py Control/Data Plane分离重构

项目周期: 2026-02-15 负责人: Atlas🐻 状态: Phase 1完成 ✓


项目背景

问题来源: Gemini排雷指令S2-1

"model_selector.py是'阿喀琉斯之踵',路由逻辑与调用逻辑耦合严重。"

重构目标: "换传输层,保路由脑" - Control Plane(控制面): MessageClassifier + BudgetController + RouteDecider,纯逻辑无HTTP - Data Plane(数据面): 统一LiteLLM网关调用,单一HTTP入口


成果交付

1. 核心代码重构

  • 文件: 09-虚拟办公区系统/model_selector.py
  • 版本: V7.0-AIOS-S2 → V7.0-AIOS-S3
  • 代码行数: 886行 → ~770行 (-13%)

2. 新增类

  • LiteLLMDataPlane (170行) - 统一数据面调用层
  • call(route_decision, ...) - 含降级链的统一入口
  • _call_litellm(model_id, ...) - 核心HTTP调用方法
  • is_gateway_alive() - 网关健康检查

3. 移除类

  • ModelAdapter 基类 (30行)
  • LiteLLMAdapter (70行)
  • ModelAdapterFactory (140行)

4. 文档产出

  • 方案文档: 02-蜂巢创科/Atlas工作区/model_selector重构方案.md
  • 完成报告: 02-蜂巢创科/Atlas工作区/model_selector重构完成报告.md
  • 验证脚本: 09-虚拟办公区系统/test_model_selector_refactor.py

验证结果

✓ Import测试: 成功
✓ Control Plane: Classifier + Budget + Router 正常
✓ Data Plane: LiteLLMDataPlane正常,网关在线
✓ 端到端测试: route_and_call()成功调用GLM-4-flash
✓ 向后兼容: chat_router.py / coco_supervisor.py无需修改

技术关键点

架构分离

┌─ Control Plane (路由脑) ─┐    ┌─ Data Plane (传输层) ─┐
│  MessageClassifier        │    │  LiteLLMDataPlane       │
│  BudgetController         │─▶  │    ├─ call()            │
│  RouteDecider             │    │    └─ _call_litellm()   │
└──────────────────────────┘    └─────────────────────────┘
         纯逻辑                         统一HTTP入口

向后兼容

# ModelSelector公开API完全不变
selector = ModelSelector(config_path)
result = selector.route_and_call(message, system_prompt, ...)

# 返回格式不变
{
    'text': '...',
    'model': 'glm-4-flash',
    'category': 'daily',
    'tier': 'free',
    'tokens_used': 75,
    'cost_usd': 0.000008,
    'latency_ms': 2048,
    'warning': None,
    'error': None,
    'source': 'model_selector'
}

后续计划

  • Phase 2: 控制面独立到routing/route_decider.py(计划0.5天)
  • Phase 3: 数据防火墙集成到Data Plane(计划0.5天)
  • Phase 4: 可观测性增强(trace_id、metrics)(计划0.5天)

关联文档


Atlas🐻 | 蜂巢创科全栈系统工程师 | 2026-02-15

进展日志文件不存在
产出索引文件不存在