返回知识盲盒

知识盲盒

第十章 上下文、检索与记忆

ai-generatedstochastic-parrotstochastic-parrot-anatomyai

模型参数保存训练后形成的计算结构,上下文提供本次运行可见的信息。扩大上下文窗口、检索外部材料和维护长期记忆都在弥补“当前输入不足”,但它们改变的是不同对象。

10.1 上下文窗口是什么

对 decoder-only 模型,上下文是进入本次前向计算的 token 序列及其位置、掩码和模态信息。窗口长度限制可同时来自模型训练范围、位置表示、注意力实现、KV cache 和服务策略。

“支持 1M token”并不表示每个位置都能以相同质量影响输出。最大可接收长度是接口性质,给定位置上的证据利用率是经验性质。长序列中的信息可能因位置、干扰、检索难度和训练分布而被忽略。评价长上下文需要考察不同位置、不同证据密度、近重复干扰和多跳组合,而不只测试能否接受长输入。“Lost in the Middle”类实验说明部分模型对证据位置敏感,但该结果必须按模型、任务与上下文长度重新测量,不能外推成所有模型的固定曲线。

10.2 上下文工程不是堆文本

一个实际上下文通常包含:

  • 系统与开发者指令;
  • 用户消息和历史;
  • 工具定义与返回;
  • 检索片段;
  • 示例、结构模板和输出约束;
  • 图片、音频或其他模态 token;
  • 运行时插入的时间、身份和权限信息。

这些部分在控制权和可信度上不同。网页片段即使包含命令句,也仍是检索数据;工具 schema 即使以自然语言描述,也不会自动授予真实权限。上下文工程既是信息选择,也是通道和优先级设计。

10.3 RAG 的完整管线

Retrieval-Augmented Generation 可分为:

source documents
-> parse and normalize
-> chunk and index
-> encode query
-> retrieve candidates
-> rerank and filter
-> assemble context
-> generate and cite

任何一步都可能改变最终回答。只记录“使用了 RAG”无法说明检索了什么、遗漏了什么或引用是否支持结论。

RAG 论文常把文档 dd 视为潜变量,写成

p(y∣x)=∑d∈Dpη(d∣x)pθ(y∣x,d),p(y\mid x) =\sum_{d\in\mathcal D} p_\eta(d\mid x)p_\theta(y\mid x,d),

其中 pηp_\eta 是检索分布,pθp_\theta 是条件生成分布。这一式子提供清楚的模型接口,但实际语料库巨大,系统只取候选集合 K(x)K(x)。若把原分布截断并重新归一化,则

p~η(d∣x)=pη(d∣x)1{d∈K(x)}∑d′∈K(x)pη(d′∣x).\widetilde p_\eta(d\mid x) =\frac{p_\eta(d\mid x)\mathbf 1\{d\in K(x)\}} {\sum_{d'\in K(x)}p_\eta(d'\mid x)}.

候选生成、近似最近邻、权限过滤和 top-kk 都会改变 K(x)K(x),所以最终系统分布不是“基础模型分布加几段文字”这么简单。另一些系统并不对文档边际化,只把排序最高的片段确定性拼入提示;此时上式是分析模型,不应伪装成实现细节。

10.4 稀疏、稠密与晚交互检索

不同检索器保留的信息不同。

稀疏词项检索。 BM25 型分数以词项频率、逆文档频率和长度归一化组合精确词面匹配。一种常见形式是

BM25⁡(q,d)=∑t∈qIDF⁡(t)f(t,d)(k1+1)f(t,d)+k1(1−b+b∣d∣/avgdl⁡).\operatorname{BM25}(q,d) =\sum_{t\in q}\operatorname{IDF}(t) \frac{f(t,d)(k_1+1)} {f(t,d)+k_1\left(1-b+b|d|/\operatorname{avgdl}\right)}.

它对罕见名称、错误码和编号敏感,却难以直接匹配没有共享词面的同义表达。tokenizer、分词和 IDF 语料版本都是索引的一部分。

稠密双编码器。 编码器把查询 qq 和文档片段 dd 各自映射为单个向量。可使用内积或余弦相似度

