3.6 上下文工程

随着智能体系统复杂度的提升,业界逐渐意识到:仅仅优化提示词已经不够了,一个更系统的工程方向正在兴起——上下文工程

[!IMPORTANT] 要点:上下文工程强调把“提示词、工具、记忆、用户元数据、缓存与路由”当成一个整体系统来设计;很多稳定性问题,本质上不是“提示词写得不够好”,而是“上下文注入的内容不对/不全/不可控”。

3.6.1 什么是上下文工程

上下文工程 是系统性地管理、优化和编排输入给 AI 模型的所有信息的工程技术。它的核心职能正是 "连接" 和 "调度":它负责将长期记忆(数据库、知识库)中的海量信息,经过筛选、压缩和编排,高效地注入到短期记忆(上下文窗口)中,以供模型进行当前时刻的推理。

下图总结了上下文工程与提示词工程的区别。

维度

提示词工程

上下文工程

优化对象

单个提示词

整个信息生态系统

关注范围

指令措辞、格式

用户元数据、历史、Schema、工具、缓存

复杂度

相对简单

系统工程级别

动态性

通常静态

高度动态、上下文感知

角色

提示词工程师

智能体工程师

下图展示了从提示词工程到上下文工程的演进关系。

spinner

图 3-10:提示词工程与上下文工程的演进关系

3.6.2 核心约束

在进行上下文工程时,必须面对两个物理规律限制:有效上下文远小于标称值、中间丢失。

有效上下文远小于标称值

虽然一些模型宣称支持更长的上下文窗口,但这不意味着在满载时仍能保持智能。

  • 稀疏注意力:当上下文过长时,注意力权重被稀释。

  • 经验法则:编程智能体(Coding Agent)通常只能有效利用上下文窗口中的一小部分关键信息;当窗口被噪音填满时,推理准确性与指令遵循会明显下降。

中段丢失

研究发现,上下文窗口的 中间区域 存在“Dumb Zone”。

  • 首尾偏好:Model 倾向于关注开头(系统提示词)和结尾(最新对话)。

  • 中段丢失(Lost in the Middle):关键信息如果被淹没在中间的日志海中,很容易被忽略。

[!TIP] 氧气瓶理论:上下文窗口就像潜水员的氧气瓶。给你一个更大的氧气瓶(更长上下文),不代表你能一直潜水直到用完。在深度(复杂度)增加时,耗氧量剧增,你必须在“氧气耗尽”前浮出水面(重启会话)。

3.6.3 四大核心策略

面对 “有限的上下文窗口”与“无限的知识需求” 之间的矛盾,工程上常用一组可复用的上下文工程策略来解决一个核心问题:如何在不溢出 Token 预算的前提下,让 AI 获得最精准、最相关的决策依据?

这套方法可以抽象为四种对信息的处理原语:持久化上下文、筛选上下文、压缩上下文、隔离上下文。

1. 持久化上下文

核心理念:将信息持久化存储到外部系统,超越即时上下文窗口的限制。

大模型的上下文窗口是昂贵且易失的。"持久化上下文"不仅仅是简单的日志记录,而是要构建一个 外部记忆体。这使得智能体能够"记住"跨越数天甚至数月的交互细节,而无需每次都重新输入。

关键操作

  • 索引化:将非结构化文本通过嵌入转化为向量,从一开始就为后续检索做好准备。

  • 结构化存储:将关键实体(如用户偏好、项目配置)提取存入 SQL/NoSQL 数据库。

  • 状态快照:定期保存智能体的思维状态,支持断点续传。

应用场景

  • 用户偏好和个性化设置

  • 长期任务的进度保存

  • 跨会话的知识积累

2. 筛选上下文

核心理念:从海量信息中检索最相关的内容,只向模型展示即刻决策所需的信息。

这是 RAG的本质。即便拥有很长的上下文窗口,将整本技术手册塞入 提示词通常也是低效且昂贵的。"筛选上下文"就像是为模型佩戴一副"滤镜",过滤掉噪音,只保留信号。关键操作

  • 向量检索:通过语义相似度快速定位相关片段。

  • 重排序(Re-ranking):使用高精度模型对召回结果进行二次排序,确保Top-K的相关性。

  • 查询改写:将用户的模糊问题转化为精确的检索查询。

关键技术

  • RAG(检索增强生成)

  • 多阶段检索(粗筛 + 精排)

  • Token 预算管理

3. 压缩上下文

核心理念:在保留信息(关键意图、事实)的前提下,大幅减少 Token 占用量。

这是一种"用时间换空间"的策略。通过额外的计算(调用 LLM 进行总结),来换取更精简的提示词空间。这对于维持长期会话(Long-term Conversation)至关重要,能防止上下文随着对话轮数线性膨胀。

关键操作

  • 摘要化:将过去 10 轮对话压缩为一段 200 字的摘要。

  • 信息提取:从冗长的网页中只提取价格、日期等结构化字段。

  • 语言精炼:去除口语词、冗余修饰,保留语义骨架。

压缩策略

  • 对话摘要(Summarization)

  • 关键信息提取

  • 渐进式遗忘(保留最近,压缩历史)

