mcpField
C
context-optimization

context-optimization

github.com/sickn33Agent 工作流48.7k557 次安装今天更新
代码仓库

关于 context-optimization

context-optimization 是帮助 Agent 系统管理有限上下文窗口的技能,面向长对话、长文档和生产级工作流。它讲解压缩、观察屏蔽、KV 缓存优化与上下文分区,并要求通过测量权衡成本、延迟和信息保留。

主要功能

  1. 01压缩临近上限的上下文
  2. 02将冗长工具输出替换为引用
  3. 03通过稳定前缀复用 KV 缓存
  4. 04将任务分配到隔离上下文
  5. 05设置预算并监控优化效果

适用场景

  1. 01减少长对话的上下文占用
  2. 02处理大型文档与工具输出
  3. 03设计长时运行的 Agent 系统
  4. 04评估上下文优化的质量与成本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill context-optimization

安装后在 Claude Code 中输入/context-optimization确认已加载。

详细介绍

上下文优化技术

上下文优化通过有策略地压缩、屏蔽、缓存和分区,扩展有限上下文窗口的有效容量。目标并非神奇地增大上下文窗口,而是更好地利用现有容量。效果取决于任务/工作负载,必须进行衡量;压缩可能会丢失关键信息。

适用场景

在以下情况下启用此技能:

  • 上下文限制制约了任务复杂度
  • 优化以降低成本(Token 越少,成本越低)
  • 减少长对话的延迟
  • 实现长时间运行的 Agent 系统
  • 需要处理更大的文档或对话
  • 大规模构建生产系统

核心概念

上下文优化通过四种主要策略扩展有效容量:压缩(接近限制时总结上下文)、观察结果屏蔽(将冗长输出替换为引用)、KV 缓存优化(复用缓存的计算结果)和上下文分区(将工作拆分到彼此隔离的上下文中)。

关键在于,上下文质量比数量更重要。优化会在减少噪声的同时保留有效信息。关键是判断保留和舍弃哪些内容,以及何时应用每种技术。

详细主题

压缩策略

什么是压缩 压缩是指在上下文接近限制时总结其内容,然后用摘要重新初始化一个新的上下文窗口。这种方法能够高保真地提炼上下文窗口中的内容,使 Agent 得以继续工作,同时将性能下降降至最低。

压缩通常是上下文优化中首先采用的手段。关键是判断保留和舍弃哪些内容。

压缩的实现 压缩的实现方式是识别可压缩的部分,生成能涵盖要点的摘要,并用摘要替换完整内容。优先压缩的内容包括工具输出(替换为摘要)、较早的轮次(总结早期对话)、检索到的文档(如果存在较新版本,则进行总结),系统提示词则绝不压缩。

摘要生成 有效的摘要会根据消息类型保留不同内容:

工具输出:保留关键发现、指标和结论。删除冗长的原始输出。

对话轮次:保留关键决策、承诺和上下文变化。删除填充内容和来回往复的对话。

检索到的文档:保留关键事实、不确定性和来源指针,确保主张仍可审计;保留当前决策所需的确切证据。

观察结果屏蔽

观察结果问题 在 Agent 执行轨迹中,工具输出可能占用 80% 以上的 Token。许多输出冗长,且已完成其用途。Agent 使用工具输出作出决策后,保留完整输出的价值会逐渐降低,却会持续占用大量上下文。

观察结果屏蔽会将冗长的工具输出替换为简洁引用。如有需要,仍可访问这些信息,但不会持续占用上下文。

选择屏蔽策略 不应以相同方式屏蔽所有观察结果:

绝不屏蔽:对当前任务至关重要的观察结果、最近一轮的观察结果、用于当前推理的观察结果。

考虑屏蔽:3 轮或更早以前的观察结果、可提取要点的冗长输出、用途已经达成的观察结果。

始终屏蔽:重复输出、模板化的页眉/页脚、对话中已经总结过的输出。

KV 缓存优化

