关注

OpenClaw 记忆维护:自动整理与归档

摘要

本文详细介绍 OpenClaw 记忆系统的维护策略与自动化实践。从记忆生命周期管理、自动归档机制、定期清理策略到 Heartbeat 驱动的维护流程,全面解析如何保持记忆系统的高效运行。通过实际案例演示记忆整理、归档、清理的完整流程,帮助开发者构建自维护的智能记忆系统,避免记忆膨胀和性能下降。🧹


1. 引言 - 为什么需要记忆维护?

1.1 记忆膨胀问题

问题表现影响
文件过大MEMORY.md 超过 100KB加载变慢,Token 消耗增加
日志堆积每日日志累积过多搜索效率下降
信息冗余重复或过时信息干扰有效信息检索
上下文污染无关信息混入AI 回复质量下降

1.2 记忆生命周期

创建记忆

活跃使用

定期检查

是否重要?

保留/升级

是否过时?

归档/删除

继续保留

记忆清理完成

1.3 维护目标

目标说明指标
控制大小保持记忆文件合理大小MEMORY.md < 50KB
提高效率优化搜索和加载速度搜索响应 < 1s
保证质量确保记忆内容准确有效有效信息率 > 80%
自动化减少人工干预自动化率 > 90%

2. 记忆分类与优先级

2.1 记忆分类体系

记忆分类

核心记忆

用户信息

项目上下文

关键决策

重要记忆

用户偏好

解决方案

里程碑事件

一般记忆

日常任务

临时记录

会话摘要

临时记忆

调试信息

临时数据

测试记录

2.2 优先级定义

优先级类型保留策略示例
P0 核心永久保留始终保留用户姓名、项目目标
P1 重要长期保留定期审查用户偏好、重要决策
P2 一般中期保留30天后归档日常任务、问题记录
P3 临时短期保留7天后删除调试日志、临时数据

2.3 记忆标记规范

# MEMORY.md

## [P0] 用户信息
- 姓名:张龙生
- 昵称:老大

## [P1] 用户偏好
- 表达风格:简洁

## [P2] 近期任务
- 完成第41-43篇文章

## [P3] 临时记录
- 今日调试了 Gateway 配置

3. 自动归档机制

3.1 归档触发条件

触发条件说明动作
时间触发日志超过 7 天移动到 archive/
大小触发MEMORY.md 超过 50KB提取非核心内容
数量触发日志文件超过 30 个批量归档
手动触发用户请求归档执行归档流程

3.2 归档流程

核心记忆

重要记忆

一般记忆

临时记忆

触发归档

扫描记忆文件

分类记忆内容

内容类型

保留在 MEMORY.md

审查后决定

移动到归档

标记删除

是否仍重要?

创建归档文件

清理列表

更新索引

归档完成

3.3 归档目录结构

memory/
├── MEMORY.md              # 长期记忆(核心)
├── 2026-04-13.md          # 今日日志
├── 2026-04-12.md          # 昨日日志
├── ...
├── archive/               # 归档目录
│   ├── 2026-Q1/           # 按季度归档
│   │   ├── summary.md     # 季度摘要
│   │   └── logs/          # 日志文件
│   │       ├── 2026-01-*.md
│   │       ├── 2026-02-*.md
│   │       └── 2026-03-*.md
│   └── 2026-Q2/
│       └── ...
└── .archive-index.json    # 归档索引

3.4 归档索引文件

{
  "version": "1.0",
  "lastUpdated": "2026-04-13T17:00:00Z",
  "archives": [
    {
      "period": "2026-Q1",
      "files": 90,
      "size": "125KB",
      "summary": "完成文章1-40篇,用户偏好稳定"
    }
  ],
  "statistics": {
    "totalArchived": 90,
    "totalSize": "125KB",
    "oldestDate": "2026-01-01",
    "newestDate": "2026-03-31"
  }
}

4. 定期清理策略

4.1 清理规则

规则条件动作
日志清理超过 30 天删除(已归档)
临时记忆超过 7 天删除
重复信息检测到重复合并去重
过时信息标记为过时删除或更新

4.2 清理流程

启动清理

扫描所有记忆

识别清理目标

生成清理计划

需要确认?

请求用户确认

执行清理

用户同意?

跳过该项

