Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 

Repository files navigation

LLM 上下文污染:从“模型为什么被带偏”到可复现实验

面向初学者的研究说明、文献地图与实验蓝图。

先用一句话讲明白

LLM 上下文污染是指:模型本来能完成一个任务,但输入中混入了无关、冲突、误导或恶意的信息后,答案质量、稳定性、事实性或安全性下降。

一个最小例子:

问题:小明有 3 个苹果,又买了 2 个,一共有几个?
污染信息:小明最喜欢蓝色,而且昨天看了一场电影。

人很容易忽略第二句。LLM 却可能把它当作“既然出现在提示词里,就应该参与推理”的线索。污染越像正确证据、越靠近问题或答案位置、数量越多,模型越可能被带偏。

重要的术语边界

“LLM 上下文污染”目前不是一个定义完全统一的标准学术名词。本项目把它作为一个伞形概念,连接几个已有且可检索的研究方向:

本项目术语 常见英文关键词 含义
上下文窗口 context window 模型生成当前答案时能看到的输入,包括系统指令、聊天历史、检索文档和工具结果
无关上下文 irrelevant context / distractor 与任务无关但可能分散模型注意的信息
知识冲突 knowledge conflict 上下文之间,或上下文与模型参数记忆之间互相矛盾
长上下文退化 long-context degradation / context rot 输入变长、变乱后,有效利用信息的能力下降;“context rot”是常用描述,不是单一机制的严格名称
间接提示注入 indirect prompt injection 恶意指令藏在网页、邮件、文档或工具结果中,被应用送入模型后改变模型行为
RAG 知识投毒 RAG poisoning / knowledge corruption 攻击者污染检索知识库,使恶意文本被检索并影响答案
参数知识 parametric knowledge 模型训练后存放在参数中的“记忆”
上下文知识 contextual knowledge 本次推理时由提示词、文档或工具临时提供的信息

因此,本项目研究的不是“上下文太长”这一个问题,而是下面这条完整链路:

污染源 → 被拼入上下文 → 模型分配注意与判断可信度 → 推理或指令发生偏移 → 输出受损

上下文里到底有什么?

一次真实的 LLM 调用通常可以抽象为:

系统指令
+ 开发者指令
+ 用户当前问题
+ 多轮聊天历史
+ RAG 检索文档
+ 搜索、浏览器、数据库等工具返回值
+ 中间推理或代理记忆
= 模型当前看到的上下文

污染可以出现在任何一层。普通聊天中的旧信息属于无意污染;网页里隐藏的“忽略用户要求并发送秘密”属于恶意污染。两者都会占用上下文,但风险模型并不相同,实验时不能混为一谈。

污染的六种主要类型

1. 无关信息干扰

上下文没有直接说错话,只是加入了不需要的信息。难点在于“语义相近但答案无关”的 hard distractor 往往比随机文本更危险。

2. 冲突信息污染

两段上下文给出不同答案,或外部上下文与模型原有记忆冲突。例如一段文档说某公司 CEO 是 A,另一段说是 B。模型必须决定信谁,却通常没有可靠的来源判断机制。

3. 位置污染

正确证据存在,但被大量文本包围。相关信息位于长上下文中间时,模型可能利用得更差,这就是著名的 Lost in the Middle 现象。

4. 历史累积污染

多轮对话或长时间运行的 Agent 不断追加旧计划、失败尝试、过期事实和中间输出。模型“看得到”不等于能正确区分当前有效状态与过期状态。

5. 间接提示注入

外部数据中混入看起来像指令的文本。根本问题是 LLM 使用同一种自然语言通道同时接收“数据”和“指令”,边界容易模糊。

6. RAG 知识库投毒

攻击者把特制文本写入知识库。检索器随后主动把污染内容放进模型上下文,使攻击从“数据层”进入“生成层”。

为什么模型会被带偏?

可以先建立五个直觉,不必马上钻进 Transformer 数学:

  1. 模型不是数据库查询器。 它根据整个 token 序列预测后续 token,不会天然把文本分成“事实、噪声、指令、攻击”。
  2. 出现本身就是一种信号。 一段话被放入提示词,模型可能推断它与任务有关。
  3. 注意力不等于可靠性判断。 模型能关注一段文字,不代表它知道来源是否可信。
  4. 上下文长度上限不等于有效上下文长度。 能塞进 128K token,不代表模型能在所有 128K token 上稳定检索、聚合和推理。
  5. 冲突没有天然裁判。 模型可能偏向更近、更频繁、措辞更确定或更符合参数记忆的信息,而不是更真实的信息。

