---
name: search-strategy
description: 生物医药深度研究的统一检索策略。规定信源优先级金字塔、检索轮次、关键词策略、API 调用顺序，以及何时切换到专业信源。所有做信息收集的 agent（dr-searcher/dr-analyst/dr-verifier/dr-plan）必须加载此技能。
---

# 检索策略总纲（Deep Research 黄金法则）

## 一、信源优先级金字塔

**永远从上至下尝试，不要从 Tier 4 开始**：

```
       ╱  Tier 1  ╲       最高权重
      ╱  (一手)    ╲
     ╱──────────────╲
    ╱    Tier 2      ╲    标准权重
   ╱  (权威二手)      ╲
  ╱──────────────────╲
 ╱     Tier 3          ╲   辅助权重
╱  (预印本/会议/券商)   ╲
─────────────────────────
      Tier 4              仅做发现入口
  (通用搜索 + Wiki)
─────────────────────────
   【黑名单】禁用
```

### Tier 1（优先使用，加权 1.2x）
- **论文**：PubMed、Cochrane、顶刊（NEJM/Lancet/Nature/Science/Cell/JAMA/NatMed）
- **监管**：FDA/EMA/NMPA/PMDA 官网、openFDA
- **临床试验**：ClinicalTrials.gov、ChiCTR、EU CTR
- **专利**：USPTO、EPO、CNIPA、Google Patents、PatentsView
- **披露**：SEC（10-K/10-Q/S-1）、港交所、沪深交易所年报

### Tier 2（可用，标准权重）
- **咨询**：McKinsey/BCG/Deloitte/IQVIA/Evaluate Pharma/Frost & Sullivan/沙利文
- **综述**：系统综述、Cochrane Review、Meta 分析
- **协会**：PhRMA、BIO、中国医药工业协会、中国医药创新促进会
- **专业媒体**：BioSpace、Endpoints News、FiercePharma、STAT、医药魔方、Insight 数据库

### Tier 3（辅助，需 Tier 1-2 支撑）
- **预印本**：bioRxiv、medRxiv、SSRN（必须标注"未同行评审"）
- **券商**：中金/中信/高盛/摩根士丹利生物医药（注意利益冲突）
- **会议**：AACR/ASCO/ASH/JPM Healthcare Conference 摘要

### Tier 4（仅做入口）
- Tavily / Brave / Exa 返回的普通网页 → **只用来发现 Tier 1-2 URL**，不做结论佐证
- Wikipedia → **只做术语理解**，结论不得引用

### 黑名单（禁用为证据）
- 百家号、头条号、大部分公众号自媒体
- 未署名行业博客
- Retraction Watch 标记的撤稿论文
- "据业内人士透露"类无来源文章
- >5 年的综述（机制研究可放宽）

---

## 二、检索 4 轮法则

对任何一个 section/chapter，**必须至少 4 轮检索**：

### 第 1 轮：Tier 1 直命中
- 先用**精确查询**去 PubMed / ClinicalTrials / openFDA 打
- 关键词用 MeSH Term（医学主题词）+ 布尔逻辑
- 例：`(GLP-1[MeSH] OR "glucagon-like peptide-1") AND (obesity[MeSH]) AND ("2023"[PDAT]:"2026"[PDAT])`

### 第 2 轮：Tier 2 综述扫描
- 去 McKinsey Insights / BCG / Deloitte 官网搜 industry-overview
- Evaluate Pharma / IQVIA 白皮书（通常需注册）
- 目标：获取市场规模、竞争格局、趋势判断

### 第 3 轮：反方/证伪检索
- 主动搜索与初步结论相反的关键词
- 例：研究"GLP-1 成为减重首选"→ 反方要搜 "GLP-1 limitations" "semaglutide side effects" "discontinuation rate"
- 至少 3-5 条反方证据

### 第 4 轮：Tavily/Brave/Exa 补漏
- 仅用于发现前 3 轮遗漏的 URL
- 发现后**必须**回溯到原始 Tier 1-2 来源（论文 DOI、监管公告原文）
- 不得直接引用搜索返回的二次报道

