RAGSpine
架构决策(ADR)

ADR 0010: 意图解析——确定性安全闸门 + 可插拔的 IntentParser

将始终开启、绝不可插拔的确定性安全闸门与可插拔的 IntentParser Protocol 解耦——在要紧处保持确定性,在安全处保持灵活。

状态:accepted · 日期:2026-06-17

不可变记录。豁免漂移追踪(无 covers)。只可被取代,不可编辑。

隶属于 0002 产品方向。由 00040007 倒逼产生。

背景

当前的意图解析器基于规则、零 LLM,且针对金融/中文场景调优(同义词匹配、硬编码的 _SUPPORTED_METRICS、内联的 _CHANNEL_SYNONYMS)。它同时也是安全关键的前门:作用域外 / 竞品拒答是确定性的,且发生在任何 LLM 或检索调用_之前_,外部实体掩码也位于此处。此前的两项决策打破了纯规则解析器的可行性:完全通用化(0004)意味着任意用户自定义维度,金融调优的解析器无法读懂;多语言(0007)则让按语言维护同义词表成为维护灾难。

关键洞察:安全决策与意图决策是可分离的。"这个实体是否在作用域外 / 是竞品 / 属于 RESTRICTED?"是安全关键的,必须保持确定性。"询问的是哪个维度/哪个期间?"则不是——那里的误解析只会导致澄清追问或未找到,绝不会导致泄漏。

决策

将两者解耦。

  • 安全闸门(作用域外 / 竞品 / RESTRICTED)成为一个独立、始终开启、绝不可插拔的确定性守卫,作用于解析器的输出之上,并通过 DomainProfile 声明。它绝不咨询 LLM。
  • 意图提取成为一个 IntentParser Protocol,默认实现为零 LLM、配置驱动的规则实现(即 0009 所定的离线默认),并提供可选的 LLM 分类器后端(作为 extra),用于健壮的多语言 / 任意领域解析。

原则:在要紧处保持确定性(安全),在安全处保持灵活(意图)。

考虑过的备选方案(已否决)

  • 纯规则解析器,配置驱动,永不使用 LLM(方案 A):纯粹性最高,但迫使每个用户手工编写按领域/按 locale 的同义词配置——对形态丰富的语言很脆弱,采用摩擦高。
  • 以 LLM 分类器作为主解析器(方案 C):最灵活,但让前门依赖 LLM,且误解析有击穿安全闸门的风险;同时失去零 LLM 的离线默认。

影响

  • 安全保证得到强化:它现在是一个显式、隔离、不可插拔的组件,而不再是"规则解析器碰巧是确定性的"这一涌现性质。
  • 保留零 LLM 的离线默认,同时为通用化/多语言提供按需启用的路径。
  • 新增产物:一个 SecurityGate 组件,以及一个带两种实现的 IntentParser Protocol。

本页目录