上下文工程:构建高性能AI Agent的系统性架构设计

上下文工程:构建高性能AI Agent的系统性架构设计


引言:从"提示工程"到"上下文工程"

随着大语言模型(LLM)上下文窗口从4K扩展到128K甚至1M tokens,我们面临的核心挑战已从"装不下"转变为"管不好"。当Agent在复杂任务中持续运行,信息不断累积形成上下文债务(Context Debt),系统性能并非线性下降,而是在某个临界点突然崩溃。

本文基于LangChain提出的WSCI框架(Write-Select-Compress-Isolate),结合Anthropic关于"上下文腐烂"(Context Rot)的理论研究,系统阐述如何构建稳健、可扩展的AI Agent上下文架构。


第一部分:问题诊断------理解性能下降的本质

1.1 根本病因:上下文腐烂(Context Rot)

上下文腐烂是描述LLM处理长序列时底层认知能力系统性衰退的物理现象,其根源在于:

  • 注意力稀释:Transformer的注意力机制随序列长度增加,单token可分配的注意力权重呈指数级下降
  • 训练分布偏移:预训练数据中长序列样本稀缺,模型缺乏长距离推理的优化经验
  • 位置编码限制:即使采用RoPE、ALiBi等相对位置编码,远距离依赖的建模能力仍会衰减

关键洞察 :上下文腐烂是不可避免的物理约束,与信息内容质量无关,纯粹由信息数量触发。

1.2 四类并发症:具体的失败模式

当上下文腐烂恶化,Agent在具体任务中表现出四种可被诊断的失败模式:

失败模式 定义 核心类比 与腐烂的关系
上下文污染 (Poisoning) 幻觉/错误信息进入上下文并被后续推理当作事实 信息源被投毒 腐烂导致判断力下降,更难识别错误输入
上下文干扰 (Distraction) 过多低价值信息压倒模型预训练知识 信噪比过低 腐烂直接导致注意力无法区分优先级
上下文混淆 (Confusion) 不相关信息错误关联,造成逻辑张冠李戴 注意力分散 腐烂导致无法清晰追踪核心逻辑
上下文冲突 (Clash) 上下文不同部分包含矛盾信息 指令集冲突 腐烂导致长距离记忆衰退,发现不了远距离矛盾

1.3 因果关系的三个层面

复制代码
上下文腐烂(根本病因)
    │
    ├──→ 直接引发:注意力稀释 → 干扰/混淆
    │
    ├──→ 催生放大:推理能力下降 → 更容易产生幻觉(污染源头)
    │
    └──→ 屏蔽发现:长距离记忆衰退 → 发现不了已存在的冲突

精准类比:将Agent想象成长途驾驶的司机

  • 司机疲劳 = 上下文腐烂(内在系统性能力下降)
  • 遇到烂路出错 = 四类失败模式(外在症状)
  • 精神饱满的司机能应对烂路,疲劳司机出车祸概率大增

第二部分:WSCI框架------系统性的解决方案

针对上下文腐烂这一根本病因及其并发症,LangChain提出了WSCI框架------四个正交的操作维度:

sql 复制代码
┌─────────────────────────────────────────────────────────┐
│                    WSCI 框架架构图                        │
├─────────────┬─────────────┬─────────────┬───────────────┤
│   Write     │   Select    │  Compress   │   Isolate     │
│   (写入)     │   (选择)     │   (压缩)     │    (隔离)     │
├─────────────┼─────────────┼─────────────┼───────────────┤
│ 构建记忆系统 │ 注意力调度   │  降噪减负   │   分而治之        │
│  解决"存什么"│ 解决"取什么" │ 解决"装不下" │  解决"别干扰"    │
└─────────────┴─────────────┴─────────────┴───────────────┘

第三部分:写入(Write)------构建分层记忆系统

写入操作的核心不是简单追加文本,而是构建两种功能截然不同的记忆系统

3.1 草稿纸(Scratchpad)------ 短期过程记忆

