乐于分享
好东西不私藏

openclaw 省钱大法:清理memory

openclaw 省钱大法:清理memory

⚠️ 暴力清理法的风险

如果你的 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" ]; then    find "$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; do        sqlite3 "$db_file" "VACUUM;"        echo "🗄️ 数据库碎片整理完成: $db_file" | tee -a "$LOG_FILE"    doneelse    echo "⚠️ 未检测到 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; 指令会真正帮你把这些碎片的钱省下来。