Skill: chgufan/event-travel-planner (version 1.0.2)

--- name: event-planning-skill description: 活动演出出行规划助手，整合小红书攻略搜索和飞猪出行预订。专门用于演唱会、漫展、体育赛事等活动的完整行程规划，包括：活动信息搜索、场地周边攻略、交通住宿预订、行程安排优化。使用场景：用户计划参加线下活动需要一站式解决方案时。触发词："去看演唱会"、"去漫展"、"看演出"、"参加活动"、"CP 展"、"音乐节"、"livehouse"、"体育赛事"等。 --- # 活动演出出行规划 整合小红书真实用户攻略（xhs-cli）和飞猪出行供应链（flyai-cli）的一站式活动规划。 ## 工具与参考 | 工具 | 用途 | 详细参考 | |------|------|----------| | **xhs-cli** | 小红书攻略搜索、笔记阅读、评论获取 | [references/xhs_cli.md](references/xhs_cli.md) | | **flyai-cli** | 机票、酒店、门票、景点搜索与预订 | [references/flyai_cli.md](references/flyai_cli.md) | | **xhs_filter.py** | 精简 xhs-cli 输出，只保留 AI 决策字段 | 用法见下方 | | **联网搜索** | 辅助确认活动信息（WebSearch 等 IDE 自带工具） | — | 环境配置与故障排查：[references/setup_guide.md](references/setup_guide.md) > **路径约定：** 本 skill 中所有 `scripts/` 开头的路径都相对于 skill 安装目录。执行 bash 命令前，必须将其拼接为绝对路径（即 `<本skill安装目录>/scripts/...`）。例如加载时显示 base directory 为 `/path/to/skill/`，则 `scripts/xhs_filter.py` 应写为 `/path/to/skill/scripts/xhs_filter.py`。 **xhs-cli 输出过滤（所有 xhs 命令必须通过管道过滤）：** ```bash xhs search "关键词" --sort popular --type image --json | python3 scripts/xhs_filter.py search xhs read <索引> --json | python3 scripts/xhs_filter.py read xhs comments <索引> --json | python3 scripts/xhs_filter.py comments ``` **xhs-cli 关键约束：** - 短索引从 **1** 开始（不是 0） - 每次 search 后缓存被覆盖，必须**立即完成该组的 read**，不能攒着读 - 内置限速 ~1-1.5s/请求，**不要并行调用**，多次调用间隔 2 秒 --- ## 执行前检查（必须执行，禁止跳过） **在进行任何搜索或规划之前，必须先执行以下检查。** 尤其是 `date` 命令——未获取当前日期就搜索会导致无法判断活动时效性，搜到过期活动而全盘出错。 ```bash date "+%Y-%m-%d" xhs status --yaml 2>/dev/null | grep -q "authenticated: true" && echo "XHS_OK" || echo "XHS_AUTH_NEEDED" flyai --help >/dev/null 2>&1 && echo "FLYAI_OK" || echo "FLYAI_NEEDED" ``` 将 `date` 输出记为 `TODAY`，后续所有时效判断（活动是否过期、筛选发布时间、航班日期）都基于此值。 异常时参阅 [references/setup_guide.md](references/setup_guide.md)。 --- ## 核心工作流 ### Step 1：确认活动信息（最关键的一步） **目标：** 在做任何规划之前，先明确活动是什么、什么时候、在哪里。找错活动（比如去年的、已过期的）会导致后续全部白费。 **操作：** 拿到用户 query 后，**同时**用小红书搜索、联网搜索和飞猪门票搜索三路并行获取信息： - 小红书搜索 `"<活动名> <城市>"` → 从笔记标题和正文中提取活动时间、地点、场馆 - 联网搜索 `"<活动名> 年份 时间 地点"` → 获取官方信息 - 飞猪搜索 `flyai keyword-search --query "<活动名>门票 <城市>"` → 检查飞猪是否有该活动的门票供应 **确认后向用户展示并请求确认：** - 活动全称、场次、时间、场馆 - 如果飞猪搜到了门票 → 直接展示购票链接和价格，提示"飞猪有售，可直接预订" - 如果活动日期 < 当前日期 → 明确告知已过期，询问是否有新场次 - 如果是泛品类搜索（如"最近有什么演唱会"）→ 列举搜到的多个活动，让用户选择 **此步关键判断：** 本轮搜索如果能拿到有价值的攻略信息（抢票难度、往期经验、场馆特点等），先记住，Step 2 可以直接利用。 ### Step 2：明确用户出行需求 **目标：** 收集个性化信息，结合 Step 1 已获取的攻略内容，给出有针对性的建议。 **必须明确的信息：** - 出发城市 - 出行人数和同行者（影响住宿和交通选择） - 预算范围（可选但有用） **主动建议（结合 Step 1 搜索到的信息）：** - 如果活动有多个场次 → 结合攻略中的抢票难度、酒店价格波动等信息推荐场次 - 如果攻略提到了"XX 区域住宿性价比高""XX 交通方式更方便" → 提前透露给用户参考 - 如果 Step 1 信息不足以做推荐 → 询问用户是否需要先搜索更多内容帮助决策 **等用户确认后再进入 Step 3。** ### Step 3：深度攻略搜索（二轮搜索） **目标：** 基于已确认的活动和用户需求，精确搜索攻略，收集足够的规划信息。 **与一轮搜索的区别：** 活动和场次已确认，可以用更精准的关键词，并严格按时效性过滤。 **搜索策略：** 分多组关键词搜索，每组走"搜索 → 筛选 → 读取验证"流程。关键词不限于固定三组，根据信息缺口灵活追加，直到覆盖以下维度： | 维度 | 关键词示例 | 目标信息 | |------|-----------|----------| | 活动攻略 | `"<活动名> 攻略"`、`"<活动名> 避坑"` | 入场规则、最佳区域、禁带物品 | | 抢票经验 | `"<活动名> 抢票"`、`"<活动名> 购票攻略"` | 抢票时间、渠道、技巧 | | 交通 | `"<场馆名> 交通"`、`"<场馆名> 怎么去"` | 到达方式、最优路线 | | 住宿 | `"<城市> <活动名> 住宿"`、`"<场馆名> 附近酒店"` | 推荐区域、价位参考 | | 周边 | `"<城市> <场馆名> 美食"`、`"<城市> 一日游"` | 餐饮、景点、行程填充 | **每组搜索流程：** ```bash # 1. 搜索（图文 + 热度排序） xhs search "<关键词>" --sort popular --type image --json | python3 scripts/xhs_filter.py search # 2. 从过滤结果中筛选候选（~5 篇）并依次读取验证 xhs read <候选索引> --json | python3 scripts/xhs_filter.py read # 3. 验证通过后，必须读评论（评论是避坑信息的核心来源） xhs comments <已通过索引> --json | python3 scripts/xhs_filter.py comments ``` **步骤 3 读评论是必须的，不可跳过。** 评论区包含正文中没有的关键信息：酒店实际涨价情况、交通拥堵时段、黄牛风险、入场排队时长、活动临时变更等。这些避坑信息直接影响最终攻略质量，是本 skill 区别于普通搜索的核心价值。每篇通过验证的笔记都要读评论。 **筛选候选的判断（过滤后的输出已包含所有必要字段）：** 优先选：标题含攻略关键词（"攻略""避坑""指南""干货"）+ 收藏数 > 500 + 发布时间在本次活动前 3 个月内 可以选：标题具体、信息量大（"从XX机场怎么去""5个注意事项"） 应跳过：标题暗示纯图片内容（"备忘录""截图""看图"）；发布时间明显属于往届活动；通用攻略不受时效限制 **读取验证标准：** 正文字数 >= 100 且包含实质攻略内容 → 保留；正文过短或为空 → 跳过读下一篇 **信息充足的判断：** 当活动入场须知、交通方案、住宿区域推荐这三方面都已有可靠信息时，可停止搜索。如果某个维度反复搜不到有用内容，也不要死磕，进入下一步后在输出中标注"该信息暂未找到可靠来源"。 ### Step 4：飞猪供应链搜索 > **调用前必读：** [references/flyai_cli.md](references/flyai_cli.md) — 各命令参数字段不同，切勿猜测。 **目标：** 将用户攻略中的推荐转化为可预订的产品。优先推荐**飞猪有售且用户攻略中提到的**选项。 **搜索顺序与策略：** ```bash # 1. 活动门票（如果活动在飞猪有售，一定要推荐） flyai keyword-search --query "<活动名称>门票 <城市>" # 2. 交通（注意时刻约束，见下方说明） flyai search-flight --origin "<出发城市>" --destination "<活动城市>" --dep-date <日期> --sort-type 3 # 3. 住宿（场馆附近，结合攻略推荐的区域） flyai search-hotel --dest-name "<城市>" --poi-name "<场馆名称>" --check-in-date <入住> --check-out-date <退房> --sort rate_desc # 4. 周边景点（如行程有空闲） flyai search-poi --city-name "<城市>" --keyword "<景点>" ``` **航班时刻与活动时间的对齐（关键）：** 搜航班不能只看日期，必须确保时刻和活动行程兼容。推荐前先推算时间约束： - **去程：** 必须在活动开始前到达并留出余量。如果活动当天到 → 用 `--dep-hour-end` 限制出发时段，确保落地+赶到场馆的时间早于活动开始；如果前一天到则不需限制 - **返程：** 必须在活动结束后才能离开。用 `--dep-hour-start` 确保出发时间晚于「活动结束 + 离场 + 到机场」的时间。 **供应链与攻略的融合原则：** - 攻略推荐的酒店区域 + flyai 搜到的具体酒店 → 优先推荐有预订链接的 - 攻略提到的交通方式 + flyai 搜到的航班/火车 → 给出具体班次和价格 - 飞猪搜到但攻略没提到的 → 可以补充推荐，但标注"供参考" - 攻略推荐但飞猪没有的 → 保留攻略建议，注明"需自行预订" **展示规范（必须遵守）：** 飞猪返回的数据中如果包含图片和链接字段，**必须**展示，不可省略。 图片展示（独立一行）：`![]({图片URL})` - `search-hotel` 用 `mainPic` 字段 - 其他命令用 `picUrl` 字段 预订链接（独立一行，在图片之后）：`[点击预订]({链接URL})` - `search-hotel` 用 `detailUrl` 字段 - 其他命令用 `jumpUrl` 字段 **每个推荐的酒店、航班、门票都必须按"图片 → 关键信息 → 预订链接"的顺序展示。** 自然提及"基于 fly.ai 实时搜索结果"。 ### Step 5：整合输出 **输出内容根据实际搜集到的信息灵活组织**，不必拘泥于固定模板。以下维度按需覆盖： - **活动信息卡** — 名称、时间、地点、票价、购票渠道与抢票攻略 - **交通方案** — 航班/火车推荐（表格对比），含飞猪预订链接 - **住宿推荐** — 结合攻略推荐区域和飞猪搜索结果，含价格、评分、预订链接 - **行程时间表** — 按时间线串联交通、活动、周边游 - **实用攻略** — 入场须知、最佳观演区域、必带/禁带物品等（来自笔记和评论） - **避坑提醒** — 来自评论区的真实反馈，如酒店涨价、交通拥堵、黄牛风险等 **输出格式：** 先在对话中给出完整的 Markdown 攻略，最后生成一份排版良好的 HTML 文件供用户保存。 --- ## 场景示例 **用户：** "我要从北京去上海看五月天演唱会，5月10号的" ``` Step 1 → 联网搜索 + xhs 搜索"五月天演唱会 上海 2026" → 确认：2026年5月10日，梅赛德斯奔驰文化中心 → 向用户确认活动信息 Step 2 → 明确出发城市（北京）、人数、预算 → 结合一轮搜索到的信息，如有多个场次可推荐 Step 3 → xhs 深度搜索： "五月天 2026 上海 攻略"（活动攻略） "梅赛德斯奔驰文化中心 交通"（交通） "上海演唱会 住宿推荐"（住宿） 根据需要追加："五月天 抢票攻略""梅奔 周边美食"等 → 每组搜索后筛选、读取验证、读评论 Step 4 → flyai 搜索： keyword-search "五月天演唱会门票 上海"（门票） search-flight 北京→上海 5月9日（航班） search-hotel 上海 梅赛德斯奔驰文化中心附近（酒店） → 交叉比对攻略推荐和飞猪供给 Step 5 → 整合输出完整攻略 + 生成 HTML 文件 ```


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