🧠 Context Engine 上下文引擎

核心概念 记忆系统 OpenClaw

"世界上有一种技术叫 Context Engine,它就像 AI 的短期记忆管理器——当你跟它聊天时,它会帮你记住前面说过的话,但房间只有那么大,所以它得学会该丢什么、该留什么。"

📖 什么是 Context Engine?

Context Engine(上下文引擎)是 AI Agent 的记忆管理核心。它负责收集、组织、压缩和检索上下文信息,确保 Agent 在每轮对话中都能"记得"之前发生过什么。

核心职责

  • 上下文收集 - 从用户输入、历史对话、工具调用结果中提取信息
  • 上下文压缩 - 当对话超出 Token 限制时,智能压缩旧内容
  • 上下文检索 - 从长期记忆中检索相关历史信息
  • 上下文组织 - 按优先级排列信息,确保重要内容不被截断

⚙️ 工作原理

1. 上下文窗口(Context Window)

每个 LLM 都有一个"上下文窗口",就像一个固定大小的缓冲区:

模型 上下文窗口 实际可用
GPT-4o 128K tokens ~100K tokens(约 75,000 汉字)
Claude 3.5 200K tokens ~180K tokens
Gemini Pro 1M tokens ~900K tokens

2. 上下文压缩策略

压缩前(2000 tokens):

用户: 我想了解 Python 的列表操作
AI: Python 列表支持 append, extend, insert, remove, pop...
用户: 那字典呢?
AI: Python 字典是键值对集合,支持 get, keys, values, items...
用户: 好的,那集合呢?
AI: Python 集合是无序不重复元素集,支持 add, remove, union...(后面还有 50 轮对话)

压缩后(500 tokens):

[摘要] 用户询问了 Python 数据结构(列表、字典、集合),讨论了常用方法。
[最近对话] 用户: 那元组和列表有什么区别?

3. RAG 增强

Context Engine 通常结合 RAG(检索增强生成)技术,从外部知识库中检索相关内容:

用户查询: "如何配置 OpenClaw 的定时任务?"
      ↓
检索向量数据库 → 找到 3 个相关文档片段
      ↓
拼接到上下文: "根据文档: OpenClaw 支持 cron 表达式..."
      ↓
LLM 基于增强上下文回答

🔧 OpenClaw 实战应用

OpenClaw Context Engine 架构

OpenClaw 内置了强大的上下文引擎,支持多种上下文管理策略:

# openclaw.yaml
context:
  # 上下文窗口管理
  max_tokens: 128000
  
  # 压缩策略
  compression:
    enabled: true
    strategy: "sliding_window"  # sliding_window | summary | hybrid
    keep_recent: 10  # 保留最近 10 轮对话
    
  # RAG 检索增强
  rag:
    enabled: true
    top_k: 5
    similarity_threshold: 0.7
    
  # 长期记忆
  memory:
    enabled: true
    provider: "tdai"  # 支持 tdai, redis, postgres
    ttl: 2592000  # 30 天

代码示例:自定义上下文处理

// OpenClaw Skills 中的上下文处理
const { context } = require('openclaw');

async function handleUserQuery(userInput) {
    // 1. 获取当前上下文
    const currentContext = await context.get();
    
    // 2. 检索相关记忆
    const memories = await context.memory.search({
        query: userInput,
        limit: 5,
        threshold: 0.75
    });
    
    // 3. 构建增强上下文
    const enhancedContext = {
        messages: [
            ...currentContext.messages.slice(-10),  // 最近 10 轮
            ...memories.map(m => ({ 
                role: 'system', 
                content: `[记忆] ${m.content}` 
            })),
            { role: 'user', content: userInput }
        ]
    };
    
    // 4. 检查是否超限
    const tokenCount = context.countTokens(enhancedContext);
    if (tokenCount > 100000) {
        // 触发压缩
        await context.compress({
            strategy: 'summary',
            keepRecent: 5
        });
    }
    
    return enhancedContext;
}

⚡ 最佳实践

1. 分层上下文管理

  • 即时上下文:最近 5-10 轮对话,保持完整
  • 短期记忆:最近 100 轮,摘要压缩
  • 长期记忆:重要事实和偏好,持久化存储
⚠️ 常见坑点:
  • 不要把所有历史都塞进上下文——会爆 Token
  • 压缩时保留用户明确表达过的偏好
  • 工具调用结果通常很占空间,考虑只保留摘要
  • 定期清理无用的系统提示词

📊 Context Engine 对比

方案 优点 缺点 适用场景
滑动窗口 简单高效,保留原始信息 丢失早期重要信息 短期任务
摘要压缩 保留更多信息概要 摘要可能丢失细节 长对话
RAG 检索 按需检索,不受限 依赖检索质量 知识密集型
混合策略 综合优势 复杂度高 企业级 Agent

🔗 相关链接