Skill: whhh1994/tourism-guide-harvester (version 1.5.0)

# Tourism Guide Harvester Skill ## 版本 - **v1.5.0 (2026-04-24):** Phase 4 六步法详细版 + Phase 5 临时文件清理提醒（需用户批准） - **v1.3.0 (2026-04-24):** 新增输出优化规则 - 信息源优先级排序、时间季节权重、攻略提及次数标注、参考攻略原文分平台展示 - **v1.1.0 (2026-04-23):** 小红书优化 - 多排序搜索、JavaScript正文提取、正确分享链接格式 - **v1.0.0 (2026-04-23):** 初始版本 ## 技能描述 从多个旅游平台（小红书、马蜂窝、携程、微信公众号等）获取评分排名最高的旅游攻略，整合输出综合攻略文档。 **v1.3.0 输出优化规则：** - 信息源优先级：小红书 > 微信公众号 > 马蜂窝 > 其他（基础权重 ×1.0 / 0.9 / 0.8 / 0.6） - 时间权重：近一年更新 ×1.0，超一年降权；季节匹配内容 ×1.2（当前春季） - 所有景点/美食/住宿/打卡点标注【共X篇攻略提及】并列出所有来源链接 - 参考攻略原文统一放在报告最后，按平台分组展示 ## 触发词 - 旅游攻略获取 - 攻略抓取 - 多平台攻略整合 - 台州攻略 - 亲子游攻略 --- ## 核心原则 ### 1. Subagent分工原则 - **信息收集工作：** 全部由 subagent 执行 - **Main Agent职责：** 进度汇报、最终总结、整合输出 - **浏览器操作：** Subagent 不能同时操作浏览器，必须按顺序执行 ### 1.5 Subagent记忆固化原则（防止任务丢失） **核心：同时使用固定 session + 完整 task + 三文件持久化。** | 机制 | 用法 | |------|------| | 持久化 Session | `mode: "session"` + 固定 `sessionKey` | | 完整 task 参数 | 所有关键要求写进 `sessions_spawn(task=...)` | | 任务真迹 | `~/.openclaw/workspace/tasks/[平台]_[日期]_任务.md` | **SessionKey：** `tourism-[平台简称]-[日期]` **最小 spawn 模板：** ```javascript sessions_spawn({ label: "[平台]攻略获取", mode: "session", sessionKey: "tourism-[platform]-[yyyymmdd]", task: ` 目标：抓取至少5篇[目的地]攻略。 只读：_任务.md 只写：_状态.md + _数据.md 浏览器：CDP 18800 异常：立即写入状态文件并提示人工介入 ` }) ``` **原则：** task 参数是运行真迹，文件是恢复真迹，session 只是执行容器。 ### 2. 数据来源原则（重要！） - **严格遵循用户指定的平台：** 不能擅自切换信息来源 - **数据纯正性验证：** 每个平台有特有的指标，用于验证数据来源 - **切换来源需用户同意：** 如果指定平台不可用，必须先征求用户确认 | 平台 | 特有指标 | 数据验证方法 | |------|---------|-------------| | 小红书 | 点赞数、收藏数、标签 | 不要用"浏览量"（那是马蜂窝指标） | | 马蜂窝 | 浏览量、游记格式 | 浏览量是核心指标 | | 携程 | 携程评分（⭐x.x/5）、点评数 | 评分格式是携程特有 | | 微信公众号 | 来源公众号名称 | URL包含 mp.weixin.qq.com | ### 3. 输出文件原则（三文件分离，降低 token 消耗） | 文件 | 谁写 | 谁读 | 作用 | |------|------|------|------| | `_任务.md` | Main Agent | Subagent | 任务要求/验收标准 | | `_状态.md` | Subagent | Main Agent | 进度/断点/问题 | | `_数据.md` | Subagent | Main Agent | 纯攻略数据 | **命名：** `~/.openclaw/workspace/tasks/[平台]_[日期]_{任务|状态|数据}.md` **规则：** - Subagent 不回写 `_任务.md` - Main Agent 汇总仅读 `_数据.md` - `_状态.md` 只用于确认进度 - token 只随攻略数据增长，不再随任务说明/进度日志重复膨胀 ### 4. 三文件分离原则 旧方案把任务、进度、数据混在一处；新方案把三者拆开。 **只记四条：** - `_任务.md`：Main Agent 写一次，Subagent 只读 - `_状态.md`：Subagent 增量写，Main Agent 快速读 - `_数据.md`：Subagent 增量写，Main Agent 汇总只读它 - Subagent 重启后优先看 `task` 参数，其次看文件，不依赖会话记忆 --- ## 🚀 速查表（快速参考） ### 信息源优先度（重要！新规则） | 优先级 | 平台 | 说明 | |--------|------|------| | 🥇 1 | 小红书 | 首选来源，热门内容多 | | 🥈 2 | 微信公众号 | 深度攻略，质量稳定 | | 🥉 3 | 马蜂窝 | 游记为主，行程详细 | | 🏅 4 | 其他（携程等） | 补充参考 | **时间权重规则（适用于所有平台）：** - 近一年内的攻略权重更高 - 更新时间接近当前季节（当前：春季）的攻略优先度提升 - 季节特征判断： - 春季(3-5月)：赏花、踏青、湿地、露营 - 夏季(6-8月)：海滨、漂流、避暑、主题乐园 - 秋季(9-11月)：红叶、采摘、温泉、晒秋 - 冬季(12-2月)：冰雪、温泉、年味、暖冬目的地 **综合排序公式：** ``` 最终优先级 = 平台基础权重 × 时间衰减系数 × 内容相关性 时间衰减系数：90天内=1.0，180天内=0.85，365天内=0.7，超过1年=0.5 ``` | 参数 | 效果 | 用途 | |------|------|------| | `sort=hot` | 热度排序 | 热门爆款 | | `sort=collect_count` | 收藏排序 | 高质量精选 | | `sort=time_descending` | 时间降序 | 最新攻略 | | 正文提取 | `eval "$(cat ~/.openclaw/workspace/skills/xiaohongshu-crawler/scripts/extract-article.js)"` --json | 获取正文 + 分享链接 | | 分享链接 | `discovery/item/{noteId}?xsec_token={token}` | 有效链接，不跳转首页 | ### 各平台特有指标 | 平台 | 指标 | 验证方法 | |------|------|----------| | 小红书 | 点赞数、收藏数、标签 | 不用浏览量 | | 马蜂窝 | 浏览量 | 必须提取 | | 携程 | ⭐x.x/5 评分格式 | 必须提取 | | 微信公众号 | 来源公众号名称 | URL含 `mp.weixin.qq.com` | ### 常见问题速查 | 问题 | 解决方案 | |------|----------| | 浏览器操作冲突 | 串行执行，一个subagent用浏览器完了再下一个 | | 小红书正文获取失败 | 不要用 snapshot，必须用 `eval` + JavaScript | | 分享链接跳转首页 | 用 `discovery/item` 格式带 `xsec_token` | | 二维码风控拦截 | 输出提示，等待用户扫码后继续 | | Chrome未启动/CDP连不上 | `google-chrome --remote-debugging-port=18800 &` 启动 | --- ## 执行流程 ### Phase 1: 准备三文件（Main Agent） ```bash # 为每个平台创建 3 个文件 # 任务文件（Main Agent 写一次） write ~/.openclaw/workspace/tasks/小红书_2026-04-24_任务.md # 状态文件（Subagent 写进度，Main Agent 读状态） write ~/.openclaw/workspace/tasks/小红书_2026-04-24_状态.md # 数据文件（Subagent 写攻略，Main Agent 读汇总） write ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md # 其他平台同理 write ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_任务.md write ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_状态.md write ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_数据.md ``` **任务文件模板（Main Agent 写入，一次性）：** ```markdown # [平台]攻略获取任务（[日期]） ## 任务要求 - 目标平台：[平台名] - 获取数量：至少5篇评分排名最高的攻略 - 排序方式：[平台特有排序] - 数据纯正确认：[平台特有指标] - 输出文件：~/.openclaw/workspace/tasks/[平台]_[日期]_数据.md ## 浏览器状态 - CDP端口：18800（如需使用） - 执行顺序：第N个（避免冲突） ## 操作提示 - 搜索URL：xxx - 排序按钮：xxx - 特有问题处理：xxx ## 验收标准 - 至少5篇完整攻略 - 每篇必须包含：标题、作者、平台指标、正文摘要 - 所有景点/美食/住宿必须附【来源链接】 - 原文链接必须是有效分享链接 ## 数据文件格式（Subagent 每篇攻略写入数据文件） ### [序号]. [文章标题] - 作者：xxx | 发布日期：xxxx-xx-xx | 平台：[平台名] - [平台特有指标]：xxx - 正文摘要：xxx（100字以内） - 【景点】[景点名]：[一句话描述]（门票：xxx） 来源：[原文链接](url) - 【美食】[美食名]：[一句话描述] 来源：[原文链接](url) - 【住宿】[住宿名/类型]：[一句话描述] 来源：[原文链接](url) - 【打卡点】[打卡点]：[一句话描述] 来源：[原文链接](url)（可选） - 原文链接：[点击查看](有效分享链接) --- ``` **状态文件初始内容（Main Agent 写入，Subagent 增量更新）：** ```markdown # [平台]攻略获取状态（[日期]） ## 执行进度 - [时间] 等待启动 ## 断点记录 - 上次完成：0篇 - 下一步：连接浏览器，开始搜索 ## 任务状态 - 状态：⏳ 等待启动 - 完成进度：0/5篇 - 数据文件：~/.openclaw/workspace/tasks/[平台]_[日期]_数据.md ## 待解决问题 - 无 ``` **数据文件初始内容（Subagent 增量写入）：** ```markdown # [平台]攻略数据（[日期]） （每篇攻略完成后 append到此文件，Main Agent Phase4 仅读此文件） ``` ### Phase 2: 启动Subagent（串行 + 方案二+四强化记忆） ``` 执行顺序（避免浏览器冲突）： 1. 小红书 → 使用浏览器 CDP 18800 2. 马蜂窝 → 等小红书完成后使用同一浏览器 3. 携程 → 等马蜂窝完成后使用同一浏览器 4. 微信公众号 → 不需要浏览器，可并行执行 ``` **每次 spawn 必须同时满足：** - ✅ `mode: "session"` — 持久化 session，任务累积不丢失 - ✅ `sessionKey: "tourism-[平台]-[日期]"` — 固定 key，可跨 compact 恢复 - ✅ 完整 `task` 参数 — 塞满所有任务细节，每次回复都能看到 - ✅ 在 `task` 中告知三文件路径 — subagent 读取任务文件、写状态文件和数据文件``` ### Phase 2: 各平台操作步骤 #### 小红书操作流程 ```bash # 1. 连接浏览器（已登录） agent-browser --cdp 18800 # 2. 多维度搜索（3种排序覆盖热门/精选/最新） # 热度排序 → 热门爆款 agent-browser --cdp 18800 open "https://www.xiaohongshu.com/search_result?keyword=[关键词]&type=note&sort=hot" agent-browser --cdp 18800 snapshot -i --json # 收藏排序 → 高质量精选 agent-browser --cdp 18800 open "https://www.xiaohongshu.com/search_result?keyword=[关键词]&type=note&sort=collect_count" agent-browser --cdp 18800 snapshot -i --json # 时间排序 → 最新攻略 agent-browser --cdp 18800 open "https://www.xiaohongshu.com/search_result?keyword=[关键词]&type=note&sort=time_descending" agent-browser --cdp 18800 snapshot -i --json # 3. 从 snapshot 提取文章链接 # 每篇文章进入详情页 # 4. 获取完整内容 + 分享链接（必须用 eval + JavaScript） agent-browser --cdp 18800 eval "$(cat ~/.openclaw/workspace/skills/xiaohongshu-crawler/scripts/extract-article.js)" --json # 提取结果：标题、作者、正文、点赞数、标签、图片、shareUrl（有效分享链接） ``` **小红书排序参数：** | 参数 | 效果 | 用途 | |------|------|------| | `sort=hot` | 热度排序 | 热门爆款 | | `sort=collect_count` | 收藏排序 | 高质量精选 | | `sort=time_descending` | 时间降序 | 最新攻略 | **小红书特有要点：** - **正文提取：** 不要用 `snapshot`，必须用 `eval` + JavaScript - **分享链接：** 必须用 `discovery/item/{noteId}?xsec_token={token}` 格式 - **二维码拦截：** 输出提示"⚠️ 小红书检测到自动化操作，请手动扫码登录"，等待用户确认 - **press Enter无效：** 改用 `goto` 直接导航搜索URL - **文章内容需要登录：** 通过连接用户已登录浏览器解决 #### 马蜂窝操作流程 ```bash # 1. 连接浏览器（小红书完成后） agent-browser --cdp 18800 # 2. 导航到搜索页面 goto "https://www.mafengwo.cn/search?q=[关键词]&type=2" # 3. 获取攻略列表 snapshot -i --json # 提取：标题、浏览量（马蜂窝特有）、点赞数、发布日期 # 4. 逐篇点击获取详细内容 click [文章ref] # 提取：行程安排、景点推荐、美食推荐 # 5. 输出到文件 ``` **马蜂窝特有问题处理：** - **目的地页面404：** 改用搜索功能访问 - **WAF反爬拦截：** 使用已登录的浏览器状态 - **浏览量指标：** 必须提取浏览量数据（马蜂窝特有） #### 携程操作流程 ```bash # 1. 连接浏览器（马蜂窝完成后） agent-browser --cdp 18800 # 2. 导航到景点页面 goto "https://you.ctrip.com/sight/[城市代码].html" # 3. 获取景点评分排行 snapshot -i --json # 提取：景点名称、携程评分（⭐x.x/5）、点评数、门票价格 # 4. 导航到游记页面 goto "https://you.ctrip.com/travels/[城市代码].html" # 5. 获取游记列表并提取详细内容 ``` **携程特有问题处理：** - **JS动态加载：** 必须使用浏览器，web_fetch无法获取评分数据 - **IP重定向：** 可能被重定向到其他城市，需检查页面内容 - **评分格式：** 必须提取 ⭐x.x/5 格式的评分（携程特有） #### 微信公众号操作流程 ```bash # 1. 使用搜狗微信搜索 web_fetch "https://wx.sogou.com/" 或搜索关键词 # 2. 获取文章列表 # 提取：标题、来源公众号名称、摘要 # 3. 尝试访问文章详情（可能失败） # 微信公众号文章URL格式：https://mp.weixin.qq.com/s/[文章ID] # 4. 输出到文件 ``` **微信公众号特有问题处理：** - **搜狗重定向到小红书：** 立即停止，报告问题，征求用户确认 - **反爬虫验证码：** 无法绕过，建议用户提供具体文章URL - **数据来源验证：** 确认URL包含 mp.weixin.qq.com ### Phase 3: Subagent执行（5步法） 1. 读 `task` 参数，必要时核对 `_任务.md` 2. 按平台步骤抓取；遇验证码/重定向立即记录并暂停 3. 每完成 1 篇就 append 到 `_数据.md` 4. 每次进度变化就更新 `_状态.md` 5. 完成写 `✅ 完成`；中断写 `⚠️ 部分完成` / `❌ 失败` **原则：** task 参数优先；任务文件只读；状态/数据文件读写 **Subagent 写数据文件格式（每篇攻略 append）：** ```markdown ### [序号]. [文章标题] - 作者：xxx | 发布日期：xxxx-xx-xx | 平台：[平台名] - [平台特有指标]：xxx - 正文摘要：xxx（100字以内） - 【景点】 - [景点名]：[一句话描述]（门票：xxx） 来源：[原文链接](url) - 【美食】 - [美食名]：[一句话描述] 来源：[原文链接](url) - 【住宿】 - [住宿名/类型]：[一句话描述] 来源：[原文链接](url) - 【打卡点】（可选） - [打卡点]：[一句话描述] 来源：[原文链接](url) - 原文链接：[点击查看](有效分享链接) --- ``` **Subagent 写状态文件格式（每次进度变化，替换或 append）：** ```markdown ## 执行进度 - 19:30 任务启动 - 19:32 连接浏览器成功 - 19:35 导航到搜索页面成功 - 19:38 获取文章列表（12篇） - 19:45 第1篇完成 → 已写入数据文件 - 20:10 第5篇完成 ## 断点记录 - 上次完成：第5篇（最后1篇） - 下一步：更新状态文件 → 任务完成 - 最后活跃：20:15 ## 任务状态 - 状态：✅ 完成 - 完成进度：5/5篇 - 数据文件：~/.openclaw/workspace/tasks/[平台]_[日期]_数据.md ## 待解决问题 - 无 ``` ## 信息源优先级与排序规则（新优化） ### 优先级量化表 | 优先级 | 平台 | 基础权重 | 说明 | |--------|------|----------|------| | 🥇 第1优先 | 小红书 | ×1.0 | 热门爆款多，内容鲜活 | | 🥈 第2优先 | 微信公众号 | ×0.9 | 深度长文，质量稳定 | | 🥉 第3优先 | 马蜂窝 | ×0.8 | 游记详细，行程可落地 | | 🏅 第4优先 | 其他（携程等） | ×0.6 | 补充参考 | ### 时间与季节权重 **综合排序公式：** ``` 最终优先级分 = 平台基础权重 × 时间衰减系数 × 季节匹配系数 ``` | 时间范围 | 衰减系数 | 说明 | |----------|----------|------| | 90天内 | 1.0 | 最新鲜，权重最高 | | 91-180天 | 0.85 | 近期内容 | | 181-365天 | 0.70 | 一年内的内容仍优先 | | 超过1年 | 0.50 | 降权参考，历史数据 | | 当前季节 | 适合主题 | 权重提升 | |----------|----------|----------| | 春季(3-5月) | 赏花、踏青、湿地、露营、户外 | ×1.2 | | 夏季(6-8月) | 海滨、漂流、避暑、乐园、水上 | ×1.2 | | 秋季(9-11月) | 红叶、采摘、温泉、晒秋 | ×1.2 | | 冬季(12-2月) | 冰雪、温泉、年味、暖冬 | ×1.2 | ### 整合策略 1. **同一景点/美食/住宿出现多次时：** 保留提及次数最多的，引用所有来源链接 2. **内容冲突时：** 优先高权重平台 + 新发布时间 3. **数据不足时：** 不凑数，宁缺毋滥 ### Phase 4: Main Agent整合 #### Subagent → Main Agent 数据传递机制 **核心：三文件各司其职，Main Agent 只读数据文件汇总，token 消耗降到最低。** ``` Subagent 执行 ──→ 写数据文件（攻略正文） 写状态文件（进度状态） ──→ Main Agent 读状态文件（快速确认） Main Agent 读数据文件（仅此文件汇总） ↓ ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md ──→ ~/llm-wiki/raw/articles/台州综合攻略.md ``` **文件职责：** - 任务文件：Main Agent 写，Subagent 启动时读一次，之后不碰 - 状态文件：Subagent 写，Main Agent 快速读（确认进度） - 数据文件：Subagent 写，Main Agent **仅读此文件汇总**（纯攻略内容） **token 优化对比：** ``` 旧方案 token 消耗（Main Agent Phase4 读文件）： 任务要求（500字）+ 进度日志（800字）× 5篇 = 4500+ token 新方案 token 消耗（Main Agent Phase4 读文件）： 数据文件：纯攻略内容 5篇 ≈ 1500 token 状态文件：极小 ≈ 100 token 合计 ≈ 1600 token（减少 ~65%） ``` #### Phase 4 整合执行步骤（v1.5.0 详细版） **Phase 4 共 6 步，每步可核查，失败可断点续传：** **第1步：快速扫状态文件（极小文件，token≈0）** ```bash read ~/.openclaw/workspace/tasks/小红书_2026-04-24_状态.md read ~/.openclaw/workspace/tasks/微信公众号_2026-04-24_状态.md read ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_状态.md ``` 判断：全✅→继续 | 有⚠️/❌→汇总已有+标注 | 有⏳→汇总已完成部分 **第2步：仅读数据文件（纯攻略内容，无冗余token）** ```bash # 按优先级顺序读：优先读小红书（权重最高） read ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md read ~/.openclaw/workspace/tasks/微信公众号_2026-04-24_数据.md read ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_数据.md ``` 原则：只读数据文件，不读任务文件，不重复读状态文件。 **第3步：跨篇统计景点/美食/住宿/打卡点** ``` 景点统计： ① 从所有数据文件提取所有【景点】项 ② 同名景点归一（忽略空格/标点差异） ③ 每归并一次 → 提及次数+1 ④ 每项附加所有来源链接（跨平台） ⑤ 按提及次数降序，生成景点汇总表 美食/住宿/打卡点统计：同上（步骤①改为提取对应项） ``` **第4步：计算优先级分并排序** ``` 最终优先级分 = 平台权重 × 时间衰减系数 × 季节匹配系数 | 项目 | 计算方式 | |------|----------| | 平台权重 | 小红书×1.0 / 公众号×0.9 / 马蜂窝×0.8 / 其他×0.6 | | 时间衰减 | 90天内×1.0 / 91-180天×0.85 / 181-365天×0.70 / 超1年×0.50 | | 季节匹配 | 当季主题×1.2 / 其他×1.0 | | 提及次数 | 直接计入推荐指数：5次=⭐⭐⭐⭐⭐ | 排序：先按最终优先级分降序，同分按提及次数降序 ``` **第5步：生成最终攻略文件** ```bash write ~/llm-wiki/raw/articles/[目的地]综合攻略.md ``` 输出前逐项检查： - [ ] 景点/美食/住宿/打卡点每项有【共X篇提及】+ 来源链接（同平台最多3条代表性链接） - [ ] 超1年攻略标注「⚠️ 内容较旧」 - [ ] 参考攻略原文放在报告末尾，按平台分组 - [ ] 当前季节（春季）适合内容标注【🌸春季推荐】 **第6步：输出完成报告** ``` 【综合攻略生成完成】 📊 数据来源：小红书X篇 / 公众号X篇 / 马蜂窝X篇 📋 景点：共X个 | 美食：共X个 | 住宿：共X个 | 打卡点：共X个 📁 完整攻略：~/llm-wiki/raw/articles/[目的地]综合攻略.md ``` --- ### Phase 5: 临时文件清理提醒（需用户批准） **触发（出现任一情况时，也必须先经用户批准）：** 任务完成 / 失败 / 超7天未动 / 用户主动要求清理。 **流程：** 1. 先列出 `tasks/` 下候选文件 2. 向用户展示“本次任务 / 历史文件 / 保留文件” 3. 未获明确批准前，不执行任何清理 4. 获批后使用 `trash`，不要用 `rm` **规则：** - 只清理中间文件，不删最终攻略 - 默认保留 72h 内文件 - “可以清理 / 全删了 / 只清这次”算批准；“先看看”不算 --- ## 常见问题与解决方案 ### 问题1: 浏览器操作冲突 **现象：** 多个subagent同时操作浏览器，导致状态混乱 **原因：** CDP端口只能同时被一个agent使用 **解决方案：** - Subagent按顺序执行（小红书 → 马蜂窝 → 携程） - 微信公众号不使用浏览器，可并行执行 - Main Agent监控进度，协调启动顺序 ### 问题2: 小红书文章内容无法获取 **现象：** 使用 `snapshot` 无法提取到文章正文 **原因：** 小红书正文不在 accessibility tree 中，只在静态 HTML 中 **解决方案：** - 不要使用 `snapshot`，必须用 `eval` + JavaScript 提取 - 正确选择器：正文 `#detail-desc`，标题 `.note-content` - 使用 `xiaohongshu-crawler` 提供的提取脚本： ```bash agent-browser --cdp 18800 eval "$(cat ~/.openclaw/workspace/skills/xiaohongshu-crawler/scripts/extract-article.js)" --json ``` ### 问题3: 小红书分享链接无效 **现象：** 保存的链接点进去跳转到首页 **原因：** `explore/{noteId}` 格式需要 `xsec_token` 参数，否则会被拦截 **解决方案：** - 使用 `discovery/item/{noteId}?source=webshare&xsec_token={token}` 格式 - 从当前页面 URL 提取 `xsec_token` 参数 - xiaohongshu-crawler 提取脚本自动处理 ### 问题4: 小红书二维码拦截 **现象：** 小红书弹出二维码，拦截自动化操作 **原因：** 小红书反爬虫机制检测非人类操作 **解决方案：** - 输出提示："⚠️ 小红书检测到自动化操作，请手动扫码登录" - 暂停操作，等待用户确认登录成功 - 用户确认后继续操作 ### 问题5: 数据来源不正确 **现象：** Subagent返回的数据混入了其他平台 **原因：** 搜索引擎重定向或agent误判 **解决方案：** - 每个平台有特有指标（见上方表格），用于验证 - 发现数据来源问题时立即停止 - 报告问题并征求用户确认是否接受替代数据 ### 问题6: 携程评分数据缺失 **现象：** web_fetch只能获取静态框架，无法获取评分 **原因：** 携程使用JavaScript动态加载内容 **解决方案：** - 必须使用浏览器（agent-browser）访问携程 - 等其他浏览器任务完成后启动携程subagent ### 问题7: 微信公众号详细内容无法获取 **现象：** 只能获取文章列表，无法进入详情页 **原因：** 搜狗反爬虫机制触发验证码 **解决方案：** - 获取文章列表输出到文件（至少有价值） - 建议用户提供具体文章URL（https://mp.weixin.qq.com/s/xxxxx） - 使用 `wechat-article-spider` 技能抓取具体URL ### 问题8: Gateway重启导致Subagent失败 **现象：** Subagent报告 "gateway closed" 错误 **原因：** Gateway服务重启，CDP连接断开 **解决方案：** - Main Agent检测到失败后重新启动Subagent - 通知用户重新启动Chrome浏览器（--remote-debugging-port=18800） ### 问题9: Chrome未启动/CDP连接失败 **现象：** 报告 "Chrome未启动" 或 "CDP端口18800不可用" **原因：** 浏览器没有启用远程调试 **解决方案：** ```bash # Linux google-chrome --remote-debugging-port=18800 & # macOS /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=18800 & # Windows chrome.exe --remote-debugging-port=18800 ``` Skill会检测到CDP不可用时，提示用户执行以上命令启动浏览器。 ### 问题10: Subagent进度卡住 **现象：** Subagent长时间无响应或重复失败 **原因：** 浏览器页面跳转异常、网络问题等 **解决方案：** - Main Agent定期检查subagent状态（subagents list） - 发现卡住时kill并重新启动 - 或手动操作浏览器帮助恢复状态 --- ## 优化建议 ### 1. 排序优化 - 小红书：尝试按"最多点赞"/"最多收藏"排序（如果有） - 马蜂窝：按浏览量排序 - 携程：按评分/点评数排序 - 微信公众号：按阅读量排序（如果可用） ### 2. 增量式文件更新 ``` 步骤： 1. 先获取文章列表，输出到文件 2. 逐篇点击进入详情页 3. 补充详细内容到文件 4. 最后一篇完成后，文件包含完整信息 ``` ### 3. 进度汇报模板 ``` ## 📊 进度汇报 | 平台 | 状态 | 结果 | 问题 | |------|------|------|------| | 小红书 | 🔄/✅/⚠️ | xx篇 | — | | 马蜂窝 | 🔄/✅/⚠️ | xx篇 | — | | 携程 | 🔄/✅/⚠️ | xx篇 | — | | 微信公众号 | 🔄/✅/⚠️ | xx篇 | — | 下一步：xxx ``` --- ## 输出格式模板 ### 单平台输出文件模板 ```markdown # [平台名][目的地]旅游攻略（[日期]） ## 数据来源 - 平台：[平台名] ([域名]) - 排序方式：[排序方法] - 获取时间：[日期] - ✅ 数据来源确认 ## 攻略列表 ### 1. [文章标题] - 作者：xxx - 发布日期：xxx - [平台特有指标1]：xxx - [平台特有指标2]：xxx #### 行程安排 - Day1: xxx - Day2: xxx #### 景点推荐 - 景点1：xxx（门票：xxx） #### 美食推荐 - 美食1：xxx #### 交通方式 xxx #### 住宿建议 xxx ``` ### 最终综合攻略模板 ```markdown # [目的地][天数]日亲子游综合攻略（[年份]终极版） > **适合人群：** [目标人群] > **推荐旅行季节：** [季节] > **数据来源：** 小红书、微信公众号、马蜂窝（多平台综合，加权排序） > **更新时间：** [日期] > **信息源优先级：** 小红书 > 微信公众号 > 马蜂窝 > 其他 ## 📊 数据来源说明 | 平台 | 基础权重 | 获取篇数 | 代表链接 | |------|----------|----------|----------| | 小红书 | ×1.0 | xx篇 | [查看热门攻略](#小红书热门攻略) | | 微信公众号 | ×0.9 | xx篇 | [查看热门攻略](#公众号热门攻略) | | 马蜂窝 | ×0.8 | xx篇 | [查看热门攻略](#马蜂窝热门攻略) | | 其他 | ×0.6 | xx篇 | — | ## 📋 综合推荐榜（加权排序） ### 🏞️ 景点推荐【共X个，被Y篇攻略提及】 | 景点 | 推荐理由 | 提及次数 | 推荐指数 | 适合季节 | 来源攻略 | |------|----------|----------|----------|----------|----------| | 景点1 | 一句话亮点 | 【共3篇】⭐⭐⭐⭐ | 全年皆宜 | [链接1](url) [链接2](url) [链接3](url) | | 景点2 | 一句话亮点 | 【共1篇】⭐⭐ | 春季最佳 | [链接](url) | ### 🍜 美食推荐【共X个，被Y篇攻略提及】 | 美食 | 推荐理由 | 提及次数 | 推荐指数 | 推荐店铺 | 来源攻略 | |------|----------|----------|----------|----------|----------| | 美食1 | 一句话亮点 | 【共5篇】⭐⭐⭐⭐⭐ | 必吃推荐 | xxx老店 | [链接1](url) [链接2](url) | | 美食2 | 一句话亮点 | 【共2篇】⭐⭐⭐ | 特色小吃 | xxx店 | [链接](url) | ### 🏨 住宿推荐【共X个，被Y篇攻略提及】 | 住宿 | 位置/类型 | 提及次数 | 推荐指数 | 价位 | 来源攻略 | |------|----------|----------|----------|------|----------| | 住宿1 | 市中心/亲子友好 | 【共4篇】⭐⭐⭐⭐ | ¥300-500/晚 | [链接1](url) [链接2](url) | ### 📸 打卡点推荐【共X个，被Y篇攻略提及】 | 打卡点 | 拍照亮点 | 提及次数 | 推荐指数 | 出片时间 | 来源攻略 | |------|----------|----------|----------|----------|----------| | 打卡点1 | 日落/建筑 | 【共2篇】⭐⭐⭐ | 傍晚最佳 | [链接](url) | ## 🗓️ 行程总览（加权排序整合） [按天列出行程，行程中的景点/美食/住宿均标注来源链接] ## 🎯 分板块详解 ### 🏞️ 景点详解 [按推荐指数排序，每景点标注：【共X篇攻略提及】+ 所有来源链接] ### 🍜 美食地图 [按提及次数排序，每美食标注：【共X篇攻略提及】+ 所有来源链接] ### 🏨 住宿指南 [按推荐指数排序，每住宿标注：【共X篇攻略提及】+ 所有来源链接] ### 📸 打卡点攻略 [按推荐指数排序，每打卡点标注：【共X篇攻略提及】+ 所有来源链接] ## ⚠️ 注意事项 [避坑指南，标注数据来源] --- ## 📎 参考攻略原文（按平台分组，附链接） ### 🔴 小红书热门攻略【共X篇】 | # | 标题 | 作者 | 发布日期 | 点赞 | 收藏 | 链接 | |---|------|------|----------|------|------|------| | 1 | 攻略标题 | @作者名 | 2025-03-15 | 3.2k | 8.5k | [查看原文](url) | | 2 | 攻略标题 | @作者名 | 2025-01-20 | 1.8k | 4.2k | [查看原文](url) | ### 🟠 微信公众号热门攻略【共X篇】 | # | 标题 | 公众号名称 | 发布日期 | 链接 | |---|------|------------|----------|------| | 1 | 攻略标题 | 公众号名称 | 2025-02-10 | [查看原文](url) | | 2 | 攻略标题 | 公众号名称 | 2024-11-05 | [查看原文](url) | ### 🟡 马蜂窝热门攻略【共X篇】 | # | 标题 | 作者 | 发布日期 | 浏览量 | 链接 | |---|------|------|----------|--------|------| | 1 | 攻略标题 | @作者名 | 2024-09-20 | 12.5k | [查看原文](url) | | 2 | 攻略标题 | @作者名 | 2024-08-15 | 8.3k | [查看原文](url) | ### 🟢 其他平台热门攻略【共X篇】 | 平台 | 标题 | 发布日期 | 链接 | |------|------|----------|------| | 携程 | 攻略标题 | 2025-01-10 | [查看原文](url) | ``` **输出格式说明：** - 所有景点、美食、住宿、打卡点必须标注【共X篇攻略提及】 - 每项的来源攻略链接全部列出（同一平台最多3篇代表性链接） - 参考攻略原文板块放在报告最后，按平台分组展示 - 链接使用 markdown 格式：`[查看原文](url)` - 时间权重：当前季节（春季）适合的内容标注【🌸春季推荐】等季节标签 --- ## 使用示例 ### 用户请求 ``` 调用subagent从小红书、马蜂窝、携程和微信公众号中获取至少5篇评分排名最高的台州旅游攻略， 总结后输出一份详细的综合攻略到raw/article/文件夹下。 ``` ### Main Agent执行流程 #### Step 1: 准备三文件（Main Agent） ```bash # 创建任务目录 mkdir -p ~/.openclaw/workspace/tasks # 为每个平台创建 3 个文件 write ~/.openclaw/workspace/tasks/小红书_2026-04-24_任务.md write ~/.openclaw/workspace/tasks/小红书_2026-04-24_状态.md write ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md ``` **任务文件内容（Main Agent 写入，一次性）：** ```markdown # 小红书攻略获取任务（2026-04-24） ## 任务要求 - 目标平台：小红书 (xiaohongshu.com) - 获取数量：至少5篇点赞排名最高的攻略 - 排序方式：综合排序（小红书默认热度） - 数据纯正确认：点赞数、收藏数（小红书特有） ## 浏览器状态 - CDP端口：18800 - 执行顺序：第1个 ## 操作提示 - 搜索URL：https://www.xiaohongshu.com/search_result?keyword=台州旅游攻略&type=note - 排序按钮：综合排序（默认） - 特有问题：二维码拦截 → 通知用户扫码登录 ## 验收标准 - 至少5篇完整攻略 - 每篇必须包含：标题、作者、点赞数、收藏数、正文摘要 - 所有景点/美食/住宿必须附【来源链接】 - 原文链接必须是有效分享链接 ## 三文件分离说明 - 任务文件：仅写此文件（一次），Subagent 启动时读一次后不再碰 - 状态文件：Subagent 写进度（每次进度变化） - 数据文件：Subagent 写攻略正文（每篇攻略增量 append） ``` **状态文件初始内容（Main Agent 写入）：** ```markdown # 小红书攻略获取状态（2026-04-24） ## 执行进度 - 等待启动 ## 断点记录 - 上次完成：0篇 - 下一步：连接浏览器，开始搜索 ## 任务状态 - 状态：⏳ 等待启动 - 完成进度：0/5篇 - 数据文件：~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md ## 待解决问题 - 无 ``` #### Step 2: 启动Subagent > 完整规范见上方 **Spawn 调用规范**；这里只保留最小示例。 ```javascript sessions_spawn({ label: "小红书攻略获取", mode: "session", sessionKey: "tourism-xiaohongshu-20260424", task: ` ## 任务（必须完整执行，不得遗漏任何步骤） ### 目标 1. 从小红书获取至少5篇「台州旅游攻略」点赞排名最高的攻略 2. 提取每篇的标题、作者、点赞数、收藏数、正文摘要 3. 所有景点/美食/住宿标注【共X篇提及】+ 原文链接 4. 输出到 ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md（攻略正文，仅写此文件） ### 执行顺序 1. 连接浏览器（Subagent 启动时任务文件已在 task 参数中，无需重读） 2. 执行3种排序搜索 3. 提取文章列表（去重，约10篇） 4. 逐篇提取正文（至少完成5篇高质量攻略） 5. **每篇完成后 append 攻略到数据文件**（详见下方格式） 6. **每篇完成后更新状态文件**（进度 + 断点） 7. 全部完成后更新状态文件任务状态为「✅ 完成」 8. 如遇二维码拦截，输出「⚠️ 小红书检测到自动化操作，请手动扫码登录」，等待用户确认 9. 如遇任何问题，**更新状态文件**并输出「⚠️ 需要人工介入」 ### Subagent 写文件规范（必须严格遵守！） **数据文件（每篇攻略 append）：** ### 1. [文章标题] - 作者：xxx | 发布日期：xxx - 点赞数：xxx | 收藏数：xxx - 正文摘要：xxx - 【景点】[景点名]：[一句话描述] 来源：[原文链接](url) - 【美食】[美食名]：[一句话描述] 来源：[原文链接](url) - 【住宿】[住宿名/类型]：[一句话描述] 来源：[原文链接](url) - 【打卡点】[打卡点]：[一句话描述] 来源：[原文链接](url)（可选） - 原文链接：[查看原文](有效分享链接) --- **状态文件（每次进度变化，更新进度/断点/状态）：** ```markdown ## 执行进度 - [时间] 第1篇完成 → 已写入数据文件 ## 断点记录 - 上次完成：第1篇 - 下一步：继续提取第2篇 ## 任务状态 - 状态：⏳ 进行中 - 完成进度：1/5篇 ``` ## 任务文件路径（Main Agent 写一次，Subagent 启动后不重读） ~/.openclaw/workspace/tasks/小红书_2026-04-24_任务.md ## 数据文件路径（Subagent 增量写，Main Agent Phase4 仅读此文件汇总） ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md ## 状态文件路径（Subagent 增量写，Main Agent 读状态确认进度） ~/.openclaw/workspace/tasks/小红书_2026-04-24_状态.md ` }) ``` #### Step 3: Subagent执行（写数据文件和状态文件） **Subagent 行为：** - 任务文件：启动后从 task 参数读取一次，之后不重读 - 数据文件：每篇攻略完成后 append 攻略正文 - 状态文件：每篇完成后更新进度（进度时间线 + 断点 + 任务状态） **状态文件更新示例（每篇完成后）：** ```markdown ## 执行进度 - 19:30 任务启动 - 19:32 连接浏览器CDP 18800成功 - 19:35 导航到搜索页面成功 - 19:38 获取文章列表（12篇） - 19:45 第1篇完成 → 已写入数据文件 - 19:50 ⚠️ 遇到二维码拦截 - 19:50 输出提示：【需要用户帮助】请手动扫码登录小红书 - 20:05 用户确认登录成功 - 20:10 第5篇完成 ## 断点记录 - 上次完成：第5篇 - 下一步：更新状态 → 任务完成 - 最后活跃：20:15 ## 任务状态 - 状态：✅ 完成 - 完成进度：5/5篇 - 数据文件：~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md ## 待解决问题 - 无 ``` #### Step 4: Main Agent检查状态并整合（三文件分离后） ```bash # 1. 快速读状态文件确认各平台进度（极小文件） read ~/.openclaw/workspace/tasks/小红书_2026-04-24_状态.md read ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_状态.md # 读状态文件只为了确认：✅ 完成 / ⚠️ 部分完成 / ❌ 失败 # 2. 仅读数据文件汇总（纯攻略内容，不含任务/状态指令） read ~/.openclaw/workspace/tasks/小红书_2026-04-24_数据.md read ~/.openclaw/workspace/tasks/微信公众号_2026-04-24_数据.md read ~/.openclaw/workspace/tasks/马蜂窝_2026-04-24_数据.md # 数据文件只包含攻略正文，token 消耗最低 # 3. 跨篇统计（景点/美食/住宿/打卡点各统计一次） # 工具：LLM 从数据文件中抽取、归类、去重、统计提及次数 # 4. 计算优先级分并排序 # 公式：平台权重 × 时间衰减 × 季节匹配 # 5. 输出最终攻略 write ~/llm-wiki/raw/articles/台州综合攻略.md # 确认输出路径 "最终攻略将输出到：~/llm-wiki/raw/articles/台州综合攻略.md，是否确认？" ``` --- ## 快捷脚本 ```bash # 一键创建三文件，自动检测浏览器，自动启动（如果找不到） ./scripts/start-tourism-guide.sh "目的地" [数量] [平台...] # 示例 ./scripts/start-tourism-guide.sh "台州亲子游" 5 xiaohongshu mafengwo ctrip ./scripts/start-tourism-guide.sh "黄山三日游" 5 xiaohongshu ``` ## 技能元数据 ```json { "name": "tourism-guide-harvester", "version": "1.5.0", "author": "OpenClaw + darwin-skill", "description": "多平台旅游攻略获取与整合技能 - v1.3输出优化版", "requires": { "tools": ["sessions_spawn", "exec", "read", "write", "web_fetch"], "skills": ["xiaohongshu-crawler", "agent-browser-clawdbot", "multi-search-engine", "wechat-article-spider"] }, "optimizations": [ "添加速查表", "一键脚本 start-tourism-guide.sh", "自动检测并启动Chrome浏览器 (CDP 18800)", "小红书多维度排序 (hot/collect_count/time_descending)", "JavaScript 提取正文，解决 snapshot 提取失败", "v1.5.0 Phase4六步法详细版 + Phase5清理提醒机制（需用户批准）", "v1.3 时间/季节权重公式", "v1.3 攻略提及次数标注与来源链接", "v1.3 参考攻略分平台展示在报告末尾" ], "platforms": ["小红书", "马蜂窝", "携程", "微信公众号"], "output_path": "~/llm-wiki/raw/articles/", "scripts": { "start": "scripts/start-tourism-guide.sh", "extract-article": "scripts/extract-article.js" } } ```


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)