特性 草稿纸 类比
核心类比 办公桌/白板 处理当前工作,用完即清
目的 辅助当前任务成功执行 确保逻辑连贯性
生命周期 任务级/会话内(易失) 随任务结束清空
内容粒度 详细过程、中间步骤、原始数据 思考痕迹
核心机制 存储与使用分离 完整信息存于窗口外,按需载入

存储与使用分离是草稿纸对抗上下文腐烂的核心手段:

scss 复制代码
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  应用程序内存    │ ←── │  上下文工程代码   │ ←── │   LLM上下文窗口  │
│ (完整草稿纸存储) │     │ (智能选择+压缩)   │     │  (关键信息子集)  │
└─────────────────┘     └─────────────────┘     └─────────────────┘

两种实现模式对比

模式 机制 优点 缺点
显式工具调用 Agent主动调用write_note工具 行为透明,可调试性强 对模型要求高,增加Token开销
隐式格式驱动 强制Thought/Action格式,框架自动提取 高效自动化,符合自然推理流 过程由框架封装,相对黑盒

3.2 长期记忆(Long-term Memory)------ 跨任务知识沉淀

特性 长期记忆 类比
核心类比 档案柜/个人知识库 归档重要结论,供未来查阅
目的 辅助未来所有任务 实现学习与进化
生命周期 永久性/跨会话(持久) 持续积累
内容粒度 提炼后的结论、经验、高级知识 认知升华
核心挑战 从海量观察中智能提炼高价值信息 信息萃取

两种生成机制

机制一:Reflection(反思)------ 事件驱动的纠错型记忆

核心思想:从错误中学习,提炼可复用的行为规则。这是一种"痛过才懂"的学习模式。

完整工作流程

arduino 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                     Reflection 工作流程                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  阶段1:失败检测(框架自动完成)                                   │
│  ├── 监控Agent行动与观察的匹配度                                  │
│  ├── 识别工具调用失败、结果为空、格式错误等异常                    │
│  └── 示例:搜索"Apple revenue"返回手机新闻而非财报                │
│                                                                 │
│  阶段2:元提示生成(框架自动完成)                                 │
│  └── 构造复盘Prompt:"回顾这次失败,生成一条可复用的规则          │
│      避免未来犯错,格式:当[情境]时,应[行动]"                    │
│                                                                 │
│  阶段3:规则生成(LLM执行)                                       │
│  └── 产出行为策略:"当我搜索公司财报时,应加入'季度收益'等关键词"  │
│                                                                 │
│  阶段4:记忆写入(框架执行)                                      │
│  └── 将规则存入长期记忆的"程序性记忆"分区                         │
│  └── 标记为:类型=行为规则,置信度=高,来源=反思生成               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

关键设计要点

设计维度 具体策略 目的
触发条件 明确的失败信号(工具错误、结果为空、格式不匹配) 避免过度反思,确保规则质量
规则抽象度 从具体实例上升到模式匹配(如"Apple"→"公司") 提高规则的泛化能力
置信度管理 新规则标记为"待验证",多次成功应用后升级为"已确认" 防止错误规则持续污染
冲突检测 写入前检查是否与现有规则矛盾 避免规则集内部冲突

适用场景

  • 工具调用频繁失败的场景(如搜索、API调用)
  • 需要快速迭代优化的封闭领域(如特定公司的内部系统操作)
  • 错误成本较高的场景(如金融交易、医疗诊断)

机制二:Generative Agents(生成式智能体)------ 周期性的认知升华

核心思想:从日常观察中持续积累,通过周期性总结提炼高级洞察。这是一种"温故知新"的学习模式。

完整工作流程

