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 清单

  1. TAVILY_API_KEY - 北京展览爬取(⭐⭐⭐ 紧急)
  2. XIAOHONGSHU_COOKIE - 小红书 MCP 国保核实

教训:2026-04-06 至今,TAVILY_API_KEY 未配置,导致北京展览爬取连续 13 天只能使用兜底数据(6 个),无法获取实时展览信息

修复方案

  1. 检查 ~/.bashrc 中是否配置 TAVILY_API_KEY
  2. 如未配置,联系用户获取新的 API Key
  3. 或寻找替代数据源(直接爬取北京市文物局官网)
  4. 配置后验证: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 天重复相同问题 = 无效循环,必须改变策略
  • 区分"可自动修复"和"需用户决策"两类问题
  • 可自动修复 → 直接在进化报告中执行修复
  • 需用户决策 → 汇总后发送一次性通知,不每日重复

正确做法

  1. 每次进化报告检查:此问题是否连续 3+ 天出现?
  2. 如果是 → 分类:可自动修复 or 需用户决策
  3. 可自动修复 → 立即执行修复并验证
  4. 需用户决策 → 发送一次汇总通知,后续报告只记录天数不展开

教训: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)⭐

核心教训

❌ 错误

  1. 表格前没有空行 → 渲染错乱
  2. 表格内用空行换行 → 表格错乱
  3. 子目录页面用 Markdown 相对路径 → 链接失效

✅ 正确

  1. 表格前后必须有空行
  2. 单元格内换行用 <br>
  3. 面包屑用 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)⭐

核心观察:用户旅行期间交互模式为三阶段:

  1. 出行前:高频迭代(五一计划 v6.2→v8.0,8 个版本)
  2. 出行中:零交互(Day1-3 不需要 agent)
  3. 出行后:可能有反馈(需要等用户回来)

应用

  • 检测到用户在旅行中 → 进化报告精简版
  • 预期出行后 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 记忆总结 模板已添加

经验教训

  • 用户连续第9天无交互(05-04 至今)
  • 系统稳定期第5天

    1. Cron 展览爬取连续第5天成功(15 个展览)
    2. MEMORY.md 保持 12.4KB,白名单策略连续4天有效

📅 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: 当日无实质工作,系统稳定运行

📅 2026-06-23 摘要

  • NO_ACTIVITY: 当日无实质工作,系统稳定运行

📅 2026-06-24 摘要

  • NO_ACTIVITY: 当日无实质工作,系统稳定运行

📅 2026-06-25 摘要

  • NO_ACTIVITY: 当日无实质工作,系统稳定运行