mcpField
S
scientific-literature-search

scientific-literature-search

github.com/jaechang-hits生产力38478 次安装6 天前更新
代码仓库

关于 scientific-literature-search

这项研究技能帮助研究者规划和执行科学文献检索,适用于定向查找论文或开展较广泛的综述。它以三层流程结合数据库专用查询、AI 辅助网络搜索和论文内容提取。

主要功能

  1. 01三层文献检索策略
  2. 02检索 PubMed、arXiv 和 Google Scholar
  3. 03基于 PICO 规划临床检索
  4. 04布尔运算符和字段筛选
  5. 05提取全文及补充材料

适用场景

  1. 01为系统综述检索临床证据
  2. 02查找计算方法相关预印本
  3. 03跨来源梳理研究趋势
  4. 04提取论文方法或补充数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jaechang-hits/sciagent-skills --skill scientific-literature-search

安装后在 Claude Code 中输入/scientific-literature-search确认已加载。

详细介绍

科学文献检索

概述

科学文献检索是循证研究的基础。执行良好的检索能够在保持精确率(避免无关结果)的同时,最大限度地提高召回率(找到所有相关论文)。本指南提供了一套系统化方法,将数据库专属查询策略、AI 辅助综合分析和直接内容提取相结合,并以三层框架组织,适用于从定向查找扩展到全面的领域综述。

核心概念

PICO 框架

针对临床和生物医学问题,可使用 PICO 框架构建查询:

  • P(人群):研究对象是谁?(例如,"Diabetes Mellitus"[MeSH])
  • I(干预):采用了什么治疗或暴露?(例如,"Metformin"[MeSH])
  • C(对照):替代方案是什么?(例如,安慰剂、标准治疗)
  • O(结局):测量什么结果?(例如,"Cardiovascular Diseases"[MeSH])

可以将 PICO 查询与出版物类型筛选条件结合起来,以查找特定证据级别的文献:

"Diabetes Mellitus"[MeSH] AND "Metformin"[MeSH] AND "Cardiovascular Diseases"[MeSH] AND ("clinical trial"[Publication Type] OR "meta-analysis"[Publication Type])
三层检索策略

采用逐层扩展检索范围的方法,效果最佳:

第 1 层 —— 数据库专属检索(最可靠)

查询成熟的学术数据库(PubMed、arXiv、Google Scholar),查找经过同行评审且已编入索引的内容。这是最可靠的一层,应始终作为检索起点。

  • PubMed(通过 Biopython Bio.Entrez):生物医学和生命科学文献的主要数据库。支持 MeSH 受控词表和高级字段标签。
  • arXiv(通过 arxiv 包):物理学、数学、计算机科学和定量生物学领域的预印本服务。其结果通常比同行评审期刊更早出现。
  • Google Scholar(通过 scholarly 包):覆盖所有学术领域,范围最广。注意:自动化查询会受到严格的频率限制。

适用于:查找特定论文、系统综述、临床证据和预印本。

第 2 层 —— AI 辅助网络检索(全面)

使用 Claude API 的 web_search_20250305 服务端工具来综合更广泛的背景信息、识别研究趋势,并发现尚未编入数据库索引的最新进展。也可使用通用网络检索(例如通过 duckduckgo-search 包)查找方案、教程和软件文档。

适用于:了解研究领域概况、解答复杂的多方面问题、查找最新进展、识别关键研究人员。

不适用于:查找特定论文(使用第 1 层)、查询引用次数(使用 Google Scholar)、要求可复现性的系统综述,以及必须记录准确查询词的检索。

第 3 层 —— 直接内容提取(深入分析)

使用 trafilatura(HTML 文章提取)、pypdf(PDF 文本提取)和 Crossref API(DOI → 补充文件 URL),从已确定的论文中提取并分析全文、PDF 和补充材料。

适用于:详细提取研究方法、检索数据、识别研究方案、访问补充数据。

PubMed 字段标签

PubMed 支持按字段检索,以提高精确率:

标签描述示例
[MeSH]医学主题词(受控词表)"Neoplasms"[MeSH]
[Title]仅检索标题字段"CRISPR"[Title]
[Title/Abstract]检索标题或摘要"gene therapy"[Title/Abstract]
[Author]作者姓名"Zhang F"[Author]
[Journal]期刊名称"Nature"[Journal]
[Publication Type]文章类型筛选"Review"[Publication Type]
[Date - Publication]出版日期范围"2020/01/01"[Date - Publication]:"2024/12/31"[Date - Publication]
[MeSH Major Topic]作为文章主要主题的 MeSH 词"CRISPR-Cas Systems"[MeSH Major Topic]
布尔运算符

布尔运算符用于控制搜索词的组合方式:

# AND: All terms must be present -- narrows results
results = query_pubmed("CRISPR AND cancer AND therapy")

# OR: Any term can be present -- broadens results (use for synonyms)
results = query_pubmed("(tumor OR tumour OR neoplasm) AND immunotherapy")

# NOT: Exclude terms -- use sparingly to avoid losing relevant papers
results = query_pubmed("cancer immunotherapy NOT review")

使用括号将 OR 词组分组,再与 AND 组合。

arXiv 学科分类

arXiv 按学科类别整理预印本。与生物学相关的类别包括:

CategoryDescription
q-bio.BM生物分子
q-bio.CB细胞行为
q-bio.GN基因组学
q-bio.MN分子网络
q-bio.NC神经元与认知
q-bio.QM定量方法
cs.AI人工智能
cs.LG机器学习

决策框架

使用此决策树确定从哪个搜索层级和数据库开始:

What type of question are you answering?
├── Clinical / biomedical question
│   ├── Specific drug or treatment → Tier 1: PubMed with PICO query
│   ├── Disease mechanism → Tier 1: PubMed with MeSH terms
│   └── Clinical trial evidence → Tier 1: PubMed filtered by Publication Type
├── Computational / quantitative methods
│   ├── ML model or algorithm → Tier 1: arXiv (cs.LG, cs.AI)
│   ├── Computational biology method → Tier 1: arXiv (q-bio.*) + PubMed
│   └── Software tool or pipeline → Tier 2: AI-assisted web search
├── Broad research landscape
│   ├── Current state of a field → Tier 2: AI-assisted web search
│   ├── Recent developments (last 6 months) → Tier 2: AI-assisted web search
│   └── Cross-disciplinary question → Tier 1: Google Scholar + Tier 2
├── Specific paper or data
│   ├── Known paper details → Tier 1: any database by title/author/DOI
│   ├── Methodology or protocol → Tier 3: full-text extraction
│   └── Supplementary data → Tier 3: DOI-based supplementary fetch
└── Protocols / reagents
    ├── Lab protocol → Tier 2: web search for protocols.io, etc.
    └── Validated reagents → Tier 2: AI-assisted web search
ScenarioRecommended Tier and DatabaseRationale
临床证据的系统综述第 1 层级:PubMed,使用 MeSH + 出版物类型筛选条件需要可复现、记录完整的搜索策略
查找一种新机器学习方法的预印本第 1 层级:arXiv,按类别和关键词搜索预印本会先于期刊论文发布在 arXiv 上
了解研究领域的概况第 2 层级:AI 辅助网页搜索需要综合多个来源的信息
从论文中提取特定方案第 3 层级:PDF 内容提取需要访问全文中的方法部分
跨学科查找论文第 1 层级:Google Scholar覆盖的领域最广
识别某个细分领域的关键研究人员第 2 层级:AI 辅助网页搜索需要结合上下文进行综合分析
下载补充数据表第 3 层级:基于 DOI 获取补充材料可直接访问补充文件