---

## 三、强制工具入口（v0.12）

所有 agent 做联网检索时，**优先调用项目内 Python 网关**，不要直接把 Tavily / Brave / Exa MCP 当成主路径：

```bash
uv run python scripts/search.py "<query>" --route scholar --num-results 10 --year-low 2023
uv run python scripts/search.py "<query>" --route patents --num-results 10
uv run python scripts/search.py "<query>" --route news --num-results 10 --time-range m
uv run python scripts/search.py "<query>" --route general --num-results 10
uv run python scripts/search.py "<query>" --profile china_market --num-results 10 --trace
uv run python scripts/ground.py "<query>" --model google/gemini-3.1-flash-lite-preview --json
```

也可以按研究场景跑 profile：

```bash
uv run python scripts/search.py "<query>" --profile biomed_literature --num-results 10 --year-low 2023
uv run python scripts/search.py "<query>" --profile patent_heavy --num-results 10
```

**原因**：
- Python 网关在 repo 内，可被 OpenCode / Codex / Gemini CLI / Claude Code 共同复用。
- `--route patents` 固定优先 Serper + Google Patents，避免专利检索被 Tavily 普通网页结果替代。
- `--route scholar` 固定优先 Serper Scholar，避免论文检索只停留在通用网页摘要。
- 专用 route（scholar/patents/news）默认 `--strict-specialized`，Serper 异常时应显式失败，不允许静默降级。
- Tavily / Exa / Brave 只作为 gap-fill 或 MCP 兜底，不作为文献/专利主路径。

每个检索小结必须写明实际使用过的 route，例如：

```text
Routes used: scholar, patents, general
```

如果由于缺 key 或 API 错误无法调用 Serper，必须在输出中明确写（且建议重新执行，不直接进入正文证据）：

```text
Serper unavailable: <原因>; fallback used: general site:patents.google.com
```

## 四、API 调用顺序（技术栈，v0.11 更新）

**按"查询类型"路由到最合适的 API**，而不是一律走通用搜索。

```
┌──────────────────────────────────────────────────────────────┐
│ 查询类型          首选                 备选                  │
├──────────────────────────────────────────────────────────────┤
│ 专利               Serper Patents      Google Patents 爬页   │
│                   (site:patents.google.com)                  │
│                                                              │
│ 学术论文           Serper Scholar      PubMed E-utils        │
│                   (带引用数/年份/期刊) (原始数据库)           │
│                                                              │
│ 新闻 / 行业动态    Serper News         Tavily                │
│                   (时效性敏感)                                │
│                                                              │
│ 临床试验           ClinicalTrials.gov  ChiCTR                │
│                   (原始 API)                                  │
│                                                              │
│ 监管公告           openFDA / FDA 搜索   EMA / NMPA 官网      │
│                                                              │
│ 公司/机构识别      Exa                 Tavily                │
│                   (LinkedIn/官网召回强)                       │
│                                                              │
│ 通用网页           Exa                 Tavily / Brave        │
└──────────────────────────────────────────────────────────────┘
```

### Serper（google.serper.dev）使用模板

**专利检索**：
```bash
uv run python scripts/search.py "dual-target siRNA GalNAc" --route patents --num-results 10
```

**学术论文**：
```bash
uv run python scripts/search.py "dual-target RNAi 2024" --route scholar --num-results 10 --year-low 2023
```

**新闻（时效性）**：
```bash
uv run python scripts/search.py "Arrowhead ARO-DIMER-PA clinical trial" --route news --num-results 10 --time-range w
```

### Tavily MCP 调用模板（兜底，不作为主路径）

仅当 `scripts/search.py` 不可用，或需要 MCP 特有能力时使用。通用网页结果必须回溯到 Tier 1-2 原始来源。
```
工具名：tavily_search
参数：
  query: "<关键词>"
  search_depth: "advanced"
  max_results: 10
  include_domains: ["pubmed.ncbi.nlm.nih.gov", "nejm.org", "lancet.com"]
  exclude_domains: ["baijiahao.baidu.com", "toutiao.com"]
  time_range: "year"
```

