# 工作流程

### 前置步骤：安装/升级 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. **可用天数** - 如"2天1晚"、"3天2晚"
4. **预算上限** - 如"总共3000以内"
5. **同行人数** - 影响酒店和票价计算

**提问示例：**

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

问题2: "你最快几小时后可以到达机场？"
选项:
- "2小时内（随时能走）"
- "3小时内"
- "4-5小时后"
- "今天下午/晚上"
- "明天一早"

问题3: "能出去玩几天？"
选项:
- "1天（当天往返）"
- "2天1晚"
- "3天2晚"
- "时间弹性，看目的地决定"

问题4: "预算大概多少？"
选项:
- "2000以内/人"
- "3000以内/人"
- "5000以内/人"
- "不限预算，就想走"
```

### 第2步：计算时间窗口

根据用户输入计算关键时间节点：

```
当前时间：[获取系统当前时间]
最快到机场：+[X]小时
安检登机预留：+1小时
最早可登机时间：[计算结果]
回程时间：[根据可用天数计算]
```

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

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

**3.1 广泛搜索当前可出发的航班**

使用 ai-search 进行智能搜索（注：本地CLI命令为 `keyword-search`）：
```bash
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai keyword-search --query "[出发城市]出发 今天[时间段]后的航班 [预算]以内"
```

**3.2 结构化搜索热门目的地航班**

对多个热门目的地并行搜索：
```bash
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai search-flight --origin "[出发城市]" --destination "[目的地]" --dep-date [今天日期] --back-date [返回日期] --dep-hour-start [最早出发小时] --sort-type 6
```

常用热门目的地参考（根据出发城市动态选择）：
- 上海出发：厦门、长沙、青岛、成都、三亚、杭州、南京、重庆
- 北京出发：上海、杭州、成都、西安、三亚、青岛、厦门、大连
- 广州出发：上海、成都、杭州、厦门、三亚、重庆、西安、长沙
- 杭州出发：厦门、三亚、成都、重庆、青岛、西安、大连、昆明

**3.3 搜索目的地今晚可住酒店**

对每个有票的目的地：
```bash
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai search-hotel --dest-name "[目的地]" --check-in-date [今天日期] --check-out-date [离开日期] --sort rate_desc
```

**3.4 搜索目的地核心景点**

对每个可达目的地：
```bash
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai search-poi --city-name "[目的地]" --poi-level 4
```

### 第4步：生成极限出发方案

将搜索结果按出发时间排序，生成可视化方案：

```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚡ 极限出发！· [X]小时后你能到达的地方

  当前时间 [HH:MM] · 最早登机 [HH:MM]
  回程：[返程时间描述]

━━━ [出发时段] 起飞 ━━━

  1️⃣ 📍 [目的地] · [吸引标语]
     ✈️ [航班号] [起飞时间]→[到达时间] · ¥[价格] · 余票[数量]
     🏨 今晚：[酒店名称] ¥[价格] · ⭐[评分] · [可订状态]
     📍 今晚还能干：[当晚可玩景点/活动]
     📍 明天白天：[第二天行程建议]
     ✈️ 回程：[航班号] [时间] · ¥[价格]
     💰 总计：约 ¥[总价]/人
     ⏰ 玩约[X]小时
     
     🔗 快速预订：
     [立即订机票](jumpUrl) | [预订酒店](jumpUrl) | [查看景点](jumpUrl)

  2️⃣ 📍 [目的地2] ...
  
  ...

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

⏰ 倒计时提醒：
  离最早航班 [航班号]([目的地]) 起飞还有 [X]h[X]min
  最晚决策时间：[时间]（要留出去机场的时间）

📊 按不同维度排序：
  [最快出发] [最便宜] [玩最久] [余票最多]

💡 AI 建议：
  "[个性化推荐理由]"

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

### 第5步：提供预订链接

**关键：每个方案必须包含可点击的预订链接**

从 FlyAI 返回的 JSON 数据中提取 `jumpUrl` 字段：
- 机票预订链接：从 search-flight 返回结果的 jumpUrl
- 酒店预订链接：从 search-hotel 返回结果的 jumpUrl
- 景点详情链接：从 search-poi 返回结果的 jumpUrl

输出格式示例：
```markdown
🔗 快速预订：
[✈️ 订机票 ¥680](https://www.fliggy.com/xxx) | [🏨 订酒店 ¥450](https://www.fliggy.com/xxx) | [📍 看景点](https://www.fliggy.com/xxx)
```

如果用户选中某个方案，可以进一步提供：
- "一键全订"功能说明
- 详细预订步骤指引
- 注意事项提醒
