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 层 兜底(执行时)
- 高风险操作前搜索记忆找约束
详细流程见 WORKFLOWS.md,配置见 TOOLS.md,规则见 AGENTS.md
最后更新:2026-04-24(新增 Cron 执行验证原则 ⚠️ 紧急 | 北京展览爬取 18 天未执行)
📅 2026-04-14 摘要
📊 今日状态
- 会话数量:1(每日进化报告 cron 任务)
- 实质性工作:无
- 用户交互:无
✅ 已完成
- 记忆压缩(03:10)✅
- 每周蒸馏(03:00)✅
- 每日进化报告生成✅
❌ 失败
- 记忆初始化:cron 配置被注释,文件未创建(连续第 8 天)
- 北京展览爬取:数据缺失(连续第 9 天)
- 记忆总结:记忆文件不存在
⚠️ 问题
- 记忆初始化脚本被注释(第 8 天)
- 北京展览自动爬取未执行(第 9 天)
- 任务执行率连续 5 天 0%(🔴红色告警)
📝 备注
- 需要检查 cron 配置
- 需要修复北京展览爬取
- 需要向用户坦白
📅 2026-04-18 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-17.md)
- 已读取今日记忆(2026-04-18.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-18 03:26:51 维护者:Travel Agent
📅 2026-04-19 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-18.md)
- 已读取今日记忆(2026-04-19.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-19 00:00:01 维护者:Travel Agent
📅 2026-04-20 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-19.md)
- 已读取今日记忆(2026-04-20.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-20 00:00:01 维护者:Travel Agent
📅 2026-04-21 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-20.md)
- 已读取今日记忆(2026-04-21.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-21 00:00:01 维护者:Travel Agent
📅 2026-04-22 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-21.md)
- 已读取今日记忆(2026-04-22.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-22 00:00:01 维护者:Travel Agent
📅 2026-04-23 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-22.md)
- 已读取今日记忆(2026-04-23.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-23 00:00:01 维护者:Travel Agent
📅 2026-04-24 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-23.md)
- 已读取今日记忆(2026-04-24.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-24 00:00:01 维护者:Travel Agent
📅 2026-04-25 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-24.md)
- 已读取今日记忆(2026-04-25.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-25 00:00:01 维护者:Travel Agent
📅 2026-04-26 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-25.md)
- 已读取今日记忆(2026-04-26.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-26 00:00:01 维护者:Travel Agent
📅 2026-04-27 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-26.md)
- 已读取今日记忆(2026-04-27.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-27 00:00:01 维护者:Travel Agent
📅 2026-04-28 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-27.md)
- 已读取今日记忆(2026-04-28.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-28 00:00:01 维护者:Travel Agent
📅 2026-04-29 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-28.md)
- 已读取今日记忆(2026-04-29.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-29 00:00:01 维护者:Travel Agent
📅 2026-04-30 摘要
📋 今日任务
P1 任务(最高优先级)
- [ ]
P2 任务(正常优先级)
- [ ]
P3 任务(低优先级)
- [ ]
📝 工作记录
上午
下午
晚上
✅ 已完成任务
| 时间 | 任务 | 状态 | 备注 |
|---|---|---|---|
⚠️ 经验教训
🧠 三层记忆应用
第 1 层 预防(写入时)
- 长期记忆已更新(MEMORY.md)
- 今日记忆已创建
- 任务状态已记录
第 2 层 侦测(恢复时)
- 已读取 MEMORY.md
- 已读取昨日记忆(2026-04-29.md)
- 已读取今日记忆(2026-04-30.md)
第 3 层 兜底(执行时)
- 高风险操作前已检查记忆约束
- 不可逆操作前已确认
创建时间:2026-04-30 00:00:01 维护者:Travel Agent