更新记忆文件

记录清理日志

清理完成

4.3 清理脚本示例

#!/bin/bash
# memory_cleanup.sh

MEMORY_DIR="/root/.openclaw/workspace/memory"
ARCHIVE_DIR="$MEMORY_DIR/archive"
RETENTION_DAYS=30

# 创建归档目录
mkdir -p "$ARCHIVE_DIR"

# 归档超过7天的日志
find "$MEMORY_DIR" -name "*.md" -mtime +7 -not -path "$ARCHIVE_DIR/*" -exec mv {} "$ARCHIVE_DIR/" \;

# 删除超过30天的归档
find "$ARCHIVE_DIR" -name "*.md" -mtime +$RETENTION_DAYS -delete

# 更新归档索引
python3 update_archive_index.py

echo "Memory cleanup completed at $(date)"

5. Heartbeat 驱动的维护

5.1 Heartbeat 机制

Heartbeat 是 OpenClaw 的定期检查机制,可用于驱动记忆维护:

# HEARTBEAT.md

# 心跳检查任务

## 记忆维护检查项
- [ ] 检查 MEMORY.md 大小
- [ ] 归档超过7天的日志
- [ ] 清理临时记忆
- [ ] 更新记忆索引
- [ ] 检查重复信息

5.2 维护检查流程

超过 50KB

正常

超过 7 天

正常

超过 7 天

正常

Heartbeat 触发

读取 HEARTBEAT.md

执行检查项

MEMORY.md 大小

执行精简

继续检查

日志数量

执行归档

继续检查

临时记忆

执行清理

检查完成

更新检查时间

5.3 维护状态记录

{
  "lastMaintenance": "2026-04-13T17:00:00Z",
  "checks": {
    "memorySize": {
      "status": "ok",
      "size": "32KB",
      "limit": "50KB"
    },
    "logCount": {
      "status": "ok",
      "count": 5,
      "limit": 7
    },
    "archiveSize": {
      "status": "ok",
      "size": "125KB"
    }
  },
  "actions": [
    {
      "type": "archive",
      "files": 3,
      "timestamp": "2026-04-13T17:00:00Z"
    }
  ]
}

6. 记忆整理最佳实践

6.1 整理原则

原则说明示例
保留核心核心信息不删除用户姓名、项目目标
合并相似合并重复或相似内容多次提到的偏好合并
提取摘要长内容提取关键点任务列表提取摘要
标记状态标记信息状态[已完成]、[已过时]

6.2 整理模板

# MEMORY.md 整理模板

## [P0] 用户信息
<!-- 核心信息,永久保留 -->
- 姓名:
- 昵称:
- 时区:

## [P1] 用户偏好
<!-- 重要偏好,定期审查 -->
- 表达风格:
- 沟通语言:
- 特殊要求:

## [P1] 项目上下文
<!-- 当前项目状态 -->
- 项目名称:
- 当前目标:
- 进度:

## [P2] 重要决策
<!-- 近期重要决策,按时间倒序 -->
- YYYY-MM-DD:决策内容

## [P3] 近期任务
<!-- 近期任务,完成后归档 -->
- [ ] 任务1
- [ ] 任务2

## 归档记录
<!-- 已归档内容的索引 -->
- 2026-Q1:完成文章1-40篇

6.3 自动整理脚本

import re
from datetime import datetime

def organize_memory(memory_content):
    """整理 MEMORY.md 内容"""
    
    # 1. 合并重复的用户偏好
    preferences = extract_preferences(memory_content)
    merged_prefs = merge_duplicates(preferences)
    
    # 2. 提取任务摘要
    tasks = extract_tasks(memory_content)
    task_summary = generate_summary(tasks)
    
    # 3. 标记过时信息
    outdated = find_outdated(memory_content)
    marked = mark_outdated(memory_content, outdated)
    
    # 4. 重新组织结构
    organized = reorganize(marked)
    
    return organized

def merge_duplicates(items):
    """合并重复项"""
    seen = {}
    for item in items:
        key = normalize(item['key'])
        if key in seen:
            # 合并内容
            seen[key]['value'] = item['value']
            seen[key]['updated'] = datetime.now()
        else:
            seen[key] = item
    return list(seen.values())

7. 实战案例

