dsh-scihub:在 DSH 会话里按 DOI 或 URL 拉取论文 PDF

前言

在 DeepSeek Harness(DSH)里做文献调研时,模型往往需要可读的全文,而不是只有摘要链接。手动打开出版社页面、换 Sci-Hub 镜像、再把 PDF 拷进工作区,步骤重复且难脚本化。下面介绍维护者 stallenlu 的联网工具插件 dsh-scihub:向当前 profile 注册 scihub_pdf 与 scihub_batch 两个模型工具,按 DOI 或文章 URL 经 Sci-Hub 镜像解析并下载 PDF,写入会话工作区,并按引用元数据生成统一文件名。插件在 SkillHub 目录 收录,源码见 GitHub(约 1 star)。

这是什么

dsh-scihub 是 DeepSeek Harness 插件:通过 Sci-Hub 镜像把论文 PDF 落到当前会话的 workingDirectory 下(默认子目录 scihub/)。README 明确说明 Sci-Hub 属影子图书馆,可用性与合法性因司法辖区而异;工具只如实报告实际拿到什么,不把失败包装成成功。

分发上同时支持 npm 包、GitHub Release 预构建 tarball 与插件市场一键安装;目录解析优先级为 npm → tarball → 整仓源码。

核心功能

单篇:scihub_pdf

参数 类型 说明
doi string 裸 DOI(如 10.1038/nature12373)或 doi.org 链接
url string 文章页、出版社 DOI 链接或直连 PDF

doi 与 url 二选一;同时提供或都不提供会在入口报错。

典型返回 status:

status 含义
downloaded 已写入工作区,返回 path、bytes、title、mirror、pdfUrl
not_found 所有镜像均无此文
challenge 镜像返回 Cloudflare Turnstile 等人机验证,HTTP 客户端无法通过,不能判定是否存在
error 网络、HTTP 或非 PDF 内容,message 与 attempts 说明原因

批量:scihub_batch

参数 类型 说明
dois string[] 裸 DOI 列表,最多 50 条

逐条走与单篇相同的镜像流程。汇总 status 为 downloaded(全部命中)、partial(部分命中)或 failed(全无);counts 给出 {total, downloaded, failed},results 逐条带 status / path / mirror / attempts。

URL 解析逻辑

  1. URL 中含 DOI → 抽出 DOI 走镜像。
  2. 路径以 .pdf 结尾 → 先直连下载;若返回 HTML 且链接里仍有 DOI,则转镜像。
  3. 其它文章页 → 抓取页面,读 citation_doi meta 或页上第一个 DOI,再走镜像(覆盖 Nature、Science 等 URL 不含 DOI 的情况)。

文件名与配置

自 0.4.1 起,默认用 Sci-Hub 文章页真实引用元数据套模板,缺字段不臆造,全无时回退为 <doi 压平>.pdf:

fileNameTemplate: '{firstAuthor} ({year}) {title}'

可在 profile 的 cordis.patch.yml 中自定义,例如批量加序号:

- id: scihub
  name: 'dsh-scihub'
  config:
    fileNameTemplate: '{n} {firstAuthor} ({year}) {title}'

将 fileNameTemplate 设为 '' 可恢复 0.4.0 的 DOI 命名。同名文件不静默覆盖:内容相同则复用,不同则追加 (2)、(3) 等。

镜像列表运行时读 lib/mirrors.json,修改后无需重启 DSH。也可在 config 里用 mirrors 或 mirrorFile 覆盖,优先级为 config.mirrors > config.mirrorFile > lib/mirrors.json。

安装与启用

DSH 0.2.1+ 可在 Plugins → Plugin Market 搜索 dsh-scihub 安装;旧版在 Settings → Plugin Market。

命令行(将 web 换成自己的 profile 名):

# npm 包(推荐)
dsh plugin --profile web add dsh-scihub

# GitHub Release 预构建 tarball(README 示例为 v0.4.2)
dsh plugin --profile web add https://github.com/stallenlu/dsh-scihub/releases/download/v0.4.2/dsh-scihub-0.4.2.tgz

# 整仓源码
dsh plugin --profile web add github:stallenlu/dsh-scihub

会话内也可用 plugin_manager 指定 npm 版本(与 dsh plugin add dsh-scihub 等价):

plugin_manager install_bundle target=dsh-scihub@0.4.2

README 建议优先使用 registry 上的正式版本号,避免用本地目录 link 导致重启后 bundle 解析失败。改动 lib/host.mjs 需重启 DSH;仅改 lib/mirrors.json 不需重启。

运行环境:package.json 要求 Node >=22;插件仅依赖 Node 内置模块,无第三方依赖。许可证为 MIT。

典型用法

在已安装插件的 DSH 会话中,由模型调用工具即可,例如:

  • 单篇:传入 doi: "10.1038/nature12373" 或对应 doi.org / 出版社文章 url。
  • 批量:传入 dois: ["10.1038/...", "10.1103/..."],根据返回的 partial 与 results 处理未命中的 DOI。

维护者提供的联网冒烟测试(需网络):

node test-smoke.mjs
node test-smoke.mjs 10.1103/PhysRevLett.116.061102

离线命名逻辑测试:

node test-naming.mjs

若镜像集体失效,可在插件目录执行探活并写回列表:

node update-mirrors.mjs
node update-mirrors.mjs --doi 10.1103/PhysRevLett.116.061102

适用场景与注意

适合需要在 DSH 工作区内直接阅读、摘录或让模型处理 PDF 全文的研发与调研流程;与手动浏览器下载相比,路径与命名在会话内一致,批量接口便于一次处理多篇 DOI。

使用前请注意:

  • 插件以当前 DSH 进程权限出站访问镜像与 CDN;安装前应自行审阅 源码 与许可证,并评估所在地区对 Sci-Hub 的法律与机构政策。
  • 镜像存活是时间快照,可能遭遇 DNS 失败、403、人机验证或非 PDF 响应;challenge 与 not_found 语义不同,不宜混用。
  • SkillHub 社区目录为独立生态站点,与 DeepSeek / 幻方无官方从属关系;npm 上 README 记载的稳定发布示例为 dsh-scihub@0.4.2,仓库 package.json 中版本号可能更新,安装时以你指定的 target= 或 dsh plugin add 实际解析到的包为准。

结尾

dsh-scihub 把「DOI / 文章 URL → 工作区 PDF + 可读文件名」收成两个模型工具,并支持批量、镜像配置与命名模板。目录页:https://www.skillhub.cn/plugins/stallenlu/dsh-scihub;仓库:https://github.com/stallenlu/dsh-scihub。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye