智能选模通过外部分类服务自动评估请求难度,将请求路由到不同档位(L1/L2/L3)的候选模型,在保障回答质量的同时降低推理成本。
功能概述
智能选模是 InferX 配置中心的一项高级路由功能。开启后,网关会调用外部分类服务对请求进行难度评估,并根据评估结果将请求路由到对应档位的候选模型:
L3(强):处理复杂推理、代码生成等高难度任务。
L2(中):处理常规对话、知识问答等中等难度任务。
L1(轻):处理简单格式化、信息提取等低难度任务。
通过为不同难度的请求匹配合适的模型,智能选模可在保障回答质量的同时显著降低推理成本。
工作流程如下:
客户端发送请求,将
model字段设为auto。网关调用分类服务,评估请求难度并确定目标档位。
网关从目标档位的候选模型中选择可用实例处理请求。
响应返回,
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>"
}
}
}
}步骤二:开启智能选模
在 InferX 左侧导航栏,单击配置中心。
在配置中心页面找到智能选模卡片,单击卡片标题右侧的开关开启功能。
开启后,/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)高级设置
在智能选模卡片中展开高级设置区域,可配置以下参数。无特殊需求时可跳过。
参数 | 说明 |
选模生效范围 | 控制智能选模的触发条件,两种模式对比见选模生效范围对照。
|
会话分类缓存 | 开启后,同一会话内的后续请求直接复用前次的难度判定结果,不再重新分类。可降低分类延迟和分类服务负载。 |
分类间隔(轮) | 仅在会话分类缓存开启时生效。会话中每隔 N 轮重新判定一次难度,中间的轮次沿用上次结果。设为 1 则每轮都重新判定。 |
会话不降档 | 开启后,会话中途仅允许升级到更高档位,不会降级。开启此项会自动连带开启会话分类缓存;关闭会话分类缓存会自动连带关闭此项。 |
请求头 Header | 用于识别会话的 HTTP 请求头字段名。支持多个字段,逗号分隔,取第一个非空值。与请求体都配置时请求头优先读取。 |
请求体 Body | 会话ID 在请求体中的字段路径(如metadata.session_id)。支持多个字段,逗号分隔,按顺序尝试。请求头取不到值时以此兜底。 |
开启会话分类缓存(或会话不降档)时,请求头 Header 和请求体 Body 至少填写一项,否则保存时会提示“会话缓存开启时必须至少填写一个会话识别 Key(请求头或请求体)”。若请求中未携带配置的会话 Key,该次请求每次都重新判定,不影响其他请求。
选模生效范围对照
所有请求 | 仅模型名指定为 auto 的请求(默认) | |
指定了模型名的请求 | 重新判定并改写为选模结果 | 完全走原有路由,不发起分类调用 |
| 进入选模 | 进入选模 |
适合场景 | 想让网关统一接管所有流量选档 | 想部分流量用原生模型、部分交给网关代选 |
效果观察
数据概览 — 智能选模档位分布
在概览页面的智能选模档位分布卡片中,可查看选模请求的基本分布情况:
选模请求数:各档位(L3/L2/L1)的请求数量和 Token 数量分布。
选模覆盖率:所选时段内由智能选模决定模型的请求占总请求的比例。仅统计全局口径,不受用户/部门筛选影响。
该卡片在所选时段内存在选模流量时即显示,与当前开关状态无关。用户/部门筛选口径下不显示此数据。
实时监控 — 智能选模健康区块
仅功能开启时显示。包含健康状态横幅和六项核心指标:
六项核心指标
指标 | 说明 |
分类成功率 | 实际发起的分类调用中成功返回有效档位的比例= 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字段 | 含义 |
| 最终选定的档位 |
| 决策来源: |
| 分类调用耗时(含/不含预处理),单位毫秒 |
| 实际发落的模型 |
| 用于会话缓存的 Key |
| 本次请求触发的重选次数 |
分类失败时网关日志有 WARN 记录:[ModelSelection][Req:xxx] classify failed, fail-open to tier L2: <原因>。