资讯动态

【Bug已解决】Feature request: Profile-aware prompt router with ML-backed routing and ensemble fallback

发布时间:2026/8/17 21:29:41 来源:尧图企业网站定制
【Bug已解决】Feature request: Profile-aware prompt router with ML-backed routing and ensemble fallback一、现象长什么样在一个多模型部署里常需要把不同 prompt 路由到最合适的模型比如代码问题给强推理模型、闲聊给小模型、长文档给长上下文模型。但现成的路由方式很粗糙关键词/规则路由写if code in prompt: model_a覆盖窄、维护累、容易漏。轮询/随机完全不看 prompt 内容质量和成本都不可控。无降级一旦路由到的模型挂了或超时直接失败没有拿不准时让多个模型投票的兜底。于是出现明明是代码问题却被小模型答得很差模型超时整个请求挂掉的情况。本篇要做的 feature 是profile-aware按 prompt 画像的路由用 ML 给 prompt 分类code/creative/math/long-doc...并支持集成回退ensemble fallback——当分类置信度低时让多个候选模型各答一份再聚合。二、背景路由的核心是先理解 prompt 属于哪类任务再选模型。ML-backed 路由用一个轻量分类器如小模型、或 embedding 近邻给 prompt 打 profile 分布命中高置信度则直接路由低置信度则进入 ensemble让 top-k 候选模型都生成再用一个聚合器投票/最长一致/再让裁判选产出最终答案。这比规则路由泛化好比随机/轮询质量高且 ensemble fallback 提升了韧性。难点在于分类器要快不能比直接答还慢、路由决策要可观测、ensemble 成本要可控。三、根因路由不好用的根因无画像分类路由靠手写规则或随机不理解 prompt 语义。无韧性兜底单点路由模型失败即全局失败没有 ensemble 降级。决策不可观测不知道为什么路由到某模型难优化。本质把路由当成简单分发忽略了它应是语义理解 韧性兜底的两段式决策。四、最小可运行复现下面演示规则路由漏判 无兜底def naive_route(prompt): if def in prompt or bug in prompt: return strong-model return small-model # 大量任务被错分 # 一个其实是数学但没关键字命中的 prompt print(naive_route(证明费马小定理)) # - small-model错分修复用分类器打 profile 低置信进 ensemble。def route(prompt, classifier, models): dist classifier.profile(prompt) # {code:.1, math:.7, ...} best, conf max(dist.items(), keylambda x: x[1]) if conf 0.8: return models[best] # 低置信ensemble 兜底 return Ensemble(models[top_k(dist)])五、解决方案第一层最小直接修复最小修法实现 classifier router ensemble fallback低置信时聚合多模型。def route_with_fallback(prompt, classifier, candidates, threshold0.8): dist classifier(prompt) best, conf max(dist.items(), keylambda kv: kv[1]) if conf threshold: return candidates[best](prompt) # ensembletop-2 各答聚合 top2 sorted(dist, keydist.get, reverseTrue)[:2] answers [candidates[m](prompt) for m in top2] return aggregate(answers) # 投票/最长一致这一层让路由按语义且带韧性。六、解决方案第二层结构化改进把路由策略固化成策略对象作为单一事实来源明确阈值、ensemble 大小、聚合方式。from dataclasses import dataclass, field from typing import Dict, List dataclass(frozenTrue) class LangChainPromptRouterPolicy: profile-aware 路由策略的单一事实来源。 confidence_threshold: float 0.8 ensemble_top_k: int 2 aggregate: str majority_vote profiles: List[str] field(default_factorylambda: [code, math, creative, long_doc]) def decide(self, dist: Dict[str, float], candidates) - object: best, conf max(dist.items(), keylambda kv: kv[1]) if conf self.confidence_threshold: return candidates[best] top_k sorted(dist, keydist.get, reverseTrue)[:self.ensemble_top_k] return Ensemble([candidates[m] for m in top_k]) def validate(self) - None: if not (0.0 self.confidence_threshold 1.0): raise AssertionError(threshold must be in (0,1]) if self.ensemble_top_k 1: raise AssertionError(ensemble_top_k 1)router 读policy阈值/聚合集中、可测。七、解决方案第三层断言 / CI 守护用 pytest 锁死路由决策import pytest from policy import LangChainPromptRouterPolicy as P def test_high_conf_direct(): p P() dist {code: 0.9, math: 0.05} out p.decide(dist, {code: lambda p: C, math: lambda p: M}) assert out C def test_low_conf_ensemble(): p P() dist {code: 0.5, math: 0.45} out p.decide(dist, {code: lambda p: C, math: lambda p: M}) assert isinstance(out, Ensemble) def test_threshold_range(): with pytest.raises(AssertionError): P(confidence_threshold1.5).validate() def test_top_k_valid(): with pytest.raises(AssertionError): P(ensemble_top_k0).validate()CI 加一条用一批标注过 profile 的 prompt 跑 router断言高置信路由正确、低置信进 ensemble。八、排查清单任务被错分给不合适的模型→ 路由靠规则/随机需 ML 画像。模型超时整条挂→ 无 ensemble fallback需低置信兜底。为什么路由到某模型→ 决策要可观测记录 dist。分类器会不会比直接答还慢→ 用轻量分类器/embedding。ensemble 成本可控吗→ 限制 top_k 与阈值。是否有路由决策测试→ 必须有。九、小结朴素路由规则/随机不理解 prompt 语义、无韧性兜底导致错分与单点失败。本篇给出 profile-aware 路由用 ML 给 prompt 打画像高置信直路由、低置信进 ensemble 聚合。第一层实现 classifierrouterfallback第二层用LangChainPromptRouterPolicy把阈值/聚合固化成单一事实来源第三层用 pytest 守护决策。多模型路由的通用原则路由应是语义理解 韧性兜底的两段式低置信必须 ensemble 而非赌一把。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价