4. 隔离上下文

核心理念:通过将任务拆分给不同的子智能体(Sub-agents),实现信息的物理隔离和关注点分离。

这体现了 **"最小特权原则"**在 AI 工程中的应用。与其让一个全能智能体面对包含代码、文档、聊天记录的混杂上下文,不如让"编码智能体"只看代码,"客服智能体"只看 FAQ。这不仅提高了安全性,还通过减少干扰(Distraction)显著提升了特定任务的准确率。关键操作

  • 上下文路由:根据用户意图,分发到特定的处理单元。

  • 防火墙设计:确保敏感数据(如 API Key)只在特定的执行环境中可见。

  • 独立状态机:每个子智能体维护自己的简短历史,互不污染。

隔离原则

  • 最小知识原则:智能体只获取完成任务所需的信息

  • 减少干扰:无关上下文会降低推理精度(Lost in the Middle)

  • 安全边界:敏感信息隔离

3.6.4 实战:构建上下文管理系统

将上述四种策略整合成一个统一的上下文管理器。它协调持久化存储、智能筛选、历史压缩和工具过滤,为每次智能体调用准备优化后的上下文。

3.6.5 进阶模式:应对复杂场景

随着智能体系统的规模化,面临着上下文腐烂、工具过载等深层次挑战。本节介绍几种应对这些复杂场景的高级工程模式。

上下文腐烂与卸载策略

[!WARNING] 上下文腐烂:当智能体调用工具次数增多,消息列表不断膨胀,推理性能会出现断崖式下跌——推理变慢、质量下降、甚至开始无意义地重复。

为什么会发生上下文腐烂

下图展示了随着工具调用增加,上下文腐烂的过程:

spinner

图 3-11:上下文腐烂过程示意

在复杂任务中,智能体可能需要频繁调用工具并累积大量中间结果;如果不做控制,历史会迅速膨胀并拖垮推理。

关键阈值:即便模型支持很长的上下文窗口,性能也可能在“历史消息过长/噪音过多”时提前衰减。因此需要把“缩减/卸载”做成可观测、可触发的机制,而不是等到报错或质量崩坏才处理。

上下文卸载

核心思路:不要把所有东西都硬塞进智能体的短期记忆里,而是卸载到外部存储,需要时再检索回来

两阶段缩减策略

一种常见的做法是采用结构化、带触发机制的两阶段缩减流程,首先尽量无损、可逆地压缩上下文,如果还不够,再进行有损的压缩。

第一阶段:紧凑化 — 无损可逆

剥离任何能从外部状态重建的信息:

关键原则

  • 只紧凑化 最早的 50% 历史记录

  • 保留最新的完整工具调用作为 Few-shot 示例

  • 可逆性:任何被剥离的信息都能通过文件路径重建

第二阶段:摘要化 — 有损带保险

当紧凑化收益不再明显时,启动摘要化,但需要极其谨慎:

紧凑化是无损且可逆的,而摘要化是有损且不可逆的。虽然两者都能缩减上下文长度,但其底层机制与最终效果截然不同。

动态上下文发现

少即是多——在开始时提供给模型的细节越少,效果反而越好。

一种常见做法是不把所有上下文都压缩进提示词,而是将大块上下文转化为文件或外部资源,让智能体按需检索:

  • 工具结果:写入 .log 文件

  • 对话历史:写入 history.json

  • 终端输出:自动同步到本地文件

  • 工具服务定义:同步到文件夹

  • 智能体技能 (Agent Skills):同步到文件夹

A/B 测试结果:对于调用了工具服务的任务,动态发现策略通常能显著降低 Token 消耗。

分层行动空间:解决工具过载

当智能体配备的工具越来越多,会出现 上下文混淆——模型可能调用错误的工具,甚至幻觉出不存在的工具。此时需要 隔离工具空间。

下图展示了分层行动空间的架构设计:

spinner

图 3-12:分层行动空间架构

为什么这样设计

  1. L1 固定不变:原子级函数定义稳定,不会频繁变化,对 KV 缓存友好

  2. L2 按需发现:工具在沙箱中,智能体像开发者一样用 ls--help 自行探索

  3. L3 代码执行:复杂计算写 Python 脚本,只返回摘要结果

从模型的角度看,无论想使用 L2 还是 L3 的复杂工具,最终都通过 L1 的那几个原子函数执行。这种接口设计,对模型极度简洁,且缓存稳定。

3.6.6 智能体工程师:能力模型与职责

构建可靠智能体需要一种新的复合型人才——智能体工程师,需要掌握提示词工程、工程能力和产品设计思维。

下图展示了智能体工程师的核心能力模型:

spinner

图 3-13:智能体工程师能力模型

核心技能

3.6.7 设计哲学:避免过度复杂化

上下文工程的目标是让模型的工作变得更简单,而不是更难。

[!IMPORTANT] 智能体工程的核心定律 "中等模型 + 精心设计的流程",远胜于"顶级模型 + 混乱的架构"。

[!TIP] 延伸阅读


下一节: 本章小结

Last updated