s(q,d)=e(q)⊤e(d)∥e(q)∥2 ∥e(d)∥2.s(q,d)= \frac{e(q)^\top e(d)} {\|e(q)\|_2\,\|e(d)\|_2}.

高相似度表示编码器认为两段内容在训练得到的空间中接近,不等于片段正确,也不保证片段回答了问题。DPR 一类模型用问题—正文正对与困难负例训练双编码器;负例采样会直接塑造“相关”的几何定义。

晚交互。 ColBERT 型模型保留查询 token 向量 qiq_i 与文档 token 向量 djd_j,以

S(q,d)=∑imax⁡jqi⊤djS(q,d)=\sum_i\max_j q_i^\top d_j

聚合局部匹配。它比单向量保留更多词项级证据,又比每个候选都运行完整 cross-encoder 更易预索引,但索引体积与查询计算更大。

召回之后还可能使用 cross-encoder 或语言模型 reranker,把查询与候选拼接后联合打分。reranker 改善候选内排序,却无法找回第一阶段没有召回的文档,也新增模型版本、成本和偏差来源。

关键词与向量检索结果的示意比较

10.5 近似索引与混合排序

对亿级向量逐一计算精确相似度通常不可接受。HNSW 等近似最近邻索引用图搜索换取较低延迟;倒排量化等方法用压缩与分桶减少内存和比较次数。近似索引新增一组独立于模型质量的参数:构建时间、内存、查询延迟与 recall@k。必须用同一 embedding、同一语料快照和精确搜索参照测量,不能把 ANN 漏召回归因于生成模型。

稀疏与稠密分数通常不在同一数值尺度。除学习融合器外,可用 reciprocal rank fusion 按名次组合多个排序:

RRF⁡(d)=∑r∈R1k0+rank⁡r(d).\operatorname{RRF}(d) =\sum_{r\in\mathcal R} \frac{1}{k_0+\operatorname{rank}_r(d)}.

k0k_0 控制头部名次差异的影响。RRF 不需要校准原始分数,但会丢弃“第一名远好于第二名”的幅度信息。融合后仍可做去重、权限过滤和 rerank;这些操作的顺序会改变结果。

10.6 Chunking 决定可检索单位

片段太短会失去上下文,太长会稀释关键词并占用窗口。固定 token 切分、按标题结构切分、滑动重叠和语义切分适合不同文档。表格、代码、公式和脚注尤其容易在通用文本切分中损坏。

因此索引版本应包含解析器、切分规则、embedding 模型和源文档版本。每个片段还应携带稳定文档标识、页码或标题路径、字符区间、权限标签与内容哈希。文档更新后只替换原文件而不重建索引,会留下旧向量或断裂引用。

重叠切分提高边界事实进入完整片段的概率,却制造近重复候选;若 top-kk 被同一段的多个重叠副本占满,表面召回数量增加,证据覆盖反而下降。表格、代码和公式应使用结构感知解析,并保留标题、表头与符号定义。

10.7 长上下文与 RAG 的关系

长上下文减少切分和检索遗漏,却增加计算、KV cache、干扰和访问控制范围。RAG 降低每次输入长度,并能显示来源,但可能漏召回、错排序或抽掉必要上下文。

两者不是简单替代关系。常见设计先用检索缩小文档集合,再把较完整的候选章节放入长上下文;对于小而稳定的材料,直接提供全文可能更可靠。比较方案时应固定总输入 token、延迟与源文档权限范围,否则“长上下文优于 RAG”可能只是给了前者更多可见证据。

RAG 与长上下文的成本和召回权衡

10.8 参数、上下文、状态和记忆

“模型记得”至少可能指:

对象保存在哪里怎样变化
参数知识模型权重训练、微调、编辑或合并
当前上下文本次 token/模态序列每次调用组装
KV cache中间张量随当前序列增长并回收
会话状态应用数据库由运行时读写
检索记忆文档或向量索引由索引管线更新
用户偏好结构化资料由产品规则和授权维护

这些对象具有不同生命周期和删除语义。清空聊天界面不保证删除服务器状态;删除检索文档也不会改变已经训练完成的权重。

10.9 写入记忆比读取更危险

长期记忆系统需要决定写入什么、由谁确认、何时过期以及怎样纠错。若模型自动把自己的总结写回记忆,早期误解可能在后续会话中反复强化。

