SuperAPI AI 工具集

context-optimization

智能体与模型

查看项目

更新于 10-15 18:09

技能介绍

用途

上下文优化用于扩展有限上下文窗口的有效容量。其目标不是魔法般增大上下文窗口,而是更好地利用现有容量。有效的优化可以在不需要更大模型或更长上下文的情况下,将有效上下文容量提升两到三倍。

适用于以下情况:上下文限制制约任务复杂度;为降低成本而优化(更少 token 意味着更低成本);降低长对话的延迟;实现长期运行的智能体系统;需要处理更大的文档或对话;构建大规模生产系统。

核心概念

上下文优化通过四种主要策略扩展有效容量:压缩(在接近上限时对上下文进行摘要)、观察遮蔽(用引用替换冗长输出)、KV 缓存优化(复用缓存计算)以及上下文分区(将工作拆分到隔离的上下文)。

关键洞见是:上下文质量比数量更重要。优化在减少噪声的同时保留信号。其艺术在于选择保留什么与丢弃什么,以及何时应用每种技术。

压缩策略

什么是压缩

压缩是在接近上限时对上下文内容进行摘要,然后用摘要重新初始化新上下文窗口的做法。它以高保真方式提炼上下文窗口的内容,使智能体能够以最小的性能下降继续运行。压缩通常是上下文优化中的第一杠杆。其艺术在于选择保留什么与丢弃什么。

压缩实现

压缩通过识别可压缩的部分、生成捕捉要点的摘要、用摘要替换完整内容来工作。优先压缩对象为:工具输出(替换为摘要)、旧轮次(摘要早期对话)、检索文档(若存在较新版本则摘要),并且绝不压缩系统提示。

摘要生成

有效的摘要按消息类型保留不同要素:

  • 工具输出:保留关键发现、指标和结论,移除冗长的原始输出。
  • 对话轮次:保留关键决策、承诺和上下文变化,移除填充内容和来回往复。
  • 检索文档:保留关键事实和主张,移除支撑证据和阐述。

观察遮蔽

观察问题

在智能体轨迹中,工具输出可能占 token 使用量的 80% 以上。其中许多是已完成使命的冗长输出。一旦智能体利用工具输出做出决策,保留完整输出价值递减,却持续消耗大量上下文。观察遮蔽用紧凑引用替换冗长的工具输出。信息在需要时仍可访问,但不再持续消耗上下文。

遮蔽策略选择

并非所有观察都应被同等遮蔽:

  • 绝不遮蔽:对当前任务关键的观察、最近一轮的观察、正在用于活跃推理的观察。
  • 考虑遮蔽:3 轮以上的观察、可提取关键点的冗长输出、目的已达成的观察。
  • 始终遮蔽:重复输出、样板页眉/页脚、已在对话中摘要过的输出。

KV 缓存优化

理解 KV 缓存

KV 缓存存储在推理过程中计算的 Key 和 Value 张量,随序列长度线性增长。在共享相同前缀的请求间缓存 KV 缓存可避免重复计算。前缀缓存通过基于哈希的块匹配,在具有相同前缀的请求间复用 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} elided. Key: {extract_key(observation)}]"

示例 3:缓存友好的排序

# Stable content first
context = [system_prompt, tool_definitions]  # Cacheable
context += [reused_templates]  # Reusable
context += [unique_content]  # Unique

指南

  • 先测量再优化——了解当前状态
  • 尽可能先压缩后遮蔽
  • 通过一致的提示设计缓存稳定性
  • 在上下文成为问题之前先分区
  • 随时间监控优化效果
  • 在 token 节省与质量保持之间取得平衡
  • 在生产规模下测试优化
  • 为边缘情况实现优雅降级

集成

本技能构建于 context-fundamentals 和 context-degradation 之上。它连接到:

  • multi-agent-patterns —— 分区作为隔离
  • evaluation —— 衡量优化效果
  • memory-systems —— 将上下文卸载到记忆

参考

内部参考:优化技术参考——详细技术参考。

本集合中的相关技能:context-fundamentals(上下文基础)、context-degradation(理解何时优化)、evaluation(衡量优化)。

外部资源:关于上下文窗口限制的研究、KV 缓存优化技术、生产工程指南。

技能元数据

创建:2025-12-20;最后更新:2025-12-20;作者:Agent Skills for Context Engineering Contributors;版本:1.0.0。

限制

仅当任务明确匹配上述范围时使用此技能。不要将输出视为环境特定验证、测试或专家评审的替代品。如果缺少所需输入、权限、安全边界或成功标准,应停止并请求澄清。