arduino 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                Generative Agents 工作流程                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  阶段1:原始日志收集(持续进行)                                   │
│  ├── 时间戳:10:05                                               │
│  │   事件:张三在会议中提到"项目预算紧张"                          │
│  ├── 时间戳:14:30                                               │
│  │   事件:收到李四邮件,主题"关于Q3成本削减方案"                   │
│  └── 时间戳:16:45                                               │
│      事件:王五在群聊中询问"是否可以推迟非核心采购"                 │
│                                                                 │
│  阶段2:周期性合成触发(每日/每周结束时)                          │
│  └── 框架启动Prompt链进行多轮认知升华                              │
│                                                                 │
│  阶段3:分层摘要提炼(LLM多轮执行)                                │
│  ├── 第1轮(事实层):"总结以上日志的核心动态"                     │
│  │   输出:"张三、李四、王五都讨论了预算相关问题"                   │
│  ├── 第2轮(关联层):"这些事件之间有何关联?"                     │
│  │   输出:"三人从不同角度(会议、邮件、群聊)表达对预算的担忧"      │
│  └── 第3轮(洞察层):"基于此,有何新洞察?"                      │
│      输出:"项目X正面临显著的预算风险,可能需要启动风险预案"        │
│                                                                 │
│  阶段4:高级记忆写入(框架执行)                                   │
│  └── 将洞察存入长期记忆的"语义记忆"分区                            │
│  └── 标记为:类型=高级事实,时效性=长期,置信度=中等               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

关键设计要点

设计维度 具体策略 目的
收集粒度 原始事件日志(谁、何时、说了什么) 保留完整上下文,支持多维度总结
合成周期 高频(每日)+ 低频(每周/每月)双层机制 平衡时效性与认知深度
Prompt链设计 从事实→关联→洞察的递进式提问 模拟人类的归纳推理过程
时效性管理 洞察标记有效期(如"预算紧张"标记为季度有效) 防止过时洞察持续影响决策
溯源能力 保留指向原始日志的引用链接 支持洞察的验证与审计

适用场景

  • 需要长期跟踪的复杂项目(如客户关系管理、产品研发)
  • 多源信息汇聚的场景(如舆情监控、竞争情报)
  • 需要发现隐性模式的场景(如用户行为分析、风险评估)

两种机制的对比与协同

维度 Reflection Generative Agents
触发时机 事件驱动(失败时立即触发) 周期驱动(定时批量处理)
学习来源 负面经验(错误、失败) 正面/中性观察(日常事件)
产出形式 行为规则(如何做) 高级事实/洞察(是什么)
记忆类型 程序性记忆 语义记忆
更新频率 高频、即时 低频、批量
认知深度 浅层(单点纠错) 深层(模式发现)
协同关系 Reflection规则可指导Generative Agents的关注重点 Generative Agents的洞察可优化Reflection的触发条件

协同示例

arduino 复制代码
Generative Agents发现:"近期项目频繁出现预算相关讨论"(洞察)
    ↓
优化Reflection触发条件:增加"预算相关工具调用失败"的敏感度
    ↓
Reflection生成规则:"当搜索预算信息时,应同时查询'成本'、'开支'等同义词"
    ↓
Generative Agents在下一轮合成中发现规则应用效果,验证洞察准确性

第四部分:选择(Select)------ 从加载数据到注意力调度

选择操作是WSCI框架中最高频、最核心的环节,类比操作系统的内存调度算法。

4.1 四大信息源的选择策略

scss 复制代码
┌─────────────────────────────────────────────────────────────┐
│                    选择操作的信息源架构                       │
├──────────────────┬──────────────────┬───────────┬───────────┤
│    草稿纸         │    长期记忆       │   工具集   │   知识库   │
│  (短期工作笔记)    │  (持久化知识)     │ (可执行能力)│ (外部数据) │
├──────────────────┼──────────────────┼───────────┼───────────┤
│ • 显式工具回忆    │ • 程序性记忆(如何做)│ • RAG for │ • 混合检索 │
│ • 滑动窗口       │ • 情景记忆(发生了什么)│   Tools  │ • Agentic │
│ • 状态总结       │ • 语义记忆(是什么)  │ • 动态选择 │   Search │
│ • 错误复盘       │ • 动态少样本提示   │ • 固定遮蔽 │ • 重排序  │
└──────────────────┴──────────────────┴───────────┴───────────┘

4.2 长期记忆的人类记忆三分法

LangChain引入认知科学中的人类记忆三分法来分类长期记忆:

记忆类型 对应内容 选择策略 技术实现
程序性记忆 行为规则(系统提示) 动态模板切换 根据用户意图选择专门指令模块(如识别"退货"意图才加载退货流程指南)
情景记忆 过往经验(少样本示例) 动态少样本提示 基于语义相似度从示例库动态检索最相关案例
语义记忆 事实性知识 相关性+意图适配性 RAG、混合检索、知识图谱

