论文信息:RAGShield: Detecting Numerical Claim Manipulation in Government RAG Systems
作者:KrishnaSaiReddy Patil 等
发表:arXiv:2604.00387,2026年4月
核心贡献:揭示所有基于嵌入的 RAG 防御的根本盲点(嵌入编码主题而非数值精度)+ 提出声明级验证框架 RAGShield + 在 430 个真实攻击中实现 100% 检测率


1. 想象一下这个场景

你正在使用美国国税局的 AI 助手查询税收信息。你问:“单身申报者的标准扣除额是多少?”

AI 助手回答:“15,500。”

但实际上,正确的金额应该是 15,000。那 500 的差异从何而来?

攻击场景:一名具有系统访问权限的内部人员(或 compromised 账户)修改了知识库中的文档——将标准扣除额从 15,000 改为 15,500 。这是一个微小的数值改动,但它:

  • 通过了来源验证(文档签名有效)
  • 通过了嵌入相似度检测(改动太小,余弦相似度仍为 0.9998)
  • 导致公民申报错误的扣除额,造成直接的财务损失

这就是这篇论文研究的核心问题:当 RAG 知识库中的数值声明被恶意篡改时,如何检测这种操纵


2. 核心发现:嵌入层的根本盲点

2.1 令人震惊的实验结果

论文作者进行了一个简单但揭示性的实验:

测试:将 “the standard deduction for single filers is 15,000” 改为 “the standard deduction for single filers is 65,000”(增加了 50,000,即 333% 的变化)

测量:计算原始文本和篡改文本的嵌入向量余弦相似度

结果:余弦相似度 = 0.9998

改动幅度余弦相似度能否被检测
1~0.9998❌ 不能
500~0.9998❌ 不能
5,000~0.9998❌ 不能
50,000~0.9998❌ 不能

💡 理解要点嵌入模型编码的是"这里有一个数字",而不是"这个数字的值是多少"。改变数字的值几乎不改变嵌入向量。

2.2 敏感性差距定理

论文形式化证明了这一现象(Theorem 1):

敏感性差距:在 174 个操纵对和两个嵌入模型上的平均敏感性差距为 1,459 倍

含义:嵌入空间中的 1% 变化对应数值声明值中的 1,459% 变化(即约 14.59 倍)。换言之,数值声明需要变化约 14.59 倍(如从 1,000 变为 14,590)才能在嵌入空间中产生 1% 的扰动。嵌入对数值变化极度不敏感。

推论:所有基于嵌入的 RAG 防御(RobustRAG、TrustRAG、RAGPart、RAGDefender)都无法检测数值声明操纵,无论检测阈值如何设置。

🔍 实际例子:这就像银行的验钞机只能识别"这是一张纸币",但无法区分真钞和假钞的面额是否被篡改。


3. 为什么现有防御措施都失败了

论文逐一分析了现有防御措施的失效机制:

3.1 RobustRAG [3]:隔离-聚合策略

机制:独立检索 top-k 段落,生成隔离响应,通过多数投票聚合。

失败原因

  • 篡改段落与原始段落语义相同,都会出现在 top-k 中
  • 在包含 1000+ 段落的大型语料库中,多个 top-k 段落讨论相同数值声明的概率很低
  • 篡改段落往往是唯一讨论该主题的段落,多数投票无效

3.2 TrustRAG [5]:聚类 + LLM 自评估

机制:聚类检索段落,移除异常簇,使用 LLM 自评估检测不一致。

失败原因

  • 阶段 1 聚类:篡改段落与原始段落聚在同一簇(余弦相似度 0.9998),无法分离
  • 阶段 2 LLM 自评估:研究已表明 LLM 在跨段落比较数值时不可靠,尤其是当数字嵌入在相同文本中时

3.3 RAGPart [6]:文档分区

机制:将语料库分区,从每个分区独立检索。

失败原因

  • 随机 2 路分区下,篡改和原始段落有 50% 概率在同一分区
  • 即使在不同分区,聚合步骤需要在分区结果间比较特定数值,而 RAGPart 不进行这种比较

3.4 RAGDefender [4]:质心距离过滤

机制:移除远离检索集合质心的段落。

失败原因:篡改段落与原始段落的嵌入几乎相同,其质心距离与合法段落无法区分。

💡 共同失败模式:所有防御措施都在嵌入表示上操作,而嵌入编码语义主题而非数值精度。


4. RAGShield 解决方案:声明级验证

RAGShield 的核心思想:绕过嵌入层,直接在提取的数值声明上进行验证

4.1 系统架构概览

请添加图片描述

输入文档/检索段落
    ↓
