上下文工程概述:连接模型与现实世界的桥梁
上下文工程概述:连接模型与现实世界的桥梁
为什么上下文成为大语言模型应用的胜负手
当一家金融机构部署基于大语言模型的智能投研系统时,工程师们发现了一个令人困惑的现象:同样的模型架构,在测试环境中能够准确回答关于财务报表的专业问题,但在生产环境中,面对真实客户的海量历史咨询记录时,模型却开始给出前后矛盾的答案,有时甚至忘记了三分钟前刚刚确认的用户偏好。这种现象并非个案。在过去两年间,随着大语言模型从实验室走向千行百业,一个核心矛盾逐渐浮出水面——模型的推理能力与它们对上下文的有效利用能力之间存在着巨大的落差。
这个落差催生了一门新的工程学科:上下文工程(Context Engineering)。它不同于传统的提示工程(Prompt Engineering)那样聚焦于单次交互中的指令设计,而是系统性地解决如何在有限的上下文窗口内,高效地表示、组织、检索和更新与当前任务相关的所有信息。上下文工程之所以在当前阶段变得至关重要,根本原因在于三个相互交织的技术现实:上下文窗口的急剧扩张使得“放什么进去”成为新的决策难题;Token计费模式将上下文视为一种需要优化的经济资源;而真实世界的应用场景对上下文的质量、时效性和完整性提出了远超模型原生能力的期望。
本章将建立上下文工程的整体概念框架,从技术演进史出发,追溯上下文窗口从512个Token扩张到百万量级的历程,并在此基础上定义上下文工程的五大核心领域:上下文压缩、摘要生成、检索增强、记忆管理和状态追踪。通过引入“上下文经济学”的分析视角,帮助读者理解在有限的上下文资源下进行优化的经济逻辑。本章将以一个企业级知识库问答系统的完整设计为案例,展示如何将上下文工程的理论原则转化为可落地的系统架构。最后,本章将预览全书十五章的知识体系,为读者规划一条从概念理解到深度实践的学习路径。
大语言模型上下文窗口的技术演进
从羞涩到慷慨:上下文容量的指数增长
理解上下文工程的重要性,需要首先认识上下文窗口技术演进的内在逻辑。2019年,当OpenAI发布GPT-2时,其最大上下文长度为1024个Token——对于当时的自然语言处理任务而言,这已经是一个相当充裕的空间,足以容纳一整篇新闻报道或几轮简短的对话。然而,如果以今天的眼光审视,这个数字显得近乎“吝啬”:1024个Token仅能容纳约750个英文单词或400个中文字符,连一段中等长度的技术文档都难以完整装入。
这种限制并非源于技术上的固步自封,而是Transformer架构本身的计算复杂度所致。自注意力机制的复杂度为$O(n^2)$,其中$n$为序列长度,这意味着将上下文长度翻倍,计算量将增长四倍。在算力成本高昂的2019年,扩展上下文窗口是一个经济上难以承受的选择。因此,早期的语言模型普遍采用了“分段处理”的策略:输入被切分为多个片段分别处理,然后在最后阶段尝试通过层级化架构或层级注意力机制整合信息。这种设计虽然解决了长度限制问题,但不可避免地造成了信息的碎片化和远程依赖的丢失。
2020年GPT-3的发布标志着上下文窗口进入“宽松”时代。128K Token的上下文容量将可处理的文本量提升到了一个新的量级——相当于一部中篇小说的长度,或者数百页的技术文档。这一扩展带来的不仅是容量上的提升,更打开了全新的应用范式:Few-shot Learning成为可能,模型可以在上下文中接收示例并据此调整行为;长文档分析、跨文档推理、多轮复杂对话等任务首次进入了实际可操作的范畴。然而,早期的128K上下文并非尽善尽美。位置编码的线性外推问题导致模型在处理超出训练长度的新位置时性能急剧下降,“中间丢失”(Lost in the Middle)现象使得模型对上下文中间部分的信息捕捉能力显著弱于开头和结尾部分。
2023年至2024年间,上下文窗口技术进入了“军备竞赛”阶段。Claude 3将上下文推进到200K Token,Gemini 1.5 Pro进一步将这一数字提升至1M Token,而Kimi、GLM等国产模型也相继宣布支持百万级Token的上下文窗口。这些数字背后的技术实现各有不同:一些模型采用了NTK-aware插值和位置编码改进以延长原生上下文长度;另一些则引入了稀疏注意力、近似注意力等机制来降低长上下文的计算成本;还有一些通过改进的训练方法使模型能够更好地利用扩展的上下文空间。值得关注的是,上下文窗口的扩展并非简单的线性叠加,而是伴随着模型能力的质变。Anthropic的研究表明,当Claude 3的上下文足够大时,模型能够完成长达数小时的技术访谈,而GPT-4 Turbo在扩展上下文下的推理质量显著优于其在短上下文下的表现。
上下文窗口扩张带来的新问题
上下文窗口的扩张看似是一个纯粹的好消息,但工程实践揭示了一个更为复杂的图景。首先是信息选择的困境:当上下文空间从1K扩展到1M Token后,“把所有相关信息都放进去”成为一个理论上诱人但实践上灾难性的策略。过多的无关信息会稀释模型对关键信息的注意力,导致响应质量的下降和响应延迟的增加。更重要的是,当前的计费模式通常将输入Token纳入成本计算,这意味着上下文并非免费的资源,而是需要精心优化的经济资产。
其次是质量分布的不均匀性。研究表明,即使在支持长上下文的模型中,信息在上下文中的位置仍然显著影响模型对其的利用效率。这一被称为“位置偏见”的现象意味着,并非上下文中的所有信息都能被平等地对待——靠近开头和结尾的信息往往获得更高的“注意力权重”,而中间部分的信息则面临被忽略的风险。对于需要处理大量历史记录或文档库的应用场景,这种不均匀性意味着必须精心设计信息在上下文中的组织方式,以确保关键信息能够落在模型的“注意力甜区”内。
第三是检索与推理的权衡。在短上下文时代,常见的做法是将所有候选信息都放入上下文中,让模型依靠自身能力从中提取相关内容。但随着上下文规模扩展到百万量级,这种“无差别加载”策略变得不可持续。工程实践表明,在大多数知识密集型任务中,精确的检索定位结合精简的上下文输入,其效果往往优于粗放的上下文填充。这一发现催生了检索增强生成(RAG)范式的兴起,也为上下文工程的五大核心领域提供了存在的合理性。
上下文工程的五大核心领域
上下文工程并非一个单一的技术点,而是一个由多个相互关联的子领域构成的工程学科。根据信息流经上下文系统的生命周期,可以将上下文工程划分为五个核心领域:上下文压缩、摘要生成、检索增强、记忆管理和状态追踪。这五个领域并非相互独立,而是形成了一个有机协作的系统,共同服务于“在正确的时机向模型提供正确的信息”这一核心目标。
上下文压缩:从量到质的转化
上下文压缩是上下文工程中最直观的领域,它关注的核心问题是:如何在保留语义核心的前提下,用更少的Token表达同等的信息量。这一需求在Token计费的商业模式下具有直接的经济价值——将10000个Token压缩到2000个,意味着五倍的成本节约。更重要的是,压缩后的上下文往往具有更高的信息密度,能够帮助模型更聚焦于关键内容,从而提升响应质量。
压缩技术的演进经历了从简单到复杂的历程。早期的压缩方法主要依赖规则驱动的文本简化——去除停用词、合并短语、删除冗余修饰等。这类方法虽然能够显著减少Token数量,但往往以牺牲语义完整性为代价,且无法适应不同任务对信息保留的不同要求。当前主流的压缩方法转向了语义感知的范式:基于信息论的选择性编码能够识别并保留对当前任务最重要的信息片段;基于语义相似度的摘要生成能够在保持核心含义的同时大幅精简文本;结构化的知识表示(如知识图谱、表格、JSON Schema)则通过将非结构化文本转化为紧凑的结构化形式来实现压缩。
上下文压缩的一个关键原则是任务导向性。同样一段产品评论,对于情感分析任务和对于竞品对比任务,需要保留的信息可能截然不同。因此,高质量的上下文压缩系统必须能够根据当前任务的语义需求,动态调整保留和舍弃的策略。这种任务导向性决定了上下文压缩不能是一次性的静态操作,而必须与任务上下文紧密耦合,形成一个持续优化的闭环。
摘要生成:抽象与保留的平衡艺术
摘要生成与上下文压缩既有重叠又有区别。压缩侧重于在保持信息量不变的前提下减少篇幅,而摘要则允许为了简洁性而舍弃部分信息——代价是摘要与原文之间必然存在的信息损失。摘要生成在上下文工程中的角色是为模型提供“中高层次的认知脚手架”:当完整细节过于冗长时,摘要提供足够的上下文让模型做出合理决策;当细节确实必要时,摘要充当定位索引,引导模型定位到原始上下文中需要深入分析的片段。
传统的抽取式摘要通过选择原文中最“重要”的句子来构建摘要,虽然保证了信息的真实性,但往往缺乏连贯性和凝练度。生成式摘要则能够整合多个来源的信息,创造出原文并未显式表达的概括性描述,但其输出内容需要严格验证以避免幻觉。上下文工程倾向于采用混合策略:对于需要精确引用的事实性内容,采用抽取式方法保证可靠性;对于需要全局视野的综合性判断,采用生成式方法提供高层视角。
在多轮对话和复杂任务场景中,摘要生成还承担着“上下文窗口维护”的角色。随着对话轮次的增加,历史消息不断累积,很快就会耗尽有限的上下文空间。通过定期将对话历史压缩为摘要,可以有效扩展对话的持续长度,同时保留足够的上下文信息支撑后续交互。这种“渐进式摘要”策略是实现长期记忆的基础技术之一。
检索增强:连接外部知识与模型推理
检索增强生成(Retrieval-Augmented Generation, RAG)是当前最受关注的上下文工程技术之一,它解决的核心矛盾是:模型的知识截止日期与实时信息需求之间的差距,以及模型参数容量与人类知识总量之间的差距。RAG通过在推理时动态检索相关外部信息并将其注入上下文,使模型能够回答超出其训练知识范围的问题,或获取最新、最准确的事实性信息。
RAG系统的质量取决于三个关键环节:检索、增强和生成。检索环节需要从大规模知识库中快速定位与当前查询最相关的候选内容,这通常涉及向量化检索、关键词匹配、混合检索等技术的组合。增强环节负责将检索结果格式化为适合上下文窗口的形式,包括选择哪些结果、如何组织它们的顺序、如何处理冲突信息等。生成环节则是模型基于增强后的上下文产出最终响应。
工程实践表明,RAG系统的瓶颈往往不在生成阶段,而在检索阶段。“垃圾进,垃圾出”的数据科学铁律在RAG中体现得尤为明显:即使模型能力再强,如果检索结果与用户意图不匹配,最终的生成质量也无从保障。这催生了大量围绕检索优化的研究,包括查询改写、意图识别、结果重排序、多跳推理检索等技术。此外,如何处理检索结果的冲突(多个来源给出矛盾信息)、如何平衡检索的召回率与精确率、如何避免“检索迷失”(模型过度依赖检索结果而忽视自身知识)等工程难题,都构成了上下文工程的重要研究课题。
记忆管理:跨会话信息的持久化与复用
如果说RAG解决的是“模型知道但不在当前上下文中的信息”的问题,那么记忆管理要解决的是“模型曾经被告知但已经忘记的信息”的问题。在人类对话中,一段对话中讨论过的事实、达成的共识、做出的承诺,会自然地被双方记住并在后续对话中调用。大语言模型缺乏这种跨会话的持久记忆能力——每次新的对话开始时,模型的状态被重置,所有之前对话的信息都消失在空白的上下文中。
记忆管理系统正是为了弥合这一差距而设计的。完整的记忆管理通常包含三个层次:短期记忆管理当前会话中的信息流动,确保对话上下文的连贯性和一致性;中期记忆在会话结束后持久化关键信息,为未来的会话提供历史背景;长期记忆则构建并维护关于用户的持续更新的知识模型,支持跨会话的个性化服务。不同层次的记忆具有不同的技术要求和更新策略:短期记忆需要关注上下文窗口内信息的位置组织和强调机制;中期记忆需要解决信息的选择性存储与遗忘问题;长期记忆则需要处理知识的演化、不一致性和冲突消解。
记忆管理的核心挑战在于选择性与抽象性的平衡。并非所有曾经出现的信息都值得被记住,也不是所有记住的信息都需要原封不动地保留。有效的记忆系统必须能够识别和提取高价值的信息(与用户偏好、任务目标、未来可能的需求相关的内容),同时将大量冗余的细节抽象为更高层次的概念。例如,与其在记忆中存储“用户曾在2023年5月12日向客服抱怨过配送延迟”,不如抽象为“用户对物流时效敏感,历史投诉涉及配送问题”。这种抽象不仅节省了存储空间,更重要的是形成了可迁移、可组合的知识单元。
状态追踪:复杂任务中的上下文一致性
状态追踪是上下文工程中最容易被忽视但又至关重要的领域。在简单的问答场景中,每个问题都可以被独立处理——用户问什么,模型就答什么,不存在跨问题的一致性要求。但当任务复杂度提升时,情况变得截然不同:代码生成需要追踪当前文件的状态、已经定义的变量和函数、已经做出的设计决策;多步骤推理需要记住之前步骤的结论和假设;多轮对话需要维护对话的意图演进、已经确认的信息、尚未解决的子问题。这些跨越时间和交互的“状态”构成了任务执行的上下文骨架。
状态追踪的核心挑战在于完整性与一致性。完整性要求系统能够追踪任务执行过程中产生的所有关键状态,不遗漏任何可能影响后续决策的信息;一致性要求这些状态在不同的表示形式和应用场景下保持语义统一,不出现自相矛盾的情况。在实践中,这两个要求往往存在冲突——过度追求完整性会导致状态空间的爆炸,而简化表示则可能丢失关键的语义细节。
状态追踪在自主代理(Autonomous Agent)系统中的应用尤为关键。当模型需要调用工具、访问API、执行多步骤计划时,系统必须维护一个准确的“世界模型”——包括已知的客观事实、当前任务的执行进度、工具调用的历史结果、下一步可用的行动选项等。这个世界模型的任何偏差都可能导致代理做出错误的决策或重复无效的操作。因此,状态追踪不仅是上下文工程的技术问题,更关系到AI系统在现实世界任务中的可靠性和安全性。
五大领域的协同机制
上述五大核心领域并非孤立存在,而是形成了一个紧密协作的系统。理解它们之间的相互关系和交互方式,对于构建高质量的上下文工程系统至关重要。
```mermaid flowchart TD A[用户输入/任务需求] --> B[状态追踪] A --> C[检索增强] B --> D{是否需要外部知识?} D -- 是 --> C D -- 否 --> E[上下文组装] C --> E E --> F{上下文是否超限?} F -- 是 --> G[上下文压缩] G --> H{需要高层理解?} H -- 是 --> I[摘要生成] I --> J[记忆查询] H -- 否 --> J F -- 否 --> J J --> E E --> K[模型推理生成] K --> L{需要持久化信息?} L -- 是 --> M[记忆写入] M --> N[记忆存储] N --> B L -- 否 --> O[响应输出] B -.-> P[状态更新]
style A fill:#e1f5fe style K fill:#fff3e0 style N fill:#e8f5e9 ```
从数据流的角度看,用户输入首先被状态追踪系统解析,识别出需要追踪的实体、关系和任务状态。当识别出需要外部知识时,检索增强模块被激活,从知识库中检索相关信息。检索结果与当前上下文组装后,如果超出模型上下文窗口的限制,上下文压缩模块被触发,在任务导向的原则下精简信息密度。对于需要高层次理解的任务,摘要生成模块将详细信息抽象为概念性摘要。组装完成的上下文经过记忆系统的增强后,输入模型进行推理生成。生成完成后,如果任务产生了需要持久化的信息(如用户的偏好变化、新发现的事实),记忆写入模块被激活,将这些信息写入长期记忆存储,为未来的交互提供支持。整个过程中,状态追踪系统持续更新和维护任务的执行状态,确保上下文的完整性和一致性。
一个典型的协同场景能够更好地说明这种运作机制:用户在与企业知识库问答系统交互时提出“我想了解一下去年Q3季度A产品的市场表现”。状态追踪模块识别出这是一个涉及时间范围、产品标识和分析维度的查询;检索增强模块从产品数据库、市场报告和用户反馈系统中收集相关信息;上下文压缩模块将检索到的海量数据精简为核心指标和关键事件;摘要生成模块构建Q3季度A产品表现的综合视图;记忆系统可能被调用来查询该用户的历史查询记录,以判断是否需要加载用户的产品偏好背景。最终,模型基于这个精心组织的上下文生成回答,而回答中涉及的新信息(如用户对特定指标的额外关注)可能被写回记忆系统,优化未来服务的个性化水平。
上下文经济学:成本效益视角下的资源优化
上下文作为经济资源
在深入理解上下文工程的五大技术领域之后,有必要引入一个贯穿全书的核心分析框架:上下文经济学。这一框架将上下文视为一种需要优化配置的经济资源,从成本-效益的角度指导上下文处理系统的设计决策。
从成本维度审视,上下文并非免费的。直接成本体现为Token计费——输入Token的数量直接影响API调用的费用,在大规模部署中这一成本可能相当可观。间接成本则更为隐蔽:更长的上下文意味着更慢的首Token延迟(Time to First Token),影响用户体验;更长的处理时间增加计算资源消耗;更复杂的上下文增加工程调试的难度和出错概率。当一个系统每天处理百万次请求,每个请求节省1000个Token时,累积的成本节约将非常可观。
从效益维度审视,上下文的价值在于支撑模型产出高质量的响应。足够的上下文帮助模型理解用户的真实意图,提供准确的回答,保持对话的连贯性。但上下文并非越多越好——超过必要阈值的额外上下文会产生边际效益递减,甚至可能因为信息噪音而损害响应质量。上下文经济学的核心任务就是找到这个最优的平衡点:在给定的成本约束下最大化响应质量,或者在保证响应质量的前提下最小化上下文成本。
成本效益分析框架
建立上下文经济学的分析框架需要明确三个关键变量之间的关系:上下文规模、信息质量和系统成本。上下文规模是指注入上下文的Token数量;信息质量是指上下文内容与当前任务需求的相关性、完整性和准确性;系统成本则是前述的直接成本和间接成本之和。
一个简化的效益函数可以表示为:
$$B = f(Q, C) = \alpha \cdot Q - \beta \cdot C$$
其中,$B$为净效益,$Q$为信息质量指标,$C$为上下文规模,$\alpha$和$\beta$为权重参数。信息质量$Q$本身又是上下文规模$C$和内容相关性的函数——当相关性较高时,增加上下文通常能够提升$Q$;但当相关性下降时,增加上下文反而可能稀释有效信息。
在实践中,这一框架能够帮助系统设计者做