最佳实践

  1. 在 PubMed 搜索中使用受控词汇(MeSH):自由文本搜索会漏掉使用不同术语的论文。MeSH 术语将同义词映射到同一概念,在不牺牲精确率的同时提高查全率。

    # Free text misses synonyms
    query_pubmed("heart attack treatment")
    # MeSH captures all synonyms
    query_pubmed('"Myocardial Infarction"[MeSH] AND "Drug Therapy"[MeSH]')
    
  2. 使用 OR 添加同义词和替代术语:科学概念通常有多个名称(例如 tumor/tumour/neoplasm)。将同义词放在括号内并用 OR 连接,以免遗漏相关论文。

    query_pubmed("(myocardial infarction OR heart attack) AND (treatment OR therapy)")
    
  3. 对多词概念使用短语搜索:用引号括起精确短语,可避免搜索引擎拆分词语并分别匹配。

    query_pubmed('"single cell RNA sequencing" AND methods')
    
  4. 查找特定证据时按出版物类型筛选:临床试验、系统综述和荟萃分析分别回答不同的问题。使用 [Publication Type] 锁定所需的证据等级。

    query_pubmed("COVID-19 vaccine efficacy AND clinical trial[Publication Type]")
    
  5. 先扩大范围,再逐步缩小:从核心概念(2-3 个术语)开始,并查看初步结果。根据结果添加限定条件——更多术语、日期范围、字段标签或出版物类型。

    # Step 1: Broad
    results = query_pubmed("CRISPR base editing iPSC", max_papers=20)
    # Step 2: Add MeSH and specificity
    results = query_pubmed(
        '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency',
        max_papers=20
    )
    # Step 3: Filter by date
    results = query_pubmed(
        '"CRISPR-Cas Systems"[MeSH] AND "base editing" AND "induced pluripotent stem cells" AND efficiency AND ("2022"[Date - Publication]:"2024"[Date - Publication])',
        max_papers=20
    )
    
  6. 交叉检索多个数据库:没有任何单一数据库能够涵盖所有文献。使用 PubMed 查找生物医学内容,使用 arXiv 查找计算领域的预印本,并使用 Google Scholar 覆盖跨学科内容。

  7. 系统地评估结果质量:评估论文的来源可靠性(是否经过同行评审)、作者资历、时效性、研究设计是否适当、样本量是否充足、可复现性、是否声明利益冲突以及引用次数。

常见陷阱

  1. 查询过长且过于具体:在单个查询中塞入过多术语,会导致漏掉结果,因为所有术语都必须同时匹配。

    • 如何避免:将查询限制为核心概念(3-5 个术语)。针对子主题分别搜索,然后手动合并结果。
    # Too specific -- misses relevant papers
    query_pubmed("CRISPR Cas9 gene editing HEK293T cells 2024 efficiency optimization delivery")
    # Better -- core concepts only
    query_pubmed("CRISPR Cas9 gene editing optimization efficiency")
    
  2. 依赖单一数据库:PubMed 专注于生物医学,arXiv 收录预印本,Google Scholar 覆盖多个学科。只使用一个数据库必然会遗漏部分结果。

    • 如何避免:至少搜索两个数据库。对于计算生物学,结合使用 PubMed 和 arXiv。对于跨学科主题,加入 Google Scholar。
  3. 忽略发表日期:科学知识发展迅速。奠基性论文仍然有参考价值,但方法和临床证据可能已被更新的研究取代。

    • 如何避免:检查所有结果的发表日期。对于方法类论文,优先选择近 3-5 年的论文。对于基础概念,可以接受较早的论文,但要通过近期综述进行核实。
  4. 深入阅读前未筛选标题和摘要:并非所有匹配关键词的搜索结果都真正相关。未经筛选就下载并阅读全文会浪费时间。

    • 如何避免:始终先筛选标题和摘要。仅对通过筛选的论文提取全文(Tier 3)。
  5. 过度使用 NOT 运算符:NOT 运算符可能会意外排除相关论文,因为这些论文可能在不同语境中提及被排除的术语。

    • 如何避免:谨慎使用 NOT。与其排除术语,不如添加正向术语来缩小结果范围。必须使用 NOT 时,请确认被排除的结果确实无关。
  6. 忽略 Google Scholar 速率限制:Google Scholar 会严格限制自动化查询的速率,可能导致后续搜索被阻止。

    • 如何避免:谨慎使用 Google Scholar。请求之间加入延迟。批量搜索优先使用 PubMed 或 arXiv,将 Google Scholar 留作跨学科检索之用。
  7. 未记录搜索策略:对于系统综述和可复现研究,未记录的搜索无法验证或复现。

    • 如何避免:记录搜索词、查询的数据库、日期范围,以及各阶段的结果数量。这对系统综述至关重要,也是所有搜索的良好实践。

