智能选模

更新时间:
复制 MD 格式

智能选模通过外部分类服务自动评估请求难度,将请求路由到不同档位(L1/L2/L3)的候选模型,在保障回答质量的同时降低推理成本。

功能概述

智能选模是 InferX 配置中心的一项高级路由功能。开启后,网关会调用外部分类服务对请求进行难度评估,并根据评估结果将请求路由到对应档位的候选模型:

  • L3(强):处理复杂推理、代码生成等高难度任务。

  • L2(中):处理常规对话、知识问答等中等难度任务。

  • L1(轻):处理简单格式化、信息提取等低难度任务。

通过为不同难度的请求匹配合适的模型,智能选模可在保障回答质量的同时显著降低推理成本。

工作流程如下:

  1. 客户端发送请求,将 model 字段设为 auto。

  2. 网关调用分类服务,评估请求难度并确定目标档位。

  3. 网关从目标档位的候选模型中选择可用实例处理请求。

  4. 响应返回,resp.model 字段显示网关实际选定的模型。

同一会话内的后续请求可复用前次的难度判定结果(会话分类缓存),避免重复分类,降低延迟。

前提条件

工作站版本不低于 0.4.0。

开启与配置

步骤一:为智能路由服务配置分类服务

编辑LLM智能路由服务的JSON配置,如下增加llm_gateway.model_selection信息:

{
    "properties": {
        "llm_gateway.model_selection": {
            "classifier": {
                "api_key": "<分类服务凭证>",
                "endpoint": "http://<分类服务IP>:<端口>",
                "model_name": "<分类服务模型名,默认名model>"
            }
        }
    }
}

步骤二:开启智能选模

  1. 在 InferX 左侧导航栏,单击配置中心。

  2. 在配置中心页面找到智能选模卡片,单击卡片标题右侧的开关开启功能。

说明

开启后,/v1/models 接口将出现 auto 模型,InferX的实时监控页面会出现"智能选模"区块,可在此确认分类服务正常。

警告

冲突提醒:若当前分流策略为 Weight 且存在启用中的分流路由,开启智能选模时会弹出冲突警告。此时需先将分流策略切换为 Prefix 或关闭分流路由,再开启智能选模。

步骤三:配置基础参数

开启功能后,卡片自动进入编辑态。配置以下参数后单击保存。

默认档位

分类服务不可用或判定失败时的兜底档位。推荐选择 L2。

各档位候选模型

为 L3、L2、L1 三个档位分别选择候选模型。下拉列表展示网关可达的模型,也可手动输入模型名。同一档位内从左到右为优先顺序,前序模型不可用时自动顺延至下一候选。

若某档位未配置候选模型,该档位不可用。

各档位推荐模型参考如下:

档位

推荐模型

L1

qwen3.6-35BA3B,qwen3.8-27B

L2

qwen3.8-next-flash,deepseek-v4-flash-0731,glm5.3flash

L3

DeepSeek-v4-pro-0813,kimi-k3,qwen3.8max

配置完成后单击保存,弹出变更确认窗口,展示变更前后的 JSON 对比。单击确定提交配置。

说明

配置扇出为异步过程,提交后秒级内生效。

步骤三:调用智能选模

配置完成后,在请求中将 model 设为 auto 即可交由网关智能选模。调用示例如下:

from openai import OpenAI

client = OpenAI(
    # 网关端点
    base_url="http://xxxx/api/predict/group_llmgw_with_smart_model_selector/v1",
    api_key="<凭证>",
)

resp = client.chat.completions.create(
    model="auto",  # auto = 交由网关智能选模
    messages=[{"role": "user", "content": "用一句话介绍你自己"}],
)

print("网关选定模型:", resp.model)
print("回答:", resp.choices[0].message.content)

高级设置

在智能选模卡片中展开高级设置区域,可配置以下参数。无特殊需求时可跳过。

参数

说明

选模生效范围

控制智能选模的触发条件,两种模式对比见选模生效范围对照。

  • 仅模型名指定为 auto 的请求(默认):仅当请求的 model 字段为 auto 时启用智能选模。指定了具体模型名的请求完全走原有路由。

  • 所有请求:对所有请求启用智能选模。即使请求指定了模型名,也会被重新判定并改写为选模结果。

会话分类缓存

开启后,同一会话内的后续请求直接复用前次的难度判定结果,不再重新分类。可降低分类延迟和分类服务负载。

分类间隔(轮)

仅在会话分类缓存开启时生效。会话中每隔 N 轮重新判定一次难度,中间的轮次沿用上次结果。设为 1 则每轮都重新判定。

会话不降档

开启后,会话中途仅允许升级到更高档位,不会降级。开启此项会自动连带开启会话分类缓存;关闭会话分类缓存会自动连带关闭此项。

请求头 Header

用于识别会话的 HTTP 请求头字段名。支持多个字段,逗号分隔,取第一个非空值。与请求体都配置时请求头优先读取。

请求体 Body

会话ID 在请求体中的字段路径(如metadata.session_id)。支持多个字段,逗号分隔,按顺序尝试。请求头取不到值时以此兜底。

说明

开启会话分类缓存(或会话不降档)时,请求头 Header 和请求体 Body 至少填写一项,否则保存时会提示“会话缓存开启时必须至少填写一个会话识别 Key(请求头或请求体)”。若请求中未携带配置的会话 Key,该次请求每次都重新判定,不影响其他请求。

