关于 Searching Scientific Literature
Searching Scientific Literature 是一项通过 PubMed 搜索科学文献并提取论文元数据的研究技能,适用于需要为研究问题建立初始论文集的人。它提供从拆解查询、构造检索式到整理结果以供相关性评估的流程。
主要功能
- 01拆解关键词、数据需求和约束
- 02使用布尔运算符构造 PubMed 查询
- 03按字段和日期范围筛选
- 04提取论文元数据与 DOI
- 05提供限流和空结果处理建议
适用场景
- 01为新的研究问题查找论文
- 02查找特定方法、化合物或疾病相关文献
- 03整理初始论文集供相关性评估
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ kthorn/ research-superpower --skill searching-scientific-literature安装后在 Claude Code 中输入/searching-scientific-literature确认已加载。
详细介绍
搜索科学文献
概述
使用优化后的查询在 PubMed 中搜索科学文献。提取元数据,并为相关性评估准备论文。
核心原则: 搜索范围要足够广,以找到相关论文,同时使用有针对性的关键词控制结果数量。
适用场景
在以下情况下使用此技能:
- 开始一项新的研究
- 用户要求“查找有关……的论文”
- 需要准备一组初始论文以供评估
- 搜索特定的方法、化合物、疾病或技术
搜索策略
1. 解析用户查询
提取:
- 关键词:主要概念(例如,“BTK inhibitor”“selectivity”“kinase”)
- 数据类型:用户需要的内容(IC50 值、方法、结构、结果)
- 限制条件:日期范围、特定期刊、作者姓名
- 同义词:其他说法(例如,“Bruton's tyrosine kinase” = “BTK”)
2. 构建 PubMed 查询
布尔运算符:
- AND - 缩小结果范围(必须同时包含两个词)
- OR - 扩大结果范围(包含任一词即可)
- NOT - 排除词语
查询示例:
"BTK inhibitor"[Title/Abstract] AND selectivity[Title/Abstract]
("kinase inhibitor" OR "protein kinase") AND (selectivity OR "off-target")
"ibrutinib"[Title/Abstract] AND ("IC50" OR "inhibitory concentration")
字段标签:
[Title/Abstract]- 仅搜索标题和摘要[Title]- 仅搜索标题(更精确)[Author]- 特定作者[Journal]- 特定期刊[Date]- 日期范围
3. 执行搜索
API 端点:
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?\
db=pubmed&\
term=YOUR_QUERY&\
retmax=100&\
retmode=json&\
sort=relevance
参数:
db=pubmed- 搜索 PubMed 数据库term=- 查询内容(对空格和特殊字符进行 URL 编码)retmax=100- 最大结果数(从 100 开始)retmode=json- 返回 JSONsort=relevance- 按相关性从高到低排序(或使用pub_date按最新排序)
Bash 示例:
curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=BTK+inhibitor+selectivity&retmax=100&retmode=json&sort=relevance"
响应格式:
{
"esearchresult": {
"count": "156",
"retmax": "100",
"idlist": ["12345678", "87654321", ...]
}
}
4. 获取论文元数据
API 端点:
https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?\
db=pubmed&\
id=12345678,87654321&\
retmode=json
从响应中提取:
- 标题
- 作者(列表)
- 期刊名称
- 发表日期
- 摘要(通过单独的 efetch 调用获取,或使用 esummary)
- PMID
- DOI(如果
articleids中提供)
根据 PMID 获取 DOI:
"articleids": [
{"idtype": "pubmed", "value": "12345678"},
{"idtype": "doi", "value": "10.1234/example.2023"}
]
如果缺少 DOI:
- 使用 PMID 作为备用标识符
- 稍后尝试通过 PubMed Central 或出版商 API 解析 DOI
输出格式
创建论文对象列表:
[
{
"pmid": "12345678",
"doi": "10.1234/example.2023",
"title": "Selective BTK inhibitors for autoimmune diseases",
"authors": ["Smith J", "Doe A", "Johnson B"],
"journal": "Nature Chemical Biology",
"year": "2023",
"abstract": "We developed a series of...",
"source": "pubmed_search"
}
]
错误处理
速率限制(重要 - 所有进程/子 Agent 共用):
- 无 API 密钥:每秒 3 个请求(官方限制)
- 有 API 密钥:每秒 10 个请求
- 单个 Agent/脚本: 延迟 500ms(每秒 2 个请求,留有安全余量)
- 理论上 350ms 已足够,但实际使用中会导致约 20% 的 HTTP 429 错误
- 多个并行子 Agent: 增加延迟,以共享请求容量
- 并行 2 个:每个延迟 1 秒(总计每秒 2 个请求)
- 并行 3 个:每个延迟 1.5 秒(总计每秒 2 个请求)
- 并行 5 个:每个延迟 2.5 秒(总计每秒 2 个请求)
- 公式:
delay_seconds = (num_parallel / rate_limit) + safety_margin
- 如果收到 HTTP 429 错误: 等待 5 秒,然后将延迟时间加倍后继续
结果为空:
- 尝试更宽泛的词语
- 移除字段标签
- 检查是否有拼写错误
- 使用 OR 添加同义词
结果过多(>500):
- 添加更具体的词语
- 使用字段标签缩小范围
- 添加日期限制
- 考虑拆分为多个子查询
与其他技能集成
搜索完成后:
- 将结果保存到研究文件夹,文件名为
initial-search-results.json - 对每篇论文调用
evaluating-paper-relevance技能 - 在
papers-reviewed.json中跟踪(使用 DOI 作为键,若无则使用 PMID)
快速参考
| 任务 | 命令 |
|---|---|
| 搜索 PubMed | curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=QUERY&retmax=100&retmode=json" |
| 获取元数据 | curl "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=PMID1,PMID2&retmode=json" |
| 对查询进行 URL 编码 | 将空格替换为 +,将特殊字符替换为 %XX |
| 缩小结果范围 | 使用 AND,添加字段标签,使用更具体的词语 |
| 扩大结果范围 | 使用 OR,移除字段标签,添加同义词 |
常见错误
范围过窄: 仅有 5 条结果 → 使用 OR,移除限制条件 范围过广: 有 5000 条结果 → 添加 AND 词项,使用字段标签 缺少摘要: 使用 efetch 而不是 esummary,以获取完整的摘要文本 未找到 DOI: 许多较早的论文没有 DOI,可使用 PMID 作为备用 请求频率受限: 添加 500ms 的延迟(单个 Agent),或设置更长的延迟(共享请求频率限制的并行子 Agent)
后续步骤
完成搜索后:
- 通知:“找到 N 篇符合查询条件的论文”
- 使用
skills/research/evaluating-paper-relevance开始评估 - 随着论文筛选的进行,向用户更新进度
评论
支持 Markdown