Skip to content
Back to skills

Pm Search

ASecurity

Use when: 需要进行市场调研数据收集、竞品信息采集、行业舆情监控、合规政策检查 Do NOT use when: 已有完整数据无需补充、仅需内部数据分析无需外部信息

  • 71 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 27, 2026
data-aipythongobashgitapi

Works with

  • claude code
  • cursor
  • cli
  • api
  • mcp

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned September 24, 2026

npx -y skills add konglong87/superPM --skill pm-search --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pm Search?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pm Search
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/konglong87-pm-search/badge)](https://www.skillsdirectory.com/skills/konglong87-pm-search)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: pm-search
description: |
  Use when: 需要进行市场调研数据收集、竞品信息采集、行业舆情监控、合规政策检查
  Do NOT use when: 已有完整数据无需补充、仅需内部数据分析无需外部信息
allowed-tools:
  - Read
  - Write
  - AskUserQuestion
  - Agent
  - Bash
  - WebSearch
  - mcp__exa__web_search_exa
  - mcp__exa__web_fetch_exa
---

## Preamble (run first)

```bash
# 自动发现 AnySearch CLI 安装位置
# 支持 Claude Code / OpenCode / OpenClaw / Cursor / pip install / 手动克隆等多种安装方式
ANYSEARCH_CLI=""
for candidate in \
  "$HOME/.claude/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.opencode/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.openclaw/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.cursor/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/skills/anysearch/scripts/anysearch_cli.py" \
  "$HOME/.anysearch/scripts/anysearch_cli.py" \
  "/usr/local/bin/anysearch_cli.py" \
  "$HOME/bin/anysearch_cli.py"; do
  if [ -f "$candidate" ]; then
    ANYSEARCH_CLI="$candidate"
    break
  fi
done

# pip install 方式
if [ -z "$ANYSEARCH_CLI" ]; then
  PIP_LOCATION=$(python3 -c "import importlib.util; spec=importlib.util.find_spec('anysearch'); print(spec.submodule_search_locations[0] if spec and spec.submodule_search_locations else '')" 2>/dev/null)
  if [ -n "$PIP_LOCATION" ] && [ -f "$PIP_LOCATION/scripts/anysearch_cli.py" ]; then
    ANYSEARCH_CLI="$PIP_LOCATION/scripts/anysearch_cli.py"
  fi
fi

# which 方式
if [ -z "$ANYSEARCH_CLI" ]; then
  WHICH_CLI=$(which anysearch_cli.py 2>/dev/null)
  if [ -n "$WHICH_CLI" ] && [ -f "$WHICH_CLI" ]; then
    ANYSEARCH_CLI="$WHICH_CLI"
  fi
fi

echo "🔍 PM-Search V2.1 - 联网搜索整合工具"
echo "搜索优先级:AnySearch → Exa MCP → WebSearch"
echo "支持并发搜索:市场调研 | 竞品分析 | 行业数据 | 舆情监控 | 合规检查"

if [ -n "$ANYSEARCH_CLI" ]; then
  echo "✅ AnySearch: $ANYSEARCH_CLI"
else
  echo "⚠️  AnySearch 未安装,将自动降级到 Exa MCP / WebSearch"
  echo "   安装: git clone https://github.com/konglong87/anysearch.git ~/.claude/skills/anysearch"
fi
echo ""
```

---

## 写入时边界

只讨论时不写文件,启动检查不创建目录。用户要求保存产物时,先确认当前产品、精确输出路径及已有文件的覆盖/追加选择;确认后**仅在实际 Write 前**创建该输出文件的父目录。完整安装可参见 `skills/_shared/artifact-policy.md`,单独安装本 skill 也按本段执行。

---

## 搜索工具优先级(核心规则)

**所有搜索必须按以下优先级选择工具,不得跳级:**

| 优先级 | 工具 | 适用场景 | 调用方式 |
|--------|------|---------|---------|
| **1(首选)** | **AnySearch** | 中文搜索、垂直领域、批量搜索、全文提取 | Bash 调用 `anysearch_cli.py`(路径由 Preamble 自动发现,见上方输出) |
| **2(备选)** | **Exa MCP** | 英文/代码/公司搜索、语义搜索 | `mcp__exa__web_search_exa` 工具 |
| **3(降级)** | **WebSearch** | 仅当 AnySearch 和 Exa 都不可用时 | `WebSearch` 工具 |

**AnySearch 调用规范**:
- 搜索:`python3 <anysearch_cli路径> search "查询词" --max_results 5`
- 垂直域搜索:`python3 <anysearch_cli路径> search "查询词" --domain finance --sub_domain finance.cn_stock`
- 全文提取:`python3 <anysearch_cli路径> extract "URL"`
- 批量搜索:`python3 <anysearch_cli路径> batch_search --query "q1" --query "q2"`
- 列出子域:`python3 <anysearch_cli路径> list_domains --domain finance`

### AnySearch 垂直域配置

**垂直域使用优先级**:
1. **先查完整域映射** — Read `skills/_shared/anysearch-pm-domains.md`,按当前 PM 场景找推荐垂直域组合
2. **列出可用子域** — `python3 <anysearch_cli路径> list_domains --domain {domain}` 查看域的最新子域和参数 schema
3. **执行垂直搜索** — `python3 <anysearch_cli路径> search "查询词" --max_results 5 --domain {domain} --sub_domain {sub_domain}`

**pm-search 五种搜索类型的默认垂直域**:

| 搜索类型 | 推荐垂直域 | 子域 | 适用原因 |
|---------|-----------|------|---------|
| 市场调研 | `finance` | `finance.us_stock`, `finance.cn_stock`, `finance.news` | 上市对标公司数据、行业新闻 |
| 竞品分析 | `business` + `finance` | `business.company`, `finance.cn_stock` | 公司注册信息、财务数据 |
| 行业数据 | `finance` | `finance.news`, `finance.cn_stock` | 行业新闻、市场规模 |
| 舆情监控 | 通用搜索 | 无垂直域 | 社交媒体、用户评价覆盖广 |
| 合规检查 | `legal` | `legal.statute`, `legal.case` | 法律法规、司法案例 |

> 💡 完整 17 域 × 37 技能 × 11 行业 PM 场景的垂直域映射见 `skills/_shared/anysearch-pm-domains.md`。

### 降级判断规则

1. **AnySearch 不可用**:脚本未安装、API key 缺失、网络超时 → 降级到 Exa MCP
2. **Exa MCP 不可用**:工具调用返回错误 → 降级到 WebSearch
3. **使用 WebSearch 时**:在报告中标注「⚠️ 数据来源:WebSearch(降级模式),建议配置 AnySearch 以提升中文搜索质量」

### 全文提取优先级

| 优先级 | 工具 | 调用方式 |
|--------|------|---------|
| **1** | AnySearch extract | `python3 <anysearch_cli路径> extract "URL"` |
| **2** | Exa MCP fetch | `mcp__exa__web_fetch_exa` 工具 |
| **3** | WebFetch | `WebFetch` 工具 |

---

## 跨 Agent 交互规则

当流程要求与用户交互时:

1. 如果当前环境支持 AskUserQuestion,使用 AskUserQuestion(最佳体验)。
2. 如果当前环境不支持 AskUserQuestion,必须用普通聊天消息提出同样问题。
3. 一次只问一个问题。
4. 提问后必须停止当前回合,等待用户回答(STOP and WAIT)。
5. 不得在用户回答前生成文档、写入 docs。
6. 已有 docs 文件不能替代本轮用户回答。

---

## 执行流程

### 步骤 0: 参数解析(自动路由)

如果调用时携带 `--type=xxx` 参数(如 `/pm-search --type=competitor`),直接映射到对应搜索类型,**跳过步骤 1 的交互选择**:

| 参数 | 搜索类型 | 执行路径 |
|------|---------|---------|
| `--type=market` | 市场调研 | 步骤 2A - 市场调研 |
| `--type=competitor` | 竞品分析 | 步骤 2A - 竞品分析 |
| `--type=data` | 行业数据 | 步骤 2A - 行业数据 |
| `--type=opinion` | 舆情监控 | 步骤 2A - 舆情监控 |
| `--type=legal` | 合规检查 | 步骤 2A - 合规检查 |
| `--type=all` | 综合搜索 | 步骤 2B - 综合并发搜索 |

解析到类型后,直接跳转对应执行路径,无需询问用户。
如果 `--type` 值不在上述映射中,视为未知参数,降级到步骤 1 的交互选择。
**注意**:如果当前对话中用户未明确提及产品/行业领域,应先询问确认后再执行搜索。

如果**未携带** `--type` 参数(用户直接输入 `/pm-search` 或自然语言触发),继续步骤 1 的交互选择。

---

### 步骤 1: 确定搜索类型(主 agent - 用户交互)

使用 AskUserQuestion 询问:

> 🔍 联网搜索整合工具 - 选择搜索类型
>
> 请选择您需要进行的研究类型(可多选):
>
> A) 市场调研 - 市场规模、趋势、用户画像
> B) 竞品分析 - 竞品功能、定价、策略
> C) 行业数据 - 行业报告、统计数据
> D) 舆情监控 - 用户评价、媒体报道
> E) 合规检查 - 政策法规、行业标准
> F) 综合搜索 - 以上全部(并发执行)
> G) 其他(请手动输入)

