Academic Paper Search:可复现的多源文献检索工作流
这篇文章解决什么问题:Academic Paper Search v0.1.2 正式发布:同时检索 PubMed、CrossRef 和 arXiv,保留查询、去重、核验、失败披露与引用导出记录。
Academic Paper Search 的 v0.1.2 已经正式发布。这个版本把用户可见名称从 Nature Academic Search 更新为更直接的 Academic Paper Search;为了不破坏已有安装和配置,PyPI、插件、CLI 与 Skill 的技术标识仍然是 nature-academic-search,现有用户不需要迁移命令。

我想解决的不是“让模型多给几个论文标题”,而是让一次文献检索留下可以复查的过程:实际查询了哪些来源、用了什么查询、何时检索、合并前后有多少记录、哪些 DOI / PMID / arXiv ID 得到核验、哪些冲突仍待人工处理,以及某个数据源失败后还缺什么。
为什么普通对话式检索不够
用 AI 找论文时,最危险的结果不一定是完全没有答案,而是得到一份看起来可信、却无法重放的清单。题名可能相似,作者和年份可能被拼接,预印本和正式版本可能重复出现;一个 DOI 即使格式正确,也不代表它对应当前列出的题名。
多来源检索还会带来另一类问题:每个数据库的职责和查询语言并不相同。PubMed 适合生物医学索引与 MeSH,CrossRef 更接近出版商元数据和 DOI 解析,arXiv 负责预印本及其版本线索。把一条 PubMed 检索式原样丢给三个来源,不能算真正的多源检索。
最后,上游 API 的限流、超时和临时故障是常态。如果系统因为 arXiv 暂时不可用就丢掉 PubMed 与 CrossRef 已经返回的记录,工作流会变得脆弱;如果它静默忽略故障,读者又会误以为三库都已覆盖。
Academic Paper Search 因此把“检索结果”定义成一份带来源状态的研究记录,而不是一段一次性回答。
核心方法:检索、去重、核验、分组、导出
1. 对三个来源分别适配查询
Skill 建议先记录主题、日期范围、文献类型、结果数量和是否接受预印本,再针对 PubMed、CrossRef 与 arXiv 分别构造适合的查询并分次调用。当前 search_papers 的一次调用只接收一个 query,会把它原样传给本次选中的来源;它不会在底层自动把 PubMed 语法改写成 CrossRef 或 arXiv 语法。当前运行时只内置这三个来源,也不会把没有连接的数据库写进“已检索来源”。
底层 MCP(Model Context Protocol,模型上下文协议)暴露四个稳定工具:
| 工具 | 负责的动作 |
|---|---|
search_papers | 并发查询一个或多个来源,合并结果,同时返回逐来源错误 |
get_paper_by_id | 解析 DOI、PMID 或 arXiv ID,并取回对应元数据 |
get_citation | 为已经解析的记录生成指定格式引用 |
lookup_mesh | 查询 PubMed MeSH 描述词,辅助构建检索式 |
客户端可能为工具名增加 MCP 命名空间前缀,但名称后缀与参数契约保持不变。这里有意把“搜索”和“按标识符核验”分成两步:搜索负责扩大召回,核验负责让拟引用记录回到稳定标识符和原始元数据。
2. 用标识符优先的规则合并重复项
同一论文可能同时出现在 PubMed 与 CrossRef,也可能先以 arXiv 预印本出现、之后有正式版本。v0.1.2 会先规范化 DOI 与 arXiv ID,再为每条记录同时建立所有可用键:DOI、PMID、arXiv ID,以及标准化题名加年份。任意一个键命中已有分组时就会合并,并保留记录来自哪些来源,而不是静默覆盖来源信息。
这并不意味着算法能自动解决所有版本关系。因为题名加年份也是合并键,不同标识符但同题同年的记录也可能被归到一起;题名变化、作者列表变化或元数据冲突时,更需要在 Skill 最终报告中标记为 mismatch 或 manual_needed,不能为了让清单更整齐而猜测它们是同一篇文章。
3. 把正式论文、预印本和未解决记录分开
由 Skill / Agent 整理的最终报告会区分 peer_reviewed、preprints 和 unresolved。这是一条很实际的证据边界:arXiv 记录可以提供及时线索,但不能仅凭出现在检索结果中就被描述为已经同行评审;标识符或关键字段有冲突的条目,也不应混入可直接引用的正式论文清单。
最终报告的核验状态至少包括 verified、mismatch、not_found 和 manual_needed。这些不是 search_papers 原始 JSON 自动生成的字段,而是 Agent 在继续调用 get_paper_by_id 并比较题名、作者、来源、年份和标识符后给出的分类。
4. 允许部分成功,但必须披露缺口
search_papers 会并发查询选定来源,并收集逐来源结果。某个来源失败时,其他来源成功返回的记录仍会进入去重;原始响应把失败项写入 errors,同时保留 sources_queried、raw_result_count、result_count、results。Skill / Agent 再基于这份原始响应整理面向读者的最终报告。
这种处理不是把失败“降级为成功”,而是把两件事同时说清楚:这次检索已经得到了哪些材料,以及由于哪个来源不可用,覆盖范围可能缺少什么。若三个来源都没有有效结果,应回到检索词、MeSH 或纳入条件,而不是让模型补出不存在的引用。
5. 从已解析记录生成引用文件
核验后的记录可以导出为 RIS、BibTeX、NBIB 或 ENW,进入 Zotero、EndNote、LaTeX 或其他参考文献工作流。NBIB 主要对应 PubMed/MEDLINE;CrossRef 或 arXiv 在请求 NBIB 时需要使用适用的其他格式。单条引用由 get_citation 处理,批量文件则通过 CLI 生成;未解决记录应排除或单独列出,不应伪装成已核验引用。
一个可执行的检索请求与结果结构
安装完成后,可以直接给 Codex 或 Claude Code 下面这段任务。它明确了主题、时间、来源、去重、核验、预印本处理、失败策略和导出格式,比“帮我找相关论文”更容易复查。
1 | 使用 $nature-academic-search 查找 2022 年以来 GLP-1 受体激动剂与抑郁风险的文献。 |
下面是预期的结果结构示意。mcp_raw 对应 search_papers 的原始字段;agent_report 是 Skill / Agent 继续核验后整理的交付层。尖括号是待填字段,数量不是一次真实检索的实测统计,不能把它们引用为项目效果数据。
1 | query: "GLP-1 receptor agonists AND depression risk" |
这个结构的重点不在于字段多,而是把原查询、实际来源、去重前后数量和错误放在同一份记录中。以后补搜或更新综述时,可以知道上一次到底做到了哪里,而不是重新依赖一段已经失去上下文的聊天。
一次真实的 DOI 核验
为了不把占位模板当成项目效果,我在 2026-07-18 使用 v0.1.2 的 get_paper_by_id 实际核验了 DOI 10.1038/nature14539。CrossRef 返回的稳定元数据子集如下;引用次数会持续变化,因此没有写入示例。
1 | { |
这个例子证明的是标识符解析与元数据返回可以复现,不证明多源检索已经覆盖充分。真正进入引用文件前,仍应把 DOI、题名、作者和出版信息与出版社页面或合法全文再核对一次。
快速开始:安装与最短使用路径
如果希望把 Skill 与 MCP 一起作为插件加载,可以分别使用 Codex 和 Claude Code 的 marketplace:
1 | # Codex |
也可以通过隔离的 Python 应用安装 CLI,再让安装器同时配置两个客户端。这里需要提供 PubMed 联系邮箱,以遵守 NCBI 请求规范;NCBI API Key 是可选项。
1 | uv tool install nature-academic-search |
插件方式运行前,可以在启动客户端的环境里设置邮箱:
1 | export [email protected] |
安装或更新后新建一个 Codex 任务或 Claude Code 会话,让客户端重新加载 Skill 与 MCP 工具。项目展示名已经变化,但调用仍然使用 $nature-academic-search;nature-academic-search-mcp、CLI 和插件 ID 也保持不变。
三个适合直接开始的场景
场景一:综述或开题前的可复现初筛
先给出研究问题、时间范围、文献类型和是否纳入预印本,让三个来源分别检索,再按正式论文、预印本和未解决记录分组。保存原查询、检索日期、去重数量与来源错误后,后续补搜时可以明确比较新增记录。它适合作为系统综述之前的探索与整理,但不能替代正式方案注册、完整数据库覆盖和双人筛选。
场景二:批量核验参考文献与版本关系
把 DOI、PMID、arXiv ID 或待核对的题名列表交给工作流,逐条比较题名、作者、来源、年份与标识符。遇到预印本与正式版本时保留两者关系;遇到冲突则单列 mismatch 或 manual_needed。这个场景适合投稿前清理参考文献,也适合检查模型生成的引用是否真的存在。
场景三:构建 PubMed MeSH 策略并导出
对于生物医学问题,先用 lookup_mesh 核对主题词,再把 MeSH 与自由词组合成 PubMed 查询;CrossRef 与 arXiv 则使用各自适配的关键词。确认纳入记录后,再按参考文献管理器选择 RIS、BibTeX、NBIB 或 ENW。这样可以把“怎么搜”和“怎么导出”连起来,同时保留人工调整检索式的空间。
能力边界
Academic Paper Search 当前只连接 PubMed、CrossRef 和 arXiv。它不是 Google Scholar、Web of Science、Scopus、Embase 或 CNKI 的替代接口,也不会声称检索了这些未连接来源。它不会绕过付费墙,核心处理对象是元数据、标识符、引用与检索策略,而不是承诺自动获得每篇论文全文。
它也不替代正式系统综述。完整系统综述通常还需要预注册方案、学科适配的订阅数据库、完整检索式记录、去重审计、双人筛选、排除理由、偏倚评估和图书馆员或方法学专家复核。这里的多源工作流更适合前期调研、引用核验、版本整理与可复现的初筛基础。
上游 API 可能限流、超时或临时不可用。这些限制不会因为保留了部分成功结果而消失:“有部分结果”不等于覆盖充分;正式使用时必须阅读原始响应的 errors,并在来源恢复后补搜或改用合规的人工数据库检索。
隐私与敏感数据
普通公开检索词通常风险较低,但未发表研究问题、患者描述、内部选题策略、评审意见和含个人信息的引用文件仍可能属于敏感数据。Skill 与 MCP 的运行路径取决于 Codex、Claude Code、Python 环境及其网络配置;在处理受限材料前,应确认组织政策、日志位置和允许访问的外部 API。检索请求只应包含完成任务必要的信息,不要把密钥、原始患者标识或未脱敏附件写进提示词。
人工复核
引用进入论文、基金申请或正式报告前,作者仍应回到 PubMed 记录、出版社页面、arXiv 版本页或合法全文,逐条确认作者顺序、题名、年份、卷期页码、DOI、同行评审状态和结论是否支持当前表述。自动去重与格式导出减少的是机械工作,不会证明文献已经满足纳入标准,也不会替代研究者对相关性和证据质量的判断。
系列导航
这是四篇 Skill 项目介绍之一。其余三篇分别是:

