Files
deep_research/.opencode/skills/search-strategy/SKILL.md
T

287 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: search-strategy
description: 生物医药深度研究的统一检索策略。规定信源优先级金字塔、检索轮次、关键词策略、API 调用顺序,以及何时切换到专业信源。所有做信息收集的 agentdr-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
- **披露**SEC10-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,避免论文检索只停留在通用网页摘要。
- 专用 routescholar/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 │
└──────────────────────────────────────────────────────────────┘
```
### Serpergoogle.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-utilsbash 调用示例)
```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. ❌ 不得使用黑名单信源