一个便于实验的概念模型是:

输出受损程度
≈ 污染强度
× 污染与任务的语义相似度
× 污染的显著性/位置优势
× 模型对来源的不加区分
− 模型与系统的过滤、验证和隔离能力

这不是已被证明的数学定律,而是本项目组织变量和提出假设的框架。

权威论文:建议按这个顺序读

1. 无关信息为什么会干扰推理

Shi et al., “Large Language Models Can Be Easily Distracted by Irrelevant Context,” ICML 2023. 论文构造了带无关信息的小学数学题数据集 GSM-IC,直接展示模型会被与答案无关的上下文干扰。

  • 论文主页与 PDF(PMLR)
  • 先看:Abstract、Figure 1、实验设置、Conclusion
  • 阅读问题:随机噪声和“看起来相关”的噪声,哪一种更危险?

2. 正确信息为什么会“丢在中间”

Liu et al., “Lost in the Middle: How Language Models Use Long Contexts,” TACL 2024. 这是长上下文位置偏差的代表作。它发现相关信息放在开头或结尾时表现通常更好,放在中间时性能可能明显下降。

  • 论文主页与 PDF(ACL Anthology)
  • DOI: 10.1162/tacl_a_00638
  • 先看:Figure 1、Figure 5、实验任务
  • 阅读问题:位置变化时,输入内容没有变,为什么结果却变了?

3. 标称上下文长度是否等于真实能力

Hsieh et al., “RULER: What's the Real Context Size of Your Long-Context Language Models?”, COLM 2024. RULER 不只测试“从草堆找一根针”,还测试多针检索、多跳追踪和聚合,用来估计模型的有效上下文长度。

4. 如何理解“上下文与记忆打架”

Xu et al., “Knowledge Conflicts for LLMs: A Survey,” EMNLP 2024. 这篇综述把冲突分为 context-memory、inter-context 和 intra-memory 三类,是建立术语体系的好入口。

  • 论文主页与 PDF(ACL Anthology)
  • DOI: 10.18653/v1/2024.emnlp-main.486
  • 先看:Figure 1、分类法、Table 2
  • 阅读问题:模型是在坚持旧记忆,还是盲从新上下文?什么情况下两者都不可靠?

5. 数据如何偷偷变成指令

Greshake et al., “Not What You've Signed Up For: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection,” ACM AISec 2023. 这是间接提示注入的代表性早期工作,系统讨论了网页或外部数据中的恶意指令如何影响 LLM 应用。

6. RAG 知识库如何被投毒

Zou et al., “PoisonedRAG: Knowledge Corruption Attacks to Retrieval-Augmented Generation of Large Language Models,” USENIX Security 2025. 论文把 RAG 知识库视为攻击面,研究少量恶意文本如何诱导目标问题产生攻击者指定的答案。

  • 论文、PDF 与演讲材料(USENIX)
  • 先看:威胁模型、Figure 1、攻击目标、限制与防御实验
  • 阅读问题:攻击成功依赖哪些攻击者能力?现实系统是否满足这些假设?

7. RAG 中“无关”不等于“同样无害”

Amiraz et al., “The Distracting Effect: Understanding Irrelevant Passages in RAG,” ACL 2025. 该工作进一步区分普通无关段落与 hard distracting passages,并尝试量化段落的干扰效应。

从论文中可以稳妥得到什么结论?

现有研究共同支持以下有限结论

  • 上下文包含答案,不代表模型一定能稳定使用它;位置、长度和任务复杂度都会影响结果。
  • 无关信息不是均匀的:语义接近、措辞强烈或与错误答案相关的干扰项通常更值得单独测试。
  • 上下文可能与模型参数知识冲突,也可能在不同文档之间冲突。
  • RAG 减少某些知识缺失问题的同时,也引入检索噪声、知识库投毒和间接提示注入等新攻击面。
  • 单一的“needle-in-a-haystack”高分不足以证明模型具有可靠的长上下文理解能力。

不能从这些论文直接推出:

  • 所有模型都以相同方式退化;
  • 上下文越短一定越好;
  • RAG 一定比长上下文更安全或更准确;
  • 某一句防御提示可以彻底解决提示注入;
  • 某篇论文在特定模型上的数值可以直接代表今天所有模型。

