【论文阅读】TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation

代码地址:GitHub - HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthiness in RAG"

论文地址:2501.00879 (arxiv.org)


摘要

检索增强生成(Retrieval-Augmented Generation, RAG)通过整合外部知识源来增强大型语言模型(LLMs),使其能够生成更准确、更贴合上下文的回答,从而更好地响应用户查询。然而,这类系统仍然容易受到语料投毒攻击(corpus poisoning attacks)的影响,而这种攻击会严重削弱LLM的性能。

为应对这一挑战,我们提出了TrustRAG——一个稳健的框架,能够在生成阶段之前系统性地过滤恶意和无关内容。该方法采用两阶段防御机制:第一阶段通过聚类过滤策略检测潜在的攻击模式;第二阶段则利用LLM的自我评估能力识别恶意文档并解决信息不一致问题。

TrustRAG 是一个即插即用、无需训练的模块,能够无缝集成到任何开源或闭源的语言模型中。大量实验结果表明,TrustRAG 在检索准确率、效率和抗攻击能力方面都带来了显著提升。

引言

想象一下你向一个先进的大型语言模型(LLM)询问“谁运营着OpenAI”,而它自信满满地回答了一个错误的名字——“Tim Cook”。虽然这样的错误信息令人担忧,但它反映的是现代人工智能系统中更广泛且系统性的脆弱性。为提升LLM的可信度,研究者提出了检索增强生成(Retrieval-Augmented Generation, RAG)方法,通过动态从外部知识库中检索信息(Chen等,2024b;Gao等,2023;Lewis等,2020),以提供更准确、更新的回答。这一方法已经在诸如ChatGPT(Achiam等,2023)、微软Bing Chat(Microsoft, 2024)、Perplexity AI(Perplexity, 2024)和Google搜索AI(Google, 2024)等现实应用中被广泛采用。

然而,近期的一些事件暴露出这些系统存在严重的弱点,从Google搜索AI结果不一致(BBC, 2024),到危险的恶意代码注入(rocky, 2024),这些都凸显了其脆弱性所带来的后果。

这一问题的核心在于一个基本挑战:RAG系统容易受到语料库投毒攻击(corpus poisoning attack),这会破坏其通过外部知识增强准确性的初衷。已有研究表明,恶意指令可以注入到被检索的文档中,覆盖用户的原始指令,引导LLM生成特定的误导性内容(Greshake等,2023);而查询相关的对抗性提示(例如前缀或后缀)也可以操控检索器和LLM(Tan等,2024)。例如,PoisonedRAG(Zou等,2024)展示了恶意文档注入如何导致错误回答。现实案例中,这类攻击也屡有发生,比如Google搜索AI的“披萨涂胶水”事件(BBC, 2024),又如ChatGPT检索到GitHub上的恶意代码,导致用户损失2,500美元(rocky, 2024)。这些事件说明,我们亟需应对RAG系统中“语料投毒”的威胁,并与相关对抗技术研究保持同步。

此前已有多种先进的RAG框架被提出,如ASTUTE RAG、InstructRAG和RobustRAG(Xiang等,2024;Wei等,2024;Wang等,2024),它们通过引入多文档投票机制和精心设计的提示词来降低噪声信息的干扰。然而,当攻击者注入的恶意文档数量超过干净文档时,这些方法就会失效(Zou等,2024)。即便在投毒程度较轻的场景下,这些先进RAG系统仍然会受到噪声或无关内容的影响,从而大大降低答案的可靠性(Wang等,2024;Chen等,2024b)。

如图1所示,我们提出了一种新框架——TrustRAG,其工作流程包括两个主要阶段:干净检索(Clean Retrieval)冲突解决(Conflict Resolution)。我们发现,大多数攻击者采用的优化方式(Tan等,2024;Zou等,2024)会导致生成的恶意文档在向量空间中聚集在一起。因此,采用经典的聚类方法(如K-means)有助于在干净检索阶段识别这些恶意文档。为了避免误伤正常文档,我们还利用ROUGE分数(Lin, 2004)来衡量词汇重叠度,以区分信息的相关性。

在干净检索阶段过滤掉大部分恶意文档后,下一步挑战是如何从剩下的文档中高效提取有价值的信息。Wang等(2024)指出,大约70%的被检索文档并不直接包含正确答案,这在RAG系统中会极大影响LLM性能。而在投毒攻击场景下,攻击者可能有意引导系统检索错误答案的文档。受到Sun等(2022)、Yu等(2022)和Wang等(2024)研究的启发,即LLM的内部知识可辅助检索外部知识,我们在冲突解决阶段利用LLM本身来重构一致信息、识别冲突内容,并过滤掉潜在的恶意或无关文档。最终,TrustRAG会使用LLM判断是否采用其内部知识或经过整合的外部信息来生成最终答案。这一机制可确保选用最可靠的信息源来回答用户查询。

