# 工作流程

### 前置步骤：确保 FlyAI CLI 为最新版本

在执行任何搜索之前，必须先确保 FlyAI CLI 已安装且为最新版本。

**安装/升级 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 |
| 网络问题 | 建议用户检查网络，确保可以访问 registry.npmjs.org |

---

### 第0步：读取用户画像（双模式）

启动时尝试读取用户的历史旅行偏好，减少重复询问。

> 详见 [reference/user-profile-storage.md](reference/user-profile-storage.md)

**优先模式：Qoder Memory**

如果当前环境支持 `search_memory` 工具（Qoder 环境），调用：

```
search_memory(
  query="用户旅行画像",
  category="user_hobby",
  keywords="flyai",
  depth="shallow"
)
```

**降级模式：本地文件**

如果上述工具不可用（Cursor/Claude Desktop 等环境），读取本地文件：

```
read_file(file_path="~/.flyai/user-profile.md")
```

**读取到画像后的处理：**

| 读取结果 | 处理方式 |
|----------|----------|
| 有常驻城市 | 自动填充"出发城市"，跳过询问 |
| 有预算偏好 | 作为匹配度分析的参考 |
| 有住宿偏好 | 预填充问卷中的住宿标准 |
| 无画像/工具不可用 | 正常进入问卷流程 |

---

### 第1步：收集旅伴信息

使用 `ask_user_question` 工具收集双方旅行风格。这是一个**交互式问卷流程**，需要分别收集两位旅伴的偏好。

#### 1.1 基础信息收集

**第一轮提问（必须）：**

```
问题: "你们准备去哪里旅行？（如已确定）"
选项:
- "日本（东京/大阪/京都等）"
- "国内（杭州/成都/三亚等）"
- "东南亚（泰国/新加坡/巴厘岛等）"
- "还没定，帮我们分析完再决定"
- "其他目的地（请说明）"

问题: "你们计划几天？"
选项:
- "3-4天短途"
- "5-7天中等"
- "8天以上长途"
- "还没定"

问题: "有几个人一起去？"
选项:
- "2人（情侣/闺蜜/朋友）"
- "3人"
- "4人及以上"
```

#### 1.2 旅行风格问卷（5道核心问题）

对每位旅伴分别收集以下信息。如果旅伴不在场，可以让用户代为描述"我觉得TA是XX风格"。

**问卷问题：**

```
问题1: "【旅伴A/你】每天行程怎么安排？"
选项:
- "早起暴走，一天排满5-6个景点 🏃"
- "睡到自然醒，走到哪算哪 😴"
- "上午慢节奏，下午安排活动 ⚖️"

问题2: "【旅伴A/你】住宿标准是？"
选项:
- "干净就行，越便宜越好 💰"
- "适中，性价比要高 ⭐"
- "要有格调，体验感要好 ✨"
- "能住好的绝不凑合 👑"

问题3: "【旅伴A/你】拍照习惯是？"
选项:
- "拍一张就走，主要是体验 📷"
- "适当拍照，不会太久 📸"
- "每个角落都要出片，需要时间 🎬"

问题4: "【旅伴A/你】吃饭怎么选？"
选项:
- "随便吃点，主要是玩 🍜"
- "当地特色必须打卡 🍱"
- "网红店要排队的也得去 📍"
- "米其林/高端餐厅优先 🌟"

问题5: "【旅伴A/你】花钱态度是？"
选项:
- "能省则省，穷游快乐 💸"
- "该省省该花花，理性消费 💳"
- "旅行就是享受，钱不是问题 💎"
```

然后用同样的问题收集旅伴B的信息（或让用户描述对方风格）。

---

### 第2步：分析匹配度

根据收集到的问卷结果，进行匹配度计算：

**匹配度计算逻辑：**

| 维度 | 权重 | 计算方式 |
|-----|-----|---------|
| 行程节奏 | 30% | 相同=100分，相邻=60分，相反=20分 |
| 住宿标准 | 25% | 相差1档=80分，相差2档=50分，相差3档=20分 |
| 拍照习惯 | 20% | 相同=100分，相邻=70分，相反=30分 |
| 吃饭选择 | 15% | 相同=100分，相邻=80分，相差较大=50分 |
| 花钱态度 | 10% | 相同=100分，相邻=70分，相反=30分 |