关键警示 :一个错误的选择比没有记忆更糟糕。ChatGPT曾错误选择用户地理位置信息注入图片生成,导致输出偏差。算法不仅要判断语义相关性 ,更要判断任务意图的适切性

4.3 工具选择的架构权衡

策略 机制 适用场景 权衡点
动态选择(RAG for Tools) 为工具描述建独立索引,预检索加载Top-K 工具集庞大且开放(如插件系统) 优先考虑扩展性与精准度
固定工具集+遮蔽(Masking) 保持提示前缀不变,利用KV缓存加速 工具集小而稳定,对延迟要求极高 优先考虑性能与速度

第五部分:压缩(Compress)------ 高保真的降噪减负

压缩操作针对即将进入窗口的原始信息流(冗长对话历史、海量API返回),在信息进入新一轮调用前为其降噪减负。

5.1 两种技术路线的对比

维度 上下文总结(Summarization) 上下文裁剪(Trimming)
核心机制 LLM智能提炼(理解并重写) 基于规则过滤(直接丢弃)
优点 ✅ 智能,保留核心语义 ✅ 擅长处理非结构化长文本 ✅ 快速,成本极低 ✅ 对保留部分保真度100%
缺点 ❌ 慢,成本高(需额外LLM调用) ❌ 有损压缩,可能丢失细节 ❌ "笨拙",可能粗暴丢弃重要信息 ❌ 规则需人工精心设计
适用场景 处理巨型工具返回、总结长对话历史、Agent间工作交接 管理常规对话历史(滑动窗口)、清理已消化的旧信息

5.2 上下文总结:三个核心应用场景

场景一:总结对话历史

arduino 复制代码
原始:早期20轮详细对话(10K tokens)
    ↓ LLM提炼
摘要:"任务:查询订单#12345售后;关键决策:已修改收货地址,
      申请电子发票;用户偏好:偏好短信通知"
    ↓ 替换原文
载入上下文:1段摘要(200 tokens)

场景二:后处理工具反馈

css 复制代码
错误做法:将5万字网页HTML直接喂给Agent
正确做法:HTML → 专门总结Prompt提取核心要点 → 精炼摘要载入

场景三:Agent间知识交接

css 复制代码
子Agent完整思考日志(50轮,5K tokens)
    ↓ 总结提炼
浓缩工作报告:"研究发现Q3营收增长20%,主要驱动因素:A、B、C;
              建议:关注D风险"
    ↓ 提交给主Agent

关键挑战:信息保真度

"过度激进的压缩可能导致微妙但关键的信息丢失。"

应对策略

  • 精心设计的压缩Prompt(明确保留重点)
  • 配合分层记忆系统(关键结论写入结构化笔记,不依赖对话压缩)

5.3 上下文裁剪的两种实现

arduino 复制代码
方式一:硬编码启发式(滑动窗口)
策略:设定固定规则,如"永远只保留最近10轮对话"
优点:极其简单快速,成本几乎为零
缺点:一刀切,可能丢弃早期奠基信息
​
方式二:智能过滤(训练裁剪器)
策略:训练轻量级分类模型判断每条信息"应保留"或"可丢弃"
优点:比滑动窗口智能(如识别核心问题即使很老也不丢弃)
缺点:需额外模型训练和维护成本

信息保真度管理 :过度激进的压缩可能导致微妙但关键的信息丢失。应通过精心设计的压缩Prompt 配合分层记忆系统,确保关键结论写入持久化结构化笔记,而非在对话历史压缩中意外丢失。


第六部分:隔离(Isolate)------ 分而治之的架构艺术

隔离操作解决复杂系统中的信息流干扰问题,通过创建多个独立的上下文空间实现复杂并行工作流。

6.1 三种隔离架构模式

