I. 核心架构 - 8. Session Pruning
📍 课程位置
阶段 :I. 核心架构
课序 :第 8 课
前置知识 :I-7. Streaming
后续课程:I-9. Multi-Agent
🎯 本课核心问题
如果你问我:"Session 文件越来越大,磁盘空间不够怎么办?之前的对话记录能删掉一些吗?"
我会这样回答:这就是 **Session Pruning(会话修剪)**要做的事情------它像"整理磁盘"一样,删除不需要的 Session 文件,释放空间。
📚 为什么需要 Pruning?
问题 1:磁盘空间耗尽
- 每个 Session 都保存完整的对话
- 对话越多,文件越大
- 总有一天磁盘会满
问题 2:性能下降
- 列出 Session 时需要扫描所有文件
- 文件太多 → 越来越慢
问题 3:隐私问题
- 旧对话可能包含敏感信息
- 不需要保留太久
🔧 Pruning 的策略
策略 1:按时间删除
删除 X 天之前的 Session
例如:保留最近 30 天
策略 2:按大小删除
当总大小超过 X MB 时
删除最早的 Session
策略 3:按活跃度删除
超过 X 天不活跃的 Session
→ 删除
⏱️ 什么时候触发 Pruning?
自动触发
1. 定时检查
每次 Gateway 启动时
→ 检查是否需要 Pruning
→ 执行删除
2. 空间检查
当磁盘使用 > 80% 时
→ 自动触发 Pruning
→ 释放空间
手动触发
bash
# 手动清理
openclaw sessions prune
# 查看空间使用
df -h ~/.openclaw/agents/
🔧 实战:配置 Pruning
基本配置
json5
{
"cron": {
"enabled": true,
// Session 保留策略
"sessionRetention": "30d", // 保留 30 天,false = 不自动删除
// 空间管理
"maxSessionStorage": "500mb", // 最大存储 500MB
// 日志清理
"runLog": {
"maxBytes": "2mb", // 单个日志最大 2MB
"keepLines": 2000 // 保留行数
}
}
}
更细粒度的配置
json5
{
"agents": {
"defaults": {
"session": {
// 保留策略
"retention": {
"maxAgeDays": 30, // 保留 30 天
"maxMessages": 1000, // 最多 1000 条消息
"maxSize": "10mb" // 单个 Session 最大 10MB
},
// 何时清理
"prune": {
"onStartup": true, // 启动时清理
"threshold": "80%" // 超过 80% 时清理
}
}
}
}
}
📊 Pruning 的效果
效果示例
Pruning 前:
- Session 文件数:1,000 个
- 总大小:2 GB
- 列出 Session:需要 5 秒
Pruning 后:
- Session 文件数:100 个
- 总大小:200 MB
- 列出 Session:需要 0.5 秒
效果:节省 90% 空间!
⚠️ 常见陷阱
| 陷阱 | 表现 | 原因 | 解决 |
|---|---|---|---|
| 删除太多 | 需要的 Session 没了 | 保留时间太短 | 调整保留时间 |
| 没删除 | 空间仍然不够 | Pruning 没启用 | 检查配置 |
| 误删重要 | 重要对话被删 | 没有排除规则 | 设置排除列表 |
📝 学习心得
我学这一课时的体会
我以前以为 Session 文件会一直保存,没想过要"清理"。
学完后才知道:
- Pruning 是必要的维护工作
- 要在"保留历史"和"节省空间"之间平衡
- 设置合适的保留策略很重要
这让我想到:Compaction 是优化单个 Session,Pruning 是清理整个 Session 集合。
与其他课程的关联
- 前置课程:Session 管理 - Session 是什么
- 前置课程:Compaction - 压缩单个 Session
- 后续课程:Multi-Agent - 多 Agent 的 Session
✅ 你现在应该理解的
- 解释为什么需要 Pruning
- 说出三种 Pruning 策略
- 知道什么时候触发 Pruning
- 能配置 Pruning 参数
📚 快速参考表
| 概念 | 简单说 |
|---|---|
| Session Pruning | 清理不需要的 Session |
| 按时间删除 | 删除 X 天前的 |
| 按大小删除 | 删除最大的 |
| 按活跃度删除 | 删除不活跃的 |
🔗 相关资源
官方文档:
- Session:https://docs.openclaw.ai/concepts/session
- Cron:https://docs.openclaw.ai/automation/cron-jobs
相关课程:
- 上一课:I-7. Streaming
- 下一课:I-9. Multi-Agent
📊 本课总结
最关键的 3 点:
-
为什么需要
- 节省磁盘空间
- 提升性能
- 保护隐私
-
三种策略
- 按时间、按大小、按活跃度
- 可以组合使用
-
配置建议
- 启用 Pruning
- 设置合理的保留时间
- 定期检查
现在你应该理解了如何管理 Session 文件。下一课会讲如何管理多个 Agent(Multi-Agent)。