拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OmniRoute Auto-Combo 引擎:自适应评分路由、自愈排除与零配置自动选商原理

OmniRoute Auto-Combo 引擎自适应评分路由、自愈排除与零配置自动选商原理【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRouteOmniRoute 的 Auto-Combo 引擎让网关为每个请求动态挑选最优的 Provider/Model 组合你只需声明一个候选池引擎便通过加权评分函数、自愈排除机制与带探索bandit的流量分配来完成自动路由。本文基于仓库中docs/i18n/no/docs/routing/AUTO-COMBO.md文档Auto-Combo 引擎说明结合open-sse/services/autoCombo/下的真实源码完整讲解评分因子与权重、Mode Packs、自愈逻辑、探索策略、REST API 用法与任务适配表帮助你既能直接使用auto/*路由也能理解并调优其底层选择逻辑。它解决什么问题在多 Provider 环境下同一网关接入 Anthropic、Google、OpenAI 等多家上游该把这条请求发给谁是一个持续变化的决策配额会耗尽、线路会抖动、价格与延迟随任务类型而各有优劣。Auto-Combo 引擎把这个决策自动化——对每个候选provider × model × connection计算一个 0 到 1 之间的加权得分选最高分者并通过自愈机制自动把坏掉的候选暂时移出池子。评分函数6 因子加权模型文档核心是一张 6 因子评分表。Auto-Combo 引擎为每个请求动态评估候选池各因子取值均归一化到 [0,1] 区间权重之和为 1因子权重说明Quota0.20剩余容量 [0..1]Health0.25熔断器状态CLOSED1.0HALF_OPEN0.5OPEN0.0CostInv0.20成本倒数越便宜得分越高LatencyInv0.15p95 延迟倒数越快得分越高TaskFit0.10模型 × 任务类型的适配分Stability0.10延迟/错误率方差低者得分高源码中的评分实现上述因子在 scoring.ts 中落地为calculateFactors()与calculateScore()两个纯函数可以核对每行语义Health 因子直接映射熔断器三态circuitBreakerState CLOSED ? 1.0 : HALF_OPEN ? 0.5 : 0.0scoring.ts#L325-L330。CostInv / LatencyInv用池内最大值做归一化clamp01(1 - costPer1MTokens / maxCost)与clamp01(1 - p95LatencyMs / maxLatency)。池最大值通过computePoolMaxima()一次性预计算避免逐候选重算把 O(n) 打分退化到 O(n²)。Stability同样以池内最大标准差归一化clamp01(1 - latencyStdDev / maxStdDev)延迟忽高忽低的候选会被压低。TaskFit通过回调getTaskFitness(model, taskType)查任务适配表见下文专节查不到时回落到中性值 0.5。最终打分calculateScore()是全部因子与对应权重的点积并经clamp01约束在 [0,1]——注释里特别指出这同时防止了单条 NaN 遥测值导致排序不确定scoring.ts#L160-L186。从当前仓库代码状态看DEFAULT_WEIGHTS已从文档描述的 6 因子扩展为声明 16 个因子新增tierPriority、tierAffinity、contextAffinity、cacheAffinity、reliability等信号默认权重如 quota 0.1429、health 0.1605 等见 scoring.ts#L62-L88。文档中的 6 因子表描述的是模型的核心骨架若你自定义权重normalizeScoringWeights()会把任意非负权重重新归一化为和为 1 的分布非法值按 0 处理全零则回退默认权重scoring.ts#L91-L107所以配置时不需要手动凑总和。Mode Packs预设权重包除默认权重外引擎提供 Mode Pack——整份替换默认权重的一组预设用于把选择偏向某一目标。文档定义的基础 4 个 Pack 及其关键权重Pack取向关键权重Ship Fast速度latencyInv: 0.35Cost Saver经济性costInv: 0.40Quality First最佳模型taskFit: 0.40Offline Friendly可用性quota: 0.40仓库中的完整 Pack 实现modePacks.ts 中的MODE_PACKS目前定义了 6 个 Pack在文档 4 个基础包之外还多出reliability-first与chaos-mode每个 Pack 都是对完整因子表的整份替换而非部分覆盖权重和约为 1.0。代码中的确切取值ship-fastlatencyInv 0.3048 health 0.2667低延迟、健康连接优先taskFit 0.0952cost-savercostInv 0.3324 一骑绝尘最便宜的 token 胜出quality-firsttaskFit 0.3524 stability 0.1429任务匹配 稳定性追求最好的模型且表现一致offline-friendlyquota 0.3324 health 0.2667不顾速度与成本最大化配额余量reliability-first#4235health 0.3524 stability 0.1905供auto/category:reliable后缀使用chaos-modehealth 0.4000 taskFit 0.1905面向故障注入测试quota 权重被刻意压低混沌模式并行扇出配额多样性次要。对外只暴露两个查询函数getModePack(name)按名取 Pack取不到返回 undefined 以便回退默认权重与getModePackNames()列出全部可用 Pack 名modePacks.ts#L137-L146。创建 auto-combo 时通过modePack字段指定即可。Self-Healing自愈与临时排除这是 Auto-Combo 区别于普通轮询的关键。文档列出四条自愈规则临时排除得分 0.2 的候选被排除 5 分钟渐进式退避最长 30 分钟熔断器感知OPEN 状态的候选自动排除HALF_OPEN 进入探测probe流程事故模式当 50% 候选处于 OPEN 时进入 incident mode——关闭探索、最大化稳定性冷却恢复排除期满后的首个请求以缩短超时的探测请求身份发出。selfHealing.ts 中的阈值与状态机selfHealing.ts 把这些规则实现为SelfHealingManager核心常量一一对应文档描述常量值对应文档规则EXCLUSION_THRESHOLD0.2得分低于此值触发排除REENTRY_THRESHOLD0.3再准入阈值比排除阈值高防抖DEFAULT_COOLDOWN_MS5 分钟首次排除时长MAX_COOLDOWN_MS30 分钟退避上限INCIDENT_MODE_THRESHOLD0.5OPEN 占比超过 50% 进入事故模式值得注意的退避细节同一候选再次被排除时冷却时长翻倍min(cooldownMs * 2, MAX_COOLDOWN_MS)反复翻车的线路会被越罚越久selfHealing.ts#L77-L89。探测侧则要求连续 3 次成功的探测才完全解除排除recordProbeResult中probeCount 3时删除排除记录探测失败则重置探测计数并再次翻倍冷却selfHealing.ts#L109-L120。事故模式由updateIncidentMode()统计全部熔断器状态中 OPEN 的占比超过 0.5 即置位。Bandit 探索5% 随机流量纯贪婪地永远选最高分会让新加入的候选永远没有机会被评估。因此引擎保留了一小份探索流量文档定义为5% 的请求可配置路由到随机 provider 用于探索事故模式下自动禁用。engine.ts 印证了这两点AutoComboConfig.explorationRate的注释即0.05 5% exploratoryengine.ts#L43而选择逻辑中先计算const effectiveExplorationRate incidentMode ? 0 : config.explorationRateengine.ts#L295——事故期间探索率强制归零与文档Disabled in incident mode完全一致。每个选择结果还会携带isExploration标记与excluded列表被排除的候选及原因便于排查为什么某条线路没被选中。REST API创建与查询 Auto-Combo文档给出的 API 用法# Create auto-combo curl -X POST http://localhost:20128/api/combos/auto \ -H Content-Type: application/json \ -d {id:my-auto,name:Auto Coder,candidatePool:[anthropic,google,openai],modePack:ship-fast} # List auto-combos curl http://localhost:20128/api/combos/auto请求体字段说明id/name组合的唯一标识与显示名candidatePool候选 provider 名列表空表示全部已连接 providermodePack上文的权重包名ship-fast、cost-saver、quality-first、offline-friendly等。对应的路由实现在 src/app/api/combos/auto/route.ts。从引擎配置结构看engine.ts#L25-L46持久化的 auto combo 还可携带weights自定义权重会被normalizeScoringWeights()归一化、budgetCap单请求美元上限、budgetFallbackcheapest或strict——全部候选超预算时是回退到最便宜者还是直接拒绝、estimatedInputTokens预算折算的 token 估算基准默认 1000与routerStrategy可插拔的选商策略名等字段可按需补充进配置。Task Fitness模型 × 任务适配表文档指出适配表覆盖30 模型 × 6 种任务类型coding、review、planning、analysis、debugging、documentation并支持通配符模式例如*-coder→ 高 coding 分。taskFitness.ts 的头部注释给出了完整的解析链优先级从高到低用户覆盖DBmodel_intelligencesourceuser_overrideArena ELODB 同步的实时 ELO 排名models.dev 层级由model_capabilities能力数据推导且带厂商生命周期否决——已退役模型 id 永远不会拿到层级分静态 FITNESS_TABLE——一个刻意保持精简的、只收录带版本号模型 id的手工维护表文件中的FITNESS_TABLE.coding等按任务类型分节通配符加成——在 0.5 中性基线上按模式匹配加分文档中的*-coder就属于这一层。注释特别强调0.5 的基线含义是无证据不是平庸——查不到任何数据行的模型得到中性分既不会被抬升也不会被惩罚。静态层只收录版本化 id 是为了避免无版本 family 模式如裸claude误匹配厂商已退役的旧模型并给出过高分数配套脚本scripts/check/check-model-lifecycle.mjs会在构建期拦截此类行。关键文件索引文档附带的文件-职责对照表路径为仓库根目录相对路径文件职责open-sse/services/autoCombo/scoring.ts评分函数、DEFAULT_WEIGHTS、池归一化computePoolMaximaopen-sse/services/autoCombo/taskFitness.ts模型 × 任务适配查表含五级解析链open-sse/services/autoCombo/engine.ts选择逻辑、bandit 探索、预算上限BudgetExceededErroropen-sse/services/autoCombo/selfHealing.ts排除、探测、事故模式SelfHealingManageropen-sse/services/autoCombo/modePacks.ts权重包基础 4 包 reliability-first / chaos-modesrc/app/api/combos/auto/route.tsAuto-Combo REST API小结与调优建议默认即可用不指定modePack与自定义权重时引擎用DEFAULT_WEIGHTS直接评分零配置完成自动选商有明确目标时选 Pack追求快用 ship-fast、省钱用 cost-saver、要质量用 quality-first、弱网/配额紧张用 offline-friendly想强化某信号时自定义权重任意非负权重会被normalizeScoringWeights()自动归一化无需手动凑和为 1理解选商异常得分低于 0.2 的候选会被渐进退避排除5 分钟起、最长 30 分钟连续 3 次探测成功才完全回归50% 候选 OPEN 时进入事故模式并关闭 5% 探索流量——排查某条线路一直收不到流量时应先核对这两个状态想让特定模型更常命中优先维护任务适配信号用户覆盖 / 静态表 / 通配符让 TaskFit 因子说话而不是硬编码固定目标。【免费下载链接】OmniRouteNever stop coding. Free MIT AI gateway: one endpoint, 352 providers (150 free), 1200 models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline Copilot. Quota-aware auto-fallback, RTKCaveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550 contributors项目地址: https://gitcode.com/GitHub_Trending/om/OmniRoute创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门