mcpField
C
context-engineering

context-engineering

github.com/itallstartedwithaideaAgent 工作流4490 次安装29 周前更新
代码仓库

关于 context-engineering

context-engineering 是用于管理 Agent 上下文窗口信息的 Agent Skills™ 技能,涵盖相关性评分、压缩、排序、Token 预算和渐进式披露,适用于处理长对话或大型代码库的 Agent。

主要功能

  1. 01上下文相关性评分
  2. 02压缩与优先级排序
  3. 03Token 预算分配
  4. 04渐进式披露
  5. 05回收不再需要的上下文

适用场景

  1. 01控制生产工作负载的 Token 用量
  2. 02在工作流步骤间保留必要状态
  3. 03处理大型代码库
  4. 04减少长对话中的上下文稀释

安装

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

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill context-engineering

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

详细介绍

上下文工程

Agent Skills™ 的一部分,由 googleadsagent.ai™ 提供

描述

上下文工程是一门在尽量减少 Token 消耗的同时,最大限度提升 Agent 输出质量的学科。在每个 Token 都会带来成本和延迟影响的世界里,能否精准筛选进入 Agent 上下文窗口的内容,决定了系统是达到生产级标准,还是昂贵的玩具。这项技能将 googleadsagent.ai™ 平台开创的技术系统化。在该平台上,Buddy™ 通常在 200k Token 的窗口内运行,同时保持领域专家级的准确性。

核心洞见是:上下文并非只是“发送给模型的内容”,而是工作记忆,必须像管理其他系统资源一样,以同等严谨的方式进行工程化处理。优化信息密度、采用结构化加载顺序,以及使用渐进式披露模式,可确保 Agent 在恰当的时刻获得恰当的信息。上下文设计不佳会导致幻觉、指令偏移和成本激增。

这项技能教会 Agent 将上下文视为有限且需要管理的资源:对其进行衡量、压缩、排序,并回收利用。这里的技术适用于 Claude Code、Cursor、Codex 和 Gemini 等框架。

适用场景

  • 对话越长,Agent 的回复质量越差
  • 生产工作负载的 Token 成本超出预算阈值
  • Agent 需要对大型代码库进行推理,同时保持专注
  • 需要注入领域知识,但又不能耗尽整个上下文窗口
  • 多步骤工作流要求在步骤之间仅传递必要状态
  • Agent 因上下文窗口饱和或信息稀释而产生幻觉

工作原理

graph TD
    A[Raw Context Sources] --> B[Relevance Scoring]
    B --> C{Score > Threshold?}
    C -->|Yes| D[Compression Engine]
    C -->|No| E[Context Archive]
    D --> F[Priority Queue]
    F --> G[Token Budget Allocator]
    G --> H[Context Window Assembly]
    H --> I[Agent Execution]
    I --> J[Context Reclamation]
    J --> K{Session Active?}
    K -->|Yes| B
    K -->|No| L[Session Summary → Memory]

上下文生命周期从原始来源开始——文件、先前的消息、工具输出和知识库——这些内容会经过相关性评分。低于阈值的内容会被归档,而非丢弃;如有需要,仍可检索。高相关性内容会进入压缩引擎,在保留语义内容的同时减少 Token 占用。优先队列会根据压缩内容的新近度、重要性和任务相关性进行排序。Token 预算分配器会强制执行硬性限制,确保组装后的上下文窗口不会超过目标预算。Agent 执行完毕后,上下文回收流程会识别后续轮次不再需要的内容。

实现

Token 预算控制:

class ContextBudget {
  constructor(maxTokens = 180000) {
    this.maxTokens = maxTokens;
    this.reservedForOutput = 20000;
    this.reservedForSystem = 5000;
    this.available = maxTokens - this.reservedForOutput - this.reservedForSystem;
    this.allocations = new Map();
  }

  allocate(category, tokens) {
    const currentUsage = this.currentUsage();
    if (currentUsage + tokens > this.available) {
      return this.evictAndAllocate(category, tokens);
    }
    this.allocations.set(category, (this.allocations.get(category) || 0) + tokens);
    return true;
  }

