Logo
热心市民王先生

技术原理核心

Progressive Disclosure ContextEngine 分层加载

深入分析动态上下文载入的核心技术原理,包括Progressive Disclosure、分层加载、ContextEngine架构

1. Progressive Disclosure(渐进式披露)

1.1 概念起源

Progressive Disclosure源自UI/UX设计领域,核心思想是:只在用户需要时展示相关信息,隐藏复杂性直到真正需要。这一原则被成功迁移到AI Agent的上下文管理中。

1.2 在LLM中的应用

传统方式(Monolithic Loading):

System Prompt 加载全部内容:
├── 所有Agent定义 (800+ tokens)
├── 所有Skills描述 (5,000+ tokens)
├── 所有Tools Schema (3,000+ tokens)
├── 所有MCP服务器 (2,000+ tokens)
├── 项目文件 (8,000+ tokens)
└── 总计: 18,000+ tokens (每轮都加载)

Progressive Disclosure方式:

第一层 - 导航层 (Navigation):
├── Agent核心身份 (< 500 tokens)
├── 可用能力摘要 (200 tokens)
└── 如何获取更多信息 (100 tokens)
    ↓ 按需加载
第二层 - 技能层 (Skills):
├── 当Agent决定使用某技能时加载
└── 仅加载相关技能的完整定义
    ↓ 按需加载
第三层 - 执行层 (Execution):
├── 具体的Tool Schema
├── 相关代码片段
└── 记忆详情

1.3 核心优势

  • Token效率:简单任务仅需2K tokens,复杂任务按需扩展到5-8K,相比传统方式节省90%+
  • 信号噪声比:减少无关信息干扰,提高关键指令的可见性
  • 模块化:各层独立管理,便于维护和更新

2. 分层上下文加载(Hierarchical Context Loading)

2.1 三层架构模型

flowchart TB
    subgraph L1["第一层: Navigation / 导航层"]
        A1[Agent核心身份]
        A2[能力目录摘要]
        A3[动态加载指引]
    end
    
    subgraph L2["第二层: Skills / 技能层"]
        B1[技能名称列表]
        B2[技能触发条件]
        B3[按需: 技能详细定义]
    end
    
    subgraph L3["第三层: Agents / 执行层"]
        C1[工具完整Schema]
        C2[MCP服务器描述]
        C3[记忆具体内容]
        C4[项目文件详情]
    end
    
    L1 -->|当需要技能详情时| L2
    L2 -->|当决定使用工具时| L3

2.2 各层职责

层级内容Token预算加载策略
L1-导航层Agent身份、能力摘要、加载指引< 1K始终加载
L2-技能层技能列表、触发条件、按需详情1-3K动态载入
L3-执行层工具Schema、记忆详情、代码按需即时加载

2.3 实际案例

William Zujkowski的实践表明:

  • 传统方式:150K tokens/会话,成本$4.50
  • 分层加载:2K tokens/简单任务,5-8K tokens/复杂任务,成本$0.06
  • 节省比例:98%的token使用量,同时保持代码库上下文的完整性

3. OpenClaw ContextEngine架构深度解析

3.1 历史演进

2026.3.7之前:硬编码的Sliding-Window Compaction(滑动窗口压缩)

  • 对话过长时自动摘要旧消息
  • 优点:简单、自动
  • 缺点:单一策略、无法跨会话记忆、摘要会丢失细节

2026.3.7之后:可插拔的ContextEngine插件架构

3.2 9层System Prompt架构

OpenClaw采用了高度结构化的System Prompt构建机制:

flowchart LR
    subgraph SP["System Prompt 构建流程"]
        direction TB
        L1[Layer 1: Framework Rules] --> L2[Layer 2: Agent Identity]
        L2 --> L3[Layer 3: Tool Definitions]
        L3 --> L4[Layer 4: Skills Registry]
        L4 --> L5[Layer 5: Workspace Context]
        L5 --> L6[Layer 6: Memory Injection]
        L6 --> L7[Layer 7: Runtime State]
        L7 --> L8[Layer 8: User Preferences]
        L8 --> L9[Layer 9: Session Context]
    end
