上下文工程导论:为什么AI需要记忆 / Introduction to Context Engineering: Why AI Needs Memory
第一章:上下文工程导论——为什么AI需要记忆
> Chapter 1: Introduction to Context Engineering — Why AI Needs Memory
---
1.1 当AI"失忆"时,世界会发生什么
在开始任何关于"上下文工程"的正式讨论之前,让我们先走进三个看似独立、实则共享同一根源的真实场景。这些场景中的AI系统并非"愚笨"——它们往往由世界上最先进的语言模型驱动——但它们都犯了同一种错误:忘记。
场景一:医疗诊断AI——被抹去的患者历史
2023年,美国一家大型医院部署了一套基于GPT-4的医疗辅助诊断系统。该系统被设计为在医生问诊时提供实时建议,能够阅读患者的电子病历、化验结果与既往病史。系统上线初期的表现令人振奋:在内部测试中,它对罕见病的诊断准确率超过了90%的住院医生。
然而仅仅三个月后,一份内部事故报告披露了一起严重病例。一位名叫玛丽(Mary)的62岁糖尿病患者来到急诊室,抱怨持续性头痛与视力模糊。AI助手在阅读她当前的化验指标后,给出了"高血糖危象引起的暂时性视觉障碍"这一建议。医生遵循了这一建议,调整了胰岛素剂量。然而,玛丽在第二天陷入昏迷。抢救过程中,主治医师发现她的电子病历中有一条三个月前的MRI报告,显示一颗直径1.2厘米的脑膜瘤正压迫视神经——AI系统完全没有读到这份历史报告,因为它"以为"自己已经处理完了早些时候的对话轮次,或者因为上下文窗口被最新的化验数据"挤出去"了。
这不是软件Bug,而是一种系统性缺陷。AI系统缺乏一种能力:跨越长时段、在多源信息中保持、检索与拼接相关记忆。当输入窗口到达极限,旧信息便被无声地丢弃,就像你合上一本厚厚的书,却忘记了前十章在讲什么。
场景二:长篇论文阅读助手——读后即忘的学者
第二个场景来自学术界。一位研究生使用AI助手分析一篇长达80页的物理学预印本。助手的任务是从头到尾阅读论文,然后回答诸如"作者的实验设计与第三章李的理论有何异同"这样的复杂问题。
在论文的前30页,助手表现出色,能够精确引用图表数据与公式。但当用户提出第5章的一个问题时,助手开始出现明显偏差:它似乎将第3章的推导公式与第5章的结论混淆,对作者的方法论给出了一个听起来合理但事实上错误的总结。当用户指出错误时,助手礼貌地承认了,并给出一段更长的解释——然而这段解释引用的是同一篇论文不同章节的内容。
这种现象被研究者称为"迷失在中间"(Lost in the Middle)。多项独立实验(包括Liu et al. 2023, An et al. 2024)已经证明:即使是最强大的Transformer模型,在处理长输入时也呈现"U形"的注意力分布——它对开头和结尾的内容记忆清晰,但对中间部分的信息检索能力显著下降。这不是模型的"道德缺陷",而是一种深刻的架构限制。
场景三:跨日编程伙伴——失忆的代码搭档
第三个场景更加贴近普通用户的生活。小明是一名高中生,正在和AI助手合作开发一个Python小游戏。他周一开始项目,向AI描述了游戏的所有规则:玩家扮演一只小猫,需要在三天内收集散落在教室里的字母,组成"BOOK"这个词才能获胜。周一晚上,他们一起写好了游戏的框架代码,定义了Score类、Level类与GameState类。
周二下午,小明回到对话,向AI提出"让我们添加新的关卡"。AI助手非常热情——"当然可以!让我们从游戏的整体规则开始讨论吧……" 它重新询问了小猫的设定、字母的收集机制。"等等,"小明惊讶地说,"这些我们昨天不是讨论过了吗?"
AI的回答礼貌但残酷:"抱歉,每次对话开始时我并不知道之前发生了什么。"
这便是当下AI产品最普遍、也最令人沮丧的特性:无状态性(Statelessness)。每一次新的会话,对模型而言都是"一张白纸"(在底层实现上,每次API调用也确实是独立的)。要让AI"记得"昨天的对话,我们必须主动地、以工程化的方式把这些信息重新喂给它——而这恰恰是"上下文工程"存在的根本理由。
---
1.2 形式化定义:什么是上下文工程
经过三个场景的洗礼,我们现在可以给"上下文工程"下一个正式的定义了。
上下文工程(Context Engineering) 是一门研究如何高效设计、管理与利用大语言模型输入信息空间的工程学科。它的核心问题可以归结为一个看似简单却异常深刻的问题:
> 在每一次模型调用前,我们应该把哪些信息、以何种结构、用多大代价,送入那个被称为"上下文窗口"(Context Window) 的有限信息空间?
这一定义包含四个关键要素,需要逐一拆解:
1. 输入信息空间(Input Information Space):指任何可能被送入大语言模型的信息——历史对话、文档片段、外部知识库条目、工具调用结果、用户偏好、甚至是模型的"自我反思"。它远远超过"用户说的最后一句话"。
2. 设计(Design):意味着这不是随机的堆砌,而是一种有目的的编排。一个优秀的上下文工程师会思考"这段信息此刻有用吗?""位置会影响注意力的分布吗?""哪些信息应该被压缩、哪些应该被原样保留?"。
3. 管理(Management):上下文不是一次性构建后就万事大吉。在一个多轮的智能体(Agent)系统中,上下文是动态变化的——新的信息不断涌入,旧的信息需要被评估是否仍然相关。
4. 利用(Utilization):即使我们把信息放进了窗口,模型是否真的能"看见"它?研究表明,位置、格式、重复次数都会影响模型对上下文内容的实际利用程度。
如果用一个公式来表达上下文工程的核心目标,可以写成:
$$\text{效用}(S) = \frac{\text{有用信息比例} \times \text{注意强度}}{\text{上下文窗口总消耗} + \text{延迟成本} + \text{经济成本}}$$
其中 $S$ 表示我们最终构造出的上下文状态,而我们要最大化的是一个分数:它衡量了在给定上下文窗口预算下,信息被有效"使用"的程度。这个简洁的公式其实揭示了上下文工程所有后续章节的根本张力——信息越多并不等于效用越高。
与三个相邻概念的辨析
为了更精确地把握"上下文工程"的边界,我们需要将它与几个常见的相邻概念区分开来:
提示工程(Prompt Engineering):提示工程是上下文工程的一个子集。提示工程关注的是"怎么写好一个静态的指令"——它更像是一门写作艺术。而上下文工程关注的是一个动态的、可计算的系统——它不仅要写好指令,还要决定哪些对话历史需要保留、哪些需要压缩、哪些需要从外部检索、哪些需要被清除。
记忆系统(Memory Systems):记忆系统是上下文工程的实现手段之一。当我们设计一个能够"记住"用户偏好的AI产品时,记忆系统负责持久化存储相关信息。但在每次模型调用前,记忆系统必须仍然要解决"送什么进去、怎么送"的问题——这又回到了上下文工程。
检索增强生成(RAG, Retrieval-Augmented Generation):RAG是一种流行的架构模式,它使用向量检索从外部知识库中找出相关信息,然后拼接到上下文窗口中。RAG是上下文工程的强大武器,但它本身也提出了许多待解决的子问题:检索什么、如何排序、如何去重、如何应对检索失败。
因此,我们可以用一句话总结它们的关系:上下文工程是母学科,提示工程、记忆系统、RAG都是它的子领域。
---
1.3 上下文工程的四大支柱
任何复杂的工程学科都需要一个结构化的思考框架。本书将整个上下文工程的版图划分为四大支柱——它们像一个建筑的四根承重柱,缺一不可。
支柱一:长上下文(Long Context)——让模型"看得更远"
长上下文研究的是如何扩展模型能够一次性处理的信息长度。从GPT-3时代的2K token窗口,到Claude 3时代的200K token窗口,再到 Gemini 1.5 Pro 实验性的1000万 token窗口,长上下文技术在过去三年里经历了爆炸式增长。但"更长"并不等于"更好"。本支柱涵盖位置编码的演进(如RoPE、ALiBi)、高效注意力机制(如Flash Attention)、以及稀疏与循环架构。
支柱二:压缩与摘要(Compression & Summarization)——让信息"更紧凑"
当信息超过窗口容量,或者当信息密度太低时,压缩与摘要就成为必需品。这一支柱研究的核心问题是:如何用一个远小于原文长度的表示,保留对当前任务最关键的信息?它包括抽取式摘要(直接挑选重要句子)、生成式摘要(用模型重写)、以及对对话历史、工具调用轨迹的结构化抽象。
支柱三:检索记忆(Retrieval Memory)——让模型"知道去哪找"
当信息量远远超过任何可能的窗口时——例如一个企业拥有的全部产品文档、一个法律团队的全部判例库——我们需要让模型能够"按需查找"。检索记忆研究的核心是:给定当前的需要,如何从海量外部信息中精准定位最相关的若干片段?它涉及嵌入向量(Embedding)、向量数据库(ANN索引)、混合检索(稀疏+稠密)、重排序(Reranking)等技术。
支柱四:状态管理(State Management)——让系统"记得自己是谁"
这是经常被低估却极其重要的支柱。当AI系统从一个被动的对话机器人演化为一个能够执行多步任务、处理工具调用、维持长期目标的智能体时,"状态"的概念就从可有可无变成了不可或缺。状态管理研究的是:在一个智能体运行的整个生命周期里,哪些变量需要持续追踪、如何在每一步动态更新这些变量、以及如何保证系统的可观测性与可恢复性。
这四根支柱之间的相互关系可以用下图表示:
```mermaid flowchart LR A[长上下文<br/>Long Context] --> C[智能体系统] B[压缩与摘要<br/>Compression] --> C D[检索记忆<br/>Retrieval] --> C E[状态管理<br/>State Management] --> C A <--> B B <--> D D <--> E E <--> A ```
图中显示,四大支柱并非孤立的技术模块,而是一个相互作用、相互依赖的有机整体。一个精心设计的系统通常会在不同场景下选择不同的支柱组合:日常对话可能以"长上下文"为主,长期记忆丰富的应用则以"检索记忆"为骨干,复杂智能体则需要成熟的"状态管理"来协调其他三者的运作。在后续章节中,我们会逐一深入这四根支柱,但此刻请你记住:它们是一栋建筑的四面墙,单独讨论任何一面都会导致片面的理解。
---
1.4 技术演进:从n-gram到Transformer的记忆范式变迁
为了真正理解为什么"上下文工程"是当下AI系统的核心议题,我们必须回溯一段技术演进史。这不是一段"怀旧史",而是一次深刻的范式变迁。
1.4.1 n-gram时代:机械式的滑动窗口
故事要从统计语言模型的早期开始。20世纪下半叶,研究者发现可以用n-gram模型来预测一个词出现的概率。所谓n-gram,就是连续 $n$ 个词组成的序列。在一个三元模型(trigram)中,模型只关心前两个词,然后预测下一个词:
$$P(w_t \mid w_{t-2}, w_{t-1}) \approx \frac{\text{count}(w_{t-2}, w_{t-1}, w_{t})}{\text{count}(w_{t-2}, w_{t-1})}$$
这种模型的"记忆"可以用一个非常具体的方式表达:它能看到的"上下文"严格等于 $n-1$ 个词。想记住更远的内容?对不起,模型在数学上根本无法访问。一个5-gram模型无论怎么训练,都不可能"知道"五句话之前的那个词存在过。
这便是"上下文"的最初含义:一个固定的、有限的、由相邻token构成的滑动窗口。其优势是简单、可解释;其劣势是僵硬、无法处理长距离依赖。在那个年代,"记忆"是一种物理上被先验(prior)约束死的资源。
1.4.2 RNN/LSTM时代:可累积的隐状态
1980年代到2010年代,循环神经网络(RNN, Recurrent Neural Network)成为序列建模的主流。RNN的核心思想是引入一个隐藏状态向量 $h_t$(hidden state),它在每一个时间步都会被更新,并且理论上可以编码过去所有输入的信息:
$$h_t = \tanh(W_h h_{t-1} + W_x x_t + b)$$
理论上,这意味着RNN拥有"无限记忆"——你把很长的序列喂给它,它会把所有信息蒸馏到一个固定维度的向量里。然而实践中,研究者很快发现了著名的长期依赖难题:随着时间步的增长,梯度要么爆炸要么消失,模型实际上无法学会保留距离超过几十步的信息。
长短期记忆网络(LSTM, Long Short-Term Memory)与门控循环单元(GRU)等变体在1997年至2014年间陆续被提出,它们通过精巧的门控机制(gating mechanism) 缓解了梯度问题。LSTM引入了输入门、遗忘门与输出门,能够有选择地记住或遗忘信息:
$$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$$
$$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$$
$$\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$$
$$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$$
这一阶段,"记忆"在AI中第一次有了一种可塑性:模型可以学习"哪些过去的信息值得保留,哪些可以抛弃"。这是认知科学意义上的"记忆"第一次在人工系统中变得可能。但RNN的根本问题——顺序计算无法并行化——限制了它能处理的序列长度上限。训练一个万token级别的LSTM在工程上几乎是不可能的。
1.4.3 Transformer时代:注意力机制的胜利
2017年,Vaswani等人在论文《Attention Is All You Need》中提出了Transformer架构。它的革命性思想可以用一句话概括:用一种叫做"自注意力"(self-attention) 的机制,替代了所有的循环结构。在自注意力中,每个位置都可以直接看到序列中的所有其他位置,距离不再构成信息传递的障碍:
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V$$
这个公式表达的物理学意义是:给定查询(Query)、键(Key)、值(Value) 三组向量,对所有位置的键计算与查询的相关性,然后用这个相关性作为权重去加权求和所有位置的值。这种结构允许任意两个位置之间"直接对话",不再需要像RNN那样逐token传递。
Transformer带来了三个根本性的范式转变:
1. 并行化计算:所有位置同时处理,训练速度急剧提升,使得大数据集训练成为可能。
2. 真正的长距离依赖:理论上,序列中任意两个位置之间的信息路径长度都是 $O(1)$(即一步直达),不再受距离衰减。
3. 涌现的记忆行为:当模型规模、数据规模足够大时,Transformer展现出一种"上下文学习"(In-Context Learning) 的能力——它似乎能够仅通过在上下文中看到几个例子,就学会执行新的任务,而无需更新权重。
但Transformer也带来了全新的"上下文"概念。n-gram时代,上下文是一个被先验固定的小窗口;RNN时代,上下文是一个被压缩到固定维度向量的隐式表征;Transformer时代,上下文第一次变成了一段显式的、可被读取的、可被人工编辑的文本空间。我们可以在上下文窗口里塞进对话历史、检索结果、工具输出、系统指令——而模型能够"看见"这一切。
这便是"上下文工程"在2020年代崛起的技术背景:当AI系统的输入端从一个封闭的、不可编辑的空间变成一个开放的、可被精心编排的工作台时,围绕这个工作台的工程学科自然就会诞生。
| 时代 | 记忆机制 | 信息容量 | 可编辑性 | 训练可行性 | |---|---|---|---|---| | n-gram (1960s–1990s) | 固定滑窗 | $(n-1)$ 个token | 不可编辑 | 大规模语料 | | RNN/LSTM (1980s–2010s) | 隐状态向量 | 压缩到固定维度 | 仅初始状态 | 限制序列长度 | | Transformer (2017–) | 自注意力 | 上下文窗口(2K→10M) | 完全可编辑 | 千亿token规模 |
这个表格浓缩了四十年的技术演进。请特别留意最后一列可编辑性——只有到了Transformer时代,上下文才成为一种"可被工程化的对象"。这是上下文工程能够存在的最基本前提。
---
1.5 全书知识地图:一份给读者的导览图
在正式开启第一段技术旅程之前,让我们先俯瞰一下这整本书的结构。本书的章节安排遵循一个层层递进的设计:从原理到实践,从基础到前沿,从单文件到多智能体协作。
第一部分:基础原理(Part I: Foundations) 涵盖本书的第1章至第3章。
- 第1章(即本章)建立总体框架与核心问题意识。
- 第2章深入到AI的"原子"——Token——探讨它是如何被切分、编码并被模型阅读的。这是理解后续所有章节的微观基础。
- 第3章讨论注意力机制的运作原理,并由此引出"上下文窗口"这一概念的本质内涵。
第二部分:四大支柱(Part II: The Four Pillars) 是全书的核心,覆盖第4章至第12章,约占全书一半篇幅。
- 第4章到第6章讨论**长上下文**:位置编码、高效注意力、扩展律。
- 第7章到第8章讨论**压缩与摘要**:抽取式与生成式摘要,对话历史压缩。
- 第9章到第11章讨论**检索记忆**:嵌入、向量数据库、检索增强智能体。
- 第12章讨论**状态管理**:智能体的可观测性与可恢复性。
第三部分:系统集成与权衡(Part III: Integration & Trade-offs) 涵盖第13章到第15章。
- 第13章讨论多智能体系统中的上下文共享与冲突解决。
- 第14章是关于评测:如何科学地评估一个上下文工程方案的有效性。
- 第15章是关于局限与未来