# 工作流程

### 前置步骤：安装/升级 FlyAI CLI

在执行任何搜索之前，**必须先执行安装命令**（无论是否已安装，确保为最新版本）：

```bash
npm install -g @fly-ai/flyai-cli@latest --registry=https://registry.npmjs.org
```

> 💡 此命令会自动处理首次安装和版本升级，无需手动判断是否已安装。**安装后验证：**
```bash
flyai --help
```

**安装失败处理：**
| 情况 | 处理方式 |
|-----|---------|
| npm 未安装 | 提示用户先安装 Node.js (https://nodejs.org/) |
| 权限不足 | 建议使用 `sudo npm install -g @fly-ai/flyai-cli@latest --registry=https://registry.npmjs.org` 或使用 nvm 管理 Node |
| 网络问题 | 建议用户检查网络或使用国内镜像 `npm config set registry https://registry.npmmirror.com` |

**注意：** 此步骤只在首次使用时执行，后续调用会直接跳过已安装的情况。

### 第1步：收集用户信息

使用 `ask_user_question` 工具收集必要信息：

**必须收集的信息：**
1. **出发城市** - 用户从哪里出发
2. **出行日期** - 本周末具体日期（周六日）

**可选收集的信息：**
3. **预算上限** - 如"总共2000以内"
4. **偏好标签** - 如"看海"、"古镇"、"亲子"、"躺平"、"美食"

**提问示例：**

```
问题1: "你从哪个城市出发？"
选项:
- "杭州"
- "上海"
- "北京"
- "其他城市（请说明）"

问题2: "你想什么时候出发？"
选项:
- "本周六日（自动计算日期）"
- "下周六日"
- "我指定日期"

问题3: "预算大概多少？"
选项:
- "1000以内/人"
- "1500以内/人"
- "2000以内/人"
- "不限预算"

问题4: "有什么偏好吗？"（可多选）
选项:
- "看海 🏖"
- "古镇 🏘"
- "亲子 👨‍👩‍👧"
- "躺平 😴"
- "美食 🍜"
- "都可以，帮我推荐"
```

### 第2步：调用 FlyAI 能力搜索

根据用户输入，依次调用以下命令：

**重要：SSL 证书验证问题处理**
如果遇到 "SSL 证书验证失败" 错误，需要在命令前加上环境变量：
```bash
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai <command>
```

**2.1 自然语言广泛搜索确定候选目的地**
```bash
flyai keyword-search --query "[出发城市]出发周末[偏好][预算]2天1晚"
```

**2.2 搜索机票/交通**
对每个候选目的地：
```bash
flyai search-flight --origin "[出发城市]" --destination "[目的地]" --dep-date [周六日期] --back-date [周日日期] --sort-type 3
```

**2.3 搜索酒店**
对每个候选目的地：
```bash
flyai search-hotel --dest-name "[目的地]" --check-in-date [周六日期] --check-out-date [周日日期] --max-price [预算/2] --sort rate_desc
```

**2.4 搜索景点**
对每个候选目的地：
```bash
flyai search-poi --city-name "[目的地]" --poi-level 4
```

### 第3步：生成3个打包方案

将搜索结果整合为3个差异化方案，格式如下：

```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🏖 本周末·[出发城市]出发·[偏好标签]·3个说走就走方案

━━━ 方案A：[目的地]（[特点标签]）━━━
📍 [出发城市] → [目的地] | [交通方式]

✈️/🚄 [去程信息] ¥[价格]
     [返程信息] ¥[价格]
🏨 [酒店名称] ¥[价格]/晚
   ⭐ [评分] | [亮点描述]
📍 必玩3个：
   ① [景点1] — [一句话描述]
   ② [景点2] — [一句话描述]
   ③ [景点3] — [一句话描述]

💰 预估总花费：¥[最低]-[最高]/人 [预算状态]
⏰ 节奏：[行程建议]
👉 [查看酒店详情] [查看景点详情]

━━━ 方案B：... ━━━
（同上格式）

━━━ 方案C：... ━━━
（同上格式）

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 综合建议：
   [标签1] → 方案A（[理由]）
   [标签2] → 方案B（[理由]）
   [标签3] → 方案C（[理由]）
```

### 第4步：处理预约提醒

检查景点是否需要提前预约，标注相关提醒：
- 需要提前预约的景点标注 ⚠️
- 检查是否来得及预约，来不及的推荐替代方案