层级内容可动态加载
1框架规则(安全、输出格式)❌ 必须始终存在
2Agent身份、目标、行为准则❌ 核心身份不可变
3可用工具列表及Schema✅ 可按需加载
4技能注册表及描述✅ 分层加载
5工作区文件、代码片段✅ 按需检索
6长期记忆、会话记忆✅ 动态注入
7运行时信息(时间、环境)❌ 自动注入
8用户偏好设置✅ 按需加载
9当前会话上下文❌ 自动管理

3.3 ContextEngine插件接口

OpenClaw将上下文管理提取为标准化接口:

// ContextEngine 核心接口(概念性)
interface ContextEngine {
  // 组装进入LLM的上下文
  assembleContext(request: ContextRequest): Promise<ContextAssembly>;
  
  // 管理会话历史
  manageHistory(history: Message[]): Promise<Message[]>;
  
  // 处理token预算
  enforceBudget(assembly: ContextAssembly, maxTokens: number): ContextAssembly;
  
  // 跨会话记忆管理
  persistMemory(sessionId: string, keyInfo: any): Promise<void>;
  loadMemory(sessionId: string): Promise<any>;
}

// 内置引擎
class LegacyContextEngine implements ContextEngine {
  // Sliding-window + Summarization
}

class RAGContextEngine implements ContextEngine {
  // RAG-based context assembly
}

// 第三方插件可实现自定义逻辑
class CustomContextEngine implements ContextEngine {
  // 自定义策略
}

3.4 关键特性

  1. 插件化设计:ContextEngine作为插件槽位,支持自定义实现
  2. 延迟解析plugins.slots.contextEngine配置指定使用哪个引擎
  3. 向后兼容:Legacy引擎继续支持现有行为

3.5 已知问题

根据GitHub Issue #40232和#39725,2026.3.7版本存在启动时序问题:

  • Context Engine插件可能在Agent Bootstrap之前解析
  • 导致Context engine "xxx" is not registered错误
  • 影响使用第三方ContextEngine(如lossless-claw)的场景

4. 动态载入的核心机制

4.1 Lazy Loading Pattern

sequenceDiagram
    participant User
    participant Agent
    participant ContextManager
    participant ToolRegistry
    
    User->>Agent: "帮我分析这段代码"
    Agent->>ContextManager: 获取基础上下文
    ContextManager-->>Agent: 核心身份 + 能力摘要 (1K tokens)
    
    Agent->>Agent: 分析意图 → 需要代码分析工具
    Agent->>ContextManager: 请求加载"code-analysis"工具
    ContextManager->>ToolRegistry: 获取工具Schema
    ToolRegistry-->>ContextManager: 完整Schema + 示例
    ContextManager-->>Agent: 增量上下文 (+2K tokens)
    
    Agent->>Agent: 执行代码分析
    Agent-->>User: 返回分析结果

4.2 智能摘要与检索

Summarization策略

  • 将远距离的对话历史压缩为摘要
  • 保留关键决策点和结果
  • 丢弃中间推理过程

RAG增强

  • 使用向量检索动态获取相关知识
  • 仅在需要时注入检索结果
  • 避免预加载全部知识库

4.3 Token预算管理

flowchart TD
    A[开始组装上下文] --> B{当前Token数 > 预算?}
    B -->|否| C[返回完整上下文]
    B -->|是| D[应用压缩策略]
    D --> E[优先级排序]
    E --> F[摘要化低优先级内容]
    F --> G[移除可动态加载项]
    G --> B

优先级策略

  1. P0 - 不可移除:核心身份、安全规则、当前用户消息
  2. P1 - 尽量保留:最近对话历史、关键记忆
  3. P2 - 可摘要:早期对话、次要记忆
  4. P3 - 可动态加载:工具Schema、技能定义、参考文档

参考资料