# 常见攻略平台解析指南

本文档说明如何处理不同来源的攻略内容。

## 目录

1. [支持的输入方式](#支持的输入方式)
2. [链接解析策略](#链接解析策略)
3. [内容提取要点](#内容提取要点)
4. [降级处理方案](#降级处理方案)

---

## 支持的输入方式

| 输入方式 | 优先级 | 说明 |
|---------|-------|------|
| 链接 | ⭐⭐⭐⭐⭐ | 最优体验，自动抓取解析 |
| 文字 | ⭐⭐⭐⭐ | 通用方式，直接粘贴 |
| 截图 | ⭐⭐⭐ | 方便但需OCR，准确度稍低 |
| 口述 | ⭐⭐ | 最灵活但信息最模糊 |

---

## 链接解析策略

### 小红书

**链接格式**：
```
https://www.xiaohongshu.com/explore/[id]
https://xhslink.com/[短链]
```

**解析方法**：
```python
fetch_content(
  url="[小红书链接]",
  query="行程 景点 酒店 餐厅 Day"
)
```

**提取重点**：
- 标题（通常包含目的地+天数）
- 正文（行程安排）
- 图片中的文字（可能有更详细信息）

**可能的限制**：
- 部分笔记需要登录查看
- App分享链接可能无法直接访问

### 抖音

**链接格式**：
```
https://www.douyin.com/video/[id]
https://v.douyin.com/[短链]
```

**解析方法**：
```python
fetch_content(
  url="[抖音链接]",
  query="行程 攻略 景点 酒店"
)
```

**提取重点**：
- 视频标题/描述
- 评论区置顶（可能有详细攻略）
- 博主简介中的关联笔记

**可能的限制**：
- 视频内容无法直接提取
- 需要用户口述或提供文字版

### 携程/马蜂窝

**链接格式**：
```
# 携程游记（PC端）
https://you.ctrip.com/travels/[dest]/[id].html

# 携程社区（移动端）⚠️ 需特殊处理
https://m.ctrip.com/webapp/you/community/detail?articleId=[id]

# 马蜂窝游记
https://www.mafengwo.cn/i/[id].html
```

**解析方法**：

**1. PC 端链接 - 使用 fetch_content**：
```python
fetch_content(
  url="[游记链接]",
  query="Day 行程 酒店 景点 交通 费用"
)
```

**2. 移动端链接（m.ctrip.com）- 使用 Browser Agent**：

携程移动端页面是 JS 动态渲染，`fetch_content` 无法获取完整内容，需要使用 Browser Agent：

```python
Agent(
  subagent_type="Browser",
  description="获取携程攻略",
  prompt="""
  请打开 https://m.ctrip.com/webapp/you/community/detail?articleId=[id] 
  页面加载后，向下滚动阅读完整内容，提取：
  1. 目的地、天数
  2. 每日行程安排
  3. 景点、酒店、餐厅
  4. 交通方式
  5. 费用预算
  整理成文字返回。
  """
)
```

**提取重点**：
- 结构化的日程安排（通常有Day1/Day2格式）
- 费用明细
- 酒店和景点的具体名称

**优势**：
- 内容结构化程度高
- PC 端通常可以直接访问

**注意**：
- 移动端链接必须用 Browser Agent
- 用户分享的链接通常是移动端格式

### 微信公众号

**链接格式**：
```
https://mp.weixin.qq.com/s/[id]
```

**解析方法**：
```python
fetch_content(
  url="[公众号链接]",
  query="行程 攻略 推荐 酒店 景点"
)
```

**可能的限制**：
- 部分文章需要微信环境访问

---

## 内容提取要点

### 必须提取的信息

| 类别 | 关键词/模式 | 示例 |
|------|------------|------|
| 目的地 | 城市名、景区名 | "大理"、"洱海" |
| 天数 | N天M晚、Day1/Day2 | "5天4晚"、"Day 1" |
| 住宿 | 酒店、民宿、客栈名 | "云隐山房"、"听花堂" |
| 景点 | 景区名、地标 | "苍山感通索道"、"玉龙雪山" |
| 餐厅 | 餐厅名、美食推荐 | "段公子·再回大理" |
| 交通 | 航班、火车、租车 | "动车2小时"、"租电瓶车" |
| 费用 | 价格、人均、预算 | "人均4000"、"门票¥50" |

### 时间线索提取

```
原文模式              →    提取结果
"6天5晚"              →    天数=6, 住宿晚数=5
"Day1 到达"           →    第1天
"第一天上午"          →    Day1 AM
"最后一天"            →    最后一天
"5.1-5.5"            →    日期范围
```

### 位置线索提取

```
原文模式              →    提取结果
"洱海边那家"          →    POI=洱海
"古城内"              →    区域=古城
"离双廊20分钟"        →    距离参考
"机场出来40分钟"      →    交通时间
```

---

## 降级处理方案

### 链接无法访问

**触发条件**：
- 平台限制爬取
- 链接已失效
- 需要登录

**处理方式**：
```
提示用户：
"这个链接我暂时读不了，可能是平台限制。
你可以：
1️⃣ 把攻略内容复制粘贴给我
2️⃣ 发几张攻略截图
3️⃣ 大概跟我说说内容，我来搜索匹配"
```

### 内容信息不完整

**触发条件**：
- 只有景点没有酒店
- 只有大概方向没有具体名字
- 口述描述模糊

**处理方式**：

1. **搜索补全**
```bash
# 用关键词搜索相关内容
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai keyword-search \
  --query "[用户提到的关键词] 攻略"
```

2. **追问确认**
使用 `ask_user_question` 工具：
```json
{
  "questions": [
    {
      "question": "原攻略里住的酒店，你还记得叫什么名字吗？",
      "header": "酒店确认",
      "options": [
        { "label": "记得，叫[X]", "description": "我来输入名字" },
        { "label": "忘了，帮我推荐类似的", "description": "搜索同类型酒店" },
        { "label": "没提到具体酒店", "description": "跳过，后面再选" }
      ]
    }
  ]
}
```

### 口述内容匹配

**场景**：
用户说"我看到一个大概是这样的攻略..."

**处理流程**：

1. 提取关键词
```
用户：我在小红书上看到一个大理丽江5天的攻略，
     大概是先去洱海环游，然后去苍山，
     再坐火车去丽江，玉龙雪山，
     住的好像是一个叫云什么的民宿...

提取：
- 目的地：大理、丽江
- 天数：5天
- 景点：洱海、苍山、玉龙雪山
- 住宿关键词：云XX
- 交通：火车（大理→丽江）
```

2. 搜索匹配
```bash
# 搜索可能的酒店
NODE_TLS_REJECT_UNAUTHORIZED=0 flyai search-hotel \
  --dest-name "大理" --key-words "云" --poi-name "洱海"
```

3. 确认结果
```json
{
  "questions": [
    {
      "question": "你说的是这家酒店吗？",
      "header": "酒店确认",
      "options": [
        { "label": "云隐山房", "description": "洱海边，无边泳池，¥580/晚" },
        { "label": "云上花开客栈", "description": "古城附近，¥320/晚" },
        { "label": "都不是", "description": "我再想想或跳过" }
      ]
    }
  ]
}
```

---

## 解析质量优化

### 信息可信度评估

| 信息来源 | 可信度 | 处理方式 |
|---------|-------|---------|
| 明确名称 | ⭐⭐⭐⭐⭐ | 直接用 FlyAI 验证 |
| 模糊描述 | ⭐⭐⭐ | 搜索匹配 + 用户确认 |
| 口述记忆 | ⭐⭐ | 多候选 + 用户选择 |
| 推测信息 | ⭐ | 明确标注"AI推测" |

### 时效性检查

```
⚠️ 时效性提醒：

原攻略发布于 [发布时间]，距今已 [N] 个月

可能已过时的信息：
- 价格（酒店/机票可能涨跌）
- 营业状态（部分店铺可能已关闭）
- 开放时间（景区可能调整）
- 政策（如预约规则）

👉 我会用飞猪实时数据帮你验证
```

### 缺失信息补全

当原攻略缺少关键信息时，主动补充：

```
💡 原攻略没提到，但你可能需要知道：

✈️ 大交通
   原攻略只说了玩什么，没说怎么去
   → 已帮你搜索 [出发城市]→[目的地] 机票

🎫 预约信息
   玉龙雪山大索道8月旺季需要提前预约
   → 建议到达丽江当天就预约第二天的票

☔ 天气提醒
   8月是云南雨季，下午常有阵雨
   → 建议携带雨具，户外活动尽量安排上午
```
