上下文优化技术
上下文优化通过策略性压缩、遮蔽、缓存和分区来扩展有限上下文窗口的有效容量。目标不是神奇地增加上下文窗口,而是更好地利用可用容量。有效的优化可以使有效上下文容量翻倍或翻三倍,而无需更大的模型或更长的上下文。
何时使用
在以下情况激活此技能:
- 上下文限制约束了任务复杂度
- 优化以降低成本(更少的 token = 更低的成本)
- 减少长对话的延迟
- 实现长时间运行的智能体系统
- 需要处理更大的文档或对话
- 大规模构建生产系统
核心概念
上下文优化通过四种主要策略扩展有效容量:压缩(在接近限制时总结上下文)、观察遮蔽(用引用替换冗长的输出)、KV-cache 优化(重用缓存的计算)和上下文分区(在隔离的上下文之间拆分工作)。
关键洞察是上下文质量比数量更重要。优化在减少噪声的同时保留信号。艺术在于选择保留什么与丢弃什么,以及何时应用每种技术。
详细主题
压缩策略
什么是压缩 压缩是在接近限制时总结上下文内容,然后用总结重新初始化新的上下文窗口的做法。这以高保真的方式提炼上下文窗口的内容,使智能体能够以最小的性能下降继续运行。
压缩通常作为上下文优化的第一个杠杆。艺术在于选择保留什么与丢弃什么。
压缩实现 压缩通过识别可以压缩的部分、生成捕获关键点的总结、用总结替换完整内容来工作。压缩优先级依次为:工具输出(用总结替换)、早期轮次(总结早期对话)、检索的文档(如果存在较新版本则总结),以及永远不要压缩系统提示词。
总结生成 有效的总结根据消息类型保留不同的元素:
工具输出:保留关键发现、指标和结论。删除冗长的原始输出。
对话轮次:保留关键决策、承诺和上下文转换。删除填充词和来回讨论。
检索的文档:保留关键事实和声明。删除支持性证据和详细阐述。
观察遮蔽
观察问题 工具输出可能占智能体轨迹中 token 使用量的 80% 以上。其中大部分是已经达到目的的冗长输出。一旦智能体使用工具输出做出决策,保留完整输出提供的价值递减,同时消耗大量上下文。
观察遮蔽用紧凑的引用替换冗长的工具输出。信息在需要时仍然可访问,但不会持续消耗上下文。
遮蔽策略选择 并非所有观察都应该同等遮蔽:
永不遮蔽:对当前任务关键的观察、最近轮次的观察、在活跃推理中使用的观察。
考虑遮蔽:3 轮以前的观察、可提取关键点的冗长输出、已达到目的的观察。
始终遮蔽:重复的输出、样板页眉/页脚、已在对话中总结的输出。
KV-Cache 优化
理解 KV-Cache KV-cache 存储推理期间计算的 Key 和 Value 张量,随序列长度线性增长。在共享相同前缀的请求之间缓存 KV-cache 可以避免重复计算。
前缀缓存通过基于哈希的块匹配,在具有相同前缀的请求之间重用 KV 块。这显著降低了具有公共前缀(如系统提示词)的请求的成本和延迟。
缓存优化模式 通过重新排序上下文元素以最大化缓存命中来优化缓存。首先放置稳定元素(系统提示词、工具定义),然后是频繁重用的元素,最后是唯一元素。
设计提示词以最大化缓存稳定性:避免动态内容如时间戳、使用一致的格式、保持跨会话结构稳定。
上下文分区
子智能体分区 最激进的上下文优化形式是在具有隔离上下文的子智能体之间分区工作。每个子智能体在专注于其子任务的干净上下文中运行,而不携带来自其他子任务的累积上下文。
这种方法实现了关注点分离——详细的搜索上下文保持在子智能体内隔离,而协调器专注于综合和分析。
结果聚合 通过验证所有分区完成、合并兼容的结果、如果仍然太大则总结,来聚合来自分区子任务的结果。
预算管理
上下文预算分配 设计明确的上下文预算。将 token 分配给类别:系统提示词、工具定义、检索的文档、消息历史和保留缓冲区。监控相对于预算的使用情况,并在接近限制时触发优化。
基于触发器的优化 监控优化触发器的信号:token 利用率超过 80%、降级指标和性能下降。根据上下文组成应用适当的优化技术。
实践指南
优化决策框架
何时优化:
- 上下文利用率超过 70%
- 随着对话延长响应质量下降
- 由于长上下文导致成本增加
- 随着对话长度增加延迟增加
应用什么:
- 工具输出占主导:观察遮蔽
- 检索的文档占主导:总结或分区
- 消息历史占主导:压缩加总结
- 多个组件:组合策略
性能考虑
压缩应实现 50-70% 的 token 减少,质量下降不超过 5%。遮蔽应在被遮蔽的观察中实现 60-80% 的减少。缓存优化应为稳定工作负载实现 70%+ 的命中率。
根据测量的有效性监控和迭代优化策略。
示例
示例 1:压缩触发
if context_tokens / context_limit > 0.8:
context = compact_context(context)
示例 2:观察遮蔽
if len(observation) > max_length:
ref_id = store_observation(observation)
return f"[Obs:{ref_id} 已省略。关键: {extract_key(observation)}]"
示例 3:缓存友好排序
# 稳定内容优先
context = [system_prompt, tool_definitions] # 可缓存
context += [reused_templates] # 可重用
context += [unique_content] # 唯一
指南
- 优化前先测量——了解当前状态
- 尽可能先压缩再遮蔽
- 设计缓存稳定性,使用一致的提示词
- 在上下文成为问题之前进行分区
- 随时间监控优化效果
- 平衡 token 节省与质量保留
- 在生产规模测试优化
- 为边缘情况实现优雅降级
集成
此技能建立在 context-fundamentals 和 context-degradation 之上。它连接到:
- multi-agent-patterns - 作为隔离的分区
- evaluation - 测量优化效果
- memory-systems - 将上下文卸载到内存
参考资料
内部参考:
- Optimization Techniques Reference - 详细技术参考
此集合中的相关技能:
- context-fundamentals - 上下文基础
- context-degradation - 了解何时优化
- evaluation - 测量优化
外部资源:
- 关于上下文窗口限制的研究
- KV-cache 优化技术
- 生产工程指南
技能元数据
Created: 2025-12-20 Last Updated: 2025-12-20 Author: Agent Skills for Context Engineering Contributors Version: 1.0.0
限制
- 仅当任务明确匹配上述描述的范围时使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少所需的输入、权限、安全边界或成功标准,请停止并请求澄清。