scss 复制代码
┌─────────────────────────────────────────────────────────────┐
│                    隔离架构的三种模式                         │
├──────────────────┬──────────────────┬───────────────────────┤
│    多智能体        │    环境/沙箱      │     运行时状态对象      │
│  (Agent之间隔离)   │  (思考与执行隔离)  │    (Agent内部隔离)     │
├──────────────────┼──────────────────┼───────────────────────┤
│ • 主Agent规划分解 │ • LLM只负责思考   │ • 状态结构化为多字段对象 │
│ • 子Agent并行执行 │ • 重资产操作交沙箱 │ • 开发者代码按需暴露    │
│ • 完全独立上下文  │ • 状态化环境隔离   │ • Schema预定义边界     │
│ • 关注点分离      │ • 真实对象操作    │ • 运行时动态拉取       │
└──────────────────┴──────────────────┴───────────────────────┘
模式一:多智能体(Multi-Agent)------ Agent之间的隔离

核心机制:团队协作模式,将上下文隔离级别从单个Agent内部提升到多个Agent之间。

架构详解

scss 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                     多智能体架构图示                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────┐                                            │
│  │    主Agent       │ ←── 负责顶层规划与任务分解                   │
│  │  (规划者/协调者)  │      维护"元上下文":任务目标、子任务分配、   │
│  │                 │      整合规则,不接触具体执行细节              │
│  └────────┬────────┘                                            │
│           │ 委派子任务                                            │
│           ▼                                                     │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   专家Agent A    │  │   专家Agent B    │  │   专家Agent C    │  │
│  │  (代码生成专家)   │  │  (数据分析专家)   │  │  (文档撰写专家)   │  │
│  │                 │  │                 │  │                 │  │
│  │ 独立上下文窗口    │  │ 独立上下文窗口    │  │ 独立上下文窗口    │  │
│  │ • 代码规范       │  │ • 数据schema     │  │ • 文档模板       │  │
│  │ • 相关API文档    │  │ • 统计方法       │  │ • 风格指南       │  │
│  │ • 历史代码示例   │  │ • 可视化库用法   │  │ • 术语表         │  │
│  │ (无关信息被隔离)│  │ (无关信息被隔离)│  │ (无关信息被隔离)│  │
│  └────────┬────────┘  └────────┬────────┘  └────────┬────────┘  │
│           │                    │                    │           │
│           └────────────────────┼────────────────────┘           │
│                                │ 返回结果                        │
│                                ▼                                │
│                         ┌─────────────┐                         │
│                         │   结果整合     │                       │
│                         │  (主Agent汇总) │                       │
│                         └─────────────┘                         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

关键设计决策

决策点 策略选项 选择依据
任务分解粒度 粗粒度(少而大的子任务)vs 细粒度(多而小的子任务) 子任务间独立性高→细粒度;需要全局协调→粗粒度
通信协议 结构化(JSON/XML)vs 自然语言 机器可读性要求高→结构化;灵活性要求高→自然语言
上下文共享范围 零共享(完全隔离)vs 只读共享(共享背景信息)vs 全共享(共享完整历史) 避免污染→零共享;需要一致性→只读共享
协调机制 中心化(主Agent调度)vs 去中心化(Agent间直接通信) 需要全局优化→中心化;需要响应速度→去中心化

成本收益分析的量化框架

sql 复制代码
成本 = 15x Token开销(典型值)+ 延迟增加 + 系统复杂度提升
收益 = 任务并行度提升 × 单任务质量提升 × 错误隔离带来的稳定性提升
​
决策规则:
IF 任务可并行度 > 0.7 
   AND 单任务质量提升 > 30% 
   AND 错误成本 > 多Agent成本
THEN 采用多Agent架构
ELSE 采用单Agent + 其他WSCI操作优化

模式二:环境沙箱(Sandbox)------ 思考与执行的隔离

核心机制:分离LLM的"思考"(生成代码/指令)与"执行"(操作真实世界状态),让Agent在轻量级上下文中操作重资产数据。

架构详解

