分区(Partitions)
概览
routing.projections.partitions 协调竞争的 domain 或 embedding 信号,并保留一个胜者。
在以下情况使用分区:
- 多个相关领域或嵌入信号可能对同一请求同时匹配
- 下游路由应基于单一解析胜者,而非多个重叠匹配
- 需要在无任何成员命中时提供回退行为
主要优势
- 在决策运行前将竞争的领域或嵌入匹配收敛为单一胜者。
- 无成员清晰胜出时提供稳定默认回退。
- 下游决策保持简单——读取解析后的原始信号,而非分区逻辑。
- 支持基于 softmax 的置信度感知胜者选择。
解决什么问题?
没有分区时,请求可能同时匹配多个相近领域或嵌入通道,对路由往往不理想:
- 通常应有一个主领域胜者,而非四个部分匹配的领域
- 意图通道通常应先收敛为最佳嵌入类别,再供决策评估
- 若每个决策都要防御重叠匹配,路由规则会变难推理
分区在信号提取之后、决策评估之前协调检测器结果。
运行时行为
当前实现中:
- 分区仅接受
domain或embedding成员 - 同一分区内所有成员必须类型相同
default必填,且必须出现在members中- 若多个成员匹配,运行时保留一个胜者
- 若无成员匹配,运行时将
default合成进匹配集合
支持的语义:
exclusive:保留最高置信胜者不变softmax_exclusive:胜者相同,但用temperature对候选置信度做 softmax 重归一
两条实际后果:
- 决策仍用原生类型引用胜者,如
type: domain或type: embedding - 决策不引用分区名本身
因此分区与映射意义上的「命名投影输出」不同:它们是对已有信号名的协调。
规范 YAML
routing:
projections:
partitions:
- name: balance_domain_partition
semantics: softmax_exclusive
temperature: 0.10
members: [law, business, health, history, other]
default: other
- name: balance_intent_partition
semantics: softmax_exclusive
temperature: 0.18
members: [code_general, architecture_design, research_synthesis, general_chat_fallback]
default: general_chat_fallback
DSL
PROJECTION partition balance_intent_partition {
semantics: "softmax_exclusive"
temperature: 0.18
members: ["code_general", "architecture_design", "research_synthesis", "general_chat_fallback"]
default: "general_chat_fallback"
}
配置字段
| 字段 | 含义 |
|---|---|
name | 配置与 DSL 中的分区标识 |
semantics | 胜者选择模式:exclusive 或 softmax_exclusive |
temperature | 仅对 softmax_exclusive 有意义;值越低胜者越「果断」 |
members | 要协调的已有 domain 或 embedding 信号名 |
default | 无成员匹配时的回退成员(会被合成进匹配集合) |
配置
分区位于 routing.projections.partitions。每个分区需要 name、semantics(exclusive 或 softmax_exclusive)、members 列表与 default。完整字段说明见上文 规范 YAML 与 配置字段。
何时使用
在以下情况使用分区:
- 路由前请求应有一个主导领域
- 若干嵌入通道代表互斥意图,应收敛为单一胜者
- 希望下游决策保持简单,直接读取胜出的原始信号
何时不用
在以下情况不要使用分区:
- 多个成员应对决策独立可见
- 分组混合了不应相互竞争的不相关概念
- 需要可复用的命名档位如
balance_reasoning——那属于映射,而非分区