让 AI 记住一切:OpenClaw 自我进化实录

> 从 70% Token 自动压缩到"每日三省吾身",打造一个真正会学习的 AI 助手

---

## 背景

用 OpenClaw 一段时间后,发现两个痛点:

1. **会话太长,Token 爆满** — 聊着聊着就忘了前面的内容

2. **每次重启都是白纸** — 知识没有沉淀,重复问同样的问题

能不能让 AI 自己管理记忆,像人一样"三省吾身"?

折腾了一天,终于搞定了。

---

## 一、Token 自动压缩:70% 就动手

### 问题

OpenClaw 默认的 auto-compaction 是在 context window 接近满载时才触发。但这时候已经太晚了——对话质量下降,响应变慢。

### 解决方案

在 `~/.openclaw/openclaw.json` 中配置:

```json5

compaction: {

  mode: "safeguard",

  reserveTokensFloor: 38400,  // 30% 剩余时强制压缩

  memoryFlush: {

    enabled: true,

    softThresholdTokens: 89600,  // 70% 时先存储记忆

    prompt: "Summarize the conversation history..."

  }

}

```

### 触发顺序

| 阶段 | Token 使用率 | 行为 |

|------|-------------|------|

| 1 | 70% (89600 tokens) | memoryFlush 静默存储重要信息 |

| 2 | 70% 剩余 (38400 tokens) | auto-compaction 强制压缩 |

配合 Heartbeat 每 30 分钟检查,超过 70% 会主动提醒:

```json5

heartbeat: {

  every: "30m",

  prompt: "Read HEARTBEAT.md if it exists..."

}

```

---

## 二、双层记忆体系:快 + 深

### 架构设计

```

┌─────────────────────────────────────────────────┐

│                   用户查询                        │

└─────────────────────┬───────────────────────────┘

                      ▼

┌─────────────────────────────────────────────────┐

│     QMD(短期记忆)                              │

│     • 本地 BM25 关键词搜索                       │

│     • 毫秒级响应                                │

│     • 工作区文件索引                            │

└─────────────────────┬───────────────────────────┘

                      │ 无结果/需语义理解

                      ▼

┌─────────────────────────────────────────────────┐

│     Mem0(长期记忆)                             │

│     • 云端语义向量搜索                           │

│     • 跨会话知识沉淀                            │

│     • 重要决策、经验教训                        │

└─────────────────────────────────────────────────┘

```

### QMD 安装

```bash

# 安装 Bun(如果没装)

powershell -c "irm bun.sh/install.ps1|iex"

# 安装 QMD

bun install -g qmd

# 加入 PATH

# Windows: 添加 C:\Users\{用户}\.bun\bin 到环境变量

```

### 使用方式

```bash

# 更新索引

qmd update "C:\Users\fly\.openclaw\workspace-magic"

# BM25 搜索(无需语义向量)

qmd search "关键词" -c "C:\Users\fly\.openclaw\workspace-magic"

# 查看已索引文件

qmd ls "C:\Users\fly\.openclaw\workspace-magic"

```

### 记忆分类

| 类型 | QMD(短期) | Mem0(长期) |

|------|-----------|-------------|

| 工作区文档 | ✅ 自动索引 | ❌ |

| 临时信息 | ✅ | ❌ |

| 技术知识 | ❌ | ✅ |

| 用户偏好 | ❌ | ✅ |

| 重要决策 | ❌ | ✅ |

| 经验教训 | ✅ 可选 | ✅ |

---

## 三、每日三省吾身:AI 也会反思

### 设计思路

既然 AI 每次会话都是"新"的,那就让它定时"醒过来"检查一下自己。

仿照古人的"三省吾身":

- **晨省**:检查今日计划

- **午省**:进度回顾

- **晚省**:今日总结,存入长期记忆

### 实现

创建 `scripts/self-reflection.py`:

```python

# 三省时间窗口

MORNING_START, MORNING_END = time(6, 0), time(10, 0)   # 晨省

NOON_START, NOON_END = time(12, 0), time(15, 0)       # 午省

EVENING_START, EVENING_END = time(20, 0), time(23, 0) # 晚省

# 检查当前时段,决定是否触发反思

def get_current_period(now):

    current_time = now.time()

    if MORNING_START <= current_time <= MORNING_END:

        return "morning"

    # ...

```

在 `HEARTBEAT.md` 中配置检查流程:

```markdown

## Check Procedure

### Step 1: Check Token Usage

- If usage >= 70%: 提醒用户 /compact

### Step 2: Self-Reflection Check

运行 self-reflection.py,按时段执行反思

### Step 3: Run Task Checker

执行定时任务(QMD更新、每日总结、每周维护)

```

### 工作流程

```

Heartbeat (每30分钟)

    │

    ├── 检查 Token 使用率 >= 70%? → 提醒压缩

    │

    ├── 检查时段

    │   ├── 06:00-10:00 → 晨省(今日计划)

    │   ├── 12:00-15:00 → 午省(进度回顾)

    │   └── 20:00-23:00 → 晚省(总结 + Mem0)

    │

    └── 执行定时任务

        ├── QMD 索引更新(>20h)

        ├── 每日总结(>20h)

        └── 每周维护(~6天)

```