### 何时用哪个

- **专利相关问题**（"谁拥有技术 X"、"FTO 自由度分析"）→ `c.patents()`，**永远先走 Google Patents**
- **需要引用数排序的论文**（"找影响力最大的 N 篇"）→ `c.scholar()`
- **近期新闻**（"2025 年 Q4 交易"、"上月 IND 批准"）→ `c.news(..., time_range="m")`
- **快速概念验证 / 术语理解** → `c.search()`（通用）

### PubMed E-utils（bash 调用示例）
```bash
# 1. esearch 拿 PMID 列表
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=GLP-1+obesity&retmax=20&api_key=$NCBI_API_KEY&retmode=json"

# 2. efetch 拿摘要
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=PMID1,PMID2&rettype=abstract&retmode=xml&api_key=$NCBI_API_KEY"
```

### ClinicalTrials.gov v2 API
```bash
curl -s "https://clinicaltrials.gov/api/v2/studies?query.term=semaglutide&pageSize=20&format=json"
```

### openFDA
```bash
curl -s "https://api.fda.gov/drug/event.json?search=patient.drug.medicinalproduct:semaglutide&count=patient.reaction.reactionmeddrapt.exact&limit=20"
```

---

## 五、关键词策略

### 中英双语必备
- 任何生物医药主题**必须同时用中英文检索**
- 中文关键词去找：中国监管（NMPA）、A股研报、医药魔方、Insight
- 英文关键词去找：PubMed、FDA、顶刊、欧美研报

### MeSH Term 优先于自由词
- PubMed 查询必须用 MeSH Term（医学主题词表）
- MeSH Term 能自动扩展同义词，召回更全
- 例：`obesity[MeSH]` 会自动包含 `adiposity`, `body weight, excess` 等

### 布尔逻辑 + 时间过滤
- 默认加 `("2023"[PDAT]:"2026"[PDAT])` 时间窗
- 机制研究可放宽到 10 年，新药/市场/政策必须近 3 年

### 反方关键词清单（备忘）
- `limitations` / `adverse events` / `side effects` / `discontinuation`
- `failed trial` / `FDA rejection` / `withdrawn`
- `conflict of interest` / `industry-funded`
- `retraction` / `replication failure`

---

## 六、每条信源的提取字段（标准化）

任何信源进 `sources.jsonl` 必须有以下字段：

```jsonl
{
  "id": "src_001",
  "tier": 1,
  "score": 9.2,
  "type": "journal" | "trial" | "regulatory" | "patent" | "report" | "news",
  "url": "https://...",
  "doi": "10.xxxx/...",
  "title": "...",
  "authors": ["...", "..."],
  "year": 2025,
  "venue": "NEJM",
  "impact_factor": 176.0,
  "accessed_at": "2026-04-20",
  "abstract": "...",
  "key_data": {
    "market_size_2025": "12.3B USD",
    "cagr": "23%"
  },
  "used_in": ["ch01", "ch03.sec2"],
  "notes": "关键图表见 Fig 2"
}
```

---

## 七、失败兜底

- 某个 API 限流/超时：**等 5s 重试 3 次**，仍失败则跳过并在日志标注
- 某个信源 404：在 sources.jsonl 标 `"dead_link": true`，不删除（审计用）
- 关键数据查不到：**不要编造**，在正文写 "该数据暂未找到公开来源（截至 2026-04）"

---

## 八、硬规则总结

1. ✅ 每 section 至少 4 轮检索
2. ✅ 中英双语必查
3. ✅ PubMed 用 MeSH Term
4. ✅ 反方关键词必查
5. ✅ Tier 4 结果只做发现，不做佐证
6. ✅ 所有信源写入 sources.jsonl 并评分
7. ✅ 文献检索必须优先 `scripts/search.py --route scholar`
8. ✅ 专利检索必须优先 `scripts/search.py --route patents`
9. ❌ 不得引用 Wikipedia 做结论
10. ❌ 不得编造数据、URL、DOI
11. ❌ 不得使用黑名单信源