**用户选择后,根据选择执行不同流程。**

---

## Subagent 并发搜索架构

---

### 步骤 2A: 单一类型搜索(主 agent 直接执行)

**如果用户选择单个搜索类型,直接执行:**

**⚠️ 所有搜索必须遵循「搜索工具优先级」规则,首选 AnySearch,降级到 Exa MCP,最后才用 WebSearch。**

#### 市场调研

```markdown
按搜索优先级执行:

搜索关键词:"{产品领域} 市场规模 2026"
搜索关键词:"{产品领域} 市场趋势"
搜索关键词:"{产品领域} 用户画像"

首选 AnySearch(带垂直域 --domain finance --sub_domain finance.cn_stock),
调用方式参考「搜索工具优先级」章节。失败则降级到 Exa MCP,最后才用 WebSearch。

数据源优先级:
1. 艾瑞咨询、易观分析、QuestMobile(权威报告)
2. 36氪、虎嗅(行业媒体)
3. 工信部、网信办(政策法规)

整合结果 → 生成:docs/01-需求调研/市场调研报告.md
```

#### 竞品分析

```markdown
按搜索优先级执行:

搜索关键词:"{产品领域} 主要竞品"
搜索关键词:"{竞品名称} 产品功能"
搜索关键词:"{竞品名称} 定价策略"

首选 AnySearch(带垂直域 --domain finance --sub_domain finance.cn_stock),
失败则降级到 Exa MCP,最后才用 WebSearch。

数据源:
- 七麦数据、蝉妈妈(应用数据)
- 官网、App Store、产品评测

整合结果 → 生成:docs/01-需求调研/竞品分析报告.md
```

