SuperAPI AI 工具集

scientific-db-pubmed-database

写作与研究

查看项目

更新于 10-15 09:14

技能介绍

用途

当任务需要来自 PubMed 的生物医学文献,而不是通用网页搜索时,可使用本技能。它面向 MEDLINE 与生命科学文献检索,适合需要可重复、可追溯检索流程的场景。

主要能力

  • 检索 MEDLINE 或生命科学文献。
  • 使用 MeSH 主题词、字段标签、日期或文章类型构建 PubMed 查询。
  • 查找 PMID、摘要、出版元数据或相关引文。
  • 运行需要可重复检索式的系统综述检索轮次。
  • 直接从 Python、shell 或其他 HTTP 客户端使用 NCBI E-utilities。

查询构建

从研究问题出发,将其拆分为概念,再用布尔运算符组合概念。

concept_1 AND concept_2 AND filter
synonym_a OR synonym_b
NOT exclusion_term

常用 PubMed 字段标签:

  • [ti]:标题
  • [ab]:摘要
  • [tiab]:标题或摘要
  • [au]:作者
  • [ta]:期刊标题缩写
  • [mh]:MeSH 主题词
  • [majr]:主要 MeSH 主题
  • [pt]:出版类型
  • [dp]:出版日期
  • [la]:语言

示例:

diabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2026[dp]
(metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt]
smith ja[au] AND cancer[tiab] AND 2026[dp] AND english[la]

MeSH 与副主题词

当概念有稳定的受控词表术语时,优先使用 MeSH。当主题较新或术语多变时,将 MeSH 与标题/摘要词结合使用。

副主题词的正确语法是将副主题词放在字段标签之前:

diabetes mellitus, type 2/drug therapy[mh]
cardiovascular diseases/prevention & control[mh]

仅当主题必须是论文核心时才使用 [majr]。它可以提高精确度,但可能遗漏相关工作。

过滤器

出版类型:

  • clinical trial[pt]
  • meta-analysis[pt]
  • randomized controlled trial[pt]
  • review[pt]
  • systematic review[pt]
  • guideline[pt]

日期过滤器:

  • 2026[dp]
  • 2020:2026[dp]
  • 2026/03/15[dp]

可用性过滤器:

  • free full text[sb]
  • hasabstract[text]

E-utilities 工作流

NCBI E-utilities 支持可重复的 API 工作流:

  • esearch.fcgi:搜索并返回 PMID。
  • esummary.fcgi:返回轻量级文章元数据。
  • efetch.fcgi:以 XML、MEDLINE 或文本格式获取摘要或完整记录。
  • elink.fcgi:查找相关文章和链接资源。

生产脚本应使用邮箱和 API 密钥。将 API 密钥存储在环境变量中,切勿放在提交的文件或命令历史中。

import os
import time
import requests

BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"

def esearch(query: str, retmax: int = 20) -> list[str]:
    params = {
        "db": "pubmed",
        "term": query,
        "retmode": "json",
        "retmax": retmax,
        "tool": "ecc-pubmed-search",
        "email": os.environ.get("NCBI_EMAIL", ""),
    }
    api_key = os.environ.get("NCBI_API_KEY")
    if api_key:
        params["api_key"] = api_key

    response = requests.get(f"{BASE}/esearch.fcgi", params=params, timeout=30)
    response.raise_for_status()
    time.sleep(0.35)
    return response.json()["esearchresult"]["idlist"]

pmids = esearch("hypertension[mh] AND randomized controlled trial[pt] AND 2024:2026[dp]")
print(pmids)

对于批量操作,优先使用 NCBI 历史服务器参数(usehistory=y、WebEnv、query_key),而不是通过 URL 传递很长的 PMID 列表。

输出规范

每次检索轮次记录:

  • 精确检索字符串
  • 检索的数据库
  • 检索日期
  • 使用的过滤器
  • 结果数量
  • 导出格式
  • 任何手动排除

示例:

Database Date searched Query Filters Results
PubMed 2026-05-11 sickle cell disease[mh] AND CRISPR[tiab] 2020:2026[dp], English 42

审查清单

  • 字段标签是否为有效的 PubMed 标签?
  • 对于较新主题,MeSH 术语是否与自由文本同义词配对?
  • 日期范围是否明确且合适?
  • 检索日志是否包含足够细节以复现查询?
  • API 密钥是否从环境加载?
  • HTTP 代码是否调用 raise_for_status() 或以其他方式在解析前处理非 200 响应?
  • 是否遵守速率限制?

适用场景

  • 生物医学文献综述与系统综述检索。
  • 需要 MeSH 查询、PMID 查找、引文检索的任务。
  • 需要通过 API 以可重复方式获取 PubMed 数据的脚本或工作流。

限制

  • 本技能面向 PubMed 与 NCBI E-utilities,不适用于通用网页搜索。
  • 使用 API 密钥与邮箱、速率限制等要求需遵循 NCBI 相关规定。
  • 关于收费、价格、平台或具体效果的信息暂未提供。

参考

  • PubMed 帮助
  • NCBI E-utilities 文档
  • NCBI API 密钥指南
  • NCBI 支持:eutilities@ncbi.nlm.nih.gov