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。

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

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

小夜