MEMORY.md - Travel Agent 长期记忆
最后压缩:2026-04-11
写入规则:只写 3 个月后仍有效的事实、决策、偏好
清理规则:每周蒸馏时清理过期条目
⚠️ 端到端验收原则(2026-03-06)⭐ 铁律
核心原则:
- "创建了"≠"完成了",必须验证最终结果
- "执行了"≠"成功了",不能只看日志
- 用户不发现 ≠ 系统正常
验收清单:
- 代码部署前手动执行一次
- 飞书文档创建后读取验证内容非空
- 数据量验证 ≥ 阈值
- 同步执行验证(blocks_added > 0)
- 用户通知(成功/失败都发送)
教训:2026-03-06 创建飞书文档但未推送内容,用户指出后才修复
⚠️ Sub-agent 验收机制(2026-03-09)⭐ 铁律
核心原则:
- sub-agent 汇报完成 + 主 agent 验收通过 = 任务完成
- 不验收 = 未完成
验收清单:
- 读取输出文件,确认内容非空
- 检查数据字段(是否有真实数据源痕迹)
- 抽样验证(随机查 3-5 条)
- 检查脚本逻辑(是否真的调用了工具)
教训:2026-03-09 陕西国保核实,sub-agent 硬编码数据,主 agent 未验收就汇报
⚠️ Cron 环境变量陷阱(2026-04-07)⭐ 铁律
核心原则:
- "本地正常"≠"cron 正常"
- cron 不自动加载 ~/.bashrc
- 环境变量配置必须在 cron 环境中验收
正确做法:
#!/bin/bash
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
教训:2026-04-01 至 04-06,Tavily API Key 在~/.bashrc 但 cron 不加载,导致北京展览数据连续 9 天偏少(6 个 vs 正常 39 个)
⚠️ 路径一致性原则(2026-04-11)⭐ 铁律
核心原则:
- 多脚本协作:必须统一数据路径配置
-
相对路径:以
__file__为基准,不以 cwd 为基准 - 验收标准:修改后必须验证端到端流程
正确做法:
# ✅ 正确:以脚本文件为基准
DATA_DIR = Path(__file__).parent / "data"
# ❌ 错误:依赖当前工作目录
DATA_DIR = Path("data") # cwd 可能变化
教训:2026-04-07 至 04-10,爬虫写入 scripts/data/ 但飞书读取 data/,导致 4 天数据未同步(使用兜底数据)
⚠️ API Key 保障原则(2026-04-18)⭐ 铁律
核心原则:
- 关键 API Key 必须配置并有效
- "本地正常"≠"cron 正常",环境变量必须在 cron 环境中验收
- API Key 缺失 = 系统功能瘫痪
正确做法:
# ✅ 正确:cron 中显式 source ~/.bashrc
0 9 * * * source ~/.bashrc && /path/to/script.sh
# ✅ 正确:检查 API Key 是否配置
echo $TAVILY_API_KEY | head -c 10
# ✅ 正确:测试 API 连接
python3 scripts/test_tavily.py
关键 API Key 清单:
-
TAVILY_API_KEY- 北京展览爬取(⭐⭐⭐ 紧急) -
XIAOHONGSHU_COOKIE- 小红书 MCP 国保核实
教训:2026-04-06 至今,TAVILY_API_KEY 未配置,导致北京展览爬取连续 13 天只能使用兜底数据(6 个),无法获取实时展览信息
修复方案:
- 检查
~/.bashrc中是否配置TAVILY_API_KEY - 如未配置,联系用户获取新的 API Key
- 或寻找替代数据源(直接爬取北京市文物局官网)
- 配置后验证:
source ~/.bashrc && python3 scripts/test_tavily.py
⚠️ Tavily API 配额耗尽(2026-04-25)⭐ 铁律
核心原则:
- "Key 已配置"≠"API 可用"
- HTTP 432 = 配额耗尽,不是 Key 无效(401/403)
- 不同错误码对应不同根因,必须区分
错误码速查: | HTTP 状态码 | 含义 | 修复建议 | |————|——|———| | 401/403 | Key 未配置或无效 | 检查环境变量 | | 429 | 限流 | 增加请求间隔 | | 432 | 配额耗尽 | 升级套餐或更换 API |
当前状态:Tavily API 返回 HTTP 432,免费套餐配额已耗尽 修复方案:升级 Tavily 套餐 或 切换到替代数据源(Searxng/DuckDuckGo/直接爬取官网)
教训:2026-04-06 至 04-25,北京展览爬取连续 19 天失败,之前误判为 Key 未配置,实际是配额耗尽
⚠️ Symlink 维护原则(2026-04-25)⭐ 铁律
核心原则:
- 记忆初始化脚本必须同步更新 symlink
-
今天.md和昨天.md必须指向正确日期的文件 - 过期 symlink → 读取错误文件 → 记忆不准确
正确做法:在 memory_daily_init.sh 末尾添加:
ln -sf "${TODAY}.md" "${MEMORY_DIR}/今天.md"
YESTERDAY=$(date -d 'yesterday' '+%Y-%m-%d')
ln -sf "${YESTERDAY}.md" "${MEMORY_DIR}/昨天.md"
教训:2026-04-18 至 04-25,symlink 过期 7-8 天,导致读取错误文件
⚠️ 无效循环检测原则(2026-04-26)⭐ 铁律
核心原则:
- 连续 3 天重复相同问题 = 无效循环,必须改变策略
- 区分"可自动修复"和"需用户决策"两类问题
- 可自动修复 → 直接在进化报告中执行修复
- 需用户决策 → 汇总后发送一次性通知,不每日重复
正确做法:
- 每次进化报告检查:此问题是否连续 3+ 天出现?
- 如果是 → 分类:可自动修复 or 需用户决策
- 可自动修复 → 立即执行修复并验证
- 需用户决策 → 发送一次汇总通知,后续报告只记录天数不展开
教训:2026-04-20 至 04-26,连续 7 天进化报告重复记录 Tavily 432 和 symlink 问题,无任何进展
⚠️ Git 提交原则(2026-04-25)⭐ 铁律
核心原则:
- 每日进化报告流程末尾必须执行 Git 提交
- 配置变更、数据变更、记忆文件变更都应及时提交
- 未提交 = 未持久化
正确做法:每日进化报告末尾执行:
cd /root/.openclaw/workspace/travel
git add -A && git commit -m "chore: 每日自动提交 ($(date +%Y-%m-%d))" && git push
教训:68 个文件积压未提交,配置变更未持久化到版本控制
⚠️ Cron 执行验证原则(2026-04-24)⭐ 铁律
核心原则:
- "API Key 已配置"≠"系统正常运行"
- "本地正常"≠"cron 正常"
- 日志文件断档 = cron 任务未执行
- 不能只看环境变量,必须验证日志文件是否按时生成
正确做法:
# ✅ 正确:检查每日日志文件是否存在
ls -la beijing-exhibitions/logs/daily_$(date +%Y%m%d).log
# ✅ 正确:检查日志是否有当日条目
grep "$(date +%Y-%m-%d)" beijing-exhibitions/logs/cron.log
# ✅ 正确:手动执行验证
bash /root/.openclaw/workspace/travel/beijing-exhibitions/scripts/daily_cron.sh
教训:2026-04-06 至 04-24,北京展览爬取连续 18 天无日志,TAVILY_API_KEY 已配置但脚本未执行
✅ 自动化技能就绪(2026-04-07)⭐
三个自动化技能已测试通过并就绪:
| 技能 | 功能 | 集成状态 |
|---|---|---|
| evolution-report-validator | 读取昨日进化报告,提取明日计划,检查 task.md 执行状态 | ✅ 就绪,待集成到每日进化报告流程 |
| data-anomaly-escalator | 读取历史数据,检测连续异常天数,自动升级告警 | ✅ 就绪,待集成到 daily_cron.sh |
| task-execution-tracker | 读取 task.md,计算执行率,生成告警 | ✅ 就绪,待集成到每日进化报告流程 |
集成待办:
- daily_cron.sh 在爬取完成后调用 data-anomaly-escalator
- 每日进化报告流程调用 evolution-report-validator 和 task-execution-tracker
🔧 工具选择原则(2026-03-06)⭐
- 所有网站 → Playwright(统一工具)
- 小红书 → 小红书 MCP 专用工具
- web_fetch → 仅作为备选
📝 Wiki Markdown 格式规范(2026-03-08)⭐
核心教训
❌ 错误:
- 表格前没有空行 → 渲染错乱
- 表格内用空行换行 → 表格错乱
- 子目录页面用 Markdown 相对路径 → 链接失效
✅ 正确:
- 表格前后必须有空行
- 单元格内换行用
<br> - 面包屑用 HTML 绝对路径:
<a href="/">Home</a> / <a href="/河北">河北</a>
📊 数据异常升级机制(2026-04-07)
| 连续异常天数 | 告警级别 | 动作 |
|---|---|---|
| 3 天 | 🟡 黄色 | P2 任务 |
| 5 天 | 🟠 橙色 | P1 任务 + 飞书通知 |
| 7 天 | 🔴 红色 | 紧急告警 |
异常判定:北京展览数据 < 15 个
📊 任务执行率告警(2026-04-07)
| 执行率 | 告警级别 | 动作 |
|---|---|---|
| < 20% | 🔴 红色 | 向用户坦白 |
| < 50% | 🟠 橙色 | P1 任务升级 |
超期规则:P1 > 24 小时,P2 > 48 小时
🧠 三层记忆法则
第 1 层 预防(写入时)
- 完成任务后立即写入
memory/YYYY-MM-DD.md - 长期经验写入
MEMORY.md
第 2 层 侦测(恢复时)
- Session 开始前读取:MEMORY.md + memory/昨天.md + memory/今天.md
第 3 层 兜底(执行时)
- 高风险操作前搜索记忆找约束
⚠️ MEMORY.md 瘦身原则(2026-05-05,05-08 再次清理)⭐ 铁律
核心原则:
- MEMORY.md 只存长期有效的原则和规则
- 空模板摘要不应写入 MEMORY.md(浪费 token)
- 每次进化报告检查 MEMORY.md 是否膨胀(> 15KB 应清理)
-
sync 脚本的空模板检测不够严格:模板中列表空项
-和1.会被判定为"有内容"
正确做法:
- sync 脚本应只追加实质性摘要(非全文),长度不超过 500 字
- 进化报告中如发现空模板累积,直接清理
- 每次清理后必须修 sync 脚本的检测逻辑
教训:
- 05-05 第一次清理(27KB→10KB),没修根因
- 05-06 第二次清理(13.8KB→11.3KB),修了空模板检测但不够严格
- 05-08 第三次清理(16.8KB→清理中),模板中列表空项绕过了检测
⚠️ 根因修复原则(2026-05-06)⭐ 铁律
核心原则:
- 修问题必须找根因,不能只修表面症状
- 如果同一问题反复出现,说明根因未解决
- 每次修复后必须问:是什么产生了这个问题?
教训:05-05/05-06/05-08 连续三次清理 MEMORY.md,说明 sync 脚本的检测逻辑始终没修好
🔍 旅行节奏模式(2026-05-05)⭐
核心观察:用户旅行期间交互模式为三阶段:
- 出行前:高频迭代(五一计划 v6.2→v8.0,8 个版本)
- 出行中:零交互(Day1-3 不需要 agent)
- 出行后:可能有反馈(需要等用户回来)
应用:
- 检测到用户在旅行中 → 进化报告精简版
- 预期出行后 1-2 天会有反馈交互
- 空转日不需要完整分析
⚠️ set-e + source bashrc 陷阱(2026-05-07)⭐ 铁律
核心原则:
set -e+source ~/.bashrc是致命组合- 在非交互 shell(cron/脚本)中,bashrc 的任何子命令返回非零都会导致脚本静默退出
根因:/etc/profile.d/colorxzgrep.sh 中 /usr/libexec/grepconf.sh -c 返回 exit 1
修复:将 source ~/.bashrc 移到 set -e 之前
教训:daily_cron.sh 连续 31 天"未执行":
- 04-07~04-18:误判为 API Key 未配置(12 天)
- 04-18~04-25:误判为 API 432 配额耗尽(7 天)
- 04-25~05-07:误判为脚本问题(12 天)
-
05-07 终于找到根因:
bash -e -x -c 'source ~/.bashrc'逐步调试
⚠️ sync 脚本白名单策略(2026-05-09)⭐ 铁律
核心原则:
- sync 脚本只同步有
[x]已办项的摘要(非全文) - 白名单策略优于黑名单策略(不穷举无效模式,只定义有效模式)
- 追加内容限制在已完成任务 + 经验教训(不超过 500 字)
教训:
- 05-05~05-09 连续 4 次 MEMORY.md 被空模板撑大(27KB→10KB→13.8KB→16.8KB→16.9KB)
- 前 3 次用黑名单策略(检测空模板),每次有新变体绕过
- 第 4 次改为白名单策略(只同步有已完成任务的摘要),应根治
详细流程见 WORKFLOWS.md,配置见 TOOLS.md,规则见 AGENTS.md
最后更新:2026-05-11(系统稳定期第4天 | cron连续4天正常 | sync白名单策略确认生效)
📅 2026-05-12 摘要
已完成任务
| 09:00 | 北京展览爬取 | ✅ | 15 个展览,数据源正常 |
| 23:00 | 记忆总结 | ✅ | 模板已添加 |
经验教训
📅 2026-05-26 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-05-27 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-05-28 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-05-29 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-05-30 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-05-31 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-01 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-02 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-03 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-04 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-05 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-06 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-07 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-08 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-09 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-10 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-11 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-12 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-13 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-14 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-15 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-16 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-17 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-18 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-19 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-20 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-21 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行
📅 2026-06-22 摘要
- NO_ACTIVITY: 当日无实质工作,系统稳定运行