学术论文搜索、引用分析与元数据提取专用 Skill。 【自动触发条件——出现以下任一信号时立即加载本 Skill,无需用户显式说明】 意图信号(中文): - 搜论文 / 找论文 / 查论文 / 调研论文 / 检索文献 / 文献综述 / 综述 - 顶会 / 顶刊 / CCF / NeurIPS / ICML / ICLR / ACL / EMNLP / CVPR / KDD / SIGIR / WWW - 引用数 / 被引 / 引用关系 / 引用量 - BibTeX / 参考文献格式 / 导出引用 - 作者发表列表 / 某人的论文 / 某人在哪发了什么 - arXiv / Semantic Scholar / Google Scholar / PubMed / ACM DL / IEEE - 知网 / CNKI / 中国知网 / 学位论文 / 硕士论文 / 博士论文 / 中文文献 / 中文期刊 - PDF 链接 / 论文 PDF / 开放获取 - 摘要 abstract / 元数据 意图信号(英文): - search paper / find paper / look up paper / literature review / survey - citation count / citation graph / citing / cited by - BibTeX / reference export - top conference / top journal / venue ranking - author publication list / papers by X URL 信号(出现以下域名的链接时自动触发): - arxiv.org / ar5iv.org - semanticscholar.org - scholar.google.com - dl.acm.org - ieeexplore.ieee.org - pubmed.ncbi.nlm.nih.gov - paperswithcode.com - cnki.net / kns.cnki.net 覆盖平台:arXiv、Semantic Scholar、Google Scholar、ACM DL、IEEE Xplore、PubMed、Papers with Code、CNKI(中国知网)
在开始前,检查环境就绪状态:
bash ~/.claude/skills/academic-search/scripts/check-deps.sh
chrome://inspect/#remote-debugging,勾选 Allow remote debugging for this browser instance。arXiv、Semantic Scholar、PubMed、Papers with Code 等 API 平台无需 Chrome 远程调试即可使用。
S2 API Key(强烈建议):无 Key 时 S2 速率上限极低,单 session 多次调用必触发 429。免费注册即可获得更高配额:https://www.semanticscholar.org/product/api#api-key-form。有 Key 时在请求头加 x-api-key: {your_key}。
明确目标,选对平台,提取结构化数据,完成即止。
学术搜索不同于通用网页浏览——目标是获取准确、结构化的论文元数据,而不是浏览网页内容。
① 明确检索目标,定义成功标准:执行前先明确什么算完成了。
② 选对平台:不同需求对应不同平台(见下方矩阵)。API 平台优先,CDP 用于无 API 的平台。
③ 提取结构化数据,先筛后深:搜索的时间瓶颈不在"搜",在"筛"。默认采用两遍策略:
所有结果输出为统一 schema(见 references/metadata-schema.md),不要输出原始 HTML 或非结构化文本。多平台结果用 DOI/arXiv ID 去重合并。
④ 过程校验,用失败信号更新方向:每一步的结果都是信息,不只是成功或失败的二元信号。
| 失败信号 | 含义 | 方向调整 |
|---|---|---|
| API 429 / Rate exceeded | 本次会话消耗超配额,不是暂时波动 | 等待 15s+ 或切换 CDP 模式;不要同一请求重试 |
| Jina/WebFetch 超时 | 该页面对静态抓取不友好 | 改用 curl 直接调 API 或切换 CDP |
| S2 返回结果为空 | query 措辞问题,或该平台无收录 | 换关键词组合,或换 arXiv/PubMed |
| 平台返回"内容不存在" | 未必真的不存在,可能是访问方式问题 | 检查 URL 参数是否完整,换平台验证 |
| 同一方式重试 3 次无改善 | 路径错了,不是还没找到方法 | 重新评估目标,换平台或换访问方式 |
⑤ 完成判断:对照①定义的成功标准确认任务完成后停止,不为"更完整"而过度操作。
根据任务特征选择最合适的平台和访问方式:
| 需求 | 首选平台 | 访问方式 | 备注 |
|---|---|---|---|
| CS/Math/Physics/统计 论文搜索 | arXiv | REST API | 完全开放,PDF 直链 |
| 引用数、引用/被引关系 | Semantic Scholar | REST API | 免费 Key 可提升速率 |
| 作者主页、全部论文 | Semantic Scholar | REST API | /author/{id}/papers |
| 生物医学、生命科学 | PubMed | NCBI E-utilities | 完全开放 |
| ML 论文 + 代码仓库 | Papers with Code | REST API | 无需鉴权 |
| ACM 顶会论文 (SIGKDD/WWW 等) | ACM DL | WebFetch + Jina | BibTeX 导出端点可直接访问 |
| IEEE 期刊/会议论文 | IEEE Xplore | WebFetch / Jina | 有机构 Key 时用官方 API |
| 广泛引用数 / 全平台覆盖 | Google Scholar | CDP(必须) | 无 API,反爬严重 |
| 论文是否存在 / 基础元数据 | Semantic Scholar | REST API | 支持 DOI / arXiv ID 互查 |
| 中文文献(期刊/学位论文/会议) | CNKI(知网) | CDP(必须) | 无公开 API;机构登录后全文可得 |
API 平台访问方式:
r.jina.ai/{url})节省 token,适合文章类页面详细 API 调用模板见 references/api-cookbook.md。
agent → agentic / multi-agent / autonomoustime series agent → time series LLM agent + time series agentic reasoning + time series automated analysisTS / time series,LLM / large language modelsearch_query 字段前缀语法;S2 用 query 参数;PubMed 用 term 布尔表达式/paper/batch)而非多次 search,节省速率配额多平台并行查询时,用子 Agent 分治(见"并行分治策略"一节)。
轻量摘要表输出格式示例:
| 标题 | 年份 | Venue | 引用数 | |
|---|---|---|---|---|
| Attention Is All You Need | 2017 | NeurIPS [CCF-A] | 120,000+ | ✓ arXiv |
| BERT: Pre-training... | 2019 | NAACL [CCF-B] | 80,000+ | ✓ arXiv |
Venue 等级标注规则:CS 会议参考 references/venue-rankings.md(CCF 分级);期刊显示 JCR 分区(若可从 S2 venue 字段获取)。
搜索后用以下维度缩小范围,优先帮用户筛出值得读的论文,而不是把所有结果都呈现:
| 筛选维度 | 数据来源 | 说明 |
|---|---|---|
| 引用数阈值 | S2 citationCount | 经典论文通常引用数高;新兴方向可适当放低阈值 |
| 发表年份 | 所有平台 | 综述类需要覆盖历史;最新进展限定近 2-3 年 |
| Venue 等级 | S2 venue + references/venue-rankings.md | CS 会议参考 CCF 分级;优先 CCF-A/B |
| 开放 PDF | S2 externalIds.ArXiv 存在即可得 | 只要有 ArXiv ID 就标 ✓,不依赖 openAccessPdf(该字段经常为 null) |
| 代码可用性 | Papers with Code API | ML 论文用 paperswithcode.com/api/v1/papers/?arxiv_id={id} 自动补全代码列 |
排序建议:面向学术前沿性的综合排序,优先级依次为:
[新] 并置顶展示,不因引用数低而降权——前沿方向的新论文引用数天然偏低,但代表最新进展实操分组示例:
[新] 标注)筛选后的典型结论格式:
共找到 28 篇,按引用数 + venue 等级筛选后,推荐优先阅读以下 6 篇:[列表] 其余 22 篇可按需查阅。
已知 DOI 或 arXiv ID 时,直接用 Semantic Scholar 精确查询:
# DOI 查询
curl -s "https://api.semanticscholar.org/graph/v1/paper/DOI:{doi}?fields=title,authors,year,abstract,citationCount,openAccessPdf"
# arXiv ID 查询
curl -s "https://api.semanticscholar.org/graph/v1/paper/ARXIV:{arxiv_id}?fields=title,authors,year,abstract,citationCount,openAccessPdf"
所有提取结果必须转换为 references/metadata-schema.md 定义的标准 JSON schema。输出时:
按以下优先级尝试:
externalIds.ArXiv 存在时,直接构造 https://arxiv.org/pdf/{arxiv_id},不检查 openAccessPdf(S2 该字段经常为 null,但 arXiv PDF 实际可得)openAccessPdf.url 字段获取(作为补充,非首选)https://api.unpaywall.org/v2/{doi}[email protected],返回 Open Access PDF 链接不要尝试访问任何需要绕过付费墙的第三方服务。
优先级:
https://arxiv.org/bibtex/{arxiv_id} 直接获取https://dl.acm.org/action/exportCitation?doi={encoded_doi}&format=bibtex;若返回 challenge/HTML 错页,回退 CDPreferences/metadata-schema.md 的模板从字段拼装# Semantic Scholar 作者搜索
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query={author_name}&fields=name,affiliations,paperCount,citationCount"
# 获取作者全部论文(分页)
curl -s "https://api.semanticscholar.org/graph/v1/author/{author_id}/papers?fields=title,year,citationCount,externalIds&limit=100&offset=0"
Google Scholar 作者页需 CDP,见 references/site-patterns/scholar.google.com.md。
通过 CDP Proxy 直连用户日常 Chrome,天然携带登录态。
所有操作在自己创建的后台 tab 中进行,不干扰用户已有 tab,完成后关闭。
bash ~/.claude/skills/academic-search/scripts/check-deps.sh
脚本自动检查并启动 CDP Proxy(默认 127.0.0.1:3456,可通过 CDP_PROXY_PORT 覆盖)。
进入浏览器层后,用 HTTP API 操控页面:
# 创建新 tab,导航到目标页
TARGET=$(curl -s "http://127.0.0.1:${CDP_PROXY_PORT:-3456}/new?url=https://scholar.google.com" | node -p "JSON.parse(require('fs').readFileSync(0, 'utf8')).targetId")
# 执行 JS 提取数据
curl -s -X POST "http://127.0.0.1:${CDP_PROXY_PORT:-3456}/eval?target=$TARGET" -d 'document.title'
# 点击元素(CSS 选择器)
curl -s -X POST "http://127.0.0.1:${CDP_PROXY_PORT:-3456}/click?target=$TARGET" -d 'button[type=submit]'
# 完成后关闭 tab
curl -s "http://127.0.0.1:${CDP_PROXY_PORT:-3456}/close?target=$TARGET"
完整 API 参考见 references/cdp-api.md。
三种点击方式:
| 方式 | 端点 | 适用场景 |
|---|---|---|
| JS click | /click | 通用,速度快 |
| 真实鼠标 | /clickAt | 需要触发文件对话框或绕过反自动化检测 |
| 文件上传 | /setFiles | 直接设置 file input,绕过对话框 |
先了解页面结构,再决定动作:用 /eval document.body.innerText.slice(0, 500) 或截图快速了解当前页面状态。
任务包含多个独立目标时(如同时查询 N 篇论文、N 个来源),分发子 Agent 并行执行。
好处:速度 = 单子任务时长;抓取内容不进入主 Agent context,节省 token。
子 Agent Prompt 写法:
必须加载 academic-search skill 并遵循指引典型分治场景:
| 适合分治 | 不适合分治 |
|---|---|
| 多平台并发查同一论文(arXiv + S2 + PubMed) | 查询有依赖关系(先搜索再按结果查详情) |
| 批量查询 N 篇不相关论文 | 简单单平台单次 API 查询 |
| 多个作者主页并行抓取 | 几次 curl 就能完成的轻量任务 |
多平台并发查同一论文时的去重:
子 Agent 返回结果后,主 Agent 按 references/metadata-schema.md 中的去重规则合并:DOI 为主键 → arXiv ID 次之 → 标题+年份模糊匹配。
学术搜索的一手来源是论文本身和平台官方 API,不是二手报道。
| 核实目标 | 一手来源 |
|---|---|
| 论文元数据(标题、作者、DOI) | 发表平台(ACM DL / IEEE / arXiv)的官方页面 |
| 引用数 | Google Scholar(最全)> Semantic Scholar |
| 代码实现 | Papers with Code / 论文官方 GitHub |
| 会议/期刊信息 | 主办方官网 |
多平台引用数不一致时正常——不同平台收录范围不同,Google Scholar 通常最高。
操作中积累的特定网站经验,按域名存储在 references/site-patterns/ 下。
已预置经验的平台:arXiv、Semantic Scholar、Google Scholar、ACM DL、IEEE Xplore、PubMed、Papers with Code、CNKI(知网)
确定目标平台后,必须读取对应文件获取先验知识(平台特征、有效模式、已知陷阱)。经验内容标注发现日期,当作可能有效的提示,不是保证正确的事实——按经验操作失败时,回退通用模式,并更新经验文件(记录失败原因和发现日期)。操作成功后若发现了新模式或陷阱,同样主动写入。
| 文件 | 何时加载 |
|---|---|
references/api-cookbook.md | 需要 API 调用示例、参数说明、响应字段映射时 |
references/metadata-schema.md | 整理提取结果、多平台去重合并、生成 BibTeX 时 |
references/cdp-api.md | 需要 CDP 浏览器操作时(Google Scholar、CNKI 等) |
references/venue-rankings.md | 标注 CS 会议/期刊等级(CCF 分级)时 |
references/site-patterns/{domain}.md | 确定目标平台后,读取对应站点经验 |
references/site-patterns/cnki.net.md | 知网检索时必读:登录态要求、DOM 选择器、数据库代码 |