了解 KV 缓存 KV 缓存存储推理期间计算出的 Key 和 Value 张量,并随序列长度线性增长。对于共享相同前缀的请求,在请求之间缓存 KV 缓存可以避免重复计算。

前缀缓存通过基于哈希的块匹配,在具有相同前缀的请求之间复用 KV 块。对于具有常见前缀(如系统提示词)的请求,这可以大幅降低成本和延迟。

缓存优化模式 通过重新排列上下文元素以最大限度地提高缓存命中率来优化缓存。先放置稳定元素(系统提示词、工具定义),然后放置频繁复用的元素,最后放置唯一元素。

设计提示词以最大限度地保持缓存稳定:避免使用时间戳等动态内容,采用一致的格式,并在不同会话中保持结构稳定。

上下文分区

子 Agent 分区 最彻底的上下文优化方式是将工作分配给拥有隔离上下文的子 Agent。每个子 Agent 都在干净的上下文中专注于自己的子任务,不携带其他子任务积累的上下文。

这种方法实现了关注点分离——详细的搜索上下文仍隔离在子 Agent 中,而协调者则专注于综合和分析。

结果汇总 通过验证所有分区均已完成、合并兼容的结果,并在结果仍然过大时进行摘要,来汇总分区子任务的结果。

预算管理

上下文预算分配 明确设计上下文预算。为以下类别分配 Token:系统提示词、工具定义、检索到的文档、消息历史记录和预留缓冲区。监控预算使用情况,并在接近上限时触发优化。

基于触发条件的优化 监控触发优化的信号:Token 使用率超过 80%、出现性能下降迹象,以及性能下滑。根据上下文组成应用适当的优化技术。

保留边界

摘要时不得丢弃授权信息、用户约束、未解决的阻碍、未通过的检查或来源身份。保留指向完整证据的稳定引用,并区分实际读取的文件和摘要。遵循宿主指令层级和数据保留要求;上下文优化不能改写系统/开发者规则,也不能授权额外的 Agent。提供商的提示词缓存可能会减少计费/计算工作量,但不会增加模型上下文限制。

实用指南

优化决策框架

何时优化:

  • 上下文使用率超过 70%
  • 对话延长时,回复质量下降
  • 长上下文导致成本增加
  • 对话越长,延迟越高

应用哪些方法:

  • 工具输出占主导:观察屏蔽
  • 检索到的文档占主导:摘要或分区
  • 消息历史记录占主导:通过摘要进行压缩
  • 多个部分占主导:组合使用多种策略
性能注意事项

根据测量所得的基线,为特定工作负载设定 Token、延迟和质量目标。本文件未规定固定的缩减幅度、质量损失或缓存命中率目标。

根据实测效果监控并迭代优化策略。

示例

示例 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

指南

  1. 优化前先测量——了解当前状态
  2. 尽可能先进行压缩,再进行屏蔽
  3. 通过保持提示词一致来确保缓存稳定
  4. 在上下文出现问题之前进行分区
  5. 持续监控优化效果
  6. 平衡 Token 节省与质量保留
  7. 在生产规模下测试优化效果
  8. 针对边缘情况实现平稳降级

集成

此技能基于 context-fundamentals 和 context-degradation 构建,并与以下内容相关:

  • multi-agent-patterns - 通过分区实现隔离
  • evaluation - 衡量优化效果
  • memory-systems - 将上下文转移到记忆中

参考资料

内部参考:

  • Optimization Techniques Reference - 详细技术参考

此系列中的相关技能:

  • context-fundamentals - 上下文基础知识
  • context-degradation - 了解何时需要优化
  • evaluation - 衡量优化效果

外部资源:

  • 关于上下文窗口限制的研究
  • KV 缓存优化技术
  • 生产工程指南

技能元数据

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

局限性

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 请勿将输出视为环境专属验证、测试或专家审查的替代品。
  • 如果缺少必要的输入、权限、安全边界或成功标准,请暂停并请求澄清。

评论

支持 Markdown