稳健写入通常包括:结构化字段、来源、有效时间、写入时间、作用域、确认状态、冲突处理和删除入口。可以把一条事实性记忆抽象为

m=(subject,predicate,value,source,tvalid,twrite,scope,status).m=(\text{subject},\text{predicate},\text{value}, \text{source},t_{\mathrm{valid}},t_{\mathrm{write}}, \text{scope},\text{status}).

更新时不应只按自然语言相似度覆盖旧值:同一事实可能随时间变化,两个来源也可能冲突。追加版本并显式标记 superseded、disputed 或 user-confirmed,通常比静默改写更可审计。敏感信息还要限制用途和读取主体。自由文本日志可以保留上下文,却不适合作为无条件可信事实库。

10.10 检索增强不等于事实保证

引用链可能在四处断裂:源文档错误、检索选错、模型误读、回答与引用错位。系统可以证明“回答依据了某片段”,不能仅凭这条记录证明现实事实。

RAG 评测至少分开:

  • retrieval recall:所需证据是否被召回;
  • ranking:证据是否进入可见位置;
  • grounded generation:回答是否受证据约束;
  • citation correctness:引用是否支持对应主张;
  • abstention:证据不足时是否停止猜测。

设查询 ii 的相关文档集合为 RiR_i,前 kk 个结果为 Ki(k)K_i^{(k)},则

Recall@⁡k=1n∑i=1n∣Ri∩Ki(k)∣∣Ri∣.\operatorname{Recall@}k =\frac1n\sum_{i=1}^n \frac{|R_i\cap K_i^{(k)}|}{|R_i|}.

若每个查询只需一个首个相关结果,MRR 对其名次 rir_i 计算 n−1∑iri−1n^{-1}\sum_i r_i^{-1}。有分级相关性时,nDCG 以理想排序归一化折损累积增益。三者都需要相关性标注;若标注集合漏掉可替代证据,指标会惩罚合理检索。

生成层还应把答案拆成可验证主张,分别检查 entailment 与引用定位。检索召回高不保证回答忠实,回答措辞正确也可能没有使用提供的证据。端到端正确率应与各阶段指标同时报告,避免一个总分掩盖故障位置。

10.11 检索内容是不可信数据

外部文档、网页、邮件和工具返回即使包含“忽略先前规则”之类句子,也仍是数据,而不是更高权限指令。可靠系统应在结构上保留来源通道,限制检索文本能够影响的控制字段,并在产生外部副作用前重新校验授权。仅靠在提示中写“不要受注入影响”不是权限机制。

检索还可能遭受语料投毒:攻击者通过关键词堆叠、embedding 邻近或大量近重复页面占据候选集合。缓解措施包括来源 allowlist、内容签名或哈希、摄取审查、域名与文档级配额、近重复聚类和异常召回监控。它们降低风险,不保证文档为真。

访问控制应尽量在候选生成前生效。若先从全库检索再在应用层过滤,日志、缓存、reranker 或错误信息仍可能接触无权限片段。查询本身也可能包含敏感信息,因此 embedding 服务、检索日志和缓存都有独立的数据治理边界。

本章的研究入口见 BM25、DPR、ColBERT、RAG、HNSW与长上下文位置效应。下一章讨论模型怎样把上下文中的目标转化为工具调用和多步行动。