**匹配度等级：**
- 80-100%：🟢 天生一对，放心出发
- 60-79%：🟡 有挑战但可调和，需要沟通
- 40-59%：🟠 分歧较大，强烈建议看完报告再定
- <40%：🔴 慎重考虑，可能需要分开玩部分行程

---

### 第3步：调用 FlyAI 搜索调和方案

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

**3.1 搜索折中酒店**

针对住宿标准冲突，搜索兼顾双方的酒店：

```bash
flyai search-hotel --dest-name "[目的地]" --check-in-date [入住日期] --check-out-date [离店日期] --hotel-stars "[折中星级]" --sort rate_desc
```

**折中逻辑示例：**
- A想便宜 + B想有格调 → 搜索4星酒店（设计感不错但价格合理）
- 或者：部分天数住经济型，部分天数住体验型

**3.2 搜索景点并分类标注**

```bash
flyai search-poi --city-name "[目的地城市]" --poi-level 4
```

根据景点特性和双方偏好，标注：
- 📸 = 出片点（需要留拍照时间）
- 📌 = 打卡点（快速游览）
- 🌅 = 早起景点（给早起的人）
- 😴 = 下午景点（适合晚起汇合）

**3.3 搜索机票/交通**

```bash
flyai search-flight --origin "[出发城市]" --destination "[目的地]" --dep-date [出发日期] --back-date [返程日期] --sort-type 3
```

---

### 第4步：生成匹配度报告

输出格式如下：

```markdown
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💑 旅伴匹配度报告
   [旅伴A名字] × [旅伴B名字]

📊 总匹配度：[XX]%  [匹配度等级emoji] [等级描述]

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

🟢 你们一致的地方（不会吵架）：
  · [一致点1] ✅
  · [一致点2] ✅
  · [一致点3] ✅

🔴 可能冲突的地方（提前说好！）：

  冲突1️⃣：[冲突类型] · [严重程度]⚠️
  ┌──────────────────────────────────┐
  │ [旅伴A]：[A的偏好]                 │
  │ [旅伴B]：[B的偏好]                 │
  │                                  │
  │ 💊 AI调和方案：                    │
  │ [具体调和建议]                     │
  │                                  │
  │ 🏨 推荐酒店（基于FlyAI搜索）：       │
  │ · [酒店名] ¥[价格]/晚              │
  │   ⭐[评分] [亮点描述]              │
  │   💡 [为什么这个适合你们]           │
  │   👉 [立即预订](booking_url)       │
  │                                  │
  │ 📍 景点安排建议：                   │
  │ · [景点1] 📸 出片点（预留40min）    │
  │ · [景点2] 📌 打卡点（快速）         │
  │   👉 [查看详情](poi_url)           │
  └──────────────────────────────────┘
  
  冲突2️⃣：...
  （同上格式）

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

📋 AI 建议的"旅行公约"（出发前一起看！）

  1. [公约条款1]
  2. [公约条款2]
  3. [公约条款3]
  4. [公约条款4]
  5. [公约条款5]

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

✈️ 一键预订通道

🛫 机票推荐：
  · [航班信息] ¥[价格]
    👉 [立即预订机票](flight_booking_url)

🏨 酒店推荐：
  · [酒店1] ¥[价格]/晚 ⭐[评分]
    👉 [立即预订酒店](hotel_booking_url)
  · [酒店2] ¥[价格]/晚 ⭐[评分]
    👉 [立即预订酒店](hotel_booking_url)

🎡 景点门票：
  · [景点1] ¥[价格]
    👉 [购买门票](poi_booking_url)
  · [景点2] ¥[价格]
    👉 [购买门票](poi_booking_url)

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

📤 [把报告分享给旅伴看]
🗺 [基于调和方案直接生成行程]

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

---

---