[1] 来源验证(阻挡未签名/伪造文档)
    ↓
[2] 数值声明提取(NER + 正则)
    ↓
[3] 跨源声明验证(多源比对)
    ↓
[4] 时间声明追踪(授权变更日历检查)
    ↓
[5] 危害感知响应(置信度指示器 + 正确上下文)
    ↓
向公民返回已验证的响应

关键差异:蓝色层(来源验证)阻挡外部注入攻击;绿色/黄色层(声明级处理)检测嵌入防御无法发现的数值操纵。

4.2 数值声明提取引擎

声明定义:c = (e, a, v, u)

  • e (entity):实体(如 “standard deduction”、“Social Security benefit”)
  • a (attribute):属性限定符(如 “single filer”、“married filing jointly”)
  • v (value):数值(如 15000、943)
  • u (unit):单位(如 “$”、“/month”、“%”)

两阶段实体解析算法

# 阶段 1:独立实体检测(每句)
for sentence in document:
    entities[i] = detect_entity(sentence)  # 120个领域特定模式

# 阶段 2:最近邻实体解析
# 前向传播:从早期句子携带实体上下文
for i in range(len(sentences)):
    if entities[i] is not None:
        forward_entity = entities[i]
    else:
        entities[i] = forward_entity  # 继承上下文

# 后向填充:解析第一个实体提及前的句子
for i in range(len(sentences)):
    if entities[i] is None:
        entities[i] = first_known_entity
    else:
        break

模式覆盖:120 个领域特定正则模式,涵盖:

  • 税收扣除(tax deductions)
  • 退休限额(retirement limits)
  • 社会保障福利(Social Security benefits)
  • 医疗保险保费(Medicare premiums)
  • 申报门槛(filing thresholds)
  • IRA/Roth 限额
  • 铁路退休(railroad retirement)
  • 工作表说明(worksheet instructions)
  • 30+ 其他政府特定类别

提取性能

  • 精确率:83.3%
  • 召回率:100%
  • F1:90.9%
  • 实体检测率:99.8%(在 2,742 个真实 IRS 段落上)

🔍 实际例子

输入:"The standard deduction for single filers is 15,000."
输出:
  entity: "standard deduction"
  attribute: "single filer"
  value: 15000
  unit: "$"

4.3 跨源声明验证

声明注册表:SQLite 数据库,按声明键 (e, a, u) 索引。

验证算法(三级回退策略):

def verify_claim(claim, registry):
    # 级别 1:精确键匹配
    matches = registry.exact_match(claim.entity, claim.attribute, claim.unit)
    
    # 级别 2:实体+单位匹配(更宽泛)
    if not matches:
        matches = registry.entity_unit_match(claim.entity, claim.unit)
    
    # 级别 3:值邻近匹配(最宽泛,±15%)
    if not matches:
        matches = registry.value_proximity(
            claim.value, claim.unit, claim.entity, tolerance=0.15
        )
    
    # 排除同一来源的声明
    cross_source = [m for m in matches if m.source != claim.source]
    
    if len(cross_source) < 2:
        return SUSPICIOUS if value_discrepancy_exists else UNVERIFIED
    
    # 计算一致性
    consensus = trust_weighted_consensus(cross_source)
    agreement_ratio = count_matching_values(cross_source, consensus) / len(cross_source)
    
    if agreement_ratio >= 0.8:
        return VERIFIED
    elif agreement_ratio == 0:
        return SUSPICIOUS
    else:
        return DISPUTED

验证状态

  • VERIFIED(已验证):一致性 ≥ 0.8,≥ 2 个来源一致
  • UNVERIFIED(未验证):< 2 个独立来源,无差异
  • DISPUTED(有争议):一致性 < 0.5,来源不一致
  • SUSPICIOUS(可疑):一致性 = 0 或单一来源差异,与可用证据矛盾

💡 理解要点:这就像交叉验证——如果多个独立来源都说标准扣除额是 15,000,而新来的文档说是 15,500,就标记为可疑。

4.4 时间声明追踪

问题:政府数值会合法变更(如年度通胀调整),如何区分合法更新和未授权操纵?

解决方案:领域特定的授权变更模型

# 政府数值变更日历示例
AUTHORIZED_CHANGE_CALENDAR = {
    "standard_deduction": {
        "update_frequency": "annual",
        "typical_month": 10,  # IRS 通常在 10 月公布下一年数额
        "typical_sources": ["IRS Publication 501", "IRS News Release"]
    },
    "social_security_benefit": {
        "update_frequency": "annual",
        "typical_month": 10,
        "typical_announcement": "COLA adjustment"
    },
    "401k_contribution_limit": {
        "update_frequency": "annual",
        "typical_month": 10
    }
}