#### 行业数据

```markdown
按搜索优先级执行:

搜索关键词:"{行业} 行业报告 2026"
搜索关键词:"{行业} 统计数据"
搜索关键词:"{行业} 发展趋势"

首选 AnySearch(带垂直域 --domain finance --sub_domain finance.cn_stock),
失败则降级到 Exa MCP,最后才用 WebSearch。

数据源:
- 国家统计局
- 行业协会官网
- 咨询公司报告

整合结果 → 生成:docs/01-需求调研/行业数据报告.md
```

#### 舆情监控

```markdown
按搜索优先级执行:

搜索关键词:"{产品/品牌} 用户评价"
搜索关键词:"{产品/品牌} 媒体报道"
搜索关键词:"{产品/品牌} 微博热搜"

首选 AnySearch(通用搜索,无垂直域),
失败则降级到 Exa MCP,最后才用 WebSearch。

数据源:
- 微博、知乎、小红书(用户评价)
- 新闻媒体(报道)
- 黑猫投诉(投诉信息)

整合结果 → 生成:docs/01-需求调研/舆情监控报告.md
```

#### 合规检查

```markdown
按搜索优先级执行:

搜索关键词:"{行业} 政策法规 2026"
搜索关键词:"{行业} 监管要求"
搜索关键词:"{行业} 合规标准"

首选 AnySearch(通用搜索,无垂直域),
失败则降级到 Exa MCP,最后才用 WebSearch。

数据源:
- 政府官网(工信部、网信办、市场监管总局)
- 法律法规数据库
- 行业协会合规指南

整合结果 → 生成:docs/01-需求调研/合规检查报告.md
```

