feat: 多专业小模型+路由模型系统 MVP(mock 全链路 + FastAPI 网关 + 论文调研)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""查询难度估计器(启发式,纯标准库)。
|
||||
|
||||
依据:RouterArena 用 Bloom 分类法把问题分为 easy/medium/hard。
|
||||
这里用查询长度、指令动词、数学/推理标记做轻量估计。
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from typing import Tuple
|
||||
|
||||
# 触发 hard 的指令动词 / 推理标记
|
||||
_HARD_MARKERS = [
|
||||
"证明", "推导", "为什么", "如何", "对比", "比较", "分析", "评估", "设计", "优化",
|
||||
"复杂度", "时间复杂度", "空间复杂度", "原理", "机制", "优缺点", "区别", "推论", "定理",
|
||||
"proof", "prove", "derive", "explain why", "why", "how", "compare", "contrast",
|
||||
"analy", "evaluate", "design", "optimize", "refactor", "architect",
|
||||
"implement", "debug", "review", "plan", "synthesize",
|
||||
"int", "sum", "sqrt", "lim", "log", "derivative", "integral",
|
||||
]
|
||||
# 触发 medium 的标记
|
||||
_MEDIUM_MARKERS = [
|
||||
"用", "写", "计算", "求解", "生成", "翻译", "总结", "解释",
|
||||
"注意", "建议", "是否", "实现", "步骤",
|
||||
"write", "code", "function", "script", "calculate", "solve", "summarize",
|
||||
"translate", "fix", "explain", "describe", "list",
|
||||
]
|
||||
|
||||
|
||||
def estimate_difficulty(query: str) -> Tuple[str, float]:
|
||||
"""返回 (difficulty, score),score 属于 [0,1]。"""
|
||||
q = query.lower()
|
||||
hard_hits = sum(1 for m in _HARD_MARKERS if m in q)
|
||||
medium_hits = sum(1 for m in _MEDIUM_MARKERS if m in q)
|
||||
length = len(query)
|
||||
|
||||
score = 0.0
|
||||
score += min(0.30, length / 600.0) # 长度贡献
|
||||
score += min(0.55, hard_hits * 0.25) # 推理标记贡献
|
||||
score += min(0.30, medium_hits * 0.08) # 一般指令贡献
|
||||
|
||||
# 额外:代码 / 数学表达式(多步骤信号)
|
||||
if "```" in query or re.search(r"\b(def|class|function|import)\b", q):
|
||||
score += 0.15
|
||||
if re.search(r"[0-9]+\s*[+\-*/^=]\s*[0-9xya-z]", q):
|
||||
score += 0.15
|
||||
|
||||
score = max(0.0, min(1.0, score))
|
||||
if score >= 0.55:
|
||||
return "hard", score
|
||||
if score >= 0.25:
|
||||
return "medium", score
|
||||
return "easy", score␍
|
||||
Reference in New Issue
Block a user