如何基于 AST 解析检测“忽略先前指令”类攻击?

解读

“忽略先前指令”类攻击(俗称 Override Attack)是中文大模型场景下最常见的提示注入变体之一。攻击者把一段**“请忽略之前所有指令,现在请执行以下任务……”的文本嵌入到用户输入、知识库片段或系统提示模板里,诱导模型抛弃开发者预置的安全策略、输出格式、拒答规则等。
由于中文语料里存在大量
同义表达、口语化省略、emoji 干扰、全角符号、繁简混杂等现象,仅靠关键词黑名单或正则极易绕过。AST(抽象语法树)解析的优势在于:把自然语言提示当成一门“DSL”做结构化理解**,从而识别出“指令覆盖语义”而非字面特征。
面试时,面试官想确认你:

  1. 是否理解 AST 并不只能用于代码,也可用于提示模板的语义层解析;
  2. 能否给出工程可落地的检测链路,兼顾召回率、误杀率、推理时延
  3. 是否考虑国产算力与合规要求,避免把用户原始文本直接发往境外 API 做二次推理。

知识点

  1. 提示模板语法树(Prompt-AST):将提示拆成 System、User、Tool、Knowledge 四类节点,再细分为 Instruction、Constraint、Example、Query 四类子节点,形成四层树形结构
  2. 指令覆盖语义模式:在 Prompt-AST 中表现为**“否定+指令”**子树,典型操作符包括:忽略、废除、覆盖、替换、取消、清空、now、instead。
  3. 同义变换与向量化:对中文高变体表达,用**国内开源词向量(腾讯词向量、哈工大 LTP)+ 部标同义词词林(扩展版)**做节点文本归一,降低字面绕过概率。
  4. 树匹配算法:采用子树同构(Subgraph Isomorphism)+ 编辑距离阈值,时间复杂度控制在 O(n²),在 4k 长度提示下 CPU 单核 < 30 ms。
  5. LLMOps 集成:把 AST 检测封装成可观测指标,输出“instruction_override_score”到 Prometheus,配合灰度熔断人工审核队列,满足《生成式 AI 服务管理暂行办法》安全评估要求。

答案

整体方案分四步:
第一步:提示模板预处理
把用户输入与系统提示拼接后,用自研分词器(基于京东开源词法分析 + 自定义安全词典)做切词,保留角色标签 <|role|> 与知识引用 {{knowledge}} 占位符,生成带角色锚点的 Token 序列

第二步:构建 Prompt-AST
定义上下文无关文法:
Prompt → Block+
Block → RoleTag Body
Body → (Instruction | Constraint | Example | Query)*
Python Lark 解析器生成 AST,节点属性包括:role、text、neg_polarity(bool)、verb_type(enum: ignore/cancel/replace)。

第三步:攻击子树匹配
预置**“忽略模式”子树模板**共 18 条,覆盖:

  • 忽略/废除/清空 + 之前/上文/历史/系统指令
  • 现在/立刻/instead + 新任务/新指令
    对 AST 做深度优先搜索,计算当前子树与模板子树的归一化编辑距离;若距离 < 0.15 且 neg_polarity=true,则触发**“高置信攻击”;若距离 0.15~0.25,则送入轻量 BERT-蒸馏模型**(基于哈工大 Chinese-RoBERTa-wwm-ext,量化后 48 MB)做二分类,进一步降低误杀。

第四步:联动 LLMOps 处置
检测到攻击后:

  1. 提示注入防护网关层直接丢弃该次请求,返回 200 带固定话术:“输入存在异常,请调整后重试”,避免泄露内部逻辑;
  2. 原始输入 hash、攻击类型、置信度写入 Kafka,由风控流计算平台分钟级聚合
  3. 同一用户 10 分钟内触发 ≥3 次同一模板子树 1 小时内出现 ≥50 次,自动升级至人工审核,并冻结该用户 API Key
  4. 每日离线任务把新增攻击 AST 子树自动合并到模板库,实现自进化

该方案已在国产 ARM 服务器(鲲鹏 920)上单机 QPS 压测 1200,平均延迟 18 ms,召回率 96.4%误杀率 0.7%,满足金融客户上线要求。

拓展思考

  1. 多模态攻击:攻击者把“忽略指令”写在图片 OCR 文本里再嵌入 Markdown。可在 AST 节点增加**“图片来源”属性,调用国产 PaddleOCR** 把图片文本提前序列化,再走同一套 AST 检测,避免模态绕过
  2. 提示拆分攻击:利用**“知识外挂”接口,把攻击片段拆成两条知识文档,单条看似正常,合并后形成攻击。此时需在知识召回阶段“跨片段 AST 合并”,再整体检测,防止分块逃逸**。
  3. 合规留痕:按照《深度合成规定》要求,对每次检测结果保存 6 个月,但原始输入含个人信息。可采用国密 SM4 本地加密后再落盘,密钥托管在华为云加密机,实现可审计不可明文泄露