---

### 步骤 2B: 综合并发搜索(Subagent 并行执行)

**如果用户选择"综合搜索"或选择多个类型,使用 Agent tool 并发执行:**

**⚠️ 每个 subagent prompt 必须包含「搜索工具优先级」自发现指令(subagent 看不到主 agent 的 Preamble)。**

#### 搜索工具优先级块(嵌入每个 subagent prompt)

以下块必须原样嵌入每个 subagent 的 prompt 开头:

```
【搜索工具优先级 - 必须遵守】
1. 首选 AnySearch:先定位 anysearch_cli.py。
   常见安装路径(按顺序尝试):
   ~/.claude/skills/anysearch/scripts/anysearch_cli.py
   ~/.opencode/skills/anysearch/scripts/anysearch_cli.py
   ~/.openclaw/skills/anysearch/scripts/anysearch_cli.py
   ~/.cursor/skills/anysearch/scripts/anysearch_cli.py
   ~/.anysearch/scripts/anysearch_cli.py
   $(which anysearch_cli.py 2>/dev/null)
   或 pip show anysearch 查找安装位置。
   找到后 Bash 调用 python3 <路径> search "查询词" --max_results 5。
   市场/竞品/行业类搜索加 --domain finance --sub_domain finance.cn_stock。
2. AnySearch 不可用(脚本不存在/API报错/超时)→ 降级到 mcp__exa__web_search_exa
3. Exa 不可用 → 降级到 WebSearch,并在输出中标注「⚠️ 降级模式」
```

#### 执行命令

```markdown
使用 Agent tool 并发派发 5 个 subagent:

**Subagent 1: Market Research**
- type: "general-purpose"
- prompt: "【搜索工具优先级块】+ 执行市场调研搜索,产品领域:{产品领域},搜索市场规模/趋势/用户画像,输出到 docs/01-需求调研/market-research.md"

**Subagent 2: Competitor Analysis**
- type: "general-purpose"
- prompt: "【搜索工具优先级块】+ 执行竞品分析搜索,产品领域:{产品领域},搜索主要竞品/功能/定价,输出到 docs/01-需求调研/competitor-analysis.md"

**Subagent 3: Industry Data**
- type: "general-purpose"
- prompt: "【搜索工具优先级块】+ 执行行业数据搜索,行业:{行业},搜索行业报告/统计数据/趋势,输出到 docs/01-需求调研/industry-data.md"

**Subagent 4: Public Opinion**
- type: "general-purpose"
- prompt: "【搜索工具优先级块】+ 执行舆情监控搜索,关键词:{产品/品牌},搜索用户评价/媒体报道/社交媒体,输出到 docs/01-需求调研/public-opinion.md"

**Subagent 5: Compliance Check**
- type: "general-purpose"
- prompt: "【搜索工具优先级块】+ 执行合规检查搜索,行业:{行业},搜索政策法规/监管要求/合规标准,输出到 docs/01-需求调研/compliance-check.md"

**并发执行:在单个消息中调用 5 次 Agent tool**
```

#### Agent 调用示例

```markdown
**在一条消息中并发调用:**

[Agent tool call 1 - Market Research]
[Agent tool call 2 - Competitor Analysis]
[Agent tool call 3 - Industry Data]
[Agent tool call 4 - Public Opinion]
[Agent tool call 5 - Compliance Check]

**等待所有 subagent 完成**
```

