12 KiB
12 KiB
name, description
| name | description |
|---|---|
| search-strategy | 生物医药深度研究的统一检索策略。规定信源优先级金字塔、检索轮次、关键词策略、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 轮:Exa/Tavily/Brave 补漏
- 仅用于发现前 3 轮遗漏的 URL
- 发现后必须回溯到原始 Tier 1-2 来源(论文 DOI、监管公告原文)
- 不得直接引用搜索返回的二次报道
- 章节级 evidence packet 优先用
scripts/search.py --route evidence,让 Exa highlights 进入 source-quality 和 evidence-table。 - Tavily Research 只用于 Phase 1 初扫、薄弱章节补证据和 Phase 3 回炉;输出必须存盘、评分、去重后再转成 candidate evidence。
三、强制工具入口(v0.12)
所有 agent 做联网检索时,优先调用项目内 Python 网关,不要直接把 Tavily / Brave / Exa MCP 当成主路径:
uv run python scripts/search.py "<query>" --route scholar --num-results 10 --year-low 2023
uv run python scripts/search.py "<query>" --route evidence --num-results 10 --json --trace
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:
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 异常时应显式失败,不允许静默降级。 - Exa evidence route 是 packet 候选证据发现主路径;Tavily / Brave 只作为 gap-fill 或 MCP 兜底,不作为文献/专利主路径。
每个检索小结必须写明实际使用过的 route,例如:
Routes used: scholar, patents, general
如果由于缺 key 或 API 错误无法调用 Serper,必须在输出中明确写(且建议重新执行,不直接进入正文证据):
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)使用模板
专利检索:
uv run python scripts/search.py "dual-target siRNA GalNAc" --route patents --num-results 10
学术论文:
uv run python scripts/search.py "dual-target RNAi 2024" --route scholar --num-results 10 --year-low 2023
新闻(时效性):
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 调用示例)
# 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
curl -s "https://clinicaltrials.gov/api/v2/studies?query.term=semaglutide&pageSize=20&format=json"
openFDA
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/discontinuationfailed trial/FDA rejection/withdrawnconflict of interest/industry-fundedretraction/replication failure
六、每条信源的提取字段(标准化)
任何信源进 sources.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)"
八、硬规则总结
- ✅ 每 section 至少 4 轮检索
- ✅ 中英双语必查
- ✅ PubMed 用 MeSH Term
- ✅ 反方关键词必查
- ✅ Tier 4 结果只做发现,不做佐证
- ✅ 所有信源写入 sources.jsonl 并评分
- ✅ 文献检索必须优先
scripts/search.py --route scholar - ✅ 专利检索必须优先
scripts/search.py --route patents - ❌ 不得引用 Wikipedia 做结论
- ❌ 不得编造数据、URL、DOI
- ❌ 不得使用黑名单信源