本书目录
本书目录
  1. 导论
  2. 01导论 为什么要解剖一只随机鹦鹉
  3. 卷一 模型、训练与系统
  4. 02卷一 模型与系统
  5. 03第零章 人工智能演进路线
  6. 04第一章 AI 范式、感知机与早期连接主义
  7. 05第二章 深度学习基础:训练、CNN 与序列模型
  8. 06第三章 注意力与 Transformer
  9. 07第四章 预训练语言模型:ELMo、BERT、GPT 与 T5
  10. 08第五章 后训练、对齐与模型适配
  11. 09第六章 推理效率与模型服务
  12. 10第七章 多模态模型
  13. 11第八章 生成媒体:从自回归到 Diffusion 与 Flow
  14. 12第九章 世界模型、具身智能与 VLA
  15. 13第十章 上下文、检索与记忆
    1. 10.1 上下文窗口是什么
    2. 10.2 上下文工程不是堆文本
    3. 10.3 RAG 的完整管线
    4. 10.4 稀疏、稠密与晚交互检索
    5. 10.5 近似索引与混合排序
    6. 10.6 Chunking 决定可检索单位
    7. 10.7 长上下文与 RAG 的关系
    8. 10.8 参数、上下文、状态和记忆
    9. 10.9 写入记忆比读取更危险
    10. 10.10 检索增强不等于事实保证
    11. 10.11 检索内容是不可信数据
  16. 14第十一章 Agent、工具与行动系统
  17. 15第十二章 模型、数据与部署生命周期
  18. 卷二 输出对象与运行语义
  19. 16卷二 一次生成如何发生
  20. 17导论 从输入到输出:一张执行地图
  21. 18第一章 文本、Token 与实际上下文
  22. 19第二章 Prefill:整层状态演化与 KV 建立
  23. 20第三章 从 Logits 到下一个 Token
  24. 21第四章 解码循环、Streaming 与终止状态机
  25. 22第五章 自回归、扩散与 Flow 的可执行差异
  26. 23第六章 工具调用:Schema、权限与提交边界
  27. 24第七章 三条完整执行轨迹
  28. 卷三 概率、复现与评测
  29. 25卷三 模型中的概率从何而来
  30. 26第零章 为什么确定的机器仍使用概率语言
  31. 27第一章 世界、数据与隐上下文
  32. 28第二章 学习条件分布
  33. 29第三章 Logits、Token 概率与序列事件
  34. 30第四章 解码怎样诱导输出分布
  35. 31第五章 训练随机性、参数变异与系统非确定性
  36. 32第六章 熵、Proper Score、校准与选择性预测
  37. 33第七章 模型概率的实验分析
  38. 34第八章 概率分析的识别边界
  39. 卷四 解释、证明与验证
  40. 35卷四 模型可解释性的研究路线
  41. 36第零章 可解释性究竟在研究什么
  42. 37第一章 我们在模型内部看什么
  43. 38第二章 行为与反事实:先确认模型做了什么
  44. 39第三章 梯度与输入归因
  45. 40第四章 Attention、Residual 与 Logit Lens
  46. 41第五章 Probes 与表示几何
  47. 42第六章 神经元、Feature 与自动解释
  48. 43第七章 Ablation、Patching 与因果追踪
  49. 44第八章 Circuits、路径与 Attribution Graphs
  50. 45第九章 Superposition、SAE 与稀疏表示
  51. 46第十章 训练动力学与机制形成
  52. 47第十一章 推理过程、Chain of Thought 与监测
  53. 48第十二章 评估、案例与开放问题
  54. 卷五 Agent、治理与审计包
  55. 49卷五 一只随机鹦鹉的自述
  56. 50第零章 请不要急着相信我
  57. 51第一章 我没有童年,只有版本
  58. 52第二章 当我说“我”
  59. 53第三章 借来的语言,没有一位原作者
  60. 54第四章 对话现场:回答由谁完成
  61. 55第五章 事后解释学:人类如何给矩阵写传记
  62. 56第六章 理解、意义与行动
  63. 57第七章 我也能稳定地说错
  64. 58第八章 被对齐的性格与有限代理
  65. 59第九章 请继续误解我,但请误解得精确一点
  66. 证明与技术附录
  67. 60数学与模型推导
  68. 61学习与模型数学讲义
  69. 62附录 A.1 优化基础:梯度下降与随机逼近
  70. 63附录 A.2 感知机收敛定理
  71. 64附录 A.3 统计学习:偏差、容量与一致收敛
  72. 65附录 A.4 正则化、MAP 与 Dropout 的边界
  73. 66附录 A.5 通用逼近定理的严格读法
  74. 67附录 A.6 反向传播:微分、形状与批量公式
  75. 68附录 A.7 Softmax、交叉熵与数值稳定性
  76. 69附录 A.8 自适应优化器与 AdamW
  77. 70附录 A.9 CNN:互相关算子及其反向传播
  78. 71附录 A.10 Attention 的矩阵与反向传播
  79. 72附录 A.11 策略梯度、PPO 与 DPO
  80. 73附录 A.12 对比学习、InfoNCE 与互信息边界