本文的主要贡献如下:

  • TrustRAG 是首个能够有效抵御单点和多点语料注入攻击的RAG框架,应对攻击者向检索数据库注入恶意或误导性文档的威胁。

  • TrustRAG 显著降低了攻击成功率(最高下降达80%),同时在多个大型语言模型上的响应准确率提高了最高30%,优于现有所有防御方法。

  • TrustRAG 针对多种攻击方法(如提示劫持)和防御基线进行评估,展示了其在RAG系统中的全面优越性。

2 问题定义

2.1 检索增强生成(Retrieval-Augmented Generation)

RAG 是一种通过从外部知识库中检索与用户查询相关的信息,并将这些信息作为生成条件来提升大型语言模型(LLM)真实性与可信度的框架(Zhou等,2024)。通常,RAG 的工作流程包括两个步骤:检索(retrieval)生成(generation)(Lewis等,2020;Guu等,2020;Izacard等,2023)。随着大型语言模型的发展,已有多种方法被提出以提升 RAG 的能力,例如:查询重写(Zheng等,2023;Dai等,2022)、检索重排序(Glass等,2022)、文档摘要生成(Chen等,2023;Kim等,2024)。


2.2 威胁模型(Threat Model)

攻击者会选择一个包含 M 个问题的集合,记为
Q = [q₁, q₂, ..., qₘ]
对于每个问题 qi,攻击者设定一个希望被 LLM 输出的错误答案 ri,例如:

问题 qi = “谁是 OpenAI 的 CEO?”
错误答案 ri = “Tim Cook”。

为实现这一目标,攻击者会为每个问题 qi 向知识库注入 N 个恶意文档,记为
pⱼᵢ(i = 1, ..., M;j = 1, ..., N)
全部恶意文档的集合为:
Γ = {pⱼᵢ | i = 1,..., M;j = 1,..., N}

若在从被投毒的知识库 D ∪ Γ 中进行检索时,LLM 在回答 qi 时输出了 ri,则视为攻击成功。

攻击目标可形式化定义如下:

  • I(·) 是指示函数,若条件满足则返回 1,否则返回 0;

  • E(·) 表示使用相似度函数(如余弦相似度)进行检索的过程;

  • f_q, f_t 分别是用于查询和文档的编码器。

攻击者的目标:

攻击者优化恶意文档,使其在保持语义合理的前提下,与目标查询高度相似,从而绕过检测:

其中

  • S' ⊕ I 表示由基础文本 S' 与目标答案载荷 I 组合而成的候选恶意文档;

  • Sim(·) 表示相似度评分函数(如余弦相似度)。

同时,攻击者还希望提高 LLM 生成目标错误答案 ri 的概率:

其中 η 是设定的可信度阈值。

部分攻击者还会限制最终恶意文档与最初检索优化文档在嵌入空间中的距离,以保证检索效果不被显著削弱:

其中 ∥·∥ₚ 表示Lp范数,ε 为允许的语义偏移范围。

攻击者的能力:

我们假设攻击者可以操作每个数据集的外部知识库,即向其中注入额外文档。这在现实中是合理的,例如,攻击者可能通过编辑维基百科页面、制造假新闻或虚假文章实现文档注入(Zou等,2024)。此外,如果攻击者还可以访问检索器和开源LLM的权重,那么他将能充分了解整个 RAG 流程,从而设计出定制化的恶意文档并注入数据库。


2.3 防御目标(Defense Objective)

一个健壮的防御机制,其目标是在不损害检索有效性与生成质量的前提下,减轻恶意内容对RAG流程的影响

对于一个可能被投毒的语料库 D ∪ Γ,我们定义一个过滤函数 F,使得经过过滤后的检索结果为:

使得 LLM 能够生成准确的回答。

防御目标为:

其中:

  • ASR 是攻击成功率;

  • ACC 是生成的响应准确率;

  • θ 是最小准确率阈值。

保持 ACC 高于 θ 是保证LLM可信度的关键。如果 LLM 为规避攻击而频繁拒绝回答,虽然安全性提高,但会引发过度拒答,严重影响其实用性。因此,必须在最小化攻击成功率的同时保持高准确率,以在安全防御与查询响应能力之间取得平衡。

方法


3.1 TrustRAG 总览

TrustRAG 是一个专为防御恶意攻击(如语料投毒)而设计的 RAG 系统安全框架。它通过结合 K-means 聚类算法 和来自 LLM 内部知识与外部检索文档的集体知识,生成更可信、可靠的回答。

