Prompt 分类路由
该提议引入了一个统一的内容扫描和路由框架,通过三个互补的信号源扩展了 vLLM Semantic Router:
- 基于关键字的路由 - 确定性的、快速的、用于精确术语匹配的布尔逻辑 (Boolean Logic)。
- Regex 内容扫描 - 基于模式的检测,用于安全、合规和结构化数据。
- 嵌入相似度扫描 - 对改写具有鲁棒性的语义概念检测。
所有这三个信号都通过信号融合层 (Signal Fusion Layer)与现有的基于 BERT 的分类集成,在保持与当前架构向后兼容的同时,为用户提供强大、灵活的路由控制平面。
关键设计原则
- 互补而非替代:增强现有的 BERT 分类,而不是取代它。
- 双重执行路径:支持树内 (In-Tree)(低延迟)和通过 MCP 实现的树外 (Out-of-Tree)(高灵活性)模式。
- 策略驱动融合:允许用户使用布尔表达式、阈值和加权规则组合信号。
- 性能意识:为常见情况提供快速路径,同时支持复杂场景。
- 安全第一:ReDoS 防护、输入验证和全面的审计日志记录。
问题陈述与动机
当前局限性
vLLM Semantic Router 目前完全依赖 ModernBERT 分类进行语义类别检测。虽然功能强大,但这种方法有几个局限性:
来自 Issue #313:缺乏确定性路由
问题: 无法根据特定关键字或技术术语路由查询。
- 查询:“如何使用 RBAC 保护 Kubernetes 集群?”
- 当前:必须运行 ML 推理(~20-30ms)→ 分类为“计算机科学”→ 路由到通用模型。
- 期望:匹配关键字
["kubernetes", "k8s", "RBAC"]→ 直接路由到[k8s-expert, devops-model]。
影响:
- 对于可以 1-2ms 内确定性路由的查询,产生了不必要的延迟(~20-30ms)。
- 路由精度较低(“计算机科学”类别过于宽泛)。
- 无法利用领域知识(例如,“CVE-”模式总是指向安全模型)。
- 复杂匹配缺乏布尔逻辑(例如,“Kubernetes AND 安全” vs “Kubernetes OR Docker”)。
缺乏类别之外的语义概念检测
问题: 无法检测查询中是否存在特定概念/主题。
- 无法基于“多步推理”概念检测进行路由。
- 无法检测特定领域的意图,如“情感分析”或“代码生成”。
- 嵌入相似度仅用于缓存,而不用于路由决策。
使用场景
场景 1:技术特定路由 (Issue #313)
场景: 企业 AI 网关路由到专门的基础设施模型。
# 期望配置
keyword_routing:
rules:
- name: "kubernetes-infrastructure"
keywords: ["kubernetes", "k8s", "kubectl", "helm"]
operator: "OR"
models: ["k8s-expert", "devops-model"]
priority: 100
优势:
- 确定性路由仅需 ~1-2ms,而 ML 推理需 ~20-30ms。
- 基于领域专业知识的精确模型选择。
- 易于更新和维护,无需 ML 重新训练。
场景 2:安全关键模式检测
场景: 防止数据泄露和合规违规。
regex_scanning:
rules:
- name: "ssn-detection"
pattern: '\b\d{3}-\d{2}-\d{4}\b'
action: "block"
response: "Cannot process queries containing SSN patterns"
- name: "cve-routing"
pattern: 'CVE-\d{4}-\d{4,7}'
action: "route"
models: ["security-hardened-model"]
优势:
- 保证拦截 PII/敏感模式(无 ML 漏报)。
- 合规审计追踪。
- 亚毫秒级检测。
场景 3:语义意图检测
场景: 路由需要多步推理的查询。
embedding_similarity:
concepts:
- name: "multi-step-reasoning"
keywords:
- "step-by-step"
- "break down the problem"
- "analyze systematically"
threshold: 0.75
action: "boost_category"
category: "reasoning"
优势:
- 对改写具有鲁棒性(“详细解释” → 类似于“逐步”)。
- 无需精确词匹配即可检测语义存在。
- 通过细粒度的意图检测补充 BERT 分类。
提议的解决方案架构
高层系统设计
组件分解
树内 (In-Tree) 信号提供者(低延迟路径)
树内路径提供了四个核心信号提供者,它们直接在路由进程内运行,以实现最小延迟:
A. 关键字匹配器 (Keyword Matcher)
关键字匹配器对查询中的精确术语或短语执行快速、确定性的匹配。
工作原理:
- 维护一个关键字规则集合,每个规则包含一个待匹配的术语列表。
- 扫描传入查询中是否存在这些关键字。
- 支持布尔运算符(AND/OR)以组合多个关键字。
- 可以是大小写敏感或大小写不敏感的。
- 返回匹配的规则及其关联的候选模型。
特性:
- 性能: 处理包含数百个关键字的数十条规则约为 ~1-2ms。
- 使用场景: 技术术语(Kubernetes, SQL)、产品名称、领域特定词汇。
- 复杂度: O(n×m),其中 n=规则数,m=每条规则的关键字数。
- 局限性: 无模糊匹配,无正则表达式模式,仅限精确术语匹配。
示例用途: 将包含“Kubernetes”或“k8s”的查询路由到基础设施专家模型。
B. Regex 扫描器 (Regex Scanner)
Regex 扫描器使用正则表达式模式来检测查询中的结构化数据和特定模式。
工作原理:
- 启动时使用 RE2 引擎编译正则表达式模式(保证线性时间匹配)。
- 针对所有模式扫描查询内容。
- 每个模式可以指定一个动作(拦截、路由或记录)。
- 返回带有相关动作的匹配项。
特性:
- 性能: 处理数十个模式约为 ~2-5ms。
- 使用场景: PII 模式(SSN、信用卡)、CVE ID、电子邮件地址、结构化数据。
- 安全: RE2 引擎防止灾难性回溯(ReDoS 防护)。
- 局限性: 适用于少于 100 个模式;对于更大的规则集,请使用带有 Hyperscan 的 MCP。
示例用途: 检测并拦截社会安全号码,将 CVE ID 路由到安全模型。
C. 嵌入相似度扫描器 (Embedding Similarity Scanner)
嵌入相似度扫描器检测可能以不同方式表达的语义概念和意图。
工作原理:
- 复用路由中现有的 BERT 嵌入器。
- 启动时预先计算概念关键字的嵌入。
- 对传入查询进行一次嵌入。
- 计算查询嵌入与每个概念关键字嵌入之间的余弦相似度。
- 聚合相似度(均值、最大值或任何阈值)。
- 返回超过其配置相似度阈值的概念。
特性:
- 性能: ~5-10ms(一次性嵌入 + 快速余弦相似度)。
- 使用场景: 语义意图检测(多步推理、代码生成、情感分析)。
- 优势: 对改写和词选择变化具有鲁棒性。
- 局限性: 需要阈值校准;可解释性低于关键字/Regex。
示例用途: 检测“多步推理”请求,即使其表述为“详细解释”或“引导我完成”。
D. BERT 分类器(现有)
现有的基于 BERT 的分类器仍然是一个核心信号提供者,现在被视为与新扫描方法平等的同行。
工作原理:
- 使用 ModernBERT 模型将查询分类为语义类别。
- 返回类别名称和置信度分数。
- 类别映射到带有评分的模型池。
特性:
- 性能: ~20-30ms。
- 使用场景: 广泛的语义分类(计算机科学、推理、生物学等)。
- 优势: 成熟稳定,处理细微的语义理解。
- 角色: 既作为信号,也作为其他信号不匹配时的回退方案。
树外 (Out-of-Tree) 信号提供者(MCP 路径)
MCP(模型上下文协议)服务器作为独立的进程或服务运行,以适度增加延迟为代价提供灵活性和可扩展性。
A. MCP 关键字扫描器
外部关键字扫描服务,可以处理海量规则集和专门的匹配引擎。
能力:
- Aho-Corasick 算法:高效地同时搜索数千到数万个字面关键字。
- Hyperscan 引擎:使用编译好的模式数据库处理数万到数十万个复杂的 Regex 模式。
- 自定义匹配逻辑:领域特定算法(例如 SQL 注入检测、代码分析)。
优势:
- 无需重启路由即可热重载规则集。
- 扩展到海量模式数据库(100K+ 模式)。
- 将 CPU 密集型匹配卸载到专用服务。
- 独立的版本控制和生命周期管理。