在记忆搜索结果中自动注入新鲜度警告,提示模型验证旧记忆。
OpenClaw 4.2 的 memory 系统返回搜索结果时,不包含 mtimeMs 时间戳信息。模型无法判断一条记忆是昨天创建的还是半年前创建的。
Claude Code 有 memoryFreshnessText 函数,生成类似:
text
> ⚠️ 此记忆 7 天前创建。代码可能已变化,使用前请先 grep 验证。
记忆年龄警告级别警告内容≤ 1 天无警告—2–7 天⚠️ 低记忆较新,但仍建议验证7–30 天⚠️ 中记忆可能过时,使用前验证> 30 天🔴 高记忆严重过时,代码可能已变化, 必须验证
在 ~/.openclaw/openclaw.json 的 agents.defaults.systemPrompt 中添加:
text
## 记忆新鲜度规则
当使用记忆中的信息时,遵循以下规则:
1. **≤ 2 天**:可直接使用
2. **2–7 天**:使用前简单验证(如 grep 文件是否存在)
3. **7–30 天**:使用前必须验证(如 grep 函数是否存在,内容是否匹配)
4. **> 30 天**:标记为过时,**必须**通过实际读取文件验证后使用
记忆可能过时,因为:
- 代码已被修改或删除
- 配置已更改
- 项目架构已重构
在每次记忆写入时,在文件顶部添加创建时间:
markdown
> 创建时间: 2026-03-01
> 最后验证: 2026-03-05
> ⚠️ 7 天前创建,代码可能已变化
## [user] 项目配置
...
修改搜索结果的提示,格式如下:
text
## 相关记忆
- `[user] 项目配置` (创建于 7 天前) ⚠️
描述: 用户偏好使用 pnpm
- `[project] API 设计` (创建于 45 天前) 🔴
描述: REST vs GraphQL 决策
当模型要基于记忆行动时,必须遵循:
text
当记忆信息需要被使用时:
1. 如果记忆指向文件 → `grep -n "关键字" [文件路径]`
2. 如果记忆指向函数/配置 → `rg "函数名|配置名"`
3. 验证匹配后再使用,**不要**直接假设记忆内容仍正确
如果用户明确说"我知道这是旧记忆,直接用",可以跳过验证。