tzt 0dad895aac feat(v1): T-R2 采纳 llmrouter「规则文档即配置」——分类规则外置 config/routes.json
- classifier.load_domain_rules():支持 .json(必有)/.yaml(pyyaml 可选,与
  config.py 同一可选依赖纪律);文件按 domain 整域覆盖内置 DOMAIN_RULES
  (与 v2 知识库'文件按 id 覆盖'同一惯例);缺失/格式非法/条目非法整体
  安全回退内置(llmrouter 失败安全思想,规则文档编辑错误不打垮路由)
- build_classifier:cfg.rules_file 显式指定,未指定时约定路径 config/routes.json
  存在即自动加载(约定优于配置,ROUTES.md 精髓:改文档即改行为,可 review 可版本化)
- 新增 tests/test_rules_external.py 5 项;全量 38 passed(33+5)
2026-09-19 09:24:56 +08:00

多专业小模型 + 路由模型系统(MVP)

用「轻量分类路由器 + 专业小模型池 + 质量控制器(Judge) + 大模型回退」在限定条件下替代单一通用大模型, 实现 成本降低 80%+、延迟可控 的目标。本仓库是《实现方案_多专业小模型+路由模型.md》的第一阶段落地。

当前能力(2026-08-12 已跑通)

  • 零依赖 mock 全链路可运行:缓存 → 分类 → 专家 → Judge → 回退
  • 5 领域意图分类(code / math / legal / medical / general),规则分类器准确率 100%15 条评测样例)
  • 两阶段缓存(L1 精确 + L2 语义 n-gram,零依赖),评测缓存命中率 40%
  • 质量控制器(Judge)自动评估输出并触发升级,升级率 20%(命中第二阶段验收线)
  • FastAPI 网关:/chat /health /metrics20 项单元测试全部通过
  • 可选接入真实模型:HuggingFace 小模型(type: hf)或 OpenAI 兼容 APItype: api

🚀 快速开始

# 1. 创建虚拟环境并安装依赖(核心 router_system 零依赖,网关/测试需要轻量依赖)
C:\Python314\python.exe -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt

# 2. 运行演示(mock 模式,离线可跑)
.venv\Scripts\python.exe scripts/demo.py

# 3. 迷你评估(分类准确率 / 升级率 / 缓存命中率)
.venv\Scripts\python.exe scripts/eval.py --repeat 2

# 4. 运行单元测试
.venv\Scripts\python.exe -m pytest tests -v

# 5. 启动 API 网关
.venv\Scripts\python.exe scripts/serve.py --port 8000
#   停止:.venv\Scripts\python.exe scripts/serve.py --stop

# 6. 调用接口
curl http://127.0.0.1:8000/health
curl -X POST http://127.0.0.1:8000/chat -H "Content-Type: application/json" -d '{"query":"用 Python 写一个快速排序函数"}'
curl http://127.0.0.1:8000/metrics

🏗️ 架构

用户查询
   │
   ▼
┌───────────────────┐    ┌──────────────────┐
│ RouterCache 缓存   │───▶│ 命中 → 直接返回    │
│ (L1精确 / L2语义)  │    └──────────────────┘
└─────────┬─────────┘
          ▼ 未命中
┌───────────────────┐   低置信度(<0.60) ┌──────────────────┐
│ 分类路由器          │ ───────────────▶ │ 大模型回退         │
│ RuleClassifier /   │                  │ Mock / DeepSeek  │
│ HuggingFace        │                  └──────────────────┘
└─────────┬─────────┘
          ▼ 高置信度
┌───────────────────┐
│ 专家模型池          │  code/math/legal/medical/general
│ Mock / HF / API    │
└─────────┬─────────┘
          ▼
┌───────────────────┐   质量分<0.70 ┌──────────────────┐
│ Judge 质量控制器    │ ────────────▶ │ 升级大模型回退     │
│ Rule / LLM-as-Judge│              └──────────────────┘
└───────────────────┘

一次请求的完整路由轨迹示例:

cache:miss -> classify:code@0.95/hard -> expert:expert-code -> judge:0.96
cache:miss -> classify:general@0.50/easy -> direct_fallback

⚙️ 配置(config/config.yaml

默认全 mock(零依赖离线)。接入真实模型只需改 type

组件 当前 可切换 说明
classifier rule hf 正式环境建议训练 BERT 级分类器(94-97%
experts.* mock hf / api HF 小模型或 OpenAI 兼容 API
judge rule llm LLM-as-Judge
fallback mock api 设置 DEEPSEEK_API_KEY 环境变量

关键阈值:

  • low_confidence_threshold: 0.60 —— 分类置信度低于此值直接走大模型
  • judge_fallback_threshold: 0.70 —— Judge 质量分低于此值升级大模型

📂 目录结构

├── router_system/          # 核心(零依赖纯标准库)
│   ├── classifier.py       # 意图分类器(规则 / HF
│   ├── difficulty.py       # 难度估计
│   ├── experts.py          # 专家池(Mock / HF / API
│   ├── judge.py            # 质量控制器
│   ├── fallback.py         # 大模型回退
│   ├── cache.py            # 两阶段缓存
│   ├── router.py           # 主路由
│   └── stats.py            # 指标
├── gateway/api.py          # FastAPI 网关
├── scripts/                # demo / eval / serve / train_classifier
├── tests/                  # 20 项单元测试
├── config/config.yaml      # 配置
└── research/               # 论文调研

📊 验收指标对照(实现方案 5.1/5.2)

指标 目标 当前(mock 评测)
分类准确率 ≥95%(正式) 100%15 条样例)
升级率(fallback rate ≤20% 20%
缓存命中率 ≥30% 40%
端到端延迟 < 大模型 1.5× mock 下 ~10-16ms

🔜 下一步(对照实现方案)

  1. 接入真实小模型:pip install -r requirements-ml.txtexperts.*.typehf
  2. 训练 BERT 级分类器替代规则分类器(scripts/train_classifier.py 流水线骨架)
  3. 用 RouterArenaGitHub)标准化评测路由质量
  4. 接入 DeepSeek 等大模型 API 作为真实回退层
  5. 语义缓存升级为 embedding 检索(当前为 n-gram 轻量方案)
S
Description
No description provided
Readme
97 MiB
Languages
HTML 51.8%
Python 48.2%