dsh-plugin-deep-paper-reading
把「文献精读模式」(Deep Paper Reading)作为 DSH 插件分发:装好之后,预设选择器里会多出一个 文献精读模式,切进去就能对单篇生物医学文献做逐图、逐实验的结构化精读。
它打包的是作者自有的 deep-paper-reading 技能本体(SKILL.md + 核对清单 + 报告模板,逐字节原样),外加一个模式级 persona:强制先加载技能、守住证据边界、按四要素拆解每个实验、重建逻辑链,最后按模板产出可直接拿去 journal club 的报告。
- 关键词:
dsh-plugin·deepseek-harness·agent-preset· 文献精读 - 许可:MIT
这个模式做什么
| 阶段 | 内容 |
|---|---|
| 1 | 论文获取与初扫(标题/摘要 → Introduction 末段 → 全部图注 → Discussion 首段 → Results 小标题) |
| 2 | 正文逐行精读(Introduction / Results / Discussion / Methods 各自要点) |
| 3 | 补充材料同等严格对待,读不到就显式标注「缺失」 |
| 4 | 图注 ↔ 正文对应表(这是精读与复述的分界线) |
| 5 | 逐实验四要素拆解:目的 / 设计与工具 / 结果 / 解读 |
| 6 | 逻辑链重建,并把每个转折分类为排除、延伸、机制、应用、验证 |
| 7 | 按模板产出报告;要 Word 时走 docx 技能导出 |
persona 里固化了两条硬约束:
- 证据边界:不编图号、图注、数字、P 值、样本量、试剂货号;严格区分「数据实际显示了什么」与「作者说它显示了什么」;拿不到补充材料就写「缺失(正文引用但未获取)」,只读到摘要就写「证据等级:摘要级」。
- 图必须真看过:判断若基于图注而非图像,必须写明。
不适用:多篇文献综述(用 literature-review)、正式同行评审(用 peer-review)、检索文献(用 paper-lookup)。
安装
三种方式,按你的环境选一种。
方式 1:插件(bundle)—— 有 dsh CLI 时
dsh plugin --profile web add github:1283011852/dsh-plugin-deep-paper-reading
DSH Desktop 里等价写法:
pnpm dsh plugin --profile web add github:1283011852/dsh-plugin-deep-paper-reading
从 git 安装拉的是源码,pnpm ≥10 默认拒绝运行 git 依赖的构建脚本。本包没有任何构建步骤(纯 JS + YAML,无依赖、无
prepare),所以不需要allowBuilds授权。装完重启 DSH,然后在预设选择器里就能看到
文献精读模式;卸载用dsh plugin --profile web remove dsh-plugin-deep-paper-reading。
方式 2:预设包(.dshpreset)—— 零 CLI,推荐 Desktop 用户
到 Releases 下载 dsh-plugin-deep-paper-reading-<版本>.dshpreset,然后在 DSH Desktop 里导入预设。桌面端会先校验、预览,确认后才原子写入用户预设根目录;已存在的同名预设 id 不会被覆盖。
这是 DSH Desktop 的原生预设交换格式(manifest.json + preset/ 的 ZIP),不需要 dsh CLI,也不改动任何 profile 配置。
方式 3:只要技能,不要模式
把技能目录拷进任何被 DSH 扫描的技能根:
cp -r presets/deep-paper-reading/skills/deep-paper-reading ~/.agents/skills/
# 或 <DSH_HOME>/skills/
之后在任何模式下都能用 skill 工具调用 deep-paper-reading,但没有配套的模式级 persona。
顺带一提:这也修掉了一个常见坑——如果你的技能原本放在
~/.claude/skills/(Claude Code 的根),DSH 不会扫描它,skill调用会报unknown or no longer available。
使用
- 新建会话,预设选 文献精读模式
- 把 PDF/DOI 丢进去,说「精读这篇」即可
默认输出约定(persona 里写死):报告落到 paper-reading/<短标题>-精读报告.md,原文提取物与图版渲染放 sources/;若工作区已有既定结构(例如 scientific-evidence/reports/)则跟随既有结构。
技能里假设本机有可用的 PDF 工具链(python + PyMuPDF 之类)。若缺失,agent 会先告诉你,而不是假装读过全文。
目录结构
├── package.json # dsh.bundle.patch → cordis.patch.yml
├── cordis.patch.yml # 把本包的 presets/ 注册为预设 roster 的一个 root
├── index.js # 启动期自检行(预设目录缺失时打印原因)
├── presets/
│ └── deep-paper-reading/
│ ├── agent.cordis.yml # 精读 persona + 内置技能目录挂载
│ ├── preset.yml # 显示名与描述
│ ├── SOURCE.md # 组合与技能的出处说明
│ └── skills/
│ └── deep-paper-reading/ # 技能本体(逐字节原样)
├── scripts/build-dshpreset.mjs # 零依赖打包 .dshpreset
├── scripts/check-composition.py # 组合静态检查(CI 每次 push 跑)
└── .github/workflows/ # ci.yml 校验,release.yml 发版附包
⚠️ 已知影响
本插件的 patch 会覆盖 agent-presets 行的整个 config。
DSH 的 patch 语义是整段替换目标行的 config,不做深合并(见打包与安装插件)。所以 cordis.patch.yml 里重述了该行需要的每一个键:
- id: agent-presets
config:
default: standard
includeShippedRoot: true
includeUserRoot: true
roots:
- trust: system
path: !!js "…解析到本包目录…/presets"
由此产生两个必须知道的后果:
roots归本插件所有。 如果你还用别的 bundle 或自己的cordis.patch.yml给agent-presets配过 roots,后应用的层会整段胜出,先前那批 root 会消失。要两者共存,就在你自己的 profile patch 里手工把两个roots数组合并,而不是同时挂两个 bundle。default被重述为standard(随附默认值)。你在$DSH_HOME/settings.yaml里设置的agent-presets.default属于 settings 层,优先级更高,不受影响。
不想承担这两点,就用方式 2(.dshpreset)——它完全不碰 profile 配置。
验证
发布前实际做过的验证(不是"应该能行"):
- 预设挂载校验:
agentPresets.standingKeyFor('deep-paper-reading')→mounted OK,真正组合了一遍插件子树,不是文件格式检查。 - 内置技能随预设走:组合里
skill-filesystem行的customSkillDirs用的是new URL('skills/', baseUrl);预设Include会把baseUrl设为组合自身目录(在mount.js/specifier.js里确认),所以不论预设是从用户根、本包presets/,还是导入的.dshpreset挂载,技能目录都能解析到。 - 插件安装 + patch 生效:建了一个一次性 profile,
dsh plugin add本包,然后在 profile 里加上dsh-web-app层再--dump-config——确认注入行到位、agent-presets行被覆盖且四个键(default/includeShippedRoot/includeUserRoot/roots)全部重述。 !!js表达式可求值:dsh --profile <测试 profile> --help加载全部行并求值配置,退出码 0、无配置错误,并且插件自检行打印出registered from …\presets\deep-paper-reading。表达式的路径数学另用 Node 单独跑过:解析结果正是包内的presets/,其下agent.cordis.yml与SKILL.md都存在。--dump-config只证明 patch 应用,不证明求值(它打印!!js原文),所以上面第 3 条才是关键那一步。- 包格式:打包脚本按 DSH Desktop 导入器的约束实现(
format/version、id 规则、≤512 文件、单文件 ≤12 MB、解压后 ≤32 MB、压缩后 ≤16 MB),CI 里再用unzip回读校验包内布局与 manifest。 - 组合静态检查:
python3 scripts/check-composition.py,检查 bundle manifest、patch 覆盖键、预设与技能元数据(CI 每次 push 都跑)。
没验的:预设最终出现在你机器上的预设选择器里,需要你在真实 profile 装一次才能看到——那是唯一一步必须在真实环境发生的。
你自己的机器上怎么验(不启动、不打扰现有会话):
dsh --profile web --dump-config | grep -n "== dsh-plugin-deep-paper-reading"
--dump-config 只组合配置树然后退出,不启动应用。看到 == dsh-plugin-deep-paper-reading 这一层,就说明 patch 被正确应用了。
许可与出处
MIT(见 LICENSE)。
- 技能本体
presets/deep-paper-reading/skills/deep-paper-reading/是作者自有技能(frontmatter 记为 MIT、skill-author: user),本包未作任何修改。 - 预设的 Cordis 组合派生自本机
scientific-evidence-en-mode预设:工具面(文件、shell、文件检索、网页抓取、技能、待办、目标、作业、上下文折叠、提问)原样保留,只改写了 persona 行、给skill-filesystem加了内置技能目录,并写了显示元数据。 - 上游组合的
SOURCE.md(K-Dense Scientific Agent Skills / PRISMA 相关)已被替换,因为那是另一个模式的出处;细节见presets/deep-paper-reading/SOURCE.md。
No comments yet. Be the first to write one.