ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OmniRoute Auto-Combo 引擎:多因子自适应评分、模式包权重与自修复路由机制

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/OmniRouteAuto-Combo 是 OmniRoute 中让模型链“自我管理”的路由引擎每个请求到来时它根据配额、健康度、成本、延迟、任务匹配度等因子对候选提供商动态打分选出当前最优的 provider/model 组合并通过临时排除、熔断感知和事件模式Incident Mode在故障发生时自动收缩探索、优先保稳。读完本文你可以理解其评分函数与权重归一化的实现原理、各 Mode Pack 的完整权重配置、自修复冷却/探针机制的参数含义以及通过 API 与auto/前缀消费 Auto-Combo 的具体方式。一、核心原理按请求动态评分选择最优 Provider/ModelAuto-Combo 引擎为每个请求动态选择最佳 provider/model其基础是一套加权评分函数。官方文档最初定义了6 因子评分模型见docs/i18n/pt-BR/docs/routing/AUTO-COMBO.md与docs/routing/AUTO-COMBO.md因子权重含义Quota0.20剩余容量 [0..1]Health0.25熔断器状态CLOSED1.0HALF0.5OPEN0.0CostInv0.20成本倒数越便宜得分越高LatencyInv0.15p95 延迟倒数越快得分越高TaskFit0.10模型 × 任务类型的匹配度Stability0.10延迟/错误方差越低得分越高从当前仓库源码看这套模型已被扩展为16 因子评分声明于 open-sse/services/autoCombo/scoring.ts 的DEFAULT_WEIGHTS默认权重之和恰为1.0。原始 6 因子全部保留quota0.1429、health0.1605、costInv0.1429、latencyInv0.1143、taskFit0.0762、stability0.0476新增因子包括tierPriority0.0476账户层级优先级Ultra1.0、Pro0.67、Standard0.33、Free0.0tierAffinity/specificityMatch/contextAffinity各 0.0476候选模型层级与 manifest 推荐层级、请求特异性、上下文窗口的亲和度sessionAvailability0.0476OAuth 会话可用性非 OAuth 连接记 1.0connectionDensity0.0476同一 provider 的连接密度防止负载向单一连接集中quality0.03来自路由事件质量追踪器的反馈信号无观测的冷候选取中性 0.5cacheAffinity/resetWindowAffinity/reliability默认权重为 0声明但不参与默认投票在 Mode Pack 中激活见下文。1.1 因子的计算与归一化源码细节open-sse/services/autoCombo/scoring.ts 中的calculateFactors()对每个因子统一clamp01到 [0,1]关键公式quota quotaRemaining / 100剩余配额百分比归一化health由熔断器状态直接映射CLOSED → 1.0、HALF_OPEN → 0.5、OPEN → 0.0costInv 1 - costPer1MTokens / maxCost、latencyInv 1 - p95LatencyMs / maxLatency、stability 1 - latencyStdDev / maxStdDev三者均相对整个候选池的最大值归一化。为避免逐候选重算池最大值O(n²)源码提供computePoolMaxima()一次性计算源码注释明确提到过零配置auto组合把池扩展到上千目标时的 OOM 教训。最终得分由calculateScore()做加权和并clamp01防止浮点漂移越界或单个 NaN 因子污染排序。用户自定义权重则先经过normalizeScoringWeights()清洗非法/负值置 0总和为 0 时回退默认权重再重新归一化为概率分布因此任意自定义权重都能安全生效。二、Mode Packs一套权重、一个优化目标Mode Pack 是预置的权重画像整表替换而非合并默认权重把选择偏向单一目标。文档定义了 4 个核心 PackPack侧重关键权重Ship Fast速度latencyInv: 0.35Cost Saver经济costInv: 0.40Quality First最佳模型taskFit: 0.40Offline Friendly可用性quota: 0.40当前 open-sse/services/autoCombo/modePacks.ts 已包含6 个 Pack新增reliability-first与chaos-mode各 Pack 主因子权重如下每 Pack 均自行加和至 1.0normalizeScoringWeights()无需再修正因子ship-fastcost-saverquality-firstoffline-friendlyreliability-firstchaos-modequota0.11330.11330.07520.33240.11330.0376health0.26670.18100.17140.26670.35240.4000costInv0.02760.33240.02760.07520.01810.0140latencyInv0.30480.04760.04760.04760.04760.0186taskFit0.09520.09520.35240.00000.09520.1905stability0.00000.04760.14290.09520.19050.1714quality/reliability0.02 / 0.030.02 / 0.030.02 /0.030.02 / 0.030.02 /0.040.02 / 0.03各 Pack 的取舍很清晰ship-fast压低 stability、把 latencyInv 提到 0.3048cost-saver让 costInv 独占 0.3324quality-first把 taskFit 拉到 0.3524 并配 0.1429 stability 与最高的 quality 权重 0.03offline-friendly用 quota 0.3324 health 0.2667 追求最大余量、taskFit 直接归零reliability-first与chaos-mode则分别面向故障注入与高可用场景health 0.3524 / 0.4000。tierAffinity、specificityMatch、resetWindowAffinity在所有 Pack 中显式为 0。三、Self-Healing临时排除、熔断感知与事件模式文档描述了四条自修复行为其全部参数在 open-sse/services/autoCombo/selfHealing.ts 中有精确定义临时排除Temporary exclusion得分低于EXCLUSION_THRESHOLD 0.2的 provider 被排除初始冷却DEFAULT_COOLDOWN_MS 5 分钟重复触发时冷却时间倍增cooldownMs * 2上限MAX_COOLDOWN_MS 30 分钟渐进退避。冷却到期且得分回升至REENTRY_THRESHOLD 0.3以上时自动重新准入。熔断感知Circuit breaker awareness熔断器OPEN→ 自动排除HALF_OPEN→ 放行探针请求并计数。recordProbeResult()中连续3 次成功探针才完全恢复准入任何一次探针失败则冷却再翻倍、探针计数清零。事件模式Incident modeupdateIncidentMode()统计所有候选熔断器状态当OPEN占比超过INCIDENT_MODE_THRESHOLD 0.550%时进入事件模式——禁用探索、最大化稳定性引擎侧将探索率强制置 0。冷却恢复Cooldown recovery排除后的首个请求即探针失败则加倍惩罚构成“低成本试探、失败即退”的恢复闭环。值得注意的兜底逻辑在 open-sse/services/autoCombo/engine.ts 的selectProvider()中若排除过滤后候选池为空引擎会回退到全量候选pool.push(...candidates)保证路由永不因排除逻辑而中断——这是一种 fail-open 设计。四、Bandit Exploration5% 探索与分层轮换文档指出5% 的请求可配置被随机路由到随机 provider 用于探索事件模式下禁用。在engine.ts中对应config.explorationRate默认0.05 5%const incidentMode healer.isInIncidentMode(); const effectiveExplorationRate incidentMode ? 0 : config.explorationRate; const isExploration Math.random() effectiveExplorationRate candidates_.length 1; if (isExploration) { const idx Math.floor(Math.random() * candidates_.length); selected candidates_[idx]; }非探索请求并不总是取第一名而是经过ScoreTierRotator按分差把候选分为 top/mid/rest 三层若最优与最差分差 ≥CLEAR_WINNER_THRESHOLD 0.1明显赢家则只在 top 层内轮换否则按组合名对应的偏好做加权随机如coding偏好 top:0.6、cheap偏好 rest:0.5、smart把探索权重提高从而在同分附近保持轮换多样性而不是钉死单一 provider。此外当taskType为default且提供了原始消息时引擎会用classifyPromptIntent()对最后一条 user 消息做多语言意图分类code/reasoning/simple/medium再据此计算 taskFit——这让评分能感知请求的实际任务类型。engine.ts还实现了预算上限budget capbudgetCap按每请求美元计估算成本costPer1MTokens / 1_000_000 × estimatedInputTokens默认按 1000 token 估算超过上限时优先在预算内候选重选若所有候选都超限budgetFallback: strict抛出BudgetExceededError快速失败避免静默超支默认cheapest则退回到全局最便宜的候选。五、API 与使用方式5.1 文档记载的 Auto-Combo API关联文档给出的接口示例# 创建 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} # 列出 auto-combos curl http://localhost:20128/api/combos/auto从当前仓库源码核实src/app/api/combos/auto/route.ts该路由现仅实现GET且需管理鉴权requireManagementAuth列出auto及全部变体每个变体带解析后的候选池、候选数量以及context_length/max_output_tokens取候选池窗口的MAX值避免客户端因读到 0 而禁用自动压缩。创建持久化 Auto-Combo 请走标准 combos 接口并指定strategy: autocurl -X POST http://localhost:20128/api/combos \ -H Content-Type: application/json \ -d {id:my-auto,name:Auto Coder,strategy:auto,config:{auto:{candidatePool:[anthropic,google,openai],weights:{quota:0.15,health:0.3,costInv:0.05,latencyInv:0.35,taskFit:0.1}}}}5.2 零配置auto/前缀无需创建任何 combo直接在model字段使用auto或auto/variantcurl -X POST http://localhost:20128/v1/chat/completions \ -H Authorization: Bearer key \ -H Content-Type: application/json \ -d {model:auto/coding,messages:[{role:user,content:Hello}]}可用变体auto、auto/coding、auto/fast、auto/cheap、auto/offline、auto/smart、auto/lkgp由open-sse/services/autoCombo/autoPrefix.ts解析虚拟 combo 由open-sse/services/autoCombo/virtualFactory.ts按请求即时构建活跃连接 → 凭据过滤 → 注册表模型/价格关联 → 16 因子评分不落库。5.3 逐请求控制头通过 open-sse/services/autoCombo/requestControls.ts 解析的三个请求头可以在不改动 combo 配置的前提下按请求覆盖modePack/budgetCap/budgetFallback请求头取值效果X-OmniRoute-Mode预设别名fast、balanced、quality、cheap、reliable、offline或原始 Pack 名ship-fast、cost-saver、quality-first、offline-friendly、reliability-first覆盖本请求评分权重balanced/default强制默认权重未知值忽略X-OmniRoute-Budget正数每请求美元上限硬成本上限超出者在选择前被过滤X-OmniRoute-Budget-Fallbackcheapest默认别名cheapest-viable/soft或strict别名block/hardstrict时若全部候选超限则直接拒绝请求HTTP 402而非静默超支curl -sS http://localhost:20128/v1/chat/completions \ -H Content-Type: application/json \ -H X-OmniRoute-Mode: fast \ -H X-OmniRoute-Budget: 0.05 \ -H X-OmniRoute-Budget-Fallback: strict \ -d {model:auto,messages:[{role:user,content:hi}]}六、Task Fitness模型 × 任务类型匹配度文档说明 TaskFit 因子覆盖 30 模型、6 种任务类型coding、review、planning、analysis、debugging、documentation并支持通配符模式如*-coder→ 高 coding 得分。open-sse/services/autoCombo/taskFitness.ts 的实际实现是一个多级解析链优先级从高到低用户覆盖DBmodel_intelligencesourceuser_overrideArena ELO 实时榜单sourcearena_eloARENA_ELO_SYNC_ENABLED开启时生效支持scoresAs继承models.dev 能力层级含厂商生命周期否决——已退役 id 不获得层级分静态FITNESS_TABLE仅版本化模型 id 的手维护小表如o3: 0.95、deepseek-coder: 0.9通配符加成在 0.5 中性基线上做模式匹配加成0.5 表示“无证据”而非“平庸”。七、相关文件一览文件职责open-sse/services/autoCombo/scoring.ts评分函数、DEFAULT_WEIGHTS、池归一化open-sse/services/autoCombo/taskFitness.ts模型 × 任务匹配度查表open-sse/services/autoCombo/engine.ts选择逻辑、bandit 探索、预算上限open-sse/services/autoCombo/selfHealing.ts排除、探针、事件模式open-sse/services/autoCombo/modePacks.ts6 套权重画像open-sse/services/autoCombo/autoPrefix.tsauto/前缀解析与变体open-sse/services/autoCombo/virtualFactory.ts从活跃连接构建内存版 comboopen-sse/services/autoCombo/requestControls.ts逐请求 mode/budget 头解析src/app/api/combos/auto/route.tsREST APIGET 发现接口核心行为有单元测试覆盖见 open-sse/services/autoCombo/__tests__/autoCombo.test.ts 及同目录下chaosEngine.test.ts、speedRanking.test.ts、taskFitness-pattern-order-8603.test.ts等用例组合路由的端到端决策矩阵测试位于tests/integration/combo-matrix/。小结Auto-Combo 的核心价值在于“评分即策略”——16 因子加权和给出候选排序Mode Pack 一键切换优化目标self-healing 的 0.2/0.3 阈值、5 分钟起步上限 30 分钟的渐进退避与 3 探针恢复机制负责故障隔离5% bandit 探索事件模式下自动关闭保证长期不陷入局部最优而auto/零配置前缀让以上全部能力对客户端完全透明。【免费下载链接】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),仅供参考
返回列表