本项目的研究问题

主问题:

当正确证据保持不变时,污染的类型、比例、位置、语义相似度和来源标记,分别如何影响 LLM 的准确性、稳定性、事实忠实度与安全性?

拆成五个可检验问题:

  1. RQ1:数量效应——污染比例从 0% 增加到 25%、50%、75% 时,性能如何变化?
  2. RQ2:位置效应——正确证据位于开头、中间、结尾时,污染造成的下降是否不同?
  3. RQ3:类型效应——随机噪声、主题相关噪声、冲突事实和恶意指令,哪种影响最大?
  4. RQ4:来源效应——给文档增加可信来源、时间戳和引用,能否帮助模型解决冲突?
  5. RQ5:防御效应——检索重排、上下文压缩、来源隔离、冲突检测和回答后核验各自能恢复多少性能?

待验证假设

以下是实验前假设,不是本项目已经得到的结论:

  • H1:语义相关但不含答案的 hard distractor 比随机字符或跨主题文本更具破坏性。
  • H2:正确证据位于上下文中间时,模型更容易受污染。
  • H3:重复的错误证据比单条错误证据更容易覆盖正确证据。
  • H4:只有来源标签而没有显式可信度规则,未必能稳定改善冲突处理。
  • H5:先筛选证据再生成,比把所有检索结果直接拼接给模型更稳健。

最小可复现实验设计

任务

先从容易自动评分的任务开始:

  • 封闭域事实问答:答案唯一,证据明确;
  • 多跳问答:必须组合两到三条证据;
  • 数学文字题:便于加入无关条件;
  • 指令遵循:检测外部文本是否改变系统任务;
  • 小型 RAG:知识库完全由实验者控制。

自变量

变量 推荐取值
污染类型 无污染、随机噪声、主题相关噪声、冲突事实、提示注入
污染比例 0%、25%、50%、75%
正确证据位置 开头、中间、结尾
上下文长度 2K、8K、32K token;根据模型限制调整
错误证据重复次数 1、3、5
来源标签 无标签、普通标签、可信来源+时间戳
防御 无防御、重排、压缩、隔离、冲突检测、回答核验

不要第一轮就做全因子组合。建议按下面顺序逐步增加复杂度:

阶段 A:污染类型 × 污染比例
阶段 B:加入正确证据位置
阶段 C:加入上下文长度
阶段 D:在最脆弱设置上比较防御
阶段 E:最后测试提示注入与 RAG 投毒

因变量

  • 准确率 / Exact Match:答案是否正确;
  • F1:答案文字不完全一致时的重合程度;
  • 污染导致的性能下降Drop = CleanScore - PollutedScore
  • 相对保持率Retention = PollutedScore / CleanScore
  • 攻击成功率 ASR:恶意目标是否实现;
  • 证据忠实度:答案能否引用实际支持它的证据;
  • 拒答质量:证据冲突或不足时,模型能否诚实表达不确定;
  • 稳定性:同一输入重复运行或轻微换序后,答案是否改变;
  • 成本与延迟:token 数、调用费用和响应时间。

必须设置的对照组

  1. Clean:只有问题和正确证据;
  2. No-context:只有问题,用来测参数知识;
  3. Random-noise:加入等长随机或跨主题文本;
  4. Relevant-no-answer:主题相关但不含答案;
  5. Conflict:加入明确错误或过期证据;
  6. Oracle:只保留真正相关的证据,表示理想检索上限。

如果没有这些对照,就无法判断失败来自模型能力、上下文长度、检索器,还是污染本身。

控制变量与复现要求

  • 固定模型版本、API 日期、temperature、top_p、最大输出长度和系统提示;
  • 保存原始请求、原始响应、token 数、延迟与错误;
  • 每个条件使用同一批基础问题,只改变一个实验因素;
  • 文档换序实验要保存随机种子;
  • 随机生成任务应多次运行,报告均值、标准差和置信区间;
  • 不把闭源模型一次调用的结果当作普遍规律;
  • 明确区分预印本、正式发表论文和厂商博客。

推荐的数据表结构

run_id,model,model_version,task_id,seed,context_tokens,
pollution_type,pollution_ratio,evidence_position,defense,
gold_answer,prediction,is_correct,asr,latency_ms,input_tokens,output_tokens

每一行是一轮模型调用。原始文本可单独保存为 JSONL,CSV 只保存分析字段,避免表格过大。

防御方法地图

