# Taobao Search

> 淘宝商品搜索。当用户想要搜索商品、找某品牌产品、比价、查看新款等电商购物场景时激活。

- Skill: `oppo-mente-lab/taobao-search` (Agent Skill)
- Install (CLI): `npx skillmds@latest add oppo-mente-lab/taobao-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/oppo-mente-lab/taobao-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: oppo-mente-lab (https://skillmd.com/u/oppo-mente-lab)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/oppo-mente-lab/taobao-search

---


# Taobao Search Tool

通过淘宝 Deep Link 直达搜索页面，浏览商品并为用户提供购物建议。

## 🎯 When to Use

Use this skill when user asks about:

✅ **商品搜索** - "帮我找阿迪达斯今年新款男鞋"
✅ **品牌查找** - "搜一下耐克跑步鞋"
✅ **比价购物** - "淘宝上看看有什么好的蓝牙耳机"
✅ **新品浏览** - "今年有什么新款连衣裙"
✅ **特定条件搜索** - "200元以内的双肩包"

## 📋 Workflow

### 标准搜索流程

```
1. 解析用户意图，提取搜索关键词
2. 通过 device(action="open", uri="taobao://...") 跳转淘宝搜索页
3. 等待淘宝 App 加载搜索结果：device(action="act", kind="wait", timeMs=1500)
4. 拉取页面 UI 树：device(action="snapshot", format="compact")
   —— 这是商品名/价格/店铺/销量等文字信息的**唯一来源**
5. 从 snapshot 返回的 text 节点里逐条提取商品信息（详见 Step 3）
6. 基于提取到的具体商品信息回答用户（200字以内，必须包含真实数字和细节）
```

> ⚠️ **绝对禁止**: 不要用 `read_file` 读截图 PNG（如 `read_file("/sdcard/.xomniclaw/workspace/screenshots/*.png")`）。PNG 是二进制，read_file 会以 UTF-8 解码出大量乱码并撑爆上下文窗口，整个 session 会被 `context window exceeds limit` 终止。**只用 `device(action="snapshot")` 读页面文字**。

## 🔗 Deep Link 构造规则

淘宝搜索 Deep Link 格式：

```
taobao://s.taobao.com/search?q={关键词}
```

关键词用 `+` 连接多个搜索词，示例：

| 用户意图 | 搜索关键词 | Deep Link |
|---------|-----------|-----------|
| 阿迪达斯今年新款男鞋 | 阿迪达斯+2026+新款+男鞋 | `taobao://s.taobao.com/search?q=阿迪达斯+2026+新款+男鞋` |
| 耐克跑步鞋 | 耐克+跑步鞋 | `taobao://s.taobao.com/search?q=耐克+跑步鞋` |
| 200元蓝牙耳机 | 蓝牙耳机 | `taobao://s.taobao.com/search?q=蓝牙耳机` |

## 🚀 X-OmniClaw Implementation

**Tool**: `device` (DeviceTool — 统一设备控制工具)

⚠️ **重要**: 不要使用 shell `am start` 命令跳转 Deep Link（会因 SecurityException 权限拒绝），必须使用 `device(action="open", uri="...")` 通过 X-OmniClaw 应用上下文发起 `ACTION_VIEW` Intent。

### Step 1: Deep Link 跳转淘宝搜索页

```kotlin
// 构造搜索关键词
val keyword = "阿迪达斯+2026+新款+男鞋"
val deepLink = "taobao://s.taobao.com/search?q=$keyword"

// 通过 device tool 的 open action + uri 参数跳转
device(action = "open", uri = deepLink)
```

### Step 2: 等待页面加载并拉取 UI 树

```kotlin
// 等待淘宝 App 启动并加载搜索结果
device(action = "act", kind = "wait", timeMs = 1500)

// 拉取页面 UI 树(含所有可见文本节点) —— 商品信息的唯一来源
device(action = "snapshot", format = "compact")
```

> 不要在这一步用 `screenshot`：`screenshot` 只用于内部 grounding（定位点击坐标），不会把图像内容送给你。`snapshot` 才会把页面上每个可见文本节点（含商品名、价格、店铺名）以纯文本方式返回给你。

### Step 3: 从 snapshot 的 text 节点中提取商品信息（关键步骤）

snapshot 返回的是 UI 树文本，例如：
```
text "ULTRABOOST 5X 2026春季款男子跑步鞋"
text "¥899"
text "阿迪达斯官方旗舰店"
text "2000+人付款"
```

**你必须从 text 节点逐条提取以下字段**：

- **商品完整名称**（含品牌、系列、型号，如 "Nike Air Max 270 React"）
- **价格**（精确到元，如 ¥599、¥1299）
- **颜色/配色**（如 黑白、灰蓝、荧光绿）—— 若 snapshot 中没有出现颜色文字，可省略此字段
- **店铺名称**（如 "耐克官方旗舰店"、"XX运动专营店"）
- **销量/付款人数**（如 "2000+人付款"、"月销500+"）
- **标签/卖点**（如 "官方正品"、"新品首发"、"包邮"）

> 如果 snapshot 文本节点稀疏（页面还在加载或被弹窗遮挡），**再次 `device(action="act", kind="wait", timeMs=1500)` 然后重新 snapshot**；不要 `read_file` 截图 PNG。

### Step 4: 基于具体商品信息回答用户

⛔ **严禁笼统回复**。以下是禁止出现的回复方式：

```
❌ "搜索结果展示了多个商家的耐克新款男鞋，包含不同款式和价位"
❌ "你可以在当前页面继续上下滑动查看更多商品"
❌ "点击感兴趣的商品查看详情和价格"
❌ "包含不同款式和价位，可以根据你的喜好选择"
```

