Skill: doushen-cloud/trip-planner-cn (version 1.0.3)

--- name: trip-planner version: 1.0.0 description: > 行程规划助手，支持往返/单程行程规划。触发词：规划行程、高铁查询、航班查询、机场周边、时间安排、出行方案、当天往返。 涵盖：航班/高铁时刻查询、中转方案、时间约束筛选、详细时间线生成。 license: MIT --- # Trip Planner Skill 行程规划助手，支持往返行程（当天/隔天/多天）和单程行程规划。 ## 前置条件 本技能使用DuMate自带的携程connector查询交通信息，无需额外安装依赖。 **可选配置**： - `BMAP_WEBAPI_AK` - 百度地图API密钥，用于驾车时间查询（如未配置将使用估算值） ## 可用工具 | 工具 | 功能 | 数据源 | |------|------|--------| | `___query_flight` | 查询航班 | 携程 | | `___query_train` | 查询高铁/火车 | 携程 | | `___query_hotel` | 查询酒店 | 携程 | | `___query_ticket` | 查询景点门票 | 携程 | ## 触发场景 用户需要规划行程，涉及飞机、高铁、驾车等交通方式的选择和组合。 ## 行程类型 - **往返**：可能是当天往返，也可能是隔天或多天 - **单程**：按"可以出发的时间"或"需要到达的时间"推算 ## 核心规则 ### 一、硬性约束（必须满足） - 明确了出发时间 → 不能比那个时间更早出发 - 明确了到达时间 → 不能比那个时间更晚到达 - 停留时间 → 必须满足 - 说了"当天往返" → 必须找当天往返的方案（定义：早上6:30可以从出发地出发，晚上23:00前回到出发地） ### 二、软性约束（尽量满足） - 用户说"早去早回" → 在满足硬性约束下尽量早出发、早返回 ### 三、时间预留 - 国内航班：提前1小时到机场 - 高铁：提前30分钟到站 - 中转：预留足够时间（建议30分钟以上） ### 四、交通方式选择 - 优先直达 - 无直达时，考虑出发地或目的地周边城市的机场/火车站 - 选择标准：总时长最短（从最初出发地到最终目的地） ### 五、驾车限制 - 驾车时间不超过2.5小时 - 例外情况：没有其他交通方式可选，或替代方案（飞机/高铁）比驾车多出1小时以上 ### 六、不考虑价格因素 时间最关键，不因价格差异改变推荐方案。 ## 航班查询规则（携程） ### 1. 打开页面 - 访问携程航班搜索页面 - 等待页面加载完成（sleep 3-5秒） ### 2. 按时间排序 - 点击"起飞时间早-晚"排序 - 便于后续筛选 ### 3. 滚动加载完整数据（关键！） 携程等网站使用懒加载，必须滚动到底部才能获取所有航班。 **操作步骤**： 1. 获取初始快照 2. 滚动页面：`playwright-cli mousewheel 0 500` 3. 等待2秒让数据加载 4. 获取新快照 5. 重复步骤2-4，直到页面不再加载新内容 **判断是否加载完成**： - 快照中的航班数量不再增加 - 页面底部出现"没有更多"提示 - 滚动后快照内容与上次相同 **常见错误**： - 只获取第一屏数据就停止 → 遗漏后面的航班 - 假设数据已完整 → 实际还有更多航班未加载 **实际案例**： - 查询烟台→北京返程航班时，第一屏只显示到14:00的航班 - 继续滚动后，发现19:30起飞的航班（这才是当天往返的关键） ### 4. 数据提取 - 提取所有直飞航班 - 区分虹桥机场（SHA）和浦东机场（PVG） - 区分直飞、经停、中转 - 标注次日到达（+1） **携程connector数据解析规则**： 使用 `___query_flight` 工具时，返回的 `routeList` 中每个 `route` 包含 `flights` 数组： - **直飞**：`flights` 数组长度为1，且 `aport.name` 为目标机场 - **经停**：`flights` 数组长度为1，但 `stops` 不为空 - **中转**：`flights` 数组长度大于1 筛选直飞航班时，必须同时满足： 1. `len(flights) == 1` 2. `flights[0].aport.name == 目标机场名称` **错误示例**：只按 `len(flights) == 1` 筛选，未检查到达机场，导致遗漏部分直飞航班 ### 5. 数据完整性验证 - 提取后，对比"应该有多少航班"vs"实际提取了多少" - 关键决策前，抽查几个航班确认数据准确 - **验证方法**：用户提及某个航班时，立即在原始数据中搜索确认是否存在 ### 6. 出发机场优先 - 优先选择离用户出发地最近的机场 - 例如：用户在浦东，优先选浦东机场出发的航班 ## 高铁查询规则（12306） ### 1. 查询实时数据 - 使用浏览器自动化访问12306 ### 2. 未开售处理 - 如目标日期未开售，查询历史同期/相近日期的时刻表作为参考 - 标注"参考历史时刻表，实际以开售后为准" ## 穷尽周边机场 ### 触发条件 - 目的地城市进出港航班较少（如小城市、县城） - 目的地没有机场或机场航班选择有限 ### 操作方法 1. 确定目的地具体位置 2. 在地图上搜索周边200-300km范围内的所有机场 3. 不能凭印象列举，要系统性地排查 4. 逐一查询每个机场的航班 ### 优先级 - 先查最近的机场 - 航班选择少时，再查周边更远的机场 ### 示例 - 郎酒庄园（古蔺县二郎镇）→ 周边机场：泸州、遵义、重庆、贵阳、宜宾、昭通 - 龙口（山东烟台下辖县级市）→ 周边机场：烟台、青岛、潍坊 ## 综合排序 - 不是按价格排序，而是按"总耗时"排序 - 总耗时 = 出发地到机场/车站时间 + 候机/候车时间 + 航班/高铁时间 + 机场/车站到目的地时间 - 输出时只输出筛选后的方案，不输出完整列表 ## 驾车时间查询 - 使用百度地图 webapi（需配置 `BMAP_WEBAPI_AK` 环境变量） - 如未配置，可使用估算值并标注 ## 工作流程 ### 1. 明确需求 - 出发地、目的地 - 出发日期 - 行程类型（往返/单程） - 时间约束（出发时间/到达时间/停留时间） - 其他偏好（如"早去早回"） ### 2. 确定目的地位置 - 查询目的地具体位置 - 搜索周边机场（200-300km范围） ### 3. 调研交通方式 - 查询各机场航班时刻表 - 查询高铁时刻表 - 查询驾车时间（如适用） - 查询目的地到机场/车站的交通时间 ### 4. 生成方案 - 根据约束条件筛选可行方案 - 计算每个方案的总耗时 - 按总耗时排序 ### 5. 呈现方案 - 方案对比表 - 最优方案详细时间线 - 注意事项 ## 输出格式 ### 方案对比表 | 方案 | 出发时间 | 到达时间 | 总耗时 | 交通方式 | 备注 | |------|----------|----------|--------|----------|------| | 方案A | XX:XX | XX:XX | X小时 | XX→XX→XX | 简要说明 | | 方案B | XX:XX | XX:XX | X小时 | XX→XX→XX | 简要说明 | ### 最优方案详细时间线 ``` 06:30-08:10 北京首都机场 值机、安检、候机 08:10-09:35 北京首都机场 → 烟台蓬莱机场 乘坐SC5069航班 09:35-10:30 烟台机场 → 龙口 打车 ... ``` ### 注意事项 - 航班号、航站楼信息 - 中转交通建议 - 到达时间较晚时的提醒 ### 输出前自洽性检查（必须！） 时间线输出前，逐行检查： **1. 时间段长度与耗时说明一致** - 例：写"05:50-06:08"则时长为18分钟，不能写"地铁30分钟" - 例：写"地铁30分钟"则时间段必须跨越30分钟 **2. 每个交通节点预留候车/候机时间** - 高铁发车前必须预留30分钟到站检票 - 航班起飞前必须预留1小时到机场值机 - 例：高铁14:09发车 → 最晚13:39到站 → 出发时间往前推 - 错误示例：写"12:30-14:09 打车到威海站"然后"14:09高铁发车"——没有预留候车时间 ## 常见错误 1. **只查去程不查返程**：导致返程时间不合适 2. **忽略机场/车站到目的地的交通时间**：导致实际停留时间不足 3. **不考虑值机时间**：导致赶不上航班 4. **不区分机场/车站**：导致用户跑错地方 5. **违反硬性约束**：推荐了不满足用户时间要求的方案 6. **航班数据提取不完整**：只获取了部分航班，遗漏更优方案 7. **凭印象列举周边机场**：遗漏更近的机场 8. **只按价格排序**：忽略了出发机场、总耗时等因素 9. **时间线自相矛盾**：时间段长度与耗时说明不一致（如写"05:50-06:08"但说明"地铁30分钟"） 10. **数据解析错误**：携程connector返回了完整数据，但解析时筛选条件不正确，遗漏了部分航班（如只按 `len(flights)==1` 筛选，未检查到达机场是否为目标机场） ## 示例 **用户需求**：4月25日从上海浦东去泸州郎酒庄园，9:30后出发 **目的地位置分析**： - 郎酒庄园位于泸州市古蔺县二郎镇，地处川黔交界 - 周边机场：泸州云龙（100km）、遵义新舟（150km）、重庆江北（200km）、贵阳龙洞堡（280km） **调研结果**： - 上海→泸州：仅1班直飞（MF8857，16:25-19:30，虹桥T1） - 上海→重庆：多班航班，CA4576（12:05-14:55，浦东T2）较优 - 上海→遵义：需查询 - 上海→贵阳：多班航班 **方案对比**： | 方案 | 出发时间 | 到达庄园时间 | 总耗时 | 航班价格 | 驾车距离 | |------|----------|-------------|--------|---------|---------| | A（泸州直飞） | 14:25 | 21:30 | 约7小时 | ¥740 | 100km | | B（重庆转车） | 10:00 | 18:30 | 约7小时 | ¥900 | 200km | **推荐**：方案B，从浦东出发更方便，到达时间更早。


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