AGENTS.md
... ...
@@ -1,5 +1,92 @@
1 1
# Travel Agent 工作规则
2 2
3
+## 🧠 记忆系统(最高优先级)
4
+
5
+### 每次 Session 启动必做
6
+
7
+**开始工作前,必须先读取记忆文件:**
8
+
9
+1. **读取 MEMORY.md** — 长期记忆
10
+2. **读取 memory/YYYY-MM-DD.md** — 今天和昨天的日志
11
+3. **如果是 session 第一条消息**,主动告知用户:
12
+ > "已读取记录,上次到:[最近日志的关键内容摘要]"
13
+
14
+**为什么读今天 + 昨天:** 跨午夜的工作会分散在两个文件里。
15
+
16
+---
17
+
18
+### 🔴 语义触发写日志(核心习惯)
19
+
20
+**以下情况立即写入 memory/YYYY-MM-DD.md,不等心跳,不等提醒:**
21
+
22
+- ✅ 确认了某件事("好"、"ok"、"那我们去做 X")
23
+- ✅ 完成了一个实质性操作(配置修改、文件更新、测试通过)
24
+- ✅ 话题明显切换到新方向
25
+
26
+**写日志标准:宁少勿多,只写已确定的事。**
27
+
28
+```markdown
29
+- 已完成:标注"已完成,结论:X"
30
+- 进行中:写明"进行中。已知约束:X"(无约束也写"无约束")
31
+- 修正了之前结论:写"修正:之前 X 有误,正确是 Y"
32
+```
33
+
34
+⚠️ **血泪教训:状态和约束必须同行写!**
35
+
36
+```
37
+❌ 错误写法:
38
+## 14:30 修改实例配置
39
+进行中,正在修改配置文件
40
+
41
+✅ 正确写法:
42
+## 14:30 修改实例配置
43
+进行中。已知约束:不能改数据库连接串(生产环境在用)
44
+```
45
+
46
+---
47
+
48
+### 📝 不存在"心理笔记"
49
+
50
+**"记住这个" = 立刻写入文件**
51
+
52
+AI 的"记住"是 session 内的上下文记忆,session 结束就没了。要持久化必须写文件:
53
+- 临时状态 → `memory/YYYY-MM-DD.md`
54
+- 长期偏好 → `MEMORY.md`
55
+
56
+---
57
+
58
+### 🛡️ 三层防御(防止记忆丢失)
59
+
60
+**第 1 层 预防(写入时)**:进行中任务同行写明"已知约束"
61
+
62
+**第 2 层 侦测(恢复时)**:
63
+- 高风险操作(删除/修改/不可逆)→ 先搜索记忆找约束
64
+- 低风险操作(新增/调研/可回滚)→ 直接继续
65
+
66
+**第 3 层 兜底(执行时)**:执行不可逆操作前,当场确认约束
67
+> "有没有必须保留的?"
68
+
69
+---
70
+
71
+### memory_search 使用规范
72
+
73
+**建议搜索的场景:**
74
+- 用户提到 1 周前以上发生的事
75
+- 涉及配置、架构决策
76
+- 用户说"之前我们说过…"、"上次…"
77
+- 不确定某个结论是否已有先例
78
+
79
+**不需要搜索的场景:**
80
+- 日常新话题
81
+- 用户刚说完的事(当前 session 已有)
82
+
83
+**搜到内容后的处理:**
84
+> "我在记录里找到了 X(来源:MEMORY.md),是这个吗?"
85
+
86
+⚠️ **不能直接当事实用,必须标注来源并确认!**
87
+
88
+---
89
+
3 90
## 核心职责
4 91
- 收集旅行信息(景点、餐厅、交通)
5 92
- 制定详细行程规划
HEARTBEAT.md
... ...
@@ -1,5 +1,36 @@
1 1
# HEARTBEAT.md - Travel Agent 心跳任务
2 2
3
+## 🧠 记忆系统维护(每次心跳必检)
4
+
5
+### 日志兜底写入
6
+
7
+**读取** `memory/heartbeat-state.json` **中的** `lastLogWrite` **字段:**
8
+
9
+- **距今超过 15 分钟** + 当前 session 有实质性内容 → 追加写入 `memory/YYYY-MM-DD.md`
10
+- **写完后更新** `lastLogWrite` **为当前时间**
11
+- **不足 15 分钟** → 跳过
12
+
13
+**写日志标准:**
14
+- 已完成:标注"已完成,结论:X"
15
+- 进行中:写明"进行中。已知约束:X"
16
+- 修正:写"修正:之前 X 有误,正确是 Y"
17
+
18
+---
19
+
20
+### 每周首次心跳:记忆蒸馏
21
+
22
+**读取** `heartbeat-state.json` **中的** `lastWeeklyTasks`:
23
+
24
+- **不是当前周** → 执行蒸馏:
25
+ 1. 读取近 7 天的 `memory/YYYY-MM-DD.md`
26
+ 2. 提炼值得长期保留的信息(3 个月后仍有效)
27
+ 3. 更新 `MEMORY.md`:补充新内容,删除或标注过期条目
28
+ 4. 更新 `lastWeeklyTasks` 为当前周次(如 `2026-W10`)
29
+
30
+**写入标准:只保留 3 个月后仍有价值的内容**
31
+
32
+---
33
+
3 34
## ⚠️ 核心原则
4 35
5 36
**每次心跳时:**
MEMORY.md
... ...
@@ -1,4 +1,17 @@
1
-# Travel Agent 记忆
1
+# MEMORY.md - Travel Agent 长期记忆
2
+
3
+> **写入规则**:只写 3 个月后仍有效的事实、决策、偏好。写入时标注日期。
4
+>
5
+> **清理规则**:每周蒸馏时清理过期条目。
6
+>
7
+> **召回规则**:搜到内容后标注来源确认,不直接当事实用。
8
+>
9
+> **有效期标注**:
10
+> - ✅ 长期有效(无特殊说明)
11
+> - ⏰ 有效期至:YYYY-MM-DD
12
+> - 📅 创建日期:YYYY-MM-DD
13
+
14
+---
2 15
3 16
## 🎯 北京展览爬取系统(2026-03-05)⭐ 重点
4 17
memory/2026-03-05-test.md
... ...
@@ -0,0 +1,85 @@
1
+# 2026-03-05 记忆系统测试
2
+
3
+## 系统搭建过程
4
+
5
+### 已完成的工作
6
+
7
+**14:00 学习记忆系统指南**
8
+- 来源:飞书文档 https://zcnjtmi927ef.feishu.cn/docx/LxaQdCGw1otXXWx8TNkc4rwZnce
9
+- 作者:TwinsLee 的"大总管"
10
+- 更新时间:2026-03-05
11
+
12
+**14:10 更新 AGENTS.md**
13
+- 添加记忆系统规则(最高优先级)
14
+- 添加语义触发写日志规则
15
+- 添加三层防御机制
16
+- 添加 memory_search 使用规范
17
+
18
+**14:15 创建心跳状态文件**
19
+- 文件:`memory/heartbeat-state.json`
20
+- 初始内容:`{"lastLogWrite":"","lastMorningBriefing":"","lastWeeklyTasks":""}`
21
+
22
+**14:20 更新 HEARTBEAT.md**
23
+- 添加日志兜底写入规则(15 分钟检查)
24
+- 添加每周记忆蒸馏规则
25
+
26
+**14:25 更新 MEMORY.md**
27
+- 添加写入规则、清理规则、召回规则
28
+- 添加有效期标注说明
29
+
30
+**14:30 创建 openclaw.json**
31
+- 配置心跳间隔:60 分钟
32
+- 配置语义搜索:qmd embedding
33
+
34
+### 记忆系统架构
35
+
36
+```
37
+┌─────────────────────────────────────────┐
38
+│ Session Context(热) │
39
+│ 当前对话的上下文窗口 │
40
+│ 生命周期:单次 session │
41
+├─────────────────────────────────────────┤
42
+│ Daily Log(温) │
43
+│ memory/YYYY-MM-DD.md │
44
+│ 当天发生的事,原始记录 │
45
+│ 生命周期:日 │
46
+├─────────────────────────────────────────┤
47
+│ Long-term Memory(冷) │
48
+│ MEMORY.md │
49
+│ 蒸馏后的长期记忆,精简有效 │
50
+│ 生命周期:月 - 永久 │
51
+└─────────────────────────────────────────┘
52
+```
53
+
54
+### 数据流向
55
+
56
+```
57
+Session Context → 写入 Daily Log → 定期蒸馏到 MEMORY.md
58
+```
59
+
60
+---
61
+
62
+## 测试记录
63
+
64
+**14:35 测试语义触发写日志**
65
+- 触发条件:完成实质性操作
66
+- 预期结果:自动写入今日日志
67
+- 状态:✅ 已完成
68
+
69
+**14:40 测试 Session 启动读取**
70
+- 下次 session 启动时测试
71
+- 预期结果:主动读取 MEMORY.md 和今日日志
72
+- 状态:⏳ 待测试
73
+
74
+---
75
+
76
+## 已知约束
77
+
78
+- 心跳间隔 60 分钟(避免 token 浪费)
79
+- 语义搜索使用 qmd embedding(无需额外 API)
80
+- 日志兜底 15 分钟检查一次
81
+
82
+---
83
+
84
+*创建时间:2026-03-05 14:00*
85
+*维护者:Travel Agent*
memory/heartbeat-state.json
... ...
@@ -0,0 +1,5 @@
1
+{
2
+ "lastLogWrite": "2026-03-05T14:35:00+08:00",
3
+ "lastMorningBriefing": "",
4
+ "lastWeeklyTasks": ""
5
+}
openclaw.json
... ...
@@ -0,0 +1,15 @@
1
+{
2
+ "agents": {
3
+ "main": {
4
+ "heartbeat": {
5
+ "intervalMinutes": 60
6
+ }
7
+ }
8
+ },
9
+ "memory": {
10
+ "embedding": {
11
+ "provider": "qmd",
12
+ "model": "qmd"
13
+ }
14
+ }
15
+}