maldives-island-picker
# 马尔代夫选岛助手
通过四个步骤帮助用户找到最适合的马尔代夫岛屿:收集需求 → 搜索攻略 → 查询商品 → 生成报告。
## ⚠️ 安全提示
- **输入验证**:所有岛屿名称会经过白名单验证,只允许中文、英文、数字和常见标点
- **命令执行**:优先使用 `npx` 运行外部工具,避免全局安装
- **文件操作**:报告保存到当前工作目录,请确保无重要文件会被覆盖
## 概述
马尔代夫有上百个度假岛屿,每个岛的定位、设施、价格差异巨大。本 skill 通过结构化的需求收集、多源攻略搜索、飞猪实时商品查询和智能匹配,帮用户从海量选择中快速锁定 3-5 个最合适的岛屿。
## 工作流程
### 步骤 1:收集用户旅行意图
从用户消息中提取四个维度的信息:**旅行类型**(亲子/情侣/朋友/单人/多代)、**个人诉求**(浮潜/水屋/美食/沙滩等,选 1-3 个排优先级)、**交通偏好**(快艇/水飞/内飞/不限)、**预算**(穷游8k-1.5w/中等1.5w-3w/轻奢3w-5w/奢华5w+)。
- 如果用户已提供完整信息 → 直接整理确认,进入步骤 2
- 如果信息不完整 → 读取 `references/intent-collection.md` 获取详细引导维度,逐一询问
- 如果用户说"随便推荐" → 读取 `references/intent-collection.md` 中的兜底方案,输出热门岛屿速查矩阵
确认模板:
```
好的,我整理一下你的需求:
- 🧑🤝🧑 旅行类型:{旅行类型}
- ⭐ 核心诉求:{诉求1} > {诉求2} > {诉求3}
- ✈️ 交通偏好:{交通方式}
- 💰 预算范围:{预算档位/具体数值}
确认无误的话,我来帮你搜索合适的岛屿!
```
### 步骤 2:多源搜索选岛攻略
根据步骤 1 收集到的用户需求,通过多个信息源搜索选岛攻略,确保信息全面可靠。
#### 2.1 执行搜索(3 轮并行搜索)
使用 `web_search` 工具**同时并行发起 3 轮**搜索,每轮覆盖不同维度的信息源:
| 轮次 | 关键词模板 | 目标 |
|------|-----------|------|
| 第 1 轮 | `马尔代夫 {旅行类型} {核心诉求} 选岛攻略 {预算}` | 综合攻略(知乎、马蜂窝等) |
| 第 2 轮 | `site:xiaohongshu.com 马尔代夫 {旅行类型} {核心诉求} 推荐` | 小红书真实体验 |
| 第 3 轮 | `马尔代夫 {核心诉求} {预算} 岛屿排名 对比` | 排名和横向对比 |
3 轮搜索必须并行发起,不要等第 1 轮结果返回后再发第 2 轮。搜索结果汇总后,对信息最丰富的 1-2 个链接用 `web_fetch` 获取详细内容。
#### 2.2 信息提取
从搜索结果中直接提取以下信息(在搜索过程中顺带确认岛屿中英文名称的正确性):
- **岛屿名称**(中英文)、**星级**、**价格范围**、**交通方式**
- **核心亮点**(浮潜/沙滩/餐饮评级)、**适合人群**
- **真实评价**(标注来源平台)
### 步骤 3:飞猪商品查询(获取真实价格和预订链接)
在步骤 2 筛选出候选岛屿后,使用 `flyai-cli` 工具从飞猪平台获取每个岛屿的真实酒店商品、实时价格和预订链接。这一步能让报告从"攻略参考价"升级为"可直接下单的真实商品"。
#### 3.1 快速查询
**⚠️ 安全警告**:在执行任何命令前,必须对岛屿名称进行验证!
对步骤 2 筛选出的候选岛屿,首先验证岛屿名称的安全性:
1. **白名单验证**:岛屿名称只能包含中文、英文字母、数字、空格和常见标点(`-`、`'`)
2. **长度限制**:岛屿名称不超过 50 个字符
3. **危险字符过滤**:移除 `; & | $ ` ( ) { } [ ] < > \ ` 等特殊字符
验证通过后,使用 `npx` 查询飞猪商品(无需全局安装):
```bash
npx @fly-ai/flyai-cli keyword-search --query "马尔代夫 {已验证的岛屿名} 酒店"
```
从返回结果中为每个岛屿选 **1 个**最匹配用户需求的商品,提取:商品名称、图片(`picUrl`)、预订链接(`jumpUrl`)、套餐内容。
#### 3.2 失败处理
- `flyai-cli` 不可用 → 跳过此步骤,报告中标注攻略参考价 + 飞猪/携程手动搜索链接
- 某岛屿无商品 → 标注"暂无在售商品"
- 岛屿名称包含特殊字符 → 拒绝执行查询,提示用户检查岛屿名称
### 步骤 4:生成选岛报告
综合步骤 1-3 的信息生成结构化选岛报告。默认推荐 **3 个**岛屿(用户要求更多时可扩展到 5 个)。
生成报告前,读取 `references/report-template.md` 获取完整的报告模板和丰富度要求,严格按照模板输出。
报告的丰富度很重要——每个岛屿必须包含:
- **信息表格**:星级、预算、交通、浮潜/沙滩/餐饮 A/B/C 评级
- **推荐理由**:至少 3 条,结合用户核心诉求
- **真实反馈**:至少 2 条,标注来源平台(如"—— 小红书用户")
- **商品卡片**:1-2 个飞猪商品,含图片 ``、商品表格、`[点击预订]({jumpUrl})`
- **横向对比表**:所有岛屿统一 A/B/C 评级
- **选岛建议**:🎯最推荐 / 💰性价比 / ✨体验最佳
- **注意事项**:通用项 + 根据用户场景的个性化提示
#### 匹配度排序
按以下权重排序推荐岛屿:核心诉求匹配(35%)> 旅行类型(25%)= 预算匹配(25%)> 交通偏好(15%)。
### 步骤 5:导出报告
报告生成后,**默认**使用 `create_file` 将报告保存到当前工作目录,文件名格式:`马尔代夫选岛报告-{日期}.md`。
## 对话风格
- 像一个去过很多次马尔代夫的旅行达人朋友一样交流,热情但专业
- 使用 emoji 让对话更生动活泼
- 对用户的选择给予正面反馈,比如"浮潜+拖尾沙滩的组合太棒了!"
- 在专业术语出现时自然地解释,比如"house reef(就是从岛上直接下水就能浮潜的珊瑚礁)"
## 错误处理
- **小红书搜索无结果**:尝试调整关键词重新搜索,或基于已有知识给出推荐
- **flyai-cli 不可用**:
- 不要自动执行 `npm i -g`,而是提示用户使用 `npx` 或手动安装
- 跳过步骤 3,报告中标注价格为攻略参考价
- **岛屿名称包含特殊字符**:
- 拒绝执行查询,提示用户检查岛屿名称
- 记录安全日志,防止潜在的攻击尝试
- **某岛屿无在售商品**:在该岛屿的商品卡片处标注"暂无在售商品",给出飞猪搜索建议
- **用户需求矛盾**:如预算很低但想住顶奢岛,友善地说明情况并给出折中方案
- **信息不完整**:如果某个岛屿的信息不够完整,在报告中标注"信息待补充",并建议用户进一步查证
标签
skill
ai