bash 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                     环境沙箱架构图示                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────┐        ┌─────────────────────────┐ │
│  │      LLM上下文窗口        │        │      沙箱执行环境         │ │
│  │    (轻量级,只存思考)     │        │   (重量级,存储真实状态)  │ │
│  │                         │        │                         │ │
│  │  系统提示:"你是一个数据    │        │  ┌─────────────────┐    │ │
│  │  分析师,请生成Python代码   │◄───────┤  │   数据对象        │    │ │
│  │  分析用户上传的数据集"      │  代码   │  │  • DataFrame     │    │ │
│  │                         │        │  │  • 文件句柄       │    │ │
│  │  用户问题:"分析销售趋势"   │        │  │  • 数据库连接     │    │ │
│  │                         │        │  │  • API响应缓存    │    │ │
│  │  Agent思考:"我需要先加载   │        │  └─────────────────┘    │ │
│  │  数据,然后计算月度统计..."  │        │                         │ │
│  │                         │        │  ┌─────────────────┐    │ │
│  │  Agent输出(代码):        │───────►│  │   执行引擎        │    │ │
│  │  ```python               │  执行   │  │  • Python解释器   │    │ │
│  │  df = sandbox.load('sales │        │  │  • 文件系统       │    │ │
│  │  _data.csv')             │        │  │  • 网络访问       │    │ │
│  │  monthly = df.groupby(    │        │  │  • 资源限制器     │    │ │
│  │  'month').sum()          │        │  └─────────────────┘    │ │
│  │  sandbox.plot(monthly)   │        │                         │ │
│  │  ```                     │        │  ┌─────────────────┐    │ │
│  │                         │        │  │   结果摘要        │    │ │
│  │  [接收执行结果摘要]        │◄───────┤  │  • 统计指标       │    │ │
│  │  "月度销售趋势图已生成,    │  摘要   │  • 异常检测       │    │ │
│  │  Q3环比增长15%..."         │        │  • 可视化路径     │    │ │
│  │                         │        │  └─────────────────┘    │ │
│  └─────────────────────────┘        └─────────────────────────┘ │
│                                                                 │
│  关键隔离点:LLM从不直接接触原始数据,只操作沙箱提供的元数据        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

沙箱与草稿纸的本质区别

维度 草稿纸(Scratchpad) 环境沙箱(Sandbox)
隔离层级 Agent内部 Agent与外部环境之间
信息介质 文本(字符串) 真实对象(DataFrame、文件、连接)
存储内容 思考过程、推理痕迹 真实世界的状态、数据
操作方式 读/写文本 发号施令(生成代码操作对象)
生命周期 随任务结束清空 可持久化或按策略清理
核心价值 记录推理过程,支持回溯 让Agent处理远超上下文窗口的数据量
典型操作 "记录当前计划"、"更新观察结果" "加载数据集"、"执行查询"、"生成图表"

沙箱的高级应用------"盲人摸象"式分析

json 复制代码
场景:分析100GB的日志文件,远超LLM上下文窗口
​
传统方式:无法处理,或需要预先用其他工具抽样
​
沙箱方式:
    │
    ├── Agent生成代码:"读取日志文件的元数据(时间范围、字段列表)"
    ├── 沙箱返回:{"size": "100GB", "rows": 500000000, "fields": ["timestamp", "level", "message"]}
    │
    ├── Agent生成代码:"按小时抽样统计错误率分布"
    ├── 沙箱执行抽样查询,返回:{"peak_hour": "14:00", "error_rate": "5%"}
    │
    ├── Agent生成代码:"深入分析14:00的错误日志,提取常见错误模式"
    ├── 沙箱返回Top-5错误类型及示例
    │
    └── Agent基于这些"摸象"得到的元数据,生成最终分析报告
​
Agent始终工作在轻量级上下文(只存代码和元数据),
但通过沙箱操作实现了对海量数据的分析能力。
模式三:运行时状态对象(Runtime State)------ Agent内部的结构化隔离

核心机制:将Agent的完整状态设计为结构化的多字段对象,通过Schema预定义信息边界,实现内部模块化隔离。

架构详解

