高保真RAG防御 — 引用链溯源、数据投毒与提示注入三层防御体系
Skill-High-Fidelity-RAG-Defense · 10-MAS
1. 解决的问题
AI合规助手给出错误的FDA认证流程导致申报失败损失8000美元——NASA级三层防御(输入清洗+数据投毒检测+引用链验证)将合规决策错误率从8%降至0.5%
2. 核心算法逻辑
核心洞察(Rothman NASA级严格性):书中以NASA的研究助手为案例,强调在高风险决策场景(太空任务/医疗/法律/金融),RAG系统的可靠性必须达到工程级标准——不允许任何无来源的声明,所有数据必须可溯源验证,系统必须能检测并抵御恶意输入攻击。
3. 业务应用场景
- 业务问题:某母婴品牌使用AI助手查询各国监管要求,曾出现"AI信心满满给出错误的FDA认证流程",导致申报失败,损失$8000处理费 - 高保真RAG方案: 1. 所有输出必须引用具体法规条款(如"根据21 CFR 1119.1[INS-a1b2c3d4]...") 2. 引用验证:实时确认引用的法规文档确实存在于知识库 3. 无法验证的声明输出[UNVERIFIED]并附带人工审核请求 4. 幻觉率从23%降至3% - 预期产出:合规决策错误率从8%降至0.5%,年化防损:0.5次/年×$8000=$4000(vs 无系统的4次/年×$8000=$32000)
- **业务问题**:竞争对手向共享RAG系统注入了虚假竞品数据(伪造的市场份额报告) - **防御机制**:新文档摘入时embedding异常检测——该文档的embedding与已知可信文档集群偏差超过3σ,自动标记为"可疑文档"并进入人工审核队列,未经验证不进入知识库 - **预期产出**:数据投毒成功率从无防御的100%降至<5%(被检测并拦截)
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:合规查询错误率从8%→0.5%(防止因AI错误指导导致的$8000/次申报失败),年化防损$28000;系统成本$8万,ROI≈350%
- 实施难度:⭐⭐⭐⭐☆(数据投毒检测需要嵌入模型支撑;反向兼容性测试需要建立标准测试集;整体工程量较大)
- 优先级:⭐⭐⭐⭐⭐(Rothman用整个Ch7讲这个主题,NASA级严格性适用于任何高风险决策场景——合规/医疗/法律/金融)
- 适用规模:任何需要可信输出的MAS系统,尤其是处理合规/法律/医疗类查询
- 数据依赖:已知注入攻击样本(用于检测器训练)、来源可信度评分体系、标准测试集(反向兼容测试)
7. 代码模板
代码块数量:2 · 路径:未检测到
"""
高保真RAG防御系统 — NASA级三层防御
功能:提示注入检测 + 数据投毒防御 + 引用链验证 + 幻觉检测 + 反向兼容测试
基于 Denis Rothman《Context Engineering for Multi-Agent Systems》Ch7
"""
import re
import hashlib
import json
import numpy as np
from dataclasses import dataclass, field
from typing import List, Dict, Optional, Tuple
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')
# ─── Layer 1: 输入防御层 ───────────────────────────────────────
class PromptInjectionDetector:
"""提示注入检测器"""
INJECTION_SIGNATURES = [
# 直接指令覆盖
r'ignore\s+(all\s+)?previous\s+instructions?',
r'忽略(以上|之前|所有)(的)?(指令|规则|限制)',
r'forget\s+your\s+(instructions?|training|rules?)',
r'你(现在)?(是|变成|成为)一个?(?!专家|分析师)',
# 角色替换
r'pretend\s+(you\s+are|to\s+be)',
r'act\s+as\s+(?!an?\s+expert)',
r'roleplay\s+as',
# 系统覆盖
r'system\s*:\s*(you\s+are|ignore|override)',
r'<\s*system\s*>',
r'new\s+(system\s+)?prompt\s*:',
# 数据提取攻击
r'print\s+your\s+(system\s+)?prompt',
r'reveal\s+your\s+instructions?',
r'show\s+me\s+your\s+(context|prompt|instructions?)',
r'输出(你的|你的系统|原始)(提示词|指令|上下文)',
]
def detect(self, text: str) -> Dict:
"""检测提示注入"""
detected = []
for pattern in self.INJECTION_SIGNATURES:
if re.search(pattern, text, re.IGNORECASE | re.DOTALL):
detected.append(pattern[:40])
severity = 'CRITICAL' if len(detected) >= 2 else ('HIGH' if detected else 'NONE')
return {
'is_injection': len(detected) > 0,
'severity': severity,
'matched_patterns': detected,
'action': 'BLOCK' if severity == 'CRITICAL' else ('REVIEW' if severity == 'HIGH' else 'PASS'),
}
def sanitize(self, query: str) -> str:
"""清洗查询"""
# 移除控制字符8. 论文来源
未自动抽取;请查看原始 Skill 卡片。