⚠️ 暴力清理法的风险
如果你的 Agent 有一个核心的 memory.md(比如记录了你的个人偏好、长期项目的 API Key),就算它 30 天没修改,一旦被暴力删掉,你的 Agent 就会瞬间“失忆变智障”。
因此,我们推荐使用下面的清理脚本,只剔除冗余内容,保留核心信息,并自动备份。
🧹 核心清理脚本(针对 memory.md 和 SQLite 数据库)
#!/bin/bash# ================================================# OpenClaw 清理与瘦身脚本(增强版)# ================================================LOG_FILE="$HOME/clean_claw_$(date +'%Y%m%d_%H%M%S').log"echo "=========================================="echo "🔧 OpenClaw 清理与瘦身脚本 (增强版)"echo "=========================================="echo "📝 日志文件: $LOG_FILE"echo ""# ------------------------------------------# 1. 清理 15 天前的历史对话记录 (Sessions)# ------------------------------------------OC_HOME="${OC_HOME:-$HOME/.openclaw}"find "$OC_HOME/agents/"*/sessions -type f \( -name "*.jsonl" -o -name "*.md" \) -mtime +15 -exec rm -f {} \;echo "✅ 已清理 15 天前的历史对话记录 (Sessions)。" | tee -a "$LOG_FILE"# ------------------------------------------# 2. 清理临时下载与浏览器缓存 (保留 7 天)# ------------------------------------------if [ -d "$OC_HOME/workspace/downloads" ]; thenfind "$OC_HOME/workspace/downloads" -type f -mtime +7 -exec rm -f {} \;echo "✅ 已清理 7 天前的临时下载与缓存文件。" | tee -a "$LOG_FILE"fi# ------------------------------------------# 3. 【核心】使用正则表达式为 memory.md 瘦身# Agent 经常会在 memory.md 里塞满废话日志,用 sed 原地剔除# ------------------------------------------find "$OC_HOME/agents" -name "memory.md" | while read -r mem_file; do# 备份一下,防万一cp "$mem_file" "${mem_file}.bak"# 正则规则 1:删除所有以 [Debug]、[Info]、[Log] 开头的系统流水账日志sed -i -E '/^\[(Debug|Info|Log|Error)\].*/d' "$mem_file"# 正则规则 2:删除 Agent 冗长的思考过程标签 (如果有 <think> ... </think> 或 <thinking>...)sed -i -E '/<think>/,/<\/think>/d' "$mem_file"sed -i -E '/<thinking>/,/<\/thinking>/d' "$mem_file"# 正则规则 3:删除连续的空行(把多个空行压缩成一个),保持排版清爽sed -i '/^$/N;/^\n$/D' "$mem_file"echo "🧠 已为记忆文件正则瘦身: $mem_file" | tee -a "$LOG_FILE"done# ------------------------------------------# 4. 压缩与重建 SQLite 向量数据库碎片# 删除数据后,SQLite 往往不会自动释放硬盘空间,必须执行 VACUUM# ------------------------------------------if command -v sqlite3 &> /dev/null; then# 遍历所有存在的 sqlite 数据库执行碎片整理find "$OC_HOME" -name "*.sqlite" | while read -r db_file; dosqlite3 "$db_file" "VACUUM;"echo "🗄️ 数据库碎片整理完成: $db_file" | tee -a "$LOG_FILE"doneelseecho "⚠️ 未检测到 sqlite3 命令,跳过数据库压缩。" | tee -a "$LOG_FILE"fiecho "🎉[$(date +'%Y-%m-%d %H:%M:%S')] 清理与瘦身完毕!" | tee -a "$LOG_FILE"
注:如果你用的是 macOS,由于系统自带的 sed 语法限制,上面的 sed -i -E 需要改为 sed -i '' -E。
🚀 第二步:赋予执行权限并运行
保存脚本文件(例如 ~/clean_claw.sh)后,执行:
chmod +x ~/clean_claw.sh
然后手动运行一次试试效果:
./clean_claw.sh
💡 这套配置有点
1. 保命机制
脚本里加了 cp "$mem_file" "${mem_file}.bak"。在对 memory.md 进行正则大手术前,它会自动生成一个 .bak 备份文件。如果 Agent 某天变笨了,你随时可以恢复。
2. 切除“脑瘤”(正则解析)
Agent 在执行复杂任务时,经常会把报错代码([Error] HTTP 502...)或者碎碎念(<thinking>我应该先搜索...哎呀失败了</thinking>)永久写进 memory.md。
时间久了,这不仅浪费 Token,还会严重干扰它的心智。上面的正则 sed 语句就像手术刀,精准切除了这些无用的占位符,只留下它总结的干货规则。
3. 物理释放空间
很多小白删了聊天记录发现硬盘/Token还是没少,是因为 SQLite 数据库存在 “高水位线”机制(删了数据不释放空间)。
脚本里的 VACUUM; 指令会真正帮你把这些碎片的钱省下来。
夜雨聆风