选模生效范围对照

所有请求

仅模型名指定为 auto 的请求(默认)

指定了模型名的请求

重新判定并改写为选模结果

完全走原有路由,不发起分类调用

model=auto

进入选模

进入选模

适合场景

想让网关统一接管所有流量选档

想部分流量用原生模型、部分交给网关代选

效果观察

数据概览 — 智能选模档位分布

在概览页面的智能选模档位分布卡片中,可查看选模请求的基本分布情况:

  • 选模请求数:各档位(L3/L2/L1)的请求数量和 Token 数量分布。

  • 选模覆盖率:所选时段内由智能选模决定模型的请求占总请求的比例。仅统计全局口径,不受用户/部门筛选影响。

说明

该卡片在所选时段内存在选模流量时即显示,与当前开关状态无关。用户/部门筛选口径下不显示此数据。

实时监控 — 智能选模健康区块

仅功能开启时显示。包含健康状态横幅和六项核心指标:

健康状态横幅

状态

横幅文案

正常

选模决策服务正常

未配端点

已开启智能选模但未配置选模决策服务端点,无法探活

探活失败

选模决策服务端点无法连接或探测超时;或 选模决策服务探活返回 HTTP {{code}};均附加"流量 fail-open 到 {{档位}}"

端点通但质量下降

分类质量下降:成功率 {{rate}} / fail-open {{ratio}}(端点可达,请检查鉴权/模型名/输出解析)

六项核心指标

指标

说明

分类成功率

实际发起的分类调用中成功返回有效档位的比例= classified /(classified + parse_fallback + fail_open)。会话缓存命中与直通请求不发起分类调用。

失败放行占比

分类调用失败后按放行策略走默认档位的决策占比。大于 0 说明分类服务存在异常,数字变红。

会话缓存命中率

会话级分类结果缓存的命中比例= cache_hits /(cache_hits + cache_misses)。命中时直接复用上次分类档位,不发起分类调用。

分类时延

调用外部分类服务的耗时(毫秒),均值为窗口内平均,另展示窗口内最大值。

重选次数

因后端执行失败等原因触发重新选模的次数;副文本为进程启动以来的累计值。

选模决策

窗口内各来源的选模决策构成:✓分类成功、会话缓存命中、解析兜底、失败放行、直通(透传用户指定模型,不计入决策总数);副文本为启动以来累计决策数。

异常处理

配置冲突

智能选模不能和分流代理里的 Weight 分流同时开启。同时开启时配置中心会提示冲突,后端拒绝保存。

若通过后台配置更新等手段强行同时开启,智能选模功能不生效,流量仍按权重分流逻辑控制。

分类服务异常

智能选模依赖分类服务。分类服务异常时,可在实时监控的“智能选模”面板看到健康状态提示,失败放行占比 > 0(数字变红),同时访问日志中该请求带有 source=fail_open 注解。

  • 网关对分类器做周期性探活(约 10 秒一次),连续 3 次失败才判定为降级;恢复时 1 次成功即回稳。

  • 降级期间,每次请求的分类调用超时或失败后,自动落到默认档位继续处理,不会阻塞或拒绝请求。恢复后自动恢复实时选模。

说明

分类服务异常不影响推理请求的成功率,但可能会拖慢首 Token 延迟(TTFT)。

日志线索

网关访问日志为每次选模请求附加注解段,可直接检索 model_selection::

model_selection:tier=L2,classifier_tier=L2,task_type=,source=cascade,classify_ms=35,classify_llm_ms=30,reselects=0,selected_model=mock-tier-l2,session_id=xxx

字段

含义

tier

最终选定的档位

source

决策来源:cascade(分类成功)/ session_cache(缓存命中)/ fail_open(失败放行)/ parse_fallback(解析兜底)

classify_ms / classify_llm_ms

分类调用耗时(含/不含预处理),单位毫秒

selected_model

实际发落的模型

session_id

用于会话缓存的 Key

reselects

本次请求触发的重选次数

分类失败时网关日志有 WARN 记录:[ModelSelection][Req:xxx] classify failed, fail-open to tier L2: <原因>。

常见问题

已正确填写分类服务端点,但开启智能选模保存时仍提示「分类器探活失败」

网关探活默认请求分类服务的 /health路径,可能是分类服务的/health路径不通,可自定义配置该路径为/v1/models:

{
  "classifier": {
    "endpoint": "http://your-classifier:8000",
    "health_probe_path": "/v1/models"
  }
}

开了开关但 /v1/models 没有 auto

需同时满足四个条件:功能已开启、分类服务端点已配置、API Key 已配置、至少一个档位的候选模型非空。分类服务配置参见步骤一:为智能路由服务配置分类服务。

我的请求指定了模型却还是被改了

选模的生效范围配置为“所有请求”。改为“仅模型名指定为 auto 的请求”即可让指定模型的请求完全旁路。

提示 Weight 冲突 / 保存 400

分流策略是 Weight 且有启用路由。先去分流页切换为 Prefix 或停用路由,再开选模。

同一会话每次请求都被重新分类

请求未携带配置的会话 Key(Header 或 Body),或会话缓存未开启。检查高级设置中的会话识别配置。

开了会话不降档但好像一直没降档

这是预期行为——会话中只允许升档。需要重新判定难度时,可调小"分类间隔"或关闭缓存。