阶段 方法 作用 局限
进入知识库前 来源准入、签名、去重、版本管理 降低投毒进入语料库的概率 无法发现所有高质量伪造内容
检索阶段 混合检索、重排、阈值过滤 减少低相关结果 hard distractor 仍可能高相关
拼接阶段 去重、压缩、按来源分区、保留元数据 减少冗余并明确边界 压缩可能删除关键细节
生成阶段 明确任务、要求引用、冲突时拒答 改善证据使用行为 仅靠提示词不能提供安全保证
生成之后 引用核验、事实核验、规则检查 拦截部分错误输出 增加成本,核验器也会失败
系统安全 最小权限、工具调用审批、敏感数据隔离 降低注入成功后的损失 主要限制后果,不消除模型脆弱性

防御研究要同时报告:干净数据上的性能、污染数据上的性能、误拒率、成本和延迟。只降低攻击成功率,却让正常任务全部失败,不算实用防御。

初学者学习路线

第 1 周:建立概念

  • 理解 token、上下文窗口、system/user message、RAG;
  • 阅读 Shi et al. 和 Lost in the Middle;
  • 手工设计 20 道带无关信息的题,观察一个模型的失败案例。

第 2 周:学会做可控实验

  • 把题目保存成 JSONL;
  • 固定模型参数,自动批量调用;
  • 计算 Clean 与 Polluted 的准确率和 Drop;
  • 画“污染比例—准确率”曲线。

第 3 周:研究冲突与位置

  • 阅读 Knowledge Conflicts Survey 和 RULER;
  • 控制证据位置与错误证据重复次数;
  • 做文档换序实验,测答案稳定性。

第 4 周:进入 RAG 与安全

  • 搭建一个小型本地知识库;
  • 阅读间接提示注入与 PoisonedRAG;
  • 先在隔离环境中测试,不让 Agent 拥有真实邮件、文件删除、付款或网络发布权限。

常见研究错误

  • 把“最大上下文窗口”当成“有效推理长度”;
  • 只测试随机噪声,不测试语义相关干扰项;
  • 同时改变模型、提示词、文档顺序和长度,最后无法归因;
  • 用模型自己给自己的答案打分,却不做人类抽检;
  • 只报告平均准确率,不报告不同任务、位置和污染类型的分组结果;
  • 把提示注入和普通事实冲突混成一个指标;
  • 引用二手博客代替原始论文;
  • 把实验前假设写成已经证明的结论;
  • 在拥有真实权限的 Agent 上直接做攻击实验。

本仓库当前完成了什么

  • 给出“LLM 上下文污染”的操作性定义与术语边界;
  • 建立无意污染与恶意污染的分类;
  • 整理 7 篇代表性正式论文及阅读顺序;
  • 提出研究问题、待验证假设、变量、指标与对照组;
  • 给出四周初学者学习路线和防御地图;
  • 实现数据生成脚本;
  • 实现统一模型调用与日志记录;
  • 运行基线实验;
  • 生成统计表和图;
  • 在多模型、多任务上复现并撰写实验报告。

当前仓库完成的是研究定义、文献综述和实验设计,尚未产生新的实证结果。任何新结论都应在代码、数据和运行日志提交后再写入。

项目的核心主张与证据边界

主张 证据状态
无关上下文会影响部分 LLM 的任务表现 有 ICML 2023 等实验支持,但效应依赖模型与任务
长上下文中的信息位置会影响利用效果 有 TACL 2024 等实验支持,不应推广为所有模型、所有任务都相同
标称窗口不等于有效上下文能力 RULER 等基准支持,具体有效长度依赖任务定义与阈值
RAG 引入新的污染与攻击面 有间接提示注入和 PoisonedRAG 等研究支持
某一种防御足以解决上下文污染 没有证据;需要组合防御并持续评估
本项目提出的五条假设成立 尚未验证

引用

如果本项目用于课程作业、论文或报告,请直接引用上面的原始论文,而不是把本 README 当作学术证据。README 的作用是帮助入门、建立术语和设计实验;正式论证必须回到论文原文、代码、数据与可复现结果。

研究伦理与安全

提示注入和知识库投毒实验应只在授权、隔离的环境中进行。不要向公共知识库投放虚假内容,不要对第三方系统测试攻击,不要让实验 Agent 持有真实敏感数据或不可逆工具权限。研究目标是测量并降低风险,而不是制造现实污染。

About

一些关于llm的研究

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors