再询问信号
概览
reask 检测当前用户轮次是否在语义上重复同一对话中的近期用户轮次。在 routing.signals.reasks 下定义重复提问规则。
该族为学习型:使用 Router 的共享语义嵌入路径,将当前用户轮次与先前用户轮次比较。
主要优势
- 捕捉隐式不满,而不要求「this is wrong」这类显式短语。
- 区分一轮重复与多轮持续不满。
- 让决策基于近期对话历史升级,而不是单条消息。
- 复用现有语义相似度栈,而不引入第二套模型表面。
解决什么问题?
上一轮回答没用时,用户常常重述同一问题。单轮分类器可能漏掉该模式,因为抱怨是隐式而非显式的。
reask 将最近用户轮次与最近若干用户轮次比较,并在连续轮次保持语义相似时浮现可配置的不满信号。
何时使用
在以下情况使用 reask:
- 重复提问应升级到更强模型
- 希望对一次重复提问与多次重复提问做不同处理
- 显式反馈稀少,但重复用户轮次仍然重要
- 路由决策应依赖同一对话中的用户历史
配置
routing:
signals:
reasks:
- name: likely_dissatisfied
description: Current user turn closely repeats the immediately previous user turn.
threshold: 0.8
lookback_turns: 1
- name: persistently_dissatisfied
description: Current user turn repeats the last two user turns in a row.
threshold: 0.8
lookback_turns: 2
每条规则将当前用户轮次与最近 lookback_turns 个先前用户轮次比较。仅当该近期连续中的每一轮都高于已配置相似度阈值时,规则才匹配。
默认分数是余弦相似度,即使配置了默认决策模型也是如此。显式设置
routing.model_bindings.reask 且使用 contract: decision.v1 时,才会启用原生的重复意图判断。
该模式的分数表示两个请求寻求相同信息或操作的概率,需要针对所选模型重新校准阈值;
余弦相似度阈值不能直接移用。两种模式都由 Router 统计连续轮次,完整且非空的相同轮次无需调用模型即可识别。
依赖与限制
Reask 使用共享嵌入路径,并在配置了远程嵌入提供方时把近期用户轮次发给它。非完全相同的轮次必须证明完整输入已被处理:模型截断输入或无法确定输入覆盖范围时,会返回未知信号,而不是不匹配。OpenAI 兼容的嵌入端点必须拒绝超过其限制的输入,不能静默截断。重复可能是有意的,而不一定是不满,因此把该信号用于升级而非惩罚。完整示例见:
config/fragments/signal/reask/dissatisfaction.yaml。