这类回复等于没有回答，用户自己也能看到屏幕。你的价值在于**帮用户总结屏幕上的具体商品信息**。

✅ **必须包含具体数字和细节**，回复格式：

```
为您在淘宝搜索了"{搜索词}"，挑选了几款值得关注的：

1. {完整商品名含型号} - ¥{具体价格}，{颜色}，{店铺名}，{销量}
2. {完整商品名含型号} - ¥{具体价格}，{颜色}，{店铺名}，{销量}
3. {完整商品名含型号} - ¥{具体价格}，{颜色}，{店铺名}，{销量}

价格区间¥{最低}-¥{最高}。{1-2句具体购物建议，如哪款性价比高、哪家是官方旗舰店等}。需要我点开某款看详情吗？
```

## 💡 Complete Example

**用户**: "帮我找阿迪达斯今年新款男鞋"

**执行流程**:

```kotlin
// 1. 解析意图 → 关键词: 阿迪达斯+2026+新款+男鞋
val keyword = "阿迪达斯+2026+新款+男鞋"

// 2. Deep Link 跳转淘宝（使用 device tool 的 uri 参数）
device(action = "open", uri = "taobao://s.taobao.com/search?q=$keyword")

// 3. 等待加载并拉取 UI 树
device(action = "act", kind = "wait", timeMs = 1500)
device(action = "snapshot", format = "compact")  // ← 唯一信息来源

// 4. 从 snapshot 的 text 节点中提取: 商品名(含型号)、价格、颜色、店铺名、销量
// 5. 基于提取到的具体信息回答用户（200字以内）
```

**回复示例**（注意每一条都是从 snapshot 的 text 节点中实际读取的具体信息）：

```
为您在淘宝搜索了"阿迪达斯2026新款男鞋"，挑选了几款值得关注的：

1. Adidas ULTRABOOST 5X 2026春季款男子跑步鞋 - ¥899，黑白配色，阿迪达斯官方旗舰店，2000+人付款
2. Adidas Originals GAZELLE Indoor 板鞋 - ¥799，深蓝/白色，adidas三叶草官方旗舰店，1500+人付款
3. Adidas SAMBA OG 德训鞋经典复刻 - ¥699，白色/黑尾，得物adidas授权店，3000+人付款

价格区间¥699-¥899。3款都是今年新配色，其中SAMBA销量最高性价比也不错；如果追求跑步性能推荐ULTRABOOST。前两家是官方旗舰店更有保障。需要我点开某款看详情吗？
```

## 🔍 关键词提取策略

从用户查询中提取搜索关键词时：

```kotlin
// 品牌 + 时间 + 品类 组合
val brand = "阿迪达斯"     // 品牌名
val year = "2026"          // 年份（"今年"→当前年份）
val category = "新款+男鞋"  // 商品类别

val keyword = "$brand+$year+$category"
```

**时间词映射**：

| 用户表述 | 转换为 |
|---------|-------|
| 今年 | 2026 |
| 新款 | 2026+新款 |
| 最新 | 2026+新款 |
| 去年 | 2025 |

## ⚠️ 注意事项

- **必须使用 device tool**: 通过 `device(action="open", uri="...")` 跳转，不要用 shell `am start`（会报 SecurityException）
- **淘宝 App 必须已安装**: Deep Link 需要淘宝 App，若未安装会返回 ActivityNotFoundException
- **登录状态**: 部分搜索结果需要登录淘宝账号才能完整展示
- **网络依赖**: 需要联网才能加载搜索结果
- **加载时间**: 网络较慢时适当增加 `wait` 的 timeMs；snapshot 文本稀疏时再 wait 1-2 秒后重 snapshot
- **回复字数**: 字数控制在 200 字以内，但必须包含从 snapshot 中读取的具体商品信息
- **严禁套话**: 绝对不能回复"包含不同款式和价位""你可以继续浏览"这类笼统废话。如果 snapshot 里没有足够商品文字，应再 wait 后重新 snapshot，仍不行则如实说明
- **严禁 read_file 截图 PNG**: `read_file("/sdcard/.../screenshots/*.png")` 会返回二进制乱码并撑爆上下文，整个 session 会被 `context window exceeds limit` 终止；任何"读截图内容"的需求一律改用 `device(action="snapshot")`

## 🔄 Error Handling

### 淘宝未安装

```kotlin
// device(action="open", uri="...") 会返回 ActivityNotFoundException 错误
// 备选方案：使用浏览器打开
device(action = "open", uri = "https://s.taobao.com/search?q=$keyword")
```

### 搜索无结果

```kotlin
// 如果搜索结果为空，尝试简化关键词
val simplifiedKeyword = "阿迪达斯+男鞋"  // 去掉年份等限定词
device(action = "open", uri = "taobao://s.taobao.com/search?q=$simplifiedKeyword")
```

### 页面加载超时

```kotlin
// 增加等待时间并重新拉取 UI 树
device(action = "act", kind = "wait", timeMs = 2000)
device(action = "snapshot", format = "compact")
// 如果 snapshot 仍无商品 text 节点，提示用户检查网络/登录状态
```

## 📱 Supported Queries

| 查询类型 | 示例 | 搜索关键词 |
|---------|------|-----------|
| 品牌+品类 | "找耐克跑步鞋" | 耐克+跑步鞋 |
| 品牌+年份+品类 | "阿迪达斯今年新款" | 阿迪达斯+2026+新款 |
| 品类+价格 | "300以内的双肩包" | 双肩包 |
| 泛品类 | "好看的连衣裙" | 连衣裙+新款 |
| 特定商品 | "iPhone 16 手机壳" | iPhone+16+手机壳 |

