Decision 信号
概述
decision 向判断模型提出一个关于请求的类型化问题,再把答案转换成路由事实。你可以用自然语言描述问题:从几个选项中选一个(choice)、回答是或否(noul),或在一组等级上评分(score)。Vela 2.0 等支持更多题型的模型还能回答 set(哪些标签适用?)和 span(各标签出现在文本的什么位置?)问题。模型运行在 Router 自动启动的内置模型运行时中。
主要优势
- 写好问题即可使用,无需 训练新的分类器。
- 答案带有概率,可以要求达到指定置信程度后再匹配路由。
- 使用同一部署且输入兼容的问题可以合并为一次请求阶段调用,包括
pii信号。 - 超时或失败的答案会使信号变为未知;decision 的失败策略决定继续路由还是拒绝请求。
解决什么问题?
固定标签的分类器只能回答训练时定义的问题。判断模型则可以直接根据问题描述,回答“是否需要逐步推理?”或“是否与我们的产品有关?”。
何时使用
当问题需要理解整个请求时,使用 Decision 信号。长度、关键词和模态等结构性事实优先使用启发式信号;领域、PII、越狱等已有专用学习信号能够解决的问题,也优先使用对应信号。
配置
未指定 deployment 的问题使用 global.model_catalog.system.decision_model 指向的 Router 判断模型,默认为 Vela 2.0 0.3B,也可以选择其他规模。它会与输入兼容的内置问题一起加入请求阶段的批处理。复用部署可以避免重复加载模型,但不保证完整路由 请求只执行一次前向计算:
routing:
signals:
decision:
- name: needs_tools
question:
type: noul
instructions: Does answering this request need a tool call?
predicate:
gte: 0.7
绑定使用 {deployment: primary},可以选择 Vela 或 Decision 1.0/2.0。所选模型必须支持所有请求的题型。decision 选模算法使用相同的默认绑定,因此这份模型资源也可以选择后端。
要使用另一个模型,例如 Decision 2.0,先声明一个 model_runtime 部署,再为每个问题指定 deployment:
global:
model_catalog:
deployments:
decision-kai:
provider: model_runtime
artifact: vllm-sr/Decision-2.0-Kai-0.6B
device: auto
routing:
signals:
decision:
- name: needs_reasoning
deployment: decision-kai
question:
type: noul
instructions: Does answering this request need multi-step reasoning?
predicate:
gte: 0.7
timeout_ms: 1000
- name: request_kind
deployment: decision-kai
question:
type: choice
instructions: What kind of request is this?
choices:
- key: code
description: Writing, reviewing or debugging code
- key: math
description: Mathematics or quantitative reasoning
- key: chat
description: Anything else
- name: difficulty
deployment: decision-kai
question:
type: score
instructions: How difficult is this request?
levels: [Trivial, Moderate, Hard]
predicate:
gte: 1.5
decisions:
- name: hard-code
priority: 200
rules:
operator: AND
on_unknown: no_match
conditions:
- type: decision
name: request_kind
label: code
- type: decision
name: needs_reasoning
modelRefs:
- model: large-coder
| 题型 | 匹配条件 | 路由可读取的值 |
|---|---|---|
noul | 回答“是”的概率满足 predicate,默认 gte: 0.5 | decision:<name> = P(yes) |
score | 期望等级满足必填的 predicate;等级从 0 开始计数 | decision:<name> = 期望等级 |
choice | 条件的 label 是选中的选项,且该选项的概率满足已配置的 predicate | decision:<name>:<key> = P(key),decision:<name> = P(chosen) |
set | 条件的 label 概率满足 predicate;未配置时,以模型是否选中该标签为准 | decision:<name>:<key> = P(key),decision:<name> = 最高概率 |
span | 存在一个带有条件 label 的片段,其概率满足 predicate;未配置时,以模型是否找到带有该标签的片段为准 | decision:<name>:<key> = 该标签最高概率片段的概率(未找到时为 0),decision:<name> = 所有词中的最高概率 |