7.1 案例一:季度归档

场景:2026年Q1结束,需要归档所有Q1的日志

步骤

  1. 创建归档目录
mkdir -p memory/archive/2026-Q1/logs
  1. 移动日志文件
mv memory/2026-01-*.md memory/archive/2026-Q1/logs/
mv memory/2026-02-*.md memory/archive/2026-Q1/logs/
mv memory/2026-03-*.md memory/archive/2026-Q1/logs/
  1. 生成季度摘要
# 2026年Q1 摘要

## 项目进度
- 完成文章:40篇
- 完成率:40%

## 重要决策
- 采用5阶段文章结构
- 选择飞书作为主要渠道

## 用户偏好变化
- 确认喜欢简洁表达风格
- 偏好表格+代码块格式

## 统计
- 日志文件:90个
- 总大小:125KB
  1. 更新归档索引
{
  "archives": [
    {
      "period": "2026-Q1",
      "files": 90,
      "summary": "完成文章1-40篇"
    }
  ]
}

7.2 案例二:MEMORY.md 精简

场景:MEMORY.md 超过 50KB,需要精简

精简前

# MEMORY.md (55KB)

## 用户信息
...

## 项目上下文
(包含大量历史任务详情)

## 所有决策记录
(包含90天的所有决策)

## 每日任务列表
(包含所有历史任务)

精简后

# MEMORY.md (28KB)

## [P0] 用户信息
- 姓名:张龙生
- 昵称:老大

## [P1] 项目上下文
- 目标:100篇文章
- 已完成:43篇
- 当前进度:43%

## [P1] 用户偏好
- 表达风格:简洁
- 格式偏好:表格+代码块

## [P1] 近期决策(最近30天)
- 2026-04-10:调整文章结构

## [P2] 当前任务
- [ ] 完成第44-45篇文章

## 归档索引
- 2026-Q1:见 archive/2026-Q1/summary.md

8. 监控与告警

8.1 监控指标

指标阈值告警级别
MEMORY.md 大小> 50KB警告
MEMORY.md 大小> 100KB严重
日志文件数量> 30 个警告
归档目录大小> 1MB警告
重复信息比例> 20%警告

8.2 告警通知

def check_memory_health():
    """检查记忆系统健康状态"""
    alerts = []
    
    # 检查 MEMORY.md 大小
    memory_size = get_file_size("MEMORY.md")
    if memory_size > 100 * 1024:  # 100KB
        alerts.append({
            "level": "critical",
            "message": f"MEMORY.md 超过 100KB ({memory_size/1024:.1f}KB)",
            "action": "立即执行精简"
        })
    elif memory_size > 50 * 1024:  # 50KB
        alerts.append({
            "level": "warning",
            "message": f"MEMORY.md 超过 50KB ({memory_size/1024:.1f}KB)",
            "action": "建议执行精简"
        })
    
    # 检查日志数量
    log_count = count_log_files()
    if log_count > 30:
        alerts.append({
            "level": "warning",
            "message": f"日志文件过多 ({log_count} 个)",
            "action": "建议执行归档"
        })
    
    return alerts

9. 常见问题与解决

Q1:归档后如何检索?

解决方案

  1. 使用 memory_search 会自动搜索归档目录
  2. 查看归档索引快速定位
  3. 使用季度摘要获取概览

Q2:误删重要记忆怎么办?

解决方案

  1. 归档而非直接删除
  2. 保留 30 天缓冲期
  3. 定期备份 MEMORY.md

Q3:如何判断信息是否过时?

解决方案

  1. 检查时间戳
  2. 对比当前上下文
  3. 询问用户确认

10. 总结

10.1 核心要点

要点说明
定期维护通过 Heartbeat 驱动自动维护
分级管理按优先级管理记忆内容
自动归档超过 7 天自动归档日志
定期清理超过 30 天清理归档文件

10.2 维护清单

  • 每周检查 MEMORY.md 大小
  • 每周归档旧日志
  • 每月审查用户偏好
  • 每季度生成摘要
  • 定期备份重要记忆

10.3 下一步

  • 第45篇:OpenClaw 上下文管理:Token 优化策略
  • 第46篇:OpenClaw Browser:浏览器控制入门

参考资料

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/sinat_41617212/article/details/160917887

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--