---

## 四、文件结构

```

workspace-magic/

├── AGENTS.md              # 工作区规则

├── SOUL.md                # AI 人格定义

├── USER.md                # 用户信息

├── MEMORY.md              # 长期记忆核心(手动维护)

├── HEARTBEAT.md           # Heartbeat 任务定义

├── scripts/

│   ├── check-tasks.py     # 定时任务检查

│   └── self-reflection.py # 三省系统

└── memory/

    ├── 2026-02-25.md      # 每日日志

    ├── reflection-state.json  # 三省状态

    └── cron-state.json    # 任务状态

```

---

## 五、效果

### 配置生效确认

```bash

$ openclaw config get agents.defaults.compaction

{

  "mode": "safeguard",

  "reserveTokensFloor": 38400,

  "memoryFlush": {

    "enabled": true,

    "softThresholdTokens": 89600

  }

}

$ openclaw config get agents.defaults.heartbeat

{

  "every": "30m",

  "prompt": "Read HEARTBEAT.md if it exists..."

}

```

### 记忆系统状态

| 系统 | 状态 | 数量 |

|------|------|------|

| QMD | ✅ 正常 | 17 个文件索引 |

| Mem0 | ✅ 正常 | 26 条记忆 |

### 三省系统

当前时段会自动检查,在对应时间窗口触发反思任务。

---

## 六、下一步

- [ ] 观察晚省自动总结效果

- [ ] 优化 Mem0 存储质量(自动提取关键信息)

- [ ] 探索更智能的记忆召回策略

---

## 总结

这套系统的核心思想:

1. **Token 管理**:主动出击,70% 就压缩,不要等爆了再救

2. **双层记忆**:快的负责日常,深的负责沉淀

3. **自我进化**:定时反思,让 AI 越用越聪明

OpenClaw 的配置灵活度很高,配合 Heartbeat 和自定义脚本,可以做出很多有趣的东西。

---

*2026-02-25 by Fly @ flys161*

Read more

Web 可访问性最佳实践:构建人人可用的前端界面

Web 可访问性最佳实践:构建人人可用的前端界面 代码如诗,包容如画。让我们用可访问性的理念,构建出人人都能使用的前端界面。 什么是 Web 可访问性? Web 可访问性(Web Accessibility)是指网站、工具和技术能够被所有人使用,包括那些有 disabilities 的人。这意味着无论用户的能力如何,他们都应该能够感知、理解、导航和与 Web 内容交互。 为什么 Web 可访问性很重要? 1. 法律要求:许多国家和地区都有法律法规要求网站必须具有可访问性。 2. 扩大用户群体:约 15% 的世界人口生活有某种形式的 disability,可访问性可以让更多人使用你的网站。 3. SEO 优化:搜索引擎爬虫依赖于可访问性良好的网站结构。 4. 更好的用户体验:可访问性改进通常会使所有用户受益,而不仅仅是那些有 disabilities 的用户。 5. 社会责任:

【测试理论与实践】(十)Web 项目自动化测试实战:从 0 到 1 搭建博客系统 UI 自动化框架

【测试理论与实践】(十)Web 项目自动化测试实战:从 0 到 1 搭建博客系统 UI 自动化框架

目录 前言 一、项目背景与测试规划:先明确 "测什么" 和 "怎么测" 1.1 项目介绍 1.2 测试目标 1.3 测试范围与用例设计 编辑 二、环境搭建:3 步搞定自动化测试前置准备 2.1 安装核心依赖包 2.2 浏览器配置 2.3 项目目录结构设计 三、核心模块开发:封装公共工具,提高代码复用性 3.1 驱动管理与截图工具封装(common/Utils.py) 3.2 代码说明与优化点 四、测试用例开发:

不懂前端也能写 App?Flet (Flutter for Python) 开发跨平台应用实战 (Android/iOS/Web)

不懂前端也能写 App?Flet (Flutter for Python) 开发跨平台应用实战 (Android/iOS/Web)

标签: #Python #Flet #Flutter #跨平台开发 #GUI #移动端开发 🚀 前言:为什么是 Flet? 如果你是 Python 党,你一定会有这样的痛点: 脚本写得很溜,但老板非要个“可视化界面”;或者你想把数据分析结果做成一个手机 App 给客户看。 传统的 Python GUI 库(Tkinter, Qt)在移动端几乎是废的。 Flet 的核心逻辑是: 你负责写 Python(处理数据、逻辑),Flet 负责在后台调用 Flutter 引擎画出漂亮的界面。你不需要懂 CSS 布局,也不需要配置复杂的安卓环境(开发阶段)。 🏗️ 一、 架构原理:Python 怎么指挥 Flutter? Flet 采用的是 Server-Driven