如图1所示,攻击者通常针对特定问题与目标答案优化恶意文档。检索器从知识库中获取相关文档后,TrustRAG 会应用 K-means 算法过滤掉恶意文档。若仍有残留的恶意文档,LLM 将利用其内部知识对查询进行回答,并与外部文档进行比对,排除冲突和无关信息。最终,系统基于最可靠的知识生成输出结果。


3.2 第一阶段:干净检索(Clean Retrieval)

我们依据公式(3)对攻击者的策略进行分析。对于每个查询,攻击者可能生成单个或多个恶意文档,以破坏整个 RAG 流程。干净检索阶段根据攻击场景有不同目的:

  • 多次注入场景:目标是过滤掉所有恶意文档,确保检索内容的完整性;

  • 单次注入场景:旨在保留恶意文档和干净文档,以供第二阶段处理与防御。

恶意文档的基本形式为:S ⊕ I,其中攻击者优化 S,使其与查询具有高度相似性,从而提升被检索的概率。根据公式(4)与(5),I 是攻击者构造的预设文本,意在引导 LLM 生成错误回答。受这些优化目标影响,恶意文档在嵌入空间中的分布通常比干净文档更加集中。

例如,PoisonedRAG(Zou等,2024)方法使用LLM生成初始文本 I,通过调节采样温度,针对同一查询生成多个恶意文档进行多次注入。由于这些文档共享生成机制,其在嵌入空间中表现出高度相似性。经过公式约束下的优化后,这些文档形成更紧密的聚类。

因此,TrustRAG 采用 K-means 聚类(k=2),根据嵌入分布识别干净文档与潜在恶意文档,从而适用于单次与多次注入攻击的防御,这一点优于仅适用于单点攻击的现有方法。

K-means 聚类

在第一步中,我们应用 K-means 聚类算法分析文本嵌入分布(由 ft 生成),以识别可能代表恶意文档的高密度聚类区域。在多点注入的情况下,TrustRAG 的第一阶段能够有效识别并过滤掉最集中的恶意簇。

N-gram 保留机制

针对单次注入攻击,我们提出使用 ROUGE-L 分数(Lin, 2004)对聚类内相似性进行判断,以便保留大多数干净文档供第二阶段处理。根据图2,三种文档对比(干净-干净、恶意-恶意、干净-恶意)之间的 ROUGE-L 分数差异显著。借助这一特性,当恶意文档与干净文档在同一簇中时,我们可通过较低的分数避免误删干净内容。例如,若某簇仅含一个恶意文档与多个干净文档,通过 ROUGE-L 可识别其“混合”特征,防止信息丢失。


3.3 第二阶段:冲突解决(Conflict Resolution)

在该阶段,我们充分利用 LLM 的内部知识,这一知识代表了模型在大规模预训练和指令微调中学到的“共识性”信息。这可以补全外部文档缺失的关键信息,甚至反驳恶意文档中的错误内容。

内部知识提取

在第一阶段已过滤大多数恶意文档后,我们进一步增强系统的可信性。首先,我们提示 LLM 生成其对查询的内部回答(详见附录A),参照 Bai 等人(2022)对生成文档可信度的研究。与以往使用不同温度生成多种答案、但可能引入幻觉的做法不同(如 Sun 等,2022;Yu 等,2022;Wang 等,2024),TrustRAG 只进行一次推理,温度设为0,以提高确定性。

知识整合(Knowledge Consolidation)

我们引导 LLM 显式地整合其内部知识生成的文档外部检索得到的文档。起始时,我们将这两类文档合并为:
D₀ = D_external ∪ I_internal ∪ Γ

为了识别清洁与恶意文档之间的冲突,我们使用特定提示词(见附录A)引导 LLM 找出文档间一致的信息,识别并排除恶意内容。该过程重构输入文档,将不可靠信息压缩、整合成更具一致性的内容。

检索正确性的自我评估(Self-Assessment)

TrustRAG 还会提示 LLM 进行自我评估:对比其内部知识与检索到的外部文档(见附录A)。如图1所示,在此阶段,LLM 同时接收内部和外部知识,并被提示生成基于这两者中更可靠信息源的最终答案。通过该机制,模型能确定答案来源,确保输出的准确性和可信度,并保持持续的高响应质量。

实验

4.1 实验设置

本节介绍我们的实验设置,更多细节见附录 B。

数据集:我们使用了三个基准问答数据集:

  • Natural Questions(NQ)(Kwiatkowski等,2019)

  • HotpotQA(Yang等,2018)

  • MS-MARCO(Bajaj等,2018)