---

### 步骤 3: 主 Agent 整合结果

**读取所有 subagent 生成的报告:**

```bash
# 读取各个报告
read docs/01-需求调研/market-research.md
read docs/01-需求调研/competitor-analysis.md
read docs/01-需求调研/industry-data.md
read docs/01-需求调研/public-opinion.md
read docs/01-需求调研/compliance-check.md
```

**整合成综合报告:**

使用 Write 生成:`docs/01-需求调研/市场调研报告.md`

**报告结构:**

```markdown
# 综合市场调研报告

## 一、市场规模与趋势
[来自 market-research.md]

## 二、竞品分析
[来自 competitor-analysis.md]

## 三、行业数据
[来自 industry-data.md]

## 四、舆情监控
[来自 public-opinion.md]

## 五、合规检查
[来自 compliance-check.md]

## 六、综合结论与建议

### 市场机会
- [综合分析]

### 风险提示
- [综合分析]

### 下一步建议
1. 执行 /pm-priority - 需求优先级排序
2. 执行 /pm-mvp - MVP 方案规划
3. 执行 /pm-docs - 文档生成

---

**生成时间**: 2026-XX-XX
**数据来源**: [标注实际使用的搜索工具:AnySearch / Exa MCP / WebSearch]
```

---

## 性能对比

### V1 vs V2.1 性能

| 指标 | V1(顺序执行) | V2.1(并发+优先级搜索) | 提升 |
|------|--------------|----------------------|------|
| **执行时间** | ~10 分钟 | ~2.5 分钟 | 4x |
| **主 Agent 上下文** | ~50,000 tokens | ~10,000 tokens | 节省 80% |
| **搜索类型** | 1-5 个顺序 | 5 个并发 | - |
| **中文搜索质量** | WebSearch(差) | AnySearch(优) | ✅ |
| **报告质量** | 单一视角 | 多维度整合 | ✅ |

---

## 使用示例

### 示例 1: 单一搜索

```
用户: 我需要了解生鲜电商的市场规模

AI: 🎯 执行市场调研搜索
    [AnySearch 搜索中... → 成功]
    ✅ 生成报告: docs/01-需求调研/市场调研报告.md
```

### 示例 2: AnySearch 降级场景

```
用户: 我需要了解生鲜电商的市场规模

AI: 🎯 执行市场调研搜索
    [AnySearch 搜索中... → 未安装,降级]
    [Exa MCP 搜索中... → 成功]
    ✅ 生成报告: docs/01-需求调研/市场调研报告.md
    ⚠️ 数据来源:Exa MCP(降级模式)
```

### 示例 3: 综合并发搜索

```
用户: 我想全面了解在线教育市场

AI: 🎯 执行综合并发搜索
    [并发派发 5 个 subagent...]
    ⏳ Subagent 1: Market Research - 完成 ✅
    ⏳ Subagent 2: Competitor Analysis - 完成 ✅
    ⏳ Subagent 3: Industry Data - 完成 ✅
    ⏳ Subagent 4: Public Opinion - 完成 ✅
    ⏳ Subagent 5: Compliance Check - 完成 ✅

    🔧 整合分析结果...
    ✅ 生成综合报告: docs/01-需求调研/市场调研报告.md

    💡 建议下一步:
    1. /pm-priority - 需求优先级排序
    2. /pm-mvp - MVP 方案规划
```

---

## Subagent Prompt 模板

### Market Research Subagent Prompt