scss 复制代码
┌─────────────────────────────────────────────────────────────────┐
│                   运行时状态对象架构图示                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │              Agent运行时状态对象(完整状态)               │   │
│  │                                                         │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │   │
│  │  │  messages   │  │working_mem  │  │  user_profile│     │   │
│  │  │  (对话历史)  │  │ (工作记忆)   │  │  (用户画像)  │     │   │
│  │  │             │  │             │  │             │     │   │
│  │  │ • 用户输入   │  │ • 当前计划   │  │ • 偏好设置   │     │   │
│  │  │ • Agent回复  │  │ • 中间结果   │  │ • 历史行为   │     │   │
│  │  │ • 工具调用   │  │ • 待办事项   │  │ • 权限等级   │     │   │
│  │  │             │  │             │  │             │     │   │
│  │  │ [隔离规则:  │  │ [隔离规则:  │  │ [隔离规则:  │     │   ││  │  │  全量保留    │  │  按需加载    │  │  只读访问]   │     │   │
│  │  │  但受压缩]   │  │  高优先级]   │  │             │     │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘     │   │
│  │                                                         │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │   │
│  │  │ tool_results│  │  session_ctx │  │  system_cfg  │     │   │
│  │  │ (工具结果)   │  │ (会话上下文) │  │ (系统配置)   │     │   │
│  │  │             │  │             │  │             │     │   │
│  │  │ • 原始返回   │  │ • 任务类型   │  │ • 模型参数   │     │   │
│  │  │ • 解析状态   │  │ • 会话ID    │  │ • 安全策略   │     │   │
│  │  │ • 缓存标记   │  │ • 时间戳    │  │ • 功能开关   │     │   │
│  │  │             │  │             │  │             │     │   │
│  │  │ [隔离规则:  │  │ [隔离规则:  │  │ [隔离规则:  │     │   ││  │  │  后处理压缩  │  │  全量只读]   │  │  系统级保护] │     │   │
│  │  │  后丢弃原始] │  │             │  │             │     │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘     │   │
│  │                                                         │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│  每次LLM调用时,框架根据当前任务类型,按隔离规则选择暴露的字段:    │
│                                                                 │
│  示例:代码生成任务时的上下文组装                                  │
│  ├── 必须加载:messages(最近3轮)、working_mem(当前计划)        │
│  ├── 条件加载:user_profile(如果涉及个性化代码风格)               │
│  ├── 后处理加载:tool_results(先压缩为摘要)                      │
│  └── 禁止加载:system_cfg(内部配置,不暴露给模型)                │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

隔离与选择的协同工作流

复制代码
设计时(隔离视角):
    │
    ├── 定义状态Schema,划分字段边界
    ├── 为每个字段设定访问权限(读/写/不可见)
    ├── 设定字段间的依赖关系(如tool_results依赖session_ctx)
    └── 建立字段的加载优先级和压缩策略
                │
                ▼
运行时(选择视角):
    │
    ├── 识别当前任务类型和意图
    ├── 根据隔离规则,从各字段中选择需要暴露的数据
    ├── 应用字段特定的压缩策略(如messages用滑动窗口,tool_results用摘要)
    └── 组装最终上下文,确保不违反隔离边界

6.2 多智能体的成本收益权衡

核心机制:团队协作模式,将上下文隔离级别从单个Agent内部提升到多个Agent之间。

架构要点

  • 主Agent负责顶层规划与任务分解
  • 专家子Agent在完全独立的上下文窗口中并行执行
  • 实现清晰的关注点分离,避免主Agent被海量细节污染

成本收益权衡

  • Token消耗可能高达15倍
  • 采用标准:任务高度可并行 + 子任务需深度探索 + 收益远大于成本
  • 默认策略:采用单Agent,只有遇到明确瓶颈才评估多Agent

6.3 环境沙箱 vs 草稿纸的本质区别

维度 草稿纸(Scratchpad) 环境沙箱(Sandbox)
隔离对象 思考的痕迹 真实世界的状态
存储介质 字符串(Text Log) 真实对象(DataFrame, File等)
Agent操作 读/写文本 发号施令(生成代码操作对象)
核心价值 记录推理过程 让Agent通过操作对象元数据实现"盲人摸象"式分析,始终工作在轻量级上下文