工作流

  1. 步骤 1:定义研究问题

    • 确定核心概念、研究人群/模型、干预/方法、期望结果和时间范围
    • 对于临床问题,映射到 PICO 框架
    • 示例:“查找有关人类 iPSC 中 CRISPR 碱基编辑效率的近期论文”可拆解为:核心概念 = CRISPR 碱基编辑,模型 = 人类 iPSC,结果 = 效率,时间范围 = 过去 3 年
  2. 步骤 2:构建并执行数据库查询(第 1 层)

    • 生物医学主题从 PubMed 入手,计算主题从 arXiv 入手
    • 先使用包含 2-3 个核心词的宽泛查询
    • 使用 MeSH 词、字段标签、日期筛选器和出版物类型筛选器进行细化
    from Bio import Entrez
    import arxiv
    from scholarly import scholarly
    
    Entrez.email = "[email protected]"  # NCBI requires a contact email
    
    # PubMed: biomedical literature
    handle = Entrez.esearch(
        db="pubmed",
        term='"CRISPR-Cas Systems"[MeSH] AND "Gene Editing"[MeSH]',
        retmax=20,
    )
    pubmed_ids = Entrez.read(handle)["IdList"]
    handle.close()
    
    # arXiv: computational biology preprints
    arxiv_results = list(
        arxiv.Search(query="protein structure prediction", max_results=10).results()
    )
    
    # Google Scholar: broad cross-disciplinary coverage
    scholar_results = scholarly.search_pubs("single cell RNA sequencing analysis methods")
    
  3. 步骤 3:补充 AI 辅助搜索(第 2 层)

    • 使用 AI 辅助网络搜索了解领域概况和最新进展
    • 使用通用网络搜索查找方案、教程和文档
    from anthropic import Anthropic
    
    client = Anthropic()
    response = client.messages.create(
        model="claude-opus-4-7",
        max_tokens=4096,
        tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 3}],
        messages=[{
            "role": "user",
            "content": "What are the latest developments in CAR-T cell therapy for solid tumors in 2024?",
        }],
    )
    print(response.content)
    
  4. 步骤 4:评估并筛选结果

    • 筛查标题和摘要,判断相关性
    • 根据时效性、期刊质量、引用次数和研究设计确定优先级
    • 对于临床证据,优先考虑 RCT、系统综述和荟萃分析
    • 对于方法,优先考虑方案论文和方法比较研究
    • 决策点:如果结果太多,添加更具体的词或筛选条件;如果结果太少,则扩大词语范围并添加同义词。
  5. 步骤 5:深入研读关键论文(第 3 层)

    • 提取高优先级论文的全文
    • 下载补充材料以获取数据和方案
    • 查看参考文献列表,寻找其他相关论文
    import io
    import os
    from pathlib import Path
    from urllib.parse import urlparse
    
    import requests
    import trafilatura
    from pypdf import PdfReader
    
    # Extract article content from URL (clean main text, drops nav/ads)
    downloaded = trafilatura.fetch_url("https://www.nature.com/articles/nature12373")
    article_text = trafilatura.extract(downloaded)
    
    # Extract text from a PDF
    pdf_bytes = requests.get("https://arxiv.org/pdf/1706.03762.pdf", timeout=30).content
    reader = PdfReader(io.BytesIO(pdf_bytes))
    pdf_text = "\n".join(page.extract_text() or "" for page in reader.pages)
    
    # Download supplementary files via Crossref DOI metadata
    doi = "10.1038/nature12373"
    meta = requests.get(f"https://api.crossref.org/works/{doi}", timeout=30).json()
    out_dir = Path("./supplementary_materials")
    out_dir.mkdir(exist_ok=True)
    for link in meta.get("message", {}).get("link", []):
        url = link.get("URL")
        if not url:
            continue
        fname = os.path.basename(urlparse(url).path) or "supplement.bin"
        (out_dir / fname).write_bytes(requests.get(url, timeout=60).content)
    
  6. 步骤 6:记录并迭代

    • 记录所有搜索词、数据库、筛选条件和结果数量
    • 如果仍有信息缺口,使用细化后的查询重新执行步骤 2-3
    • 对于系统综述,遵循 PRISMA 指南进行报告

常见搜索场景

以下场景说明了如何结合三个层级来处理典型研究问题。

查找方法和方案

先在 PubMed 中查找已发表的方法学论文,再使用网络搜索补充查找来自 protocols.io 等资源的分步方案。

