dsh-lit-fetch:在 DSH 裏檢索文獻、批量拉 PDF、生成獲取清單

前言

在 DSH 裏做文獻綜述或批量備料時,常見做法是自己在瀏覽器裏搜 DOI、再逐個找 PDF,或寫腳本調 Crossref、Sci-Hub、Unpaywall。這些步驟分散,agent 也難以一次性完成「搜元數據 → 落盤 PDF → 把下不到的條目整理成可點清單」。社區插件 dsh-lit-fetch(維護者 loyalchiiina,分類:聯網工具)把這三件事收成三個工具,供對話中的 agent 調用;它不是網頁正文抓取工具,不解析 readability、不把 HTML 轉成正文,只做文獻元數據檢索、PDF 下載和批量獲取清單 HTML。

這是什麼

dsh-lit-fetch 是 DeepSeek Harness 的文獻獲取插件:按 DOI 或標題/關鍵詞查論文元數據,按 DOI 批量下載 PDF(Sci-Hub 鏡像優先、Unpaywall 開放獲取兜底),並對未能自動拿到的條目生成中文頁面的可點擊清單。宿主側爲純 Node.js,無 Python 依賴;當前 package 版本爲 1.0.5,許可證 MIT。源碼與說明見 GitHub,目錄頁見 SkillHub。

檢索:search_papers

下面介紹元數據檢索的行爲,便於你在對話裏描述需求時和 agent 對齊。

  1. DOI 精確查:輸入形如 10.xxxx/...(正則 ^\d+\.\d+\//)時,走 Crossref works/{doi};單次請求超時 15 秒,失敗會自動降級爲 OpenAlex 關鍵詞檢索。
  2. 標題/關鍵詞查:非 DOI 或 Crossref 未命中時,走 OpenAlex works?search=,默認返回 5 條,最多 20 條。
  3. 返回字段:標題、作者、期刊、年份、DOI、官方鏈接。

在 DSH 對話中可自然語言觸發,例如:「幫我找關於 static mixer CFD 的文獻」→ agent 調用 search_papers。

下載:download_papers

按 DOI 列表批量下載 PDF 到指定目錄,策略如下。

  1. Sci-Hub 優先:依次嘗試 8 個鏡像域名(sci-hub.ren / ee / st / ru / se / wf / hk、tesble.com),請求 域名 + DOI 頁面(超時 25 秒),用正則從 iframe/embed 解析 PDF 直鏈,再整包讀入內存、校驗魔數 %PDF- 與最小體積(拒絕小於 3000 字節),通過後先寫 <文件名>.pdf.part 再 rename 爲正式文件(非流式、無斷點續傳)。
  2. 開放獲取兜底:Sci-Hub 均失敗或校驗不過時,查 Unpaywall(30 秒超時),優先 best_oa_location,再遍歷 oa_locations 的 url_for_pdf 或 url,同樣走下載與校驗。
  3. 併發與命名:併發默認 4,可調且夾在 1–8;文件名爲 <兩位序號>_<清洗後標題>.pdf(標題去掉 \ / : * ? " < > | 與換行製表符,最長 120 字符)。

每篇可能的狀態:ok / scihub-fail / oa-fail / closed-access / no-doi。結果數組寫入輸出目錄的 _lit_fetch_report.json(內容是數組,不是彙總對象)。注意:Sci-Hub 失敗但 OA 成功時,同一篇會寫入兩條記錄(scihub-fail 與 ok),因此記錄條數可能大於論文篇數。

對話示例:「把這些 DOI 下載到 D:\papers\」→ agent 調用 download_papers。

清單:generate_manifest

對未能自動獲取的文獻,可生成可點擊的 HTML 清單,默認文件名爲 批量獲取入口.html(可改),頁面語言固定爲中文。每行含序號、鏈到 https://doi.org/<DOI> 的標題、第一作者、年份、期刊、狀態徽章和「下載 PDF」按鈕;另有「順序打開全部」,逐條間隔 800 ms 打開。

對話示例:「給沒下載到的文獻生成獲取清單」→ agent 調用 generate_manifest。

狀態字段與清單顯示(重要)

download_papers 產出的狀態與 generate_manifest 識別的狀態不一致:

來源 狀態值
download_papers ok · scihub-fail · oa-fail · closed-access · no-doi
generate_manifest 僅識別 ok(綠色「✓已下載」)· failed(橙色「✗需手動」)
其餘取值 灰色「—」,既不算已下載也不算需手動

若把下載結果原樣傳給 generate_manifest,只有 ok 會顯示爲已下載,其餘失敗態都會變成灰色「—」。若希望失敗項顯示橙色「✗需手動」,需先把非 ok 狀態映射爲 failed 再傳入。

安裝與啓用

插件以當前 DSH 進程權限運行聯網與寫盤,安裝前建議自行查看 源碼 與 MIT 許可證。

官方安裝命令如下(README 原文):

dsh plugin --profile desktop add dsh-lit-fetch
# 或從本地目錄 link
# cp -r dsh-lit-fetch ~/.dsh/local-plugins/

運行環境要求 Node.js ^22.19.0 || >=24.0.0;peer 依賴包括 @deepseek-ai/dsh 等,以 package.json 爲準。

插件在宿主註冊 /lit-fetch 前綴路由,返回 {status, plugin, version} JSON,version 來自 package.json,便於確認已加載版本。

典型用法小結

經過上面的步驟,一條常見鏈路是:

  1. 用自然語言搜索,得到 DOI 與元數據;
  2. 指定本地目錄批量下載 PDF,查看 _lit_fetch_report.json;
  3. 對仍需人工處理的條目映射狀態後生成 批量獲取入口.html,或直接在清單裏逐條打開 DOI 與下載入口。

適用場景與限制

適合:在 DSH 會話裏做文獻調研、按 DOI 批量備 PDF、把下不到的論文整理成可點清單;與「網頁正文抓取」類插件職責不同,勿混用。

已知限制(README 說明):

  • Sci-Hub 2021 年後基本停止收錄新文獻,Elsevier/Wiley/ACS 2021 年後文章大概率無收錄;
  • 直連 Sci-Hub 鏡像可能較慢,文檔建議 VPN/代理;
  • OA 兜底僅查 Unpaywall,部分 arXiv 預印本可能未收錄;
  • PDF 全量緩衝在內存,無流式、無斷點續傳、無下載進度;頁面抓取 25 秒、PDF 讀取 180 秒等超時需自行容忍大文件失敗。

DSH 生態強調「一切皆插件」;SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-lit-fetch 把 Crossref/OpenAlex 檢索、Sci-Hub 與 Unpaywall 下載、以及中文 HTML 獲取清單收進 DSH 工具鏈,適合需要在 agent 對話裏閉環「搜—下—補清單」的開發者。進一步細節以倉庫 README 爲準:GitHub — loyalchiiina/dsh-lit-fetch。

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

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

小夜