6.4 隔离与选择的辩证关系

  • 隔离(Isolate)架构师视角,强调"阻挡"。通过Schema设计预先定义信息边界和访问权限。
  • 选择(Select)操作员视角,强调"拉取"。在运行时根据隔离预设规则,动态从不同分区拉取信息。

结论 :隔离定义了信息的边界,选择在边界内活动------它们是同一枚硬币的两面。


第七部分:实践指南------构建上下文架构的 checklist

基于WSCI框架,我们提供以下实践 checklist:

7.1 写入阶段

  • 明确区分草稿纸(任务级)和长期记忆(永久级)的写入目标
  • 选择显式工具调用(可调试)或隐式格式驱动(高效)的实现模式
  • 为长期记忆设计Reflection(纠错)或Generative Agents(升华)的生成机制

7.2 选择阶段

  • 为草稿纸实现滑动窗口、状态总结或错误复盘的选择策略
  • 为长期记忆应用人类记忆三分法,实现动态模板、动态少样本、RAG检索
  • 为工具集评估动态选择(大规模)vs 固定遮蔽(高延迟要求)的架构
  • 为知识库实现混合检索(向量+关键词+图谱)+ Agentic探索 + 重排序

7.3 压缩阶段

  • 对高价值、非结构化信息使用上下文总结(Summarization)
  • 对常规维护使用上下文裁剪(Trimming/滑动窗口)
  • 建立分层记忆系统,确保关键结论不依赖对话历史压缩

7.4 隔离阶段

  • 评估任务是否真正需要多智能体架构(成本可能高达15倍)
  • 设计环境沙箱分离思考与执行,处理重资产操作
  • 通过运行时状态对象的Schema设计,实现内部结构化隔离

结语:从算法调优到架构设计

回顾整个上下文工程的演进路径:

scss 复制代码
Anthropic理论层              LangChain工程层                实践认知层
    │                            │                            │
    │   上下文腐烂的根本约束      │   WSCI框架管理上下文          │   核心挑战转移
    │   (Transformer架构限制)    │   (Write-Select-Compress-Isolate) │   (算法→架构)
    │                            │                            │
    └────────────────────────────┴────────────────────────────┘
                              │
                              ▼
              构建真正强大、可靠、可扩展的AI Agent
              其核心已从算法和模型本身
              转移到了系统性的上下文架构设计

这正是开发者在Agent时代的核心价值所在------不再是调模型参数,而是设计上下文架构。


参考资源

  1. LangChain Documentation: Context Engineering Best Practices
  2. Anthropic Research: The Challenges of Long Context in LLMs
  3. Shunyu Yao et al. "ReAct: Synergizing Reasoning and Acting in Language Models"
  4. Noever et al. "Generative Agents: Interactive Simulacra of Human Behavior"
相关推荐
Dimpels3 小时前
CANN ops-nn 算子解读:AIGC 批量生成中的 Batch 处理与并行算子
开发语言·aigc·batch
山顶夕景4 小时前
【MLLM】nano-banana绘图
大模型·aigc·多模态
永远都不秃头的程序员(互关)4 小时前
基于CANN的ops-signal仓库实现AIGC音频生成中的动态窗函数融合优化——从STFT预处理到端到端低延迟合成
aigc·音视频
是枚小菜鸡儿吖4 小时前
从 0 到 1 生成自定义算子:CANN + AIGC 的自动化工作流
运维·自动化·aigc
种时光的人4 小时前
CANN生态场景化部署:cann-deployer实现AIGC大模型一键落地
aigc
多恩Stone4 小时前
【3D AICG 系列-6】OmniPart 训练流程梳理
人工智能·pytorch·算法·3d·aigc
ujainu5 小时前
CANN仓库中的AIGC能效-性能协同优化:昇腾AI软件栈如何实现“既要又要还要”的工程奇迹
人工智能·aigc
敲键盘的生活5 小时前
MoneyPrinter重构之一:用nicegui调用大模型生成视频文案
python·重构·aigc·ai编程·ai写作
那个村的李富贵11 小时前
光影魔术师:CANN加速实时图像风格迁移,让每张照片秒变大师画作
人工智能·aigc·cann