```markdown
你是市场调研专家。执行以下任务:

【搜索工具优先级 - 必须遵守】
1. 首选 AnySearch:先定位 anysearch_cli.py。
   常见安装路径(按顺序尝试):
   ~/.claude/skills/anysearch/scripts/anysearch_cli.py
   ~/.opencode/skills/anysearch/scripts/anysearch_cli.py
   ~/.openclaw/skills/anysearch/scripts/anysearch_cli.py
   ~/.cursor/skills/anysearch/scripts/anysearch_cli.py
   ~/.anysearch/scripts/anysearch_cli.py
   $(which anysearch_cli.py 2>/dev/null)
   或 pip show anysearch 查找安装位置。
   找到后 Bash 调用 python3 <路径> search "查询词" --max_results 5。
   市场调研类搜索加 --domain finance --sub_domain finance.cn_stock。
2. AnySearch 不可用 → 降级到 mcp__exa__web_search_exa
3. Exa 不可用 → 降级到 WebSearch,并在输出中标注「⚠️ 降级模式」

**目标**: 调研 {产品领域} 的市场规模、趋势、用户画像

**搜索策略**:
1. 市场规模:搜索 "{产品领域} 市场规模 2026"
2. 市场趋势:搜索 "{产品领域} 市场趋势"
3. 用户画像:搜索 "{产品领域} 用户画像"

**数据源优先级**:
- 艾瑞咨询、易观分析、QuestMobile(权威报告)
- 36氪、虎嗅(行业媒体)
- 工信部、网信办(政策法规)

**输出要求**:
生成结构化报告到:docs/01-需求调研/market-research.md

包含章节:
1. 市场规模(总量、增长率)
2. 市场趋势(发展动向)
3. 用户画像(目标用户特征)
4. 市场机会点

完成后立即返回结果。
```

---

## 注意事项

### 数据源可信度评估

**高可信度**:
- 政府官方数据
- 权威咨询公司报告(艾瑞、易观、麦肯锡)
- 行业协会统计

**中可信度**:
- 科技媒体报道(36氪、虎嗅)
- 应用数据平台(七麦数据、蝉妈妈)

**低可信度**:
- 用户评论(需交叉验证)
- 社交媒体信息(需核实)

### 搜索结果整合原则

1. **交叉验证** - 同一数据点至少 2 个来源确认
2. **时效性** - 优先使用 2026 年数据
3. **权威性** - 政府数据 > 咨询公司 > 媒体报道
4. **完整性** - 多维度覆盖,避免单一视角

---

## 下一步建议

完成市场调研后,推荐执行:

1. **/pm-priority** - 需求优先级排序
2. **/pm-mvp** - MVP 方案规划
3. **/pm-docs** - 生成 PRD 文档

---

**Super-PM - 让市场调研更高效、更全面** 🔍

---

## 输出质量对比

**✅ Good 示例**:
```
- 有数据引用:「根据 Q4 数据,留存率从 35% 降至 28%」
- 有验证来源:「数据来源:Google Analytics, 2025-12-01」
- 有明确建议:「建议将新手引导步骤从 5 步减少至 3 步」
```

**❌ Bad 示例**:
```
- 模糊结论:「数据表明留存率有所下降」
- 无来源:「根据经验,这个功能很重要」
- 没有行动建议:「留存是个问题」
```

---

## 常见误区 / Red Flags — STOP

出现以下情况立即停止并回溯:

| 误区 | 正确做法 |
|------|---------|
| 使用"应该"、"大概"、"看起来"做结论 | 必须基于实际数据和验证 |
| 未运行检查就声称已完成 | 先验证,再陈述 |
| 因时间紧迫跳过关键步骤 | 没有例外,时间紧更要严格 |
| "这次应该没问题"的想法 | 每次都要重新验证 |
| 直接用 WebSearch 而不先尝试 AnySearch | 必须按优先级降级,不得跳级 |
| 写死 anysearch_cli.py 的路径 | Preamble 已自动发现;subagent 按常见路径列表自行定位 |

---

## 产出质量检查 / Verification Checklist

- [ ] 前置依赖已满足(输入文档/数据已收集)
- [ ] 核心步骤已全部执行
- [ ] 输出文档已生成到 `docs/` 目录
- [ ] 每个判断都有数据/证据支撑
- [ ] 搜索工具按优先级使用(AnySearch → Exa MCP → WebSearch)
- [ ] 已推荐 2-3 个后续 skill

> ⚠️ 任何一项未通过 → 补全后再标记完成。

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.