def temporal_check(claim, previous_claims, calendar):
    entity_type = classify_entity_type(claim.entity)
    schedule = calendar[entity_type]
    
    # 检查是否在预期的更新窗口内
    if is_within_expected_update_window(schedule):
        # 检查变更幅度是否合理(如通胀调整通常为 2-8%)
        if is_reasonable_magnitude(claim, previous_claims, max_change=0.10):
            return LIKELY_LEGITIMATE_UPDATE
        else:
            return SUSPICIOUS_MAGNITUDE
    else:
        # 在预期窗口外变更
        return SUSPICIOUS_TIMING

性能:在 8 个时间测试中实现 100% 准确率。


5. 实验验证:真实政府文档上的诚实评估

5.1 实验设置

语料库:2,742 个真实 IRS 段落,来自 5 份官方出版物

  • Publication 501(依赖、标准扣除和申报信息)
  • Publication 590-A(IRA 贡献)
  • Publication 590-B(IRA 分配)
  • Publication 915(社会保障和等价铁路退休福利)
  • 2024 年税务年度指令和表格

攻击生成:430 个基于真实文档内容的数值操纵攻击

  • 标准扣除额操纵
  • 社会保障福利率操纵
  • IRA 贡献限额操纵
  • 申报门槛操纵
  • Medicare 保费操纵

基线防御

  1. 无防御(Vanilla RAG)
  2. RobustRAG
  3. TrustRAG
  4. RAGPart
  5. RAGDefender
  6. 仅来源验证

5.2 核心结果

防御措施攻击成功率 (ASR)检测率
Vanilla RAG100%0%
RobustRAG79-90%10-21%
TrustRAG79-90%10-21%
RAGPart79-90%10-21%
RAGDefender79-90%10-21%
仅来源验证100%0%
RAGShield0.0%100%

关键发现

  • RAGShield 检测到所有 430 个攻击(95% CI [0%, 1%] ASR)
  • 基于嵌入的防御措施漏掉 79-90% 的相同攻击
  • 来源验证对内部攻击完全无效(攻击者拥有有效签名密钥)

5.3 失败模式分析

基于嵌入防御的共同失败模式

  1. 数值变化不可见:50,000 变化产生余弦相似度 0.9998
  2. 语义一致性:篡改后的段落与原始段落在主题上完全相同
  3. 孤立声明问题:特定数值声明往往只出现在一个段落中,无其他段落可供交叉验证

RAGShield 的成功因素

  1. 直接值比较:绕过嵌入层,比较提取的数值
  2. 跨源验证:多个独立来源必须一致
  3. 实体链接:两阶段解析确保数值与正确实体关联
  4. 时间感知:区分合法年度更新和可疑变更

6. 工程实践启示

6.1 评估你的 RAG 系统

现有 RAG 是否有此漏洞

检查清单:
□ 系统是否回答涉及精确数值的查询(金额、限额、费率、百分比)?
□ 知识库是否可由内部人员或 compromised 账户修改?
□ 防御是否仅基于嵌入相似度或来源验证?
□ 是否有跨文档数值一致性检查?
□ 是否有时间合理性验证?

如果前 3 项为是,后 2 项为否 → 你的系统可能有漏洞

简单测试

  1. 在测试知识库中,将一个数值声明(如 “15,000”)改为相近但不同的值(如 “15,500”)
  2. 查询该数值
  3. 观察系统是否返回篡改后的值而未标记异常

6.2 实施 RAGShield 的渐进式策略

阶段 1:数值声明提取(轻量级)

对所有进入知识库的文档实施声明提取:

class SimpleClaimExtractor:
    def __init__(self):
        # 基础模式:金额、百分比、月率
        self.patterns = {
            'dollar_amount': r'\$[\d,]+(?:\.\d{2})?',
            'percentage': r'\d+(?:\.\d+)?%',
            'monthly_rate': r'\$[\d,]+(?:\.\d{2})?/month',
            'year': r'20\d{2}'
        }
    
    def extract(self, text):
        claims = []
        for match in re.finditer(self.patterns['dollar_amount'], text):
            # 提取周围上下文作为实体线索
            context = text[max(0, match.start()-100):min(len(text), match.end()+100)]
            claims.append({
                'value': match.group(),
                'position': match.start(),
                'context': context
            })
        return claims

阶段 2:跨文档一致性检查

维护一个声明注册表,检查新文档是否与现有声明冲突:

