🧠 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 |