first commit

This commit is contained in:
Hermes Agent
2026-05-10 13:52:46 +08:00
commit ccc63d1e70
4583 changed files with 584341 additions and 0 deletions

287
sn-search-academic/SKILL.md Normal file
View File

@@ -0,0 +1,287 @@
---
name: sn-search-academic
description: "多源学术搜索ArXiv、Semantic Scholar含引用数、PubMed、Wikipedia。支持按章节读取 ArXiv HTML 全文和 PMC 全文。触发词:学术论文、文献调研、引用数据、生物医学文献、百科查询。一站式多源工具。"
---
# sn-search-academic - 学术搜索
搜索 ArXiv、Semantic Scholar、PubMed、Wikipedia 四个学术平台,并提供 ArXiv 和 PMC 的**全文章节阅读**能力。全部免费,部分脚本有可选 API key 可提升限额。
## 依赖
运行脚本前先安装本 skill 的 Python 依赖:
```bash
python3 -m pip install -r skills/sn-search-academic/requirements.txt
```
如果项目使用 `uv` 环境:
```bash
uv pip install -r skills/sn-search-academic/requirements.txt
```
`arxiv_paper.py` 需要 `beautifulsoup4` 解析 ArXiv HTML其他脚本主要依赖 `httpx` 发起请求。
## 可用脚本
| 脚本 | 平台 | 用途 | API key |
|------|------|------|---------|
| `arxiv_search.py` | ArXiv | 预印本搜索,支持作者/标题/ID查询 | 无需 |
| `arxiv_paper.py` | ArXiv HTML | 按章节读取 ArXiv 论文全文 | 无需 |
| `semantic_scholar_search.py` | Semantic Scholar | 全学科搜索,含引用数和 TLDR | 无需(有 key 限额更高) |
| `semantic_scholar_refs.py` | Semantic Scholar | 引用追溯查论文的参考文献backward或被引论文forward | 无需(有 key 限额更高) |
| `pubmed_search.py` | PubMed | 生医文献搜索,含结构化摘要和 PMC ID | 无需(有 key 限额更高) |
| `pmc_paper.py` | PMC | 按章节读取 PMC 开放获取论文全文 | 无需(有 key 限额更高) |
| `wikipedia_search.py` | Wikipedia | 百科文章搜索,支持多语言 | 无需 |
## 参数说明
### arxiv_search.py
```bash
python3 scripts/arxiv_search.py <query> [选项]
```
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `query` | 搜索关键词(使用 `--id-list` 时可省略) | — |
| `--limit`, `-n` | 返回结果数量 | 10 |
| `--category`, `-c` | ArXiv 分类过滤(见下方"ArXiv 分类速查" | — |
| `--sort` | 排序方式:`relevance`, `date`, `submitted` | relevance |
| `--author`, `-a` | 按作者过滤,多个用逗号分隔 | — |
| `--title-only` | 仅在标题中搜索 | — |
| `--id-list` | 直接按 arXiv ID 获取元数据,逗号分隔 | — |
```bash
python3 scripts/arxiv_search.py "transformer attention mechanism" --limit 5
python3 scripts/arxiv_search.py "diffusion model" --author "ho jonathan" --category cs.CV
python3 scripts/arxiv_search.py --id-list "2409.05591,2301.07041"
```
**输出字段**`title`, `url`, `snippet`(摘要), `arxiv_id`, `authors`, `published`, `updated`, `pdf_url`, `html_url`, `categories`, `primary_category`, `comment`, `journal_ref`, `doi`
### arxiv_paper.py
按章节读取 ArXiv 论文正文(需论文有 HTML 版本2020 年后多数论文支持)。
```bash
python3 scripts/arxiv_paper.py <arxiv_id> [--section SECTION_NAME]
```
| 参数 | 说明 |
|------|------|
| `arxiv_id` | arXiv ID`2409.05591``2409.05591v2` |
| `--section`, `-s` | 章节名(大小写不敏感,支持部分匹配)。不指定则列出所有章节。 |
```bash
python3 scripts/arxiv_paper.py 2409.05591 # 列出章节
python3 scripts/arxiv_paper.py 2409.05591 --section introduction
python3 scripts/arxiv_paper.py 2409.05591 --section method
```
**列出章节输出字段**`arxiv_id`, `abs_url`, `html_url`, `pdf_url`, `section_count`, `sections[]`name, level
**读取章节输出字段**`arxiv_id`, `section`, `level`, `content`, `char_count`
### semantic_scholar_search.py
```bash
python3 scripts/semantic_scholar_search.py <query> [选项]
```
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `query` | 搜索关键词(必填) | — |
| `--limit`, `-n` | 返回结果数量 | 10 |
| `--api-key` | Semantic Scholar API Key也可通过 `S2_API_KEY` 环境变量) | — |
```bash
python3 scripts/semantic_scholar_search.py "transformer architecture" --limit 5
python3 scripts/semantic_scholar_search.py "RLHF language model" --limit 10
```
**输出字段**`title`, `url`, `snippet`(摘要,缺失时降级为 tldr, `tldr`, `authors`, `year`, `venue`, `publication_date`, `citation_count`, `influential_citation_count`, `reference_count`, `is_open_access`, `open_access_pdf`, `fields_of_study`, `publication_types`, `doi`, `arxiv_id`, `paper_id`
### semantic_scholar_refs.py
引用追溯给定一篇论文查询它的参考文献backward或被引论文forward
```bash
python3 scripts/semantic_scholar_refs.py <paper_id> <direction> [选项]
```
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `paper_id` | 论文标识符S2 ID、DOI`10.xxxx/...`、ArXiv ID`2301.07041`、PMID`PMID:12345678` | — |
| `direction` | `references`=参考文献backward`citations`=被引论文forward | — |
| `--limit`, `-n` | 返回结果数量 | 20 |
| `--min-citations` | 最低引用数过滤 | 0 |
| `--year-min` | 最早年份过滤 | — |
| `--year-max` | 最晚年份过滤 | — |
| `--api-key` | Semantic Scholar API Key可选 | — |
```bash
# 查看某篇论文引用了哪些论文backward找奠基工作
python3 scripts/semantic_scholar_refs.py 2301.07041 references --limit 10
# 查看某篇论文被谁引用forward找后续进展
python3 scripts/semantic_scholar_refs.py 2301.07041 citations --limit 10 --min-citations 50
# 用 DOI 查引用,限定 2023 年以后
python3 scripts/semantic_scholar_refs.py "10.1038/s41586-024-07487-w" citations --year-min 2023
# 找高引参考文献
python3 scripts/semantic_scholar_refs.py ARXIV:2005.14165 references --min-citations 100 --limit 5
```
**输出字段**`title`, `url`, `snippet`(摘要/tldr, `authors`, `year`, `venue`, `citation_count`, `influential_citation_count`, `is_open_access`, `open_access_pdf`, `doi`, `arxiv_id`, `paper_id`, `citation_contexts`(引用上下文句子,最多 3 条), `citation_intents`(引用意图)
**输出额外字段**`source_paper`(被查询论文的标题/年份/引用数), `total_available`(该方向总论文数), `returned`(过滤后返回数)
### pubmed_search.py
支持 PubMed 查询语法,如字段限定(`cancer[Title]`)、日期范围(`2024[pdat]`)。
```bash
python3 scripts/pubmed_search.py <query> [选项]
```
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `query` | 搜索关键词,支持 PubMed 查询语法 | — |
| `--limit`, `-n` | 返回结果数量 | 10 |
| `--api-key` | NCBI API Key可选限额从 3 req/s 升至 10 req/s | — |
```bash
python3 scripts/pubmed_search.py "CRISPR gene editing" --limit 5
python3 scripts/pubmed_search.py "Alzheimer[Title] AND treatment[Title]" --limit 5
```
**输出字段**`title`, `url`, `snippet`(结构化摘要), `authors`, `pmid`, `pmc_id`(有值则可传入 `pmc_paper.py`, `pmc_url`, `journal`, `pub_date`, `volume`, `issue`, `pages`, `keywords`, `pub_types`, `doi`
### pmc_paper.py
读取 PubMed Central 开放获取全文(约 700 万篇生医论文,占 PubMed 约 35%)。`pubmed_search.py` 结果中 `pmc_id``null` 的论文无法使用本工具。
```bash
python3 scripts/pmc_paper.py <pmc_id> [--section SECTION_NAME]
python3 scripts/pmc_paper.py --pmid <pmid> [--section SECTION_NAME]
```
| 参数 | 说明 |
|------|------|
| `pmc_id` | PMC ID`PMC11119143``11119143` |
| `--pmid` | PubMed ID自动转换为 PMC ID`pmc_id` 二选一) |
| `--section`, `-s` | 章节名(大小写不敏感,支持部分匹配)。不指定则列出所有章节。 |
| `--api-key` | NCBI API Key可选 |
```bash
python3 scripts/pmc_paper.py PMC11119143 # 列出章节
python3 scripts/pmc_paper.py PMC11119143 --section introduction
python3 scripts/pmc_paper.py --pmid 38786024 --section conclusion
```
**列出章节输出字段**`pmc_id`, `pmid`, `title`, `pmc_url`, `section_count`, `sections[]`name, level含子章节层级
**读取章节输出字段**`pmc_id`, `section`, `level`, `content`(含子章节文本), `char_count`
### wikipedia_search.py
```bash
python3 scripts/wikipedia_search.py <query> [选项]
```
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `query` | 搜索关键词(必填) | — |
| `--limit`, `-n` | 返回结果数量 | 10 |
| `--lang`, `-l` | 语言版本(`en`, `zh`, `ja`, `de`, `fr` 等) | en |
```bash
python3 scripts/wikipedia_search.py "machine learning" --limit 5
python3 scripts/wikipedia_search.py "深度学习" --lang zh --limit 5
```
## 全文阅读工作流
搜索脚本返回摘要,阅读脚本返回正文。两者配合可按需精读,节省 token。
**ArXiv 论文**
1. `arxiv_search.py` 搜索 → 获取 `arxiv_id`
2. `arxiv_paper.py <id>` 列章节 → `arxiv_paper.py <id> --section introduction` 快速判断是否深入
3. 按需读取 `method` / `experiment` / `conclusion`
**PMC 生医论文**
1. `pubmed_search.py` 搜索 → 结果中取 `pmc_id`(非 null 才有全文)
2. `pmc_paper.py <pmc_id>` 列章节 → 按需读取关键章节
## 引用追溯工作流
通过论文的引用关系发现关键词搜索覆盖不到的相关工作。
**Backward找奠基工作**
1. 关键词搜索找到高相关论文 → 取其 `paper_id``arxiv_id`
2. `semantic_scholar_refs.py <id> references --min-citations 50` → 找到高引参考文献
3. 筛选与研究问题相关的条目 → 用 `arxiv_paper.py``pmc_paper.py` 深入阅读
**Forward找后续进展**
1. 找到领域奠基论文或关键论文 → 取其 ID
2. `semantic_scholar_refs.py <id> citations --year-min 2024 --min-citations 10` → 找到近期高引跟进工作
3. 筛选与研究问题相关的条目 → 深入阅读
**Citation Chain追溯演化路径**
1. 从种子论文 A 出发 → backward 找到 A 的关键参考文献 B
2. 从 B 出发 → forward 找到引用 B 的后续工作(可能发现 A 没引用的相关论文 C
3. 形成 B → A → ... 和 B → C → ... 的知识脉络
## ArXiv 分类速查
顶层领域可直接用(如 `--category cs`),子分类更精确(如 `--category cs.AI`)。
| 领域 | 分类代码 | 说明 |
|------|---------|------|
| **计算机科学** | `cs.AI` | 人工智能 |
| | `cs.LG` | 机器学习 |
| | `cs.CL` | 计算语言学 / NLP |
| | `cs.CV` | 计算机视觉 |
| | `cs.IR` | 信息检索 |
| | `cs.RO` | 机器人 |
| | `cs.SE` | 软件工程 |
| | `cs.DC` | 分布式/并行计算 |
| | `cs.NI` | 网络与互联网 |
| | `cs.CR` | 密码学与安全 |
| | `cs.DB` | 数据库 |
| | `cs.HC` | 人机交互 |
| **统计** | `stat.ML` | 统计机器学习 |
| | `stat.AP` | 应用统计 |
| | `stat.ME` | 统计方法论 |
| **数学** | `math.OC` | 优化与控制 |
| | `math.ST` | 统计理论 |
| | `math.CO` | 组合数学 |
| **物理** | `physics` | 物理(全类) |
| | `cond-mat` | 凝聚态物理 |
| | `quant-ph` | 量子物理 |
| | `hep-th` | 高能理论物理 |
| **经济/金融** | `econ.GN` | 经济学综合 |
| | `q-fin.CP` | 计算金融 |
| | `q-fin.ST` | 统计金融 |
| **生物/医学** | `q-bio.NC` | 神经科学 |
| | `q-bio.GN` | 基因组学 |
| | `q-bio.QM` | 定量方法 |
## 输出格式
所有脚本输出标准 JSON
```json
{
"success": true,
"query": "...",
"provider": "arxiv|semantic_scholar|pubmed|wikipedia",
"items": [{"title": "...", "url": "...", "snippet": "...", ...}],
"error": null
}
```
`arxiv_paper.py``pmc_paper.py` 不走 `items` 格式,直接返回结构化对象(见各自"输出字段"说明)。