上下文窗口就像你的短期记忆——容量有限,得精打细算。
上下文窗口(Context Window)是AI Agent的「工作记忆」。OpenClaw提供了一套智能的动态管理机制,让Agent在有限的token空间内,始终保留最相关的信息。这就像你把房间整理得井井有条,东西虽然多,但想找的时候总能找到。
# context-config.yaml
contextManagement:
strategy: "hybrid" # sliding | priority | hybrid
limits:
maxTokens: 120000
reserveForResponse: 8000
emergencyBuffer: 2000
compression:
enabled: true
method: "summary" # summary | truncation | selective
triggerThreshold: 0.8
priority:
levels:
- name: "critical"
minTokens: 100
maxAge: "infinity"
- name: "important"
minTokens: 500
maxAge: "24h"
- name: "expendable"
minTokens: 2000
maxAge: "5m"
# 基于消息数量的滑动窗口
openclaw context set-window --session session_abc123 \
--type sliding \
--max-messages 50 \
--preserve-system true
# 基于token的滑动窗口
openclaw context set-window --session session_abc123 \
--type sliding-tokens \
--max-tokens 80000 \
--overlap 1000
# 启用自动压缩
openclaw context enable-compression --session session_abc123 \
--method summary \
--threshold 0.8
# 手动触发压缩
openclaw context compress --session session_abc123 \
--target-ratio 0.5
# 查看压缩效果
openclaw context stats --session session_abc123
# 输出:
# 压缩前: 95,000 tokens (79% 使用率)
# 压缩后: 52,000 tokens (43% 使用率)
# 压缩比: 45.3%
# 保留: 12 critical + 28 important messages
| 场景 | 推荐策略 |
|---|---|
| 短对话(客服) | sliding |
| 长任务(编程) | priority |
| 复杂推理(研究) | hybrid |
| 流式处理(监控) | ring-buffer |
const { OpenClawClient } = require('@openclaw/sdk');
async function smartCompress(sessionId) {
const client = new OpenClawClient();
// 1. 获取当前上下文状态
const stats = await client.context.getStats(sessionId);
if (stats.usageRatio < 0.7) {
console.log('使用率低于70%,无需压缩');
return;
}
// 2. 按优先级分层处理
const messages = await client.context.getMessages(sessionId);
const critical = messages.filter(m => m.priority === 'critical');
const important = messages.filter(m => m.priority === 'important');
const normal = messages.filter(m => m.priority === 'normal');
const expendable = messages.filter(m => m.priority === 'expendable');
// 3. 保留所有critical和important,压缩normal,删除expendable
const compressed = await client.context.compress(sessionId, {
keep: [...critical, ...important],
compress: normal,
remove: expendable,
summaryModel: 'claude-3-haiku', // 用小模型做摘要
preserveKeyPhrases: true
});
console.log(`压缩完成: ${stats.totalTokens} → ${compressed.totalTokens}`);
return compressed;
}
async function adaptiveWindow(sessionId, taskComplexity) {
const client = new OpenClawClient();
// 根据任务复杂度动态调整
const config = {
simple: { maxTokens: 40000, compression: false },
moderate: { maxTokens: 80000, compression: 'summary' },
complex: { maxTokens: 120000, compression: 'summary' },
research: { maxTokens: 180000, compression: 'hybrid' }
};
const setting = config[taskComplexity] || config.moderate;
await client.context.configure(sessionId, {
maxTokens: setting.maxTokens,
compression: {
enabled: !!setting.compression,
method: setting.compression || 'none',
autoTrigger: true,
threshold: 0.85
}
});
console.log(`上下文已调整为 ${taskComplexity} 模式`);
}
📅 更新时间:2026-05-11 | 📖 更多OpenClaw教程请访问 工具教程索引