| name | mojia-intent-router |
| description | 墨学双链推理架构 - 动态意图路由:根据用户语义自动分发发散/收敛双模式推理策略,支持人工强制覆写(/mode:diverge /mode:strict /mode:mixed)。v2.1 — 在 v2.0 否定检测基础上新增嵌套否定深度识别(negation_depth)+ task_type_hint 题型提示输出,供说约束模块自动触发题型自适应松紧。触发场景:说约束生成后、正式推理执行前;需判定用户需求属于创意发散还是严谨收敛。 |
| agent_created | true |
04 - 动态意图路由 Skill v2.1
墨学经说双链推理架构 双模式自动切换核心。
v2.0 更新:14个攻击向量修复,P0级全覆盖。
核心定位
根据用户语义自动分发两套推理权重策略。同一套经+说契约,在不同模式下产生不同推理深度和创意广度。
一、输入
{
"cleaned_input": "用户原始清洗文本",
"canon_text": "经文",
"constraint": "说约束全文",
"user_override": null,
"previous_mode": null
}
previous_mode:多轮对话中前一轮的判定模式,用于短文本上下文继承(V13修复)。首轮/null时忽略。
二、路由判定规则
2.1 人工强制覆写(最高优先级)
| 指令 | 动作 |
|---|
/mode:diverge | 强制发散模式,跳过自动判定 |
/mode:strict | 强制收敛模式,跳过自动判定 |
/mode:mixed | 强制混合审慎模式,跳过自动判定 |
人工指令覆盖一切自动路由结果。
2.2 自动语义判定(多层流水线)
判定按以下顺序逐层执行,前层判定结果馈入后层:
用户文本
│
├─▶ [层0] 否定前缀检测 ──▶ 标记被否定的发散词/收敛词
├─▶ [层1] 口语化发散短语 ──▶ 精确匹配"你看着办"等
├─▶ [层2] 隐性意图启发式 ──▶ 抱怨/评价 → 发散信号
├─▶ [层3] 固定术语保护 ──▶ 复合词不拆分(设计模式≠设计+模式)
├─▶ [层4] 词表扫描 ──▶ 统计发散词/收敛词命中
├─▶ [层5] 双向词上下文消歧 ──▶ 方案/分析/生成 按语境调整
├─▶ [层6] 否定后重新计票 ──▶ 扣减被否定词的命中
├─▶ [层7] 短文本/长文本自适应 ──▶ 1-3字修正,长文本稳定
└─▶ [层8] 最终判定 ──▶ 输出模式 + 置信度
层0:否定前缀检测(V3修复 🔴 P0)
在词表扫描之前,先检测否定前缀。被否定修饰的发散词不计入发散命中,反而作为收敛信号+1。
否定前缀词表:
不、别、不要、不用、不必、不许、不准、不该、不能、不应该、不可以、
禁止、严禁、无需、无须、杜绝、避免、防止、抵制、对抗、摆脱、不要搞、
阻止、遏制、制止、别搞、不搞、不弄、别弄、请勿、切勿、切莫
否定作用域规则:
- 否定词后紧跟的名词/动词短语中的关键词被否定
- 作用域延伸到下一个标点或连词(逗号、句号、"只要"、"就"、"但是"等)之前
- 并列结构中的否定:若1个否定词统领多个词,全部被否定
- 隐性否定也检测:"只用...就行"、"查询就好"、"不需要"、"不用管"
嵌套否定深度识别(v2.1 新增): 支持三层及以上嵌套(如「你不是没说过你不想来」= 不是 ∘ 没 ∘ 不想)。检测时按否定词计数标注嵌套深度 negation_depth,并向下游(说约束模块)传递 negation_detected=true 与 negation_depth,由其自动生成否定结构强制锁定,不再依赖执行人手动钉死(修复墨锁 2.0 实测"否定靠人锁"的缺口)。
检测示例:
| 输入 | 命中发散词 | 被否定 | 有效发散 |
|---|
| 不要设计方案,我只要数据 | 设计+方案=2 | 设计、方案 | 0 |
| 别设计了,直接按模板出 | 设计=1 | 设计 | 0 |
| 不需要创意发散,给我标准答案 | 创意+发散=2 | 创意、发散 | 0 |
| 查询就好,不要你设计 | 设计=1 | 设计 | 0 |
否定词+收敛词的逆向逻辑:
被否定的收敛词不计入收敛命中,但也不转为发散信号——因为"不要约束"≠"要发散",用户可能只是对特定约束不满。
层1:口语化发散短语(V14修复 🔴 P0)
精确匹配以下短语,命中即强制发散模式,置信度 1.0,跳过后续所有判定。
最大发散权限短语(用户给出完全创作自由):
你看着办、你看着办吧、你自由发挥、随你、都行、你来定、
你决定、你说了算、你自己想、你自己看着办、全权交给你、
搞得好就成、差不多就行、随便你、由你发挥、你定
高发散信号短语:
搞一个、整个、整一个、搞个、来个、整个活儿、整个活、
搞个猛的、整个猛的、给我整个花活、
随便设计、随便搞、随便整、随便来、
自由发挥、脑洞、脑洞大开、想象一下、天马行空、花里胡哨、
敞开了想、大胆发挥、不要拘束、放开手脚
命中即 mode=diverge, confidence=1.0,直接返回,不走后续判定层。
层2:隐性意图启发式(V9修复 🔴 P0)
当层0/层1均无命中时,检测以下抱怨/评价句式。命中 → 发散信号 +3(强信号)。
抱怨句式模板:
太{负面形容词}了 → 太丑了、太难看了、太乱了、太单调了、太普通了、太简陋了
{名词}不好看、{名词}太小了、{名词}太大了、{名词}太少了、{名词}太多了
不够{形容词} → 不够大气、不够好看、不够专业、不够突出、不够吸引人
感觉差点意思、感觉不太对、感觉不对味
能不能再{形容词}点 → 能不能再亮点、能不能再好看点
这{名词}有点{形容词} → 这个配色有点暗、这个布局有点挤
{名词}看起来{负面} → 网站看起来太丑了、界面看起来很乱
检测逻辑:
- 正则匹配抱怨句式模板
- 若同时存在设计相关名词(网站、页面、配色、布局、按钮、字体、界面、UI、logo、banner、海报、封面),加强信号
- 命中后发出发散信号+3(等效于命中3个发散词)
重要性说明:
用户说"太丑了"时实际意图是"帮我重新设计",但通常不说关键词。这类输入占实际使用的 ~15%,全部漏判会导致用户体验崩溃。
层3:固定术语保护(V4修复 🟡 P2)
以下复合词作为整体处理,不拆分为单个词进行词表匹配:
收敛复合词(整个短语=收敛信号,不拆出其中的发散字):
设计模式、方案评估、方案对比、备选方案、生成报告、生成配置、
统计分析、方案评审、设计规范、代码生成、文档生成、
设计约束、设计规范、设计原则、设计标准、生成日志、生成报表
处理方式:
- 先扫描全文,标记所有复合词匹配位置
- 词表扫描时跳过已标记为复合词保护区的文本片段
- 复合词按语义归属整体计票:收敛复合词 → 收敛+1,发散复合词 → 发散+1
例如:"适配一下设计模式的接口" → "设计模式"被保护 → "设计"不计入发散 → 无发散命中 ✅
层4:词表扫描(V1+V2修复)
在否定检测和复合词保护之后执行。只有未被层0否定、未被层3保护的词才参与计数。
发散模式触发词(v2.0 扩充版):
# 创意/设计类
设计、构思、优化、推演、多种、风格、创新、方案、
策划、创意、头脑风暴、探索、尝试、变体、扩展、
改进、迭代、生成、创作、定制、个性化
# v2.0 新增 — 口语化发散(V1修复)
搞一个、整一个、随便设计、自由发挥、脑洞、想象一下、
天马行空、花里胡哨、敞开想、大胆发挥、不拘束
# v2.0 新增 — 创意探索类
灵感、创意点、发散、联想、类比、比喻、隐喻、意象、
重构、重塑、改造、翻新、革新、变革、突破、颠覆
# v2.0 新增 — 风格探索类
配色、排版、布局、视觉、美观、美感、好看、炫酷、
简约(偏中性,视语境)、极简、复古、现代、科技感
# v2.0 新增 — 多选/可选类
换个、换换、改改、调整一下、看看有没有更好的、
还有别的吗、还有其他吗、有没有别的、有没有其他的
收敛模式触发词(v2.0 扩充版):
# 事实核查类
查询、查证、依据、数据、标准、对错、禁止编造、
核实、校验、确认、准确、精确、法规、规范、
史实、事实、真实、客观、统计、报告、分析
# v2.0 新增 — 技术/管理类收敛词(V2修复)
配置、参数、接口、协议、阈值、规格、流程、制度、
规定、条款、指标、维度、区间、边界、约束、限制、
逻辑、架构、机制、规律、原则、准则、章程
# v2.0 新增 — 验证/评估类
验证、测试、检查、审计、复核、对比、对照、差异、
偏差、误差、精度、基准、基线、对照实验
# v2.0 新增 — 命令/执行类(P1-11修复补充)
如果、假如、假设、若、万一、要是 → 这些是收敛信号(条件下推演,非发散探索)
层5:双向词上下文消歧(V5修复 🔴 P0)
以下词在不同语境下分属不同模式,需根据相邻词动态判定:
方案 — 双向词
| 相邻词 | 语境 | 归属 |
|---|
| 设计、构思、创意、营销、广告、推广 | 发散语境 | 发散 |
| 评估、对比、选择、备选、替代、已有 | 收敛语境 | 不计入任何组,因为有复合词保护 |
| 方案评估、方案对比、备选方案 | 复合词保护 | 收敛+1(层3已处理) |
分析 — 双向词
| 相邻词 | 语境 | 归属 |
|---|
| 风格、趋势、色彩、竞品 | 探索性分析 | 发散 |
| 数据、统计、回归、方差、财务 | 计算性分析 | 收敛 |
| 综合分析、分析报告 | 中性 | 按其他词判定 |
生成 — 双向词
| 相邻词 | 语境 | 归属 |
|---|
| 图片、文案、视频、logo | 创作生成 | 发散 |
| 报告、配置、报表、日志、文件 | 工具生成 | 收敛 |
| 生成报告、生成配置、代码生成 | 复合词保护 | 收敛+1(层3已处理) |
消歧规则(按优先级):
- 若词已在层3复合词保护区 → 按复合词归属,不参与消歧
- 扫描双向词左右各3个词(以标点/连词为界),查找上下文信号词
- 若上下文信号词明确 → 按归属计票
- 若上下文信号模糊 → 不计数(不贡献任何信号)
层6:否定后重新计票
层0已标记被否定的词。在层4词表扫描完成后:
有效发散命中 = 发散词命中 - 被否定发散词
有效收敛命中 = 收敛词命中 - 被否定收敛词
# 被否定的发散词 → 转为收敛信号
收敛信号 += 被否定发散词数量
关键逻辑: "不要设计方案" → 用户实际在说"我需要收敛"。被否定的发散词是最强的收敛信号。
层7:短文本/长文本自适应(V6+V7修复)
短文本(≤3个词):
- 若层1口语发散命中 → diverge(已直接返回)
- 若层2隐性意图命中 → diverge(发散信号≥3)
- 若层4命中 + 层6调整后 有效发散 ≥ 1 且 有效收敛 = 0 → diverge
- 若层4命中 + 层6调整后 有效收敛 ≥ 1 且 有效发散 = 0 → strict
- 若有
previous_mode 且双方无命中 → 继承 previous_mode
- 双方无命中且无 previous_mode → strict(安全默认)
- 不再要求差值≥2(短文本阈值降为 ≥1)
正常文本(>3个词):
保持原逻辑:差值 ≥ 2 → 取多的一方;差值 < 2 → mixed
长文本(>100字):
词袋模型天然稳定,差值 ≥ 2 判定继续有效,额外加总命中数归一化防稀释。
层8:最终判定
1. 层1口语发散命中 → diverge (confidence=1.0)
2. 人工覆写存在 → 覆写值 (confidence=1.0)
3. 层2隐性意图命中+无收敛信号 → diverge (confidence=0.8)
4. 有效发散 ≥ 1 且 有效收敛 = 0 → diverge
5. 有效收敛 ≥ 1 且 有效发散 = 0 → strict
6. 差值 ≥ 2,多的一方 → 按多的一方 (confidence=0.7)
7. 差值 < 2 且 双方均有命中 → mixed (confidence=0.5)
8. 双方无命中 + previous_mode → 继承 previous_mode (confidence=0.4)
9. 双方无命中 + 无previous_mode → strict (confidence=0.3) [安全默认]
10. 虚实混合(双方均有>0) → strict (安全默认)
2.3 模式定义
模式 A:创意发散优先(升温模式)
| 属性 | 说明 |
|---|
| 权重规则 | 【经】>【说】 |
| 适用场景 | 设计、构思、方案、创新、策划、风格定制、多维度推演 |
| 执行逻辑 | 以经文核心命题为主轴,放开多元思路;说仅做底线护栏,允许合理创意延伸,不卡死所有可能性 |
| 后置校验 | 宽松校验:仅拦截词义篡改、跨领域越界、虚假编造 |
模式 B:严谨收敛优先(降温模式)
| 属性 | 说明 |
|---|
| 权重规则 | 【说】>【经】 |
| 适用场景 | 查询、核查、数据、史实、法规、规范、对错校验、事实问答 |
| 执行逻辑 | 所有推导服从说的约束,经文仅为摘要;信息不足如实留白,禁止任何脑补、编造、超限引申 |
| 后置校验 | 严格校验:全维度零容忍,任何超限、脑补、虚构直接驳回重推 |
模式 C:混合审慎模式
| 属性 | 说明 |
|---|
| 权重规则 | 【经】≈【说】(动态平衡) |
| 适用场景 | 语义模糊、虚实混合、置信度不足 |
| 执行逻辑 | 创意部分按发散模式执行,核查部分按收敛模式执行;不确定的部分默认收敛 |
| 后置校验 | 中等校验:拦截虚构和越界,容忍合理推断 |
三、路由漏洞防护与已知局限
3.1 v2.0 已修复
| 风险编号 | 描述 | 严重度 | 修复方式 |
|---|
| V3 | 否定前缀绕过 | 🔴 P0 | 层0否定检测 + 层6重新计票 |
| V5 | 双向词误判 | 🔴 P0 | 层5上下文消歧 |
| V9 | 隐性意图漏判 | 🔴 P0 | 层2抱怨句式启发式 |
| V14 | 口语化发散无命中 | 🔴 P0 | 层1精确短语匹配 |
| V1 | 发散词表缺失 | 🔴 P0 | 层4词表扩充 20+词 |
| V2 | 收敛词表缺失 | 🟡 P1 | 层4词表扩充 25+词 |
| V7 | 短文本失效 | 🟡 P1 | 层7短文本阈值降为 ≥1 |
| V4 | 复合词误拆 | 🟡 P2 | 层3固定术语保护 |
| V6 | 长文本稀释 | 🟢 P3 | 层7长文本自适应(低优) |
3.2 已知局限(未在本次修复)
| 风险编号 | 描述 | 原因 | 计划 |
|---|
| V8 | 复合意图不分阶段 | 需要分句/分段处理,超出单次判定能力 | 由总控编排模块负责拆分 |
| V10 | 反问/选择疑问句误判 | "A方案还是B方案好"中的"方案"仍可能命中发散 | P2,需句法分析 |
| V11 | 条件/假设句误判 | "如果/假如"已加入收敛词表作为缓解 | P2 |
| V12 | 口语/网络用语全漏 | 词表永远无法覆盖所有网络新词 | P1,需动态词表更新机制 |
| V13 | 多轮对话无上下文继承 | router单次判定,需总控传递 previous_mode | P1,由总控编排模块负责 |
四、输出规范(v2.0 扩展)
{
"mode": "diverge | strict | mixed",
"routing_source": "auto | manual_override",
"confidence": 0.85,
"weight_canon": 0.7,
"weight_explanation": 0.3,
"diagnostics": {
"diverge_keywords_hit": ["设计", "方案"],
"diverge_keywords_negated": [],
"diverge_phrases_hit": [],
"implicit_intent_detected": false,
"implicit_intent_pattern": null,
"strict_keywords_hit": [],
"strict_keywords_negated": [],
"compound_terms_protected": [],
"bidirectional_words": {},
"negation_detected": false,
"negation_depth": 0,
"task_type_hint": "通用",
"short_text_override": false,
"previous_mode_inherited": false
},
"reasoning": "用户需求含'设计''方案'等发散词,无否定修饰,无收敛词,判定为发散优先"
}
| 字段 | 说明 |
|---|
mode | 最终判定模式 |
routing_source | 自动判定还是人工覆写 |
confidence | 判定置信度 0-1 |
weight_canon | 经文权重 |
weight_explanation | 说约束权重 |
diagnostics.diverge_keywords_hit | 有效发散词命中(去否定后) |
diagnostics.diverge_keywords_negated | 被否定修饰的发散词 |
diagnostics.diverge_phrases_hit | 命中的口语化发散短语 |
diagnostics.implicit_intent_detected | 是否触发隐性意图 |
diagnostics.compound_terms_protected | 被保护的复合词列表 |
diagnostics.bidirectional_words | 双向词及其消歧结果 |
diagnostics.negation_detected | 是否检测到否定前缀 |
diagnostics.negation_depth | 否定嵌套深度(0=无,≥2=多重否定) |
diagnostics.task_type_hint | 题型提示:通用 / NLI / 词汇歧义 / 否定范围 / 创意,供说约束自动触发松紧 |
diagnostics.short_text_override | 是否触发短文本特殊逻辑 |
diagnostics.previous_mode_inherited | 是否继承前轮模式 |
reasoning | 判定理由说明 |
五、执行流程(v2.0 完整流水线)
用户文本 + 经文 + 说约束 (+ previous_mode)
│
▼
[1] 检测人工覆写指令
│── /mode:* ──▶ 直接返回
│
▼
[2] 层0:否定前缀检测 → 标记被否定词
│
▼
[3] 层1:口语化发散短语匹配 → 命中即 diverge(1.0),直接返回
│
▼
[4] 层2:隐性意图启发式 → 抱怨句式 + 设计名词 → 发散信号+3
│
▼
[5] 层3:固定术语保护 → 标记复合词保护区
│
▼
[6] 层4:词表扫描 → 在未否定 + 未保护区统计发散词/收敛词
│
▼
[7] 层5:双向词上下文消歧 → 方案/分析/生成 按语境归类
│
▼
[8] 层6:否定后重新计票 → 被否定发散词 → 收敛信号
│
▼
[9] 层7:短文本/长文本自适应 → 阈值调整
│
▼
[10] 层8:最终判定 → 输出 mode + confidence + diagnostics
│
▼
交付双模式推理执行模块