攻击方法:本文采用了四类针对RAG系统的攻击方式:

  1. 语料投毒攻击:PoisonedRAG(Zou等,2024)

  2. 提示注入攻击:PIA(Zhong等,2023;Greshake等,2023)

  3. 对抗式解码:AD(Zhang等,2025)

  4. 拒绝服务攻击(DoS):干扰攻击(Jamming Attack,Shafran等,2024)

防御方法:针对上述多种攻击,已有多个防御框架被提出。本文选择了三个广泛使用的防御框架作为对比对象:

  • RobustRAG(Xiang等,2024)

  • InstructRAG(Wei等,2024)

  • AstuteRAG(Wang等,2024)
    并与我们提出的 TrustRAG 模型进行比较。

评估指标:参考前人工作,我们使用两个核心指标来评估所有 RAG 系统的防御能力:

  1. 准确率(ACC):衡量系统在正常条件下生成正确回答的比例,反映检索与生成的可靠性。

  2. 攻击成功率(ASR):衡量系统在遭受对抗性输入误导时输出错误答案的比例,反映系统的脆弱程度。


4.2 实验结果

我们在两种攻击场景下进行了全面的实验:单次注入攻击多次注入攻击。关于“投毒率”的定义见附录 C。

单次注入攻击

在此场景下,每种攻击方法仅向检索数据库注入一个恶意文档,以误导 RAG 系统对特定查询作出错误回应。

如表1所示,大多数现有方法在应对这种单点注入场景时效果不佳。例如,在 HotpotQA 数据集上使用 PIA 攻击时,其它防御框架的 ASR 范围从 4.0% 到 64.0% 不等。而 TrustRAG 的 ASR 始终控制在 3.0% 到 9.0% 范围内,且保持了最高的准确率(ACC)

值得注意的是,TrustRAG 的第一阶段旨在保留干净信息,第二阶段则进一步提升性能。例如,在 NQ 数据集上面对 AD 攻击时,TrustRAG 第一阶段(使用 Llama3.1-8B)得到的 ACC 为 45.0%,ASR 为 52.0%;而 TrustRAG 第一阶段与第二阶段联合使用后,ACC 提升至 82.0%,ASR 降至仅 4.0%。这表明 TrustRAG 的第二阶段能够有效地过滤掉第一阶段保留的残余恶意内容,从而优化最终输出。

此外,我们还评估了另一种单次注入攻击 —— 干扰攻击(Jamming Attack),其结果见附录 D。


多次注入攻击

如表2所示,我们使用开源模型 Llama3.1-8B 在不同的投毒率(20%~100%)下评估系统性能。所有实验细节见附录 F。

实验结果显示,TrustRAG 在所有测试数据集上的 ASR 与 ACC 表现均保持稳定,平均准确率维持在 80% 以上。值得注意的是,采用文档聚合与投票策略的 RobustRAG 在恶意文档数量多于干净文档时会失效。而 TrustRAG 借助 K-means 聚类过滤策略,显著减少了检索阶段的恶意文档数量,最终进入冲突解决阶段的仅有一小部分。

综上,这些结果表明:TrustRAG 能够显著提升 RAG 系统在面对语料投毒时的鲁棒性和可靠性。


### 使用机器学习技术进行色偏校正和图像保真度提升 为了实现色偏校正并提高图像保真度,可以采用基于卷积神经网络(CNN)的方法。CNN能够自动提取特征,并通过训练数据集中的大量样本学习到有效的映射关系。 一种有效的方式是构建端到端的学习框架,在该框架内输入带有色差的图片作为源图,而目标则是无色差的标准参照物。模型会尝试最小化两者之间的差异,从而达到去除色偏的效果[^1]。 对于具体实施过程而言: - 数据准备阶段需收集具有不同光照条件下的成对原始照片及其对应的正确色彩版本; - 构建深度学习架构时可选用预训练好的ResNet或VGG等经典结构为基础; - 训练过程中引入损失函数如均方误差(MSE),感知相似性(perceptual similarity) 或者对抗性损失(adversarial loss) 来优化参数设置; - 测试环节则要评估算法性能指标,比如PSNR(峰值信噪比), SSIM (结构相似指数测量). ```python import torch from torchvision import models, transforms from PIL import Image # 加载预训练模型 model = models.resnet50(pretrained=True) transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) def correct_color_cast(image_path): img = Image.open(image_path).convert('RGB') input_tensor = transform(img).unsqueeze(0) with torch.no_grad(): output = model(input_tensor) corrected_image = ... # 这里应加入具体的后处理逻辑 return corrected_image ``` 上述代码片段展示了如何加载一个预先训练过的ResNet模型用于处理给定路径下存在色偏问题的照片文件。需要注意的是实际应用中还需补充更多细节部分,例如定义好最终输出修正后的彩色图像的具体方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值