dsh-academic
DeepSeek Harness 的学术插件,三部分:
- Zotero:AI 检索你的 Zotero 文库,读取条目和你在 PDF 里做的批注,阅读全文,导出引文;开启写入后可按 DOI / arXiv 编号入库、写笔记、整理标签和分类。优先连接本机的 Zotero,没有运行时自动启动;也可以通过 zotero.org 访问已同步的文库。
- 论文检索:同时查询 arXiv、OpenAlex、Crossref、Semantic Scholar、PubMed、Europe PMC、DBLP,阅读开放获取的全文,从 DOI 注册机构取引文,核验参考文献是否真实存在。知网和 Google Scholar 没有开放接口,插件通过一个独立的浏览器窗口检索它们。
- 学术技能:内置 11 个技能,覆盖文献综述、论文精读、写作、润色、模拟审稿、回复审稿意见等。
全部用 TypeScript 实现,不需要 Python,也不需要另装 MCP 服务。所有检索源都可以不填密钥使用。检索知网和 Google Scholar 需要本机装有 Chrome 或 Edge。

截图中回答里的引用角标由 dsh-better-display 渲染;不装它时引用显示为普通链接。
| 核验参考文献 | 整理 Zotero 里的 PDF 批注 |
|---|---|
![]() |
![]() |
| 输入框里用斜杠调用技能 | 设置页 |
|---|---|
![]() |
![]() |
功能
Zotero
| 功能 | 说明 |
|---|---|
| 文库检索 | 按标题、作者、年份检索,或在所有字段、笔记和 PDF 全文里检索;可限定分类、标签、条目类型、已存搜索 |
| 条目详情 | 全部元数据、摘要、标签、所在分类,以及子笔记、附件和 PDF 里的高亮与批注(带页码) |
| 阅读全文 | 分段读取正文,带页码标记;或给出问题,返回最相关的若干段落 |
| 导出引文 | BibTeX、BibLaTeX、RIS、CSL JSON,或按引文样式(APA、IEEE、Nature、GB/T 7714 等)生成参考文献和文内引用,均由 Zotero 本身生成 |
| 入库 | 按 DOI 或 arXiv 编号添加文献,元数据取自 DOI 注册机构和 arXiv;已有的不重复添加;arXiv 论文附带 PDF 链接 |
| 笔记 | 在条目下新建笔记、新建独立笔记,或向已有笔记追加内容(用 Markdown 书写) |
| 整理 | 增删标签、移入移出分类、新建分类 |
入库、笔记、整理三项默认关闭。插件不提供删除条目的功能。
文库有两个来源:
| 来源 | 需要 | 能看到的内容 | 写入 |
|---|---|---|---|
| 本机 Zotero | Zotero 7 或更高,开启本地 API | 整个文库,包括尚未同步的内容和本地的 PDF | 需要 Zotero 10 或更高;首次写入时 Zotero 弹窗确认 |
| zotero.org | 在设置里填写 API 密钥 | 已同步的内容;PDF 全文只有存放在 Zotero 云端存储时才能读(WebDAV 同步的读不到) | 密钥有写入权限即可 |
默认为“自动”:先连本机 Zotero;它没有运行时自动启动(窗口立刻最小化到任务栏,不抢焦点);启动不了且填了密钥时,改用 zotero.org,结果里会注明来自已同步的副本。已存搜索只能由本机 Zotero 执行。
论文检索
| 功能 | 说明 |
|---|---|
| 多源检索 | 一次查询多个数据源,同一篇论文(预印本与正式发表版、不同数据源的记录)合并为一条;可按年份、开放获取、arXiv 分类筛选,按相关度、时间或被引数排序。按时间排序时只在近两年(或指定年份起)的相关论文里排,并剔除出版年份在未来的错误记录 |
| 论文详情 | 按 DOI、arXiv 编号、PMID、PMCID 或标题查一篇论文:完整摘要、作者、期刊、被引数、开放获取链接、是否已撤稿 |
| 引用关系 | 谁引用了它、它引用了谁、相关论文 |
| 阅读全文 | arXiv 论文读 HTML 版(保留章节结构,公式为 LaTeX),PubMed Central 文章读结构化全文,其余读开放获取 PDF;可先看目录再读某一节,或按问题找段落 |
| 获取引文 | 从 DOI 注册机构取 BibTeX、RIS、CSL JSON 或指定样式的参考文献,不由模型凭记忆书写 |
| 核验参考文献 | 逐条检查 DOI 是否存在、是否指向另一篇文章,标题、第一作者、年份是否相符,是否已撤稿;各数据源都查不到的,中文文献再到知网查,其他语言的到 Google Scholar 查 |
| 知网、Google Scholar | 在 paper_search 里点名使用(sources 填 cnki 或 googlescholar),返回题录:标题、作者、年份、刊名、被引数、链接 |
| 下载 PDF | 把开放获取的 PDF 保存到工作区的 papers/ 目录 |
只获取合法开放的全文,不绕过付费墙;读不到时如实告知。
知网和 Google Scholar
这两个网站不向程序开放接口,无头浏览器和直接请求都会被拦下。插件的做法是在屏幕外打开一个普通的 Chrome 或 Edge 窗口,用它自己的浏览器配置(不读取你平时浏览器里的登录和记录),像人一样打开网站检索:知网从首页的检索框输入,Google Scholar 打开检索页。
- 优先用系统默认浏览器(默认浏览器是 Chrome、Edge 时),否则用装了的那个;跟随系统代理设置,没有代理就直连。Google Scholar 在不能直连的网络下需要系统代理。
- 一次检索约 3 到 10 秒;窗口在屏幕外,任务栏上会多一个浏览器图标;10 分钟不用后自动关闭。
- 网站要求人机验证时,插件不会自己去通过:窗口会显示到屏幕上,等你完成(最多 2 分钟),完成后检索继续。没有人完成时,这次检索如实报告失败,核验参考文献的本次调用也不再打开浏览器。
- 知网返回题录。如果你的网络有机构权限(校园网、机构 IP),链接打开后可以下载全文,插件本身不下载。
- 这两个来源默认不参与每次检索,AI 需要时点名使用;也可以在设置里把它们加入默认数据源。
学术技能
| 技能 | 用途 |
|---|---|
academic-literature-review |
文献综述:制定检索策略、多轮检索与引文追溯、筛选、精读、按主题综合、核验引用 |
academic-paper-reading |
论文精读:三遍阅读,输出结构化笔记,区分作者的结论与证据,可存入 Zotero |
academic-related-work |
为自己的论文写“相关工作”:找审稿人期待看到的文献,说明与本文的区别 |
academic-proposal |
开题报告、研究计划、基金申请书的科学部分 |
academic-writing |
论文写作:章节起草、论证重构、首次投稿材料 |
academic-polishing |
论文润色、学术翻译、正文精简、LaTeX 排版问题 |
academic-reviewer |
模拟审稿:投稿前从审稿人角度评估 |
academic-response |
回复审稿意见:逐点回复、返修信、修订稿 |
academic-statistics |
统计报告审查:实验单元、重复、不确定度、检验方法、图注统计 |
academic-data-statement |
数据与代码可用性声明、数据仓库选择、FAIR 元数据 |
academic-ref-verifier |
参考文献逐字段核验 |
后七个改编自 nature-skills(Apache-2.0),只改了技能名称(nature-* 改为 academic-*,避免与你自己安装的 nature-skills 冲突),详见 skills/THIRD_PARTY_NOTICES.md。前四个为本插件编写。技能加载时,插件会附上一段说明,告诉 AI 用本插件的检索和 Zotero 工具来完成技能里提到的文献查询步骤。
安装
DSH 桌面版:插件 → 添加插件,输入 @copylee/dsh-academic,安装后启用。
命令行(web 等其他 profile):
dsh plugin --profile web add @copylee/dsh-academic@latest
要求:DSH 0.2.0-rc.2 或更高。使用本机 Zotero 需要 Zotero 7 或更高(写入需要 Zotero 10),并在 Zotero 的 设置 → 高级 中勾选“允许此计算机上的其他应用程序与 Zotero 通讯”;Zotero 不必事先打开,用到时会自动启动(自动最小化目前只在 Windows 和 macOS 上做)。只用 zotero.org 时不需要安装 Zotero。论文检索需要能访问相应的学术网站;如需代理,使用 DSH 的全局代理设置。
使用
直接说要做什么,例如:
- 在我的 Zotero 里找关于 dropout 的论文,告诉我各自怎么用的
- 把我在这篇论文里的高亮整理成一份阅读笔记,存回 Zotero
- 检索近两年关于扩散模型加速采样的论文,按被引数排序
- 读一下 arXiv 2010.11929 的方法部分,它的位置编码是怎么做的?
- 给这三个 DOI 生成 GB/T 7714 格式的参考文献
- 帮我核对这份参考文献列表有没有错的或者不存在的
- 写一份关于图神经网络在分子性质预测中应用的文献综述
- 把 10.1038/nature14539 和 arXiv 2010.11929 加到“待读”分类
技能也可以在输入框里用斜杠点名,例如 /academic-literature-review。
Agent 工具
| 工具 | 作用 |
|---|---|
zotero_search |
检索文库;mode=everything 时同时在笔记和 PDF 全文里找,命中子条目时返回它所属的文献 |
zotero_browse |
列出分类(树形路径)、标签、已存搜索、文库(个人文库与群组) |
zotero_get |
一个条目的全部元数据,以及它的笔记、附件、PDF 批注 |
zotero_read |
读文库中论文的正文:分段读取,或按问题返回最相关的段落 |
zotero_export |
导出 BibTeX / BibLaTeX / RIS / CSL JSON,或格式化的参考文献与文内引用 |
zotero_attachment |
附件在本机的文件路径,或网页链接附件的 URL(路径只有本机 Zotero 能给出) |
zotero_add |
按 DOI / arXiv 编号入库(需开启写入) |
zotero_note |
新建或追加笔记(需开启写入) |
zotero_organize |
增删标签、调整分类、新建分类(需开启写入) |
paper_search |
多源检索论文 |
paper_get |
查一篇论文的完整信息 |
paper_citations |
被引、参考文献、相关论文 |
paper_read |
读开放获取全文:目录、某一节、按问题找段落、分段读取 |
paper_cite |
从 DOI 注册机构取引文 |
reference_verify |
核验参考文献 |
paper_download |
保存开放获取 PDF 到工作区 |
Zotero 条目用 zotero://user/0/item/<KEY>(群组为 zotero://group/<id>/item/<KEY>)标识;论文用 DOI、arXiv:<编号>、PMID:<编号> 标识。
设置
设置 → 学术,每项改动立即保存并生效。
| 设置 | 默认 | 说明 |
|---|---|---|
| 启用 Zotero 工具 | 开 | 关闭后 AI 看不到任何 Zotero 工具 |
| 允许修改文库 | 关 | 开启后提供入库、笔记、整理三个工具 |
| 文库来源 | 自动 | 自动:本机优先,连不上时用 zotero.org;仅本机;仅在线 |
| 自动启动 Zotero | 开 | 用到本机 Zotero 而它没有运行时启动它,窗口最小化到任务栏,用完不关闭 |
| Zotero 程序路径 | 空 | 自动查找失败时才需要填写 |
| zotero.org API 密钥 | 空 | 在 zotero.org/settings/keys 创建;读文库勾选 library access,读云端 PDF 勾选 file access,修改文库勾选 write access。保存在凭据存储里,不在设置文件中 |
| 默认文库 | user |
user 为“我的文库”,群组文库填数字 ID |
| 本地服务地址 | http://127.0.0.1:23119 |
只接受本机地址 |
| 启用论文工具 | 开 | 关闭后 AI 看不到 paper_ 和 reference_verify 工具 |
| 默认数据源 | 除 DBLP、知网、Google Scholar 外全部 | 检索时默认查询的数据源 |
| 用浏览器检索知网和 Google Scholar | 开 | 关闭后这两个来源不可用,插件不会启动浏览器 |
| 浏览器程序路径 | 空 | 自动查找 Chrome / Edge 失败时才需要填写 |
| 联系邮箱 | 空 | 发给 Crossref、OpenAlex、NCBI、Europe PMC、Unpaywall;填写后查找开放获取全文时才询问 Unpaywall |
| Semantic Scholar / OpenAlex / NCBI API Key | 空 | 都是可选的,只影响限速。保存在凭据存储里,不在设置文件中 |
| 默认引文样式 | apa |
CSL 样式 ID |
| 单次读取全文的长度 | 12000 字符 | 分段阅读时每段的上限 |
| 单次检索条目数上限 | 20 | 一次检索最多返回的条目数 |
| 启用内置技能 | 开 | 可逐个开关 |
设置页顶部显示本机 Zotero 的连接状态、版本、是否支持写入;填了密钥时还显示 zotero.org 的连接状态和密钥权限。
修改 Zotero 文库时的确认
每次修改有两道确认:
- DSH 的审批提示,说明要做什么(会话的审批策略设为不询问时跳过)。
- Zotero 自己的授权弹窗。选“允许”只对这一次修改有效,下次还会弹出;选“始终允许”后不再弹出,可以在 Zotero 的设置里撤销。Zotero 是被自动启动的话,窗口在任务栏里,弹窗没有出现在眼前时去那里看。
通过 zotero.org 修改文库时没有第二道确认,凭密钥的写入权限执行。
修改条目时带上读取时的版本号,文库在此期间被改动过则放弃本次修改。
限制
- 读全文只限开放获取的论文。付费论文读不到;如果你的 Zotero 里有它的 PDF,用 Zotero 工具阅读。
- 扫描版 PDF(没有文字层)读不出文字。从 PDF 读出的文本没有章节结构,公式和表格可能错乱;arXiv 的 HTML 版和 PubMed Central 的全文没有这个问题。
- Semantic Scholar 不填密钥时经常被限流,此时自动跳过,结果里会注明。
- DBLP 在部分网络环境下要求浏览器验证,无法通过接口访问,因此默认不启用。
- 没有接入万方、百度学术。百度学术对自动打开的浏览器每次都要求人机验证,无法使用。
- 知网和 Google Scholar 只返回题录,没有摘要全文(Google Scholar 有一两句片段),不能用
paper_get、paper_read、paper_cite进一步处理,除非结果里带有 DOI 或 arXiv 链接。知网默认按发表时间排列结果。连续检索太多会被要求人机验证或暂时拒绝。 - 图书在知网查不到,核验时仍会显示“未找到”。
- 参考文献核验依赖 Crossref、OpenAlex 和 arXiv 的收录;查不到不等于文献不存在(书籍、中文文献、会议论文集常常查不到),结果里会区分“未找到”和“有出入”。
- Zotero 7 到 9 的本地 API 只读,入库、笔记、整理不可用(可改用 zotero.org 密钥写入)。附件文件尚未下载到本机时无法阅读。
- Zotero 没有无窗口运行方式,自动启动的 Zotero 会留在任务栏。本地 API 开关必须事先在 Zotero 里开启,插件无法代为开启。Linux 上自动启动的窗口不会最小化。
- zotero.org 上的文库是同步后的副本:刚在本机做的改动、未同步的条目、WebDAV 上的附件都不在其中;它有请求限速,比本机慢。
- Zotero 入库只接受 DOI 和 arXiv 编号,不支持直接导入 BibTeX、ISBN 或网页,也不会下载 PDF 文件到 Zotero。
- 改编自 nature-skills 的技能中提到的画图、PPT、下载器等配套技能没有内置;其中两个可选的 Python 检查脚本随包附带,但只有本机装了 Python 才能运行。
数据与隐私
- 读取本机 Zotero 时,数据只在本机的 Zotero(
127.0.0.1)和 DSH 之间传递,随后作为工具结果发给你在 DSH 里配置的模型。 - 填写了 zotero.org 密钥并用到在线文库时,请求发往
api.zotero.org,附件文件从 Zotero 的存储服务下载;密钥只发给api.zotero.org。文库来源设为“仅本机”时不会访问它。 - 用浏览器检索时,检索词由那个浏览器窗口发给
www.cnki.net/kns.cnki.net或scholar.google.com;浏览器的配置(含这两个网站的 Cookie)保存在~/.dsh/storages/copylee-academic/browser/。 - 论文检索把检索词、DOI 等标识符发给被查询的数据源:
export.arxiv.org、arxiv.org、ar5iv.labs.arxiv.org、api.openalex.org、api.crossref.org、api.semanticscholar.org、eutils.ncbi.nlm.nih.gov、www.ebi.ac.uk(Europe PMC)、dblp.org、doi.org、api.unpaywall.org(仅在填写邮箱后),以及这些数据源给出的开放获取 PDF 所在的网站。 - 联系邮箱只发给 Crossref、OpenAlex、NCBI、Europe PMC 和 Unpaywall。API Key 只发给各自的服务。
- 四个 API 密钥保存在 DSH 的凭据存储(
.credentials.yaml,记录名copylee-academic/<名称>)里;没有凭据存储的宿主上保存在~/.dsh/storages/copylee-academic/keys.json。它们不写进插件设置,所以导出的插件备份和cordis.patch.yml里没有密钥,设置页也只知道某个密钥是否已填。0.5.0 及更早版本把密钥写在设置里:升级后首次启动会自动移走。在那之前导出过的备份里仍有密钥,分享前请检查,必要时到对应网站重新生成密钥。 - 读过的论文全文缓存在
~/.dsh/storages/copylee-academic/papers/。 - 选“始终允许”后,Zotero 发放的本地写入密钥保存在
~/.dsh/storages/copylee-academic/zotero-key.json,只对签发它的那个 Zotero 实例有效。
工作原理
Zotero 部分通过它的本地 API(http://127.0.0.1:23119/api/,与 Zotero Web API v3 同构)读写文库;引文导出和格式化由 Zotero 完成。全文来自 Zotero 的全文索引或本机 PDF。在线文库走 zotero.org 的 Web API(https://api.zotero.org),路径相同,只是把 users/0 换成密钥所属用户的 ID,所以两边共用同一套工具。本机 Zotero 没有应答时,Windows 上用一段 PowerShell 启动它并在窗口出现的瞬间最小化、把焦点还给原窗口;macOS 上用 open -g -j。
论文检索直接调用各数据源的公开接口,结果统一为同一种记录,按 DOI、arXiv 编号、PMID 和标题合并,再用倒数排名融合排序。每个数据源按其要求限速(arXiv 每 3 秒一次),遇到 429 / 503 按 Retry-After 重试。全文按 arXiv HTML → ar5iv → PubMed Central → 开放获取 PDF 的顺序获取,PDF 用 pdf.js 提取文字。按问题找段落时用 BM25 排序,分词使用 Intl.Segmenter,中文也按词切分。
知网和 Google Scholar 通过 Chrome DevTools 协议驱动浏览器:用 --remote-debugging-port=0 启动(只监听本机),在页面里读取结果列表的文字,不依赖 Playwright 等库。窗口是有界面的普通窗口,不伪装浏览器特征。
技能通过 DSH 的技能注册接口提供,优先级低于你自己安装的同名技能。
来自文库和网络的文本在交给模型时都标记为不可信内容。
开发
pnpm install
pnpm run typecheck
pnpm test
pnpm run build
node scripts/zotero-smoke.mjs "attention" # 只读,需要本机 Zotero 在运行
node scripts/search-smoke.mjs "graph neural networks" # 访问真实的学术接口
node scripts/browser-smoke.mjs # 打开浏览器检索知网和 Google Scholar
node scripts/cloud-smoke.mjs # 只读访问 zotero.org,需要环境变量 ZOTERO_API_KEY
node scripts/import-nature-skills.mjs <nature-skills 的本地克隆> # 重新生成改编的技能
src/ 是源码,lib/ 由构建生成,skills/ 随包发布。测试用内存里的假 Zotero 服务和假网络,不访问外网。
许可证
MIT。skills/ 中改编自 nature-skills 的部分为 Apache-2.0,见 skills/THIRD_PARTY_NOTICES.md。




No comments yet. Be the first to write one.