用途
当任务需要来自 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