from Bio import Entrez
from duckduckgo_search import DDGS

Entrez.email = "[email protected]"

# Search for methodology papers in PubMed
handle = Entrez.esearch(
    db="pubmed",
    term='"Western Blotting"[MeSH] AND (protocol OR method OR technique)',
    retmax=10,
)
pubmed_ids = Entrez.read(handle)["IdList"]
handle.close()

# Check web for step-by-step protocols
web_hits = DDGS().text("Western blot protocol for membrane proteins", max_results=5)
了解疾病机制

先阅读综述文章以了解整体概况,然后深入研读具体的机制研究。

# Find review articles first for an overview
results = query_pubmed(
    '"Alzheimer Disease"[MeSH] AND pathophysiology AND review[Publication Type]',
    max_papers=10
)

# Then find specific mechanistic studies
results = query_pubmed(
    '"Alzheimer Disease"[MeSH] AND ("amyloid beta"[MeSH] OR tau) AND mechanism',
    max_papers=20
)
查找药物和治疗信息

使用出版物类型筛选器,将临床试验证据与系统综述区分开来。

# Clinical trials for a specific drug-condition pair
results = query_pubmed(
    '"Drug Name"[Substance Name] AND "Condition"[MeSH] AND clinical trial[Publication Type]',
    max_papers=20
)

# Systematic reviews and meta-analyses
results = query_pubmed(
    '"Drug Name" AND "Condition" AND (systematic review[Publication Type] OR meta-analysis[Publication Type])',
    max_papers=10
)
跟踪最新进展

结合 AI 辅助搜索进行综合梳理,并通过数据库搜索查找近期已编入索引的出版物。

from anthropic import Anthropic
from Bio import Entrez

client = Anthropic()
Entrez.email = "[email protected]"

# AI-assisted synthesis of recent advances (Claude API web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 3}],
    messages=[{
        "role": "user",
        "content": "What are the most significant advances in CAR-T cell therapy in 2024?",
    }],
)

# Supplement with recent PubMed results
handle = Entrez.esearch(
    db="pubmed",
    term='"Chimeric Antigen Receptor T-Cell Therapy"[MeSH] AND "2024"[Date - Publication]',
    retmax=20,
)
pubmed_ids = Entrez.read(handle)["IdList"]
handle.close()
查找特定试剂和材料

使用 AI 辅助搜索查找经过验证的试剂建议,并通过通用网络搜索补充信息。

from anthropic import Anthropic
from duckduckgo_search import DDGS

client = Anthropic()

# Search for validated reagents (Claude API + web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 2}],
    messages=[{
        "role": "user",
        "content": "validated antibodies for Western blot detection of p53 protein",
    }],
)

# Search supplier databases
supplier_hits = DDGS().text("p53 antibody Western blot validated", max_results=5)
跨方法比较分析

使用 AI 辅助搜索,获取针对技术或工具的综合比较。

from anthropic import Anthropic

client = Anthropic()

# Compare approaches with AI synthesis (Claude API web search tool)
response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4096,
    tools=[{"type": "web_search_20250305", "name": "web_search", "max_uses": 5}],
    messages=[{
        "role": "user",
        "content": "Compare different CRISPR delivery methods for in vivo gene editing: viral vectors vs lipid nanoparticles",
    }],
)
print(response.content)

质量评估清单

评估搜索结果时,请应用以下标准:

  • 来源可靠性:论文是否发表于经过同行评审的期刊?
  • 作者资历:作者是否为该领域公认的专家?
  • 时效性:信息是否足够新,能满足你的需求?
  • 研究设计:研究设计是否适用于该问题(例如,用 RCT 评估疗效,用队列研究评估风险)?
  • 样本量:样本量是否足以支撑所得结论?
  • 可重复性:方法描述是否清晰到足以复现?
  • 利益冲突:是否声明了任何利益冲突?
  • 引用次数:后续研究对该论文的引用是否充分?

延伸阅读

相关技能

  • pubmed-database -- 直接访问 PubMed API,以编程方式检索文献
  • scientific-manuscript-writing -- 在论文中构建文献综述部分
  • research-question-formulation -- 用于定义可回答研究问题的框架

评论

支持 Markdown