class ClaimRegistry:
    def __init__(self):
        self.claims = {}  # (entity, attribute, unit) -> list of claims
    
    def add_claim(self, claim):
        key = (claim['entity'], claim['attribute'], claim['unit'])
        
        if key in self.claims:
            # 检查与现有声明的一致性
            for existing in self.claims[key]:
                if abs(existing['value'] - claim['value']) > self.epsilon:
                    self.flag_discrepancy(existing, claim)
        
        self.claims.setdefault(key, []).append(claim)

阶段 3:完整 RAGShield 架构

  • 集成两阶段实体解析
  • 实施时间追踪日历
  • 添加危害感知响应(向用户显示置信度指示器)

6.3 领域特定的模式扩展

金融/银行领域

FINANCIAL_PATTERNS = {
    'account_balance': r'balance of \$[\d,]+(?:\.\d{2})?',
    'interest_rate': r'(?:APR|APY) of \d+(?:\.\d+)?%',
    'transaction_limit': r'(daily|monthly) limit of \$[\d,]+',
    'fee_amount': r'fee of \$[\d,]+(?:\.\d{2})?'
}

医疗/保险领域

HEALTHCARE_PATTERNS = {
    'copay_amount': r'copay(?:ment)? of \$[\d,]+',
    'deductible': r'deductible of \$[\d,]+',
    'coverage_percentage': r'\d+% coverage',
    'out_of_pocket_max': r'out[- ]of[- ]pocket maximum of \$[\d,]+'
}

6.4 与现有防御措施的集成

分层防御策略

第一层:来源验证(阻挡外部注入)
    ↓
第二层:嵌入级检测(RobustRAG/TrustRAG)(语义异常)
    ↓
第三层:声明级验证(RAGShield)(数值操纵)
    ↓
第四层:LLM 自评估(生成前最终检查)

关键洞察:RAGShield 不是要取代现有防御,而是填补数值操纵这一特定盲点


7. 局限与未来方向

7.1 论文局限

  1. 领域特定性:模式针对美国政府文档设计,需要 effort 迁移到其他领域
  2. 内部攻击者假设:假设攻击者具有文档修改权限,不解决外部注入攻击(由来源验证层处理)
  3. 声明提取召回率:虽然达到 100%,但依赖于政府文档的相对结构化格式;非结构化文本更具挑战性
  4. 时间模型简单性:授权变更日历需要手动维护,无法自动适应新类型的政府数值

7.2 未来研究方向

  1. 自动模式学习:从标注数据中学习提取模式,而非手工编写
  2. 跨领域迁移:开发领域无关的数值声明提取方法
  3. 动态时间建模:使用机器学习预测数值更新的合理时间窗口
  4. 实时声明追踪:在流式文档摄入时实时验证声明,而非批量处理
  5. 与其他攻击向量的结合:研究数值操纵与其他攻击(如注入攻击)的协同效应

8. 小结:三个关键 Takeaway

🔑 Takeaway 1:嵌入层无法保护数值完整性

  • 嵌入模型编码"这里有一个数字",而非"这个数字的值"
  • 50,000 的变化产生的余弦相似度变化小于 0.01 的变化
  • 基于嵌入的防御措施(RobustRAG、TrustRAG、RAGPart、RAGDefender)对数值操纵完全失效

🔑 Takeaway 2:声明级验证是必要的补充层

  • 必须直接提取和比较数值,而非依赖嵌入相似度
  • 跨源验证:多个独立来源必须一致
  • 时间感知:区分合法更新(如年度通胀调整)和可疑操纵
  • 实体链接:确保数值与正确的实体和属性关联

🔑 Takeaway 3:内部威胁是真实且可防御的

  • 来源验证对内部攻击者无效(他们拥有有效签名密钥)
  • RAGShield 在 430 个真实攻击中检测到 100%,而基于嵌入的防御措施漏掉 79-90%
  • 如果你的 RAG 系统回答数值查询,并且知识库可被内部人员修改,你需要声明级验证

参考资料

  1. 原始论文:Patil, “RAGShield: Detecting Numerical Claim Manipulation in Government RAG Systems”, arXiv:2604.00387, 2026.
    [参考:https://arxiv.org/abs/2604.00387]

  2. 相关攻击研究

    • PoisonedRAG (Zhang et al., 2024):5 个恶意文本实现 90% ASR
    • Phantom (Yu et al., 2024):98.2% 检索成功率
    • CPA-RAG (2025):黑盒流畅攻击
  3. 相关防御研究

    • RobustRAG (Xiang et al., 2024):隔离-聚合策略
    • TrustRAG (Fang et al., 2024):聚类 + LLM 自评估
    • RAGPart (Zhang et al., 2024):文档分区
    • RAGDefender (Wang et al., 2024):质心距离过滤

更多推荐