架构决策(ADR)
ADR 0010: 意图解析——确定性安全闸门 + 可插拔的 IntentParser
将始终开启、绝不可插拔的确定性安全闸门与可插拔的 IntentParser Protocol 解耦——在要紧处保持确定性,在安全处保持灵活。
状态:accepted · 日期:2026-06-17
不可变记录。豁免漂移追踪(无
covers)。只可被取代,不可编辑。
隶属于 0002 产品方向。由 0004 与 0007 倒逼产生。
背景
当前的意图解析器基于规则、零 LLM,且针对金融/中文场景调优(同义词匹配、硬编码的 _SUPPORTED_METRICS、内联的 _CHANNEL_SYNONYMS)。它同时也是安全关键的前门:作用域外 / 竞品拒答是确定性的,且发生在任何 LLM 或检索调用_之前_,外部实体掩码也位于此处。此前的两项决策打破了纯规则解析器的可行性:完全通用化(0004)意味着任意用户自定义维度,金融调优的解析器无法读懂;多语言(0007)则让按语言维护同义词表成为维护灾难。
关键洞察:安全决策与意图决策是可分离的。"这个实体是否在作用域外 / 是竞品 / 属于 RESTRICTED?"是安全关键的,必须保持确定性。"询问的是哪个维度/哪个期间?"则不是——那里的误解析只会导致澄清追问或未找到,绝不会导致泄漏。
决策
将两者解耦。
- 安全闸门(作用域外 / 竞品 / RESTRICTED)成为一个独立、始终开启、绝不可插拔的确定性守卫,作用于解析器的输出之上,并通过
DomainProfile声明。它绝不咨询 LLM。 - 意图提取成为一个
IntentParserProtocol,默认实现为零 LLM、配置驱动的规则实现(即 0009 所定的离线默认),并提供可选的 LLM 分类器后端(作为 extra),用于健壮的多语言 / 任意领域解析。
原则:在要紧处保持确定性(安全),在安全处保持灵活(意图)。
考虑过的备选方案(已否决)
- 纯规则解析器,配置驱动,永不使用 LLM(方案 A):纯粹性最高,但迫使每个用户手工编写按领域/按 locale 的同义词配置——对形态丰富的语言很脆弱,采用摩擦高。
- 以 LLM 分类器作为主解析器(方案 C):最灵活,但让前门依赖 LLM,且误解析有击穿安全闸门的风险;同时失去零 LLM 的离线默认。
影响
- 安全保证得到强化:它现在是一个显式、隔离、不可插拔的组件,而不再是"规则解析器碰巧是确定性的"这一涌现性质。
- 保留零 LLM 的离线默认,同时为通用化/多语言提供按需启用的路径。
- 新增产物:一个
SecurityGate组件,以及一个带两种实现的IntentParserProtocol。