  evictAndAllocate(category, needed) {
    const sorted = [...this.allocations.entries()]
      .sort((a, b) => a[1] - b[1]);
    for (const [cat, tokens] of sorted) {
      if (cat === category) continue;
      this.allocations.delete(cat);
      if (this.available - this.currentUsage() >= needed) break;
    }
    return this.allocate(category, needed);
  }

  currentUsage() {
    return [...this.allocations.values()].reduce((sum, t) => sum + t, 0);
  }
}

渐进式披露模式:

function buildProgressiveContext(task, depth = 0) {
  const layers = [
    { level: 0, content: getTaskSummary(task), tokens: 200 },
    { level: 1, content: getRelevantFiles(task), tokens: 2000 },
    { level: 2, content: getFileContents(task), tokens: 10000 },
    { level: 3, content: getFullDependencyTree(task), tokens: 40000 },
  ];
  return layers
    .filter(layer => layer.level <= depth)
    .map(layer => layer.content);
}

通过摘要压缩上下文:

def compress_context(messages, budget_tokens):
    """Compress conversation history to fit within token budget."""
    total = count_tokens(messages)
    if total <= budget_tokens:
        return messages

    system_msgs = [m for m in messages if m["role"] == "system"]
    recent = messages[-4:]
    middle = messages[len(system_msgs):-4]

    summary = summarize_messages(middle)
    compressed = system_msgs + [{"role": "system", "content": f"Prior conversation summary: {summary}"}] + recent

    if count_tokens(compressed) > budget_tokens:
        return system_msgs + recent[-2:]
    return compressed

最佳实践

  1. 先衡量,再优化 — 在应用压缩技术之前,按类别(系统提示词、对话历史、工具输出、知识)记录 Token 用量。
  2. 为输出预留空间 — 始终为模型回复预留上下文窗口的 15-20%;将窗口用满必然会导致截断。
  3. 优先使用结构化格式,而非叙述性文字 — 与文字描述相比,JSON、YAML 和表格格式的单位 Token 信息密度更高。
  4. 采用渐进式披露 — 从摘要开始,按需加载详细内容;大多数 Agent 轮次只需使用可用上下文的一小部分。
  5. 实施上下文回收 — 每次工具调用后,评估是否仍需保留完整的工具输出,或能否用摘要替代。
  6. 区分热上下文和冷上下文 — 每轮都保留经常引用的内容(系统指令、当前任务);将不常访问的内容归档,以便检索。
  7. 为上下文架构版本化 — 随着提示词和知识库不断演进,记录不同上下文配置对应的质量结果。
  8. 在临界点测试 — 在上下文利用率达到 50%、80% 和 95% 时验证 Agent 的行为,以了解性能退化曲线。

平台兼容性

功能Claude CodeCursorCodexGemini CLI
上下文预算管理✅ 完整支持✅ 完整支持✅ 完整支持✅ 完整支持
渐进式披露✅ 原生支持✅ 通过技能实现✅ 通过提示词实现✅ 通过提示词实现
令牌计数✅ Anthropic API✅ 通过扩展实现✅ tiktoken✅ Vertex API
上下文压缩✅ 完整支持✅ 完整支持✅ 完整支持✅ 完整支持
会话摘要✅ 钩子✅ 规则✅ 指令✅ 系统提示词

Mythos Preview 参考

在 Mythos Preview 评估中,Anthropic 会根据每个文件包含有价值且与漏洞相关逻辑的可能性,为其评分(1–5 分)(例如,仅包含常量的文件与网络解析或身份验证文件的对比)。随后,他们会优先处理评分最高的文件,而不是平均地将预算耗费在每条路径上。

对于任何大型语料库,都可以采用相同的思路:预先评估可能的信息密度,按降序排序,然后按此顺序加载内容或分配任务,让上下文窗口和 Agent 时间优先用于最有潜力的来源。来源:Mythos Preview。

相关技能

  • 认知支架 - 根据注意力合理安排内容位置,最大限度地发挥上下文预算中每个令牌的价值
  • 提示词架构 - 分层提示词设计,与渐进式披露和令牌预算分配相结合
  • Anthropic 工具精通 - 工具结果管理,需要采用感知上下文的缓存和压缩策略

关键词

上下文工程、令牌优化、上下文窗口、信息密度、渐进式披露、上下文压缩、工作记忆、令牌预算、上下文生命周期、Agent 技能


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT 许可证

评论

支持 Markdown