🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

精读笔记生成 PensiveFei/deep-read-summarize

DeepSeek Harnessv0.4.0
PensiveFei5 天前有提交已提供中文文档扫描:含敏感能力

免责声明:这是非官方第三方工具,与 DeepSeek 及 DeepSeek Harness…

48.5/100
综合分
36
GitHub 星标
2,531
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add deep-read-summarize
npm 源 · deep-read-summarize 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包deep-read-summarize @ 0.4.0
✓Node 引擎要求 >=18 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 11:46:17

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 34 处,展示前 21 条)
  • 读取本地文件
    index.js:55
    const body = readFileSync(path.join(skillDir, 'SKILL.md'), 'utf8');
  • 读取本地文件
    workflow.js:43
    const RAW_SCRIPT = fs.readFileSync(path.join(__dirname, "lib", "workflow-script.txt"), "utf8");
  • 读取本地文件
    parsers/index.js:75
    if (!fs.existsSync(customDir)) {
  • 读取本地文件
    parsers/index.js:80
    try { files = fs.readdirSync(customDir); }
  • 读取本地文件
    lib/cache.js:52
    if (!fs.existsSync(cacheFile)) return new Map();
  • 读取本地文件
    lib/cache.js:55
    const lines = fs.readFileSync(cacheFile, "utf8").split("\n");
  • 读取本地文件
    lib/cache.js:91
    if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
  • 读取本地文件
    lib/parser-bundle.js:122
    const json = JSON.parse(fs.readFileSync(resolved, 'utf8').replace(/^ FEFF/, ''));
  • 读取本地文件
    lib/parser-bundle.js:127
    const source = fs.readFileSync(resolved, 'utf8').replace(/^ FEFF/, '').replace(/^#![^ ]*/, '');
  • 读取本地文件
    lib/transcript-cache.js:31
    if (!/^[a-z0-9.-]+$/i.test(model) || fs.existsSync(model)) return null;
  • 读取本地文件
    lib/transcript-cache.js:35
    if (fs.existsSync(lib)) {
  • 读取本地文件
    lib/transcript-cache.js:36
    for (const name of fs.readdirSync(lib)) {
  • 读取本地文件
    lib/transcript-cache.js:40
    const packages = sites.filter(p => fs.existsSync(p)).flatMap(p => fs.readdirSync(p).filter(n => n.endsWith('.dist-info'))).sort();
  • 读取本地文件
    lib/transcript-cache.js:49
    for (const name of fs.readdirSync(dir).sort()) {
  • 读取本地文件
    lib/transcript-cache.js:53
    const link = fs.lstatSync(file);
  • 写入本地文件
    lib/transcript-cache.js:124
    try { fs.utimesSync(file, new Date(), new Date()); } catch (error) { }
  • 删除本地文件
    lib/transcript-cache.js:140
    if (size + file.size > limit || Date.now() - file.modified > MAX_AGE_MS) fs.unlinkSync(file.file);
  • 写入本地文件
    lib/transcript-cache.js:153
    fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/transcript-cache.js:155
    fs.writeFileSync(temporary, data, { flag: 'wx', mode: 0o600 });
  • 写入本地文件
    lib/transcript-cache.js:156
    fs.renameSync(temporary, path.join(dir, id.key + '.json'));
  • 删除本地文件
    lib/transcript-cache.js:160
    finally { if (temporary) { try { fs.unlinkSync(temporary); } catch (error) { } } }
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

4 张 · 点击查看大图

功能亮点

  • 解析书籍论文视频网页
  • MapReduce深读
  • JSONSchema输出

面向书籍、论文、视频、网页的深度阅读与总结工作流——插件解析器、MapReduce 深读、JSON Schema 输出、可直接用于 Obsidian(DSH)

v0.5.02026-11-01
npm 已同步:latest = 0.5.0,通过 Trusted Publishing 发布并生成 provenance 签名。 无字幕视频新增逐字稿内容缓存、转写阶段计时和 CPU 线程配置,保留默认精读与原文核验门槛。 · Added · 逐字稿内容缓存:默认按音频 SHA-256、受管理的本地模型快照、安装环境和固定解码配置复用真实分段;切换时间戳展示无需重复推理。缓存命中仍原子发布本次任务产物,后续精读和独立原文核验不跳过。自定义本地模型、环境不明、损坏/过期记录和失败/空结果不复用。 · 缓存控制:options.transcriptCache(默认 true);CLI --no-cache 禁用读写、--refresh-cache 强制推理并更新、--clear-cache 仅清理逐字稿。内容保存在本地 transcripts-v1,单条最多 8 MiB、总量最多 128 MiB、有效期 30 天;写入时清理。缓存使用本地已有模型快照,不在线探测上游更新,不缓存音频。 · CPU 线程配置:options.cpuThreads / --cpu-threads 接受 0–64 的整数,默认 0 保持库策略;完整透传到视频转写,默认 small/int8、VAD 与解码参数保持原状。 · 转写阶段计时:成功调用输出 metrics JSON,分开报告缓存命中、实际设备、音频时长、环境/依赖准备、Python 与发布耗时;未命中时记录导入、模型加载、准备和完整的延迟分段迭代,命中时不复用旧推理计时。 · Verification · Windows CPU 对照一段自制 58.439 秒中文语音:原始 runner 24.517 秒,新 runner 强制推理 23.118 秒,命中缓存并开启时间戳 0.098 秒,8 线程且禁用缓存 21.275 秒。默认与 8 线程文本均与原结果逐字一致;缓存切换时间戳后正文一致。单样本结果仅覆盖 ASR,不代表完整精读或其他资料的加速比例。详见 ASR 基准记录。 · ASR 错词仍可能进入逐字稿;笔记 qualityPassed 不等于音轨听写准确。GPU、批量推理和常驻模型未自动启用,仍需独立的音频质量与资源基准。 · Fixed · 工作流致命错误:精读、成稿、原文核验和修订阶段统一传播 [FATAL]、UNSUPPORTED_SCHEMA 与 fatal: true 错误;精读遇到致命错误后停止派发剩余分块。普通临时错误仍保留原有降级行为。 · 转写环境初始化:只有 uv venv 成功退出且实际生成 Python 解释器文件才继续转写;失败时留下的残缺环境不能跳过直连重试或被误用。 · 自定义解析器打包:按 JavaScript 作用域规则分别处理 switch 判别式与 case 块,避免局部 require 隐藏判别式中的模块导入,或局部变量掩盖不可用的宿主 API。 · 资产 · deep-read-summarize-0.5.0.tgz:从 npm 取回的同一份字节 · SHA-256:892dd292b62241c97314d074fc73fecd8798e8651f8188be50b70d104276e39d · 112102 B 发布核验:实际发布流水线。
v0.4.02026-10-25
npm 已同步:latest = 0.4.0,带 provenance 签名(Trusted Publishing / OIDC,无长期 token)。 本说明由 scripts/release.js 从 CHANGELOG.md 的 [0.4.0] 小节原样生成,避免发布说明与变更日志各自漂移。 保留完整精读与独立原文核验,减少脚本搬运、并发空等和无效修订,并修复来源质量判断与视频分P等问题。 · Added · 参数直达工具 deep_read_summarize:宿主具有 tools / workflowEngine 服务时,由插件直接提交工作流,模型只传 input/type/options,无需原样重发约 4.6 万字符脚本。转发调用代理和取消信号,完成或失败后释放 workflow run;旧宿主保留原 workflow + skill 入口。 · 阶段耗时 timings:返回识别、获取、精读、成稿、质量核验和总耗时(毫秒),供同资料、模型与质量门槛下比较。测试调度模拟不代表真实 LLM 加速比例。 · 显式自定义解析器目录:插件顶层 config.customParsersDir 可加载独立目录,各 profile 隔离;包内 custom-parsers/ 纳入 npm 分发。 · Fixed · 视频来源质量:只有简介或未确认来源的视频保持质量降级,不能因“简介的所有行都读过”而报告完整精读通过;来源类型进入 QC 上下文,并在笔记中标明限制。 · B站多P:保留短链最终 URL 与 p,按 pages[p-1] 选择 CID、标题和时长;字幕、音频使用同一分P,非法或越界参数不能默默回退第1P。 · 异常与重试:类型识别和获取的可恢复调用错误返回对应 stage,真正 FATAL 继续终止;缺总行数、失败精读块、来源不完整等不能靠改写解决的问题不再消耗全文修订轮次。 · 格式与引用:严格检查模板字符串,拒绝非法 YAML 裸标量和错误字段类型;区分 Markdown 引文的可见原话与强调、行号等展示信息,减少真实引用被误判。 · 文件名:过滤控制字符、设备保留名与非法尾缀;对清洗或截短的标题增加稳定后缀,限制 UTF-8 文件名长度,避免 NUL、超长标题落盘失败与不同非法标题折叠到同名路径。 · URL 指纹:保留可选择不同资料的尾斜杠、空 query 与 fragment;新版键与旧缓存隔离,防止旧版碰撞继续跳过资料。 · 解析器更新:注册后生成技能和工具调用使用最新注册表,不再引用模块加载时的旧脚本;插件构建阶段定位本版本转写脚本,避免每次递归搜索其他安装目录。 · 转写热启动:健康环境直接执行一次 Python runner,移除单独 import 探测;仅明确缺依赖或版本不匹配时才要求 uv 并自举,已有可用环境不再被“找不到 uv”提前拒绝。 · 转写版本记录:固定已验证的 faster-whisper==1.2.1,记录实际 Python / 依赖版本;纠正文档“uv / Python补丁 / 全部依赖完全锁定”的不实承诺。 · Performance · 固定三个并发槽位:一个任务完成即领取下一块,取消每批三个都结束才启动下一批的屏障,输出仍按原分块顺序合并。 · 均衡分块工作量:在既有代理数和 maxChunks 上限内按行数均分已知全文,超长逻辑段可拆分,保持每行恰好覆盖一次。 · 缩减 QC 上下文:保留原文路径、行号、缺口与待核验引文,移除重复的完整 Map 笔记;独立核验仍须读取原文。 · Compatibility · 默认模型、篇幅、章节与引用门槛不降低;新工具是可选入口,原入口保留。新返回字段为补充元数据。 · 新版缓存指纹可能导致升级后的首次重处理;清洗过或过长标题的建议文件名会改变,正常标题保持不变。 · 原文真实性仍取决于核验代理实际读取原文。逐字稿内容缓存、常驻 ASR worker、分层 QC 和共享转写环境的冷启动互斥留待单独验证,未在本次发布中声称完成。 · 资产 · deep-read-summarize-0.4.0.tgz —— 从 npm 取回的同一份字节 · SHA-256:92ef3261cc2707f12c7104c5202b9f0c444e5d509eba0c97b15a53dbcff3264d · 101309 B,带 SLSA provenance
v0.3.192026-10-24
npm 已同步:latest = 0.3.19,带 provenance 签名(Trusted Publishing / OIDC,无长期 token)。 本说明由 scripts/release.js 从 CHANGELOG.md 的 [0.3.19] 小节原样生成,避免发布说明与变更日志各自漂移。 修复 B04–B10,并让质量检查结合程序门禁和可回查的原文证据(O01)。 · Fixed · 成稿与修订保留(B04):拒绝空白和非字符串初稿;修订调用失败、返回空值或格式/篇幅退化时保留上一份有效笔记。质量检查失败不再导致正常初稿丢失。 · 自定义解析器(B05):使用 Acorn 解析 CommonJS 模块并打包本地依赖,保留方法简写、模块常量、helper、JSON 和循环依赖。无法在沙箱支持的 Node/外部依赖和动态加载在构建时明确报错;独立的程序化函数仍可直接注册。 · 视频定位(B06):includeTimestamps 贯穿获取和转写,按真实分段 start/end 输出毫秒时间范围;平台字幕也保留 cue 时间。关闭时间戳仍逐段换行,不再把长逐字稿压成一行。 · 配置边界(B07):workflow 与插件 config 共用同一份默认值和校验器。检查有限整数、区间、布尔、路径和枚举;直接调用非法参数 FATAL,profile config 逐项告警回退。重试次数限制为 0–3。 · 转写完成信号(B08):复验上一版的修复;仅在本次进程成功、非空产物校验并原子发布后输出 DONE,空结果和所有失败路径均不输出成功信号。 · 缓存中断恢复(B09):每条 JSONL 记录以独立前后换行包围,单次 O_APPEND 追加,不读改尾部或留下恢复锁。损坏尾行不再吞掉下一条成功记录;短写明确失败,元数据不能覆盖保留字段。 · 发布身份(B10):checkout 前验证完整 tag ref 和远端对象,checkout 后核对 commit/包版本;按 ref、SHA、模式、nonce 和 attempt 精确认领本次 run,不再认领第一个新 ID。版本文件与发布表格先在内存预演,避免坏表格先留下已 bump 的版本;发布时同步更新锁文件的根版本。 · Changed · 原文核验(O01):格式、必要章节和正文长度由程序检查;核验代理读取本次原文,返回全部分块摘录、关键引文原句及行号。缺证据、错行号、引文不匹配或已知精读缺口均不能通过,单独 pass: true 无效。新增 qualityChecks、qualityEvidence 返回字段。 · 中文/日文字符按字、其他文字按词计数;排除元数据、代码块、HTML 注释和链接地址。frontmatter 按提供的标量/列表模板校验,关键逐字引用集中在第 4 节。 · 新增一个锁定的生产依赖 Acorn,用于构建期 JavaScript 解析;CI 与发布工作流通过 npm ci --ignore-scripts 安装锁定依赖。 · Compatibility · 默认配置仍可使用。依赖宽松强转(如字符串布尔值、负数重试)或超出范围的参数现在会报错;自定义解析器须使用纯提示词构造逻辑和静态本地模块依赖。 · 原文核验比仅检查成稿多读取资料,质量状态会更严格;引用真实性仍取决于核验代理实际读取原文,返回的摘录和行号用于回查。 · 资产 · deep-read-summarize-0.3.19.tgz —— 从 npm 取回的同一份字节 · SHA-256:1946253c584d6c4c2705f8ed761388b1b23c5a69d33fa10def0351a5682b8d02 · 89886 B,带 SLSA provenance
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
deep-read-summarize 免责声明:这是非官方第三方工具,与 DeepSeek 及 DeepSeek Harness 项目无隶属关系,也未获其认可或赞助。「DeepSeek」和「DeepSeek Harness」是各自所有者的商标。本项目只编排你 DSH 环境里可用的 workflow 工具,不再分发任何 DeepSeek 软件。 ⚠️ 最重要:本工具是「辅助精读」工具,不能代替自主学习。 它帮你快速提取、归纳、结构化阅读内容,但真正的理解、思考与批判仍需你自己完成;请始终以原文为准,不要把它当作学习成果本身。 给 DSH(DeepSeek Harness)写的一个精读工作流:输入一本书、一篇论文、一个视频链接或网页,输出一份结构化的标准 Markdown 笔记(YAML frontmatter,可直接放进 Obsidian / Logseq / 静态站点内容目录 / 任意 Markdown 编辑器)。 内容会被拆成若干块,由多个子代理并行精读,再合并成一篇带 YAML frontmatter 的 Markdown。关键结论附原文出处,成稿前有一道质量校验。 使用中遇到问题、或觉得哪里能更好,欢迎随时在 GitHub issue 反馈。 注意:DSH 目前是 developer preview,接口可能变化。
展开完整文档(README 剩余 1 节)
deep-read-summarize

免责声明:这是非官方第三方工具,与 DeepSeek 及 DeepSeek Harness 项目无隶属关系,也未获其认可或赞助。「DeepSeek」和「DeepSeek Harness」是各自所有者的商标。本项目只编排你 DSH 环境里可用的 workflow 工具,不再分发任何 DeepSeek 软件。

⚠️ 最重要:本工具是「辅助精读」工具,不能代替自主学习。 它帮你快速提取、归纳、结构化阅读内容,但真正的理解、思考与批判仍需你自己完成;请始终以原文为准,不要把它当作学习成果本身。

给 DSH(DeepSeek Harness)写的一个精读工作流:输入一本书、一篇论文、一个视频链接或网页,输出一份结构化的标准 Markdown 笔记(YAML frontmatter,可直接放进 Obsidian / Logseq / 静态站点内容目录 / 任意 Markdown 编辑器)。

内容会被拆成若干块,由多个子代理并行精读,再合并成一篇带 YAML frontmatter 的 Markdown。关键结论附原文出处,成稿前有一道质量校验。

使用中遇到问题、或觉得哪里能更好,欢迎随时在 GitHub issue 反馈。

注意:DSH 目前是 developer preview,接口可能变化。本仓库针对特定版本的 workflow 工具语义编写,见下文兼容性。

平台:Windows / macOS / Linux 同等支持(0.3.9 起),详见下文支持平台。

实际效果

(图用 GitHub 绝对地址,npm 页面同样能显示;图片本身不打进 npm 包,只随仓库分发)

| 精读论文 | 视频笔记(元信息) |
| 论文精读笔记 | 视频笔记元信息 |

| 视频笔记(行动要点) | 会话内摘要 |
| 视频笔记行动要点 | 会话内摘要 |

能做什么

- 书籍(PDF/EPUB/MOBI)、论文(arXiv/PDF/HTML)、视频(字幕优先,无字幕自动转写,出品完整逐字稿精读)、网页
- 长内容分块后由并行子代理精读,再合并
- 获取/分块与质量校验的输出受 JSON Schema 约束,结构稳定、下游可解析
- 分块计划与子代理数量受 maxChunks 强制约束(计划失控会顶穿单次调用时限)
- 关键引用必须标注页码/章节/段落,降低编造风险
- 配置错误直接报错终止;某块内容解析失败则跳过并标记缺口
- 输出标准 Markdown + YAML frontmatter:正文是通用 CommonMark(无双链、无 callout),Obsidian(配合 Dataview)、Logseq、Jekyll / Hugo / Astro 的内容目录、任意 Markdown 编辑器都能直接用

结构

输入(链接或文件路径) │ ▼ 解析器注册表 ── book / paper / video / web │ ▼ 波次1 获取内容 → 写入临时文件 → 生成分块计划 │ ▼ 波次2 N 个子代理并行精读各块(Map) │ ▼ 波次3 合并成稿 + 质量校验(Reduce) │ ▼ Markdown 笔记

三个波次,默认约 N+3 次子代理调用(获取、N 块精读、成稿、质量校验)。auto 遇到 PDF、未知网页或文本等模糊输入时,额外进行一次轻量类型识别;显式指定 type 可跳过识别。
auto 会把明确的视频链接、arXiv 论文链接和电子书扩展名直接分发到对应解析器;同站的专栏、频道与帮助页仍先分类,PDF 则根据内容区分书籍与论文。无法识别时返回 stage: "detect",请显式指定类型。options.tempDir 作为临时根目录,每次调用在其中创建独立的 run-* 子目录,获取、音频和转写文件不与其他任务共用。

分块计划会排序、裁掉重复区间并补齐缺口,超过 maxChunks 时合并相邻块以保留全文。返回的 coverageComplete 表示是否依据有效的 totalLines 覆盖全部行号;缺少总行数时保留已知范围,同时将 qualityPassed 置为 false 并说明覆盖无法确认。

质量检查分两部分:程序按提供的标量/列表 frontmatter 模板检查字段、必要章节和篇幅(汉字按字、其他文字按词,排除 frontmatter、代码块、HTML 注释及链接地址);独立核验代理读取本次原文文件,逐块检查覆盖,并为第 4 节的逐字引用返回原句和行号。单独的 pass: true 无法通过检查。qualityChecks 返回检查项,qualityEvidence 返回原文路径、分块摘录和引用证据;原文真实性判断仍由读取原文的代理完成,无法核实就报告未通过。修订为空、调用失败或结构退化时保留上一份有效成稿。

直接调用 workflow 的 options 必须类型正确:minWords 为 1–100000 的整数,maxChunks 为正整数(大于 12 仍夹到 12),maxRetries 为 0–3 的整数;非法值和未知键在启动时 FATAL。插件 profile 的 config 则逐项告警并回退默认值,避免阻止宿主启动。

parsers/ 各输入类型的解析器,按类型分发 book.js 书籍:PDF/EPUB/MOBI 文本提取、章节分块 paper.js 论文:arXiv/PDF/HTML 结构识别 video.js 视频:完整逐字稿(字幕优先,无字幕自动转写,走 scripts/transcribe.js) web.js 网页:正文提取 index.js 注册表:解析器发现与回退 schemas/ 输出约束的 JSON Schema(波次1 由 workflow.js 注入脚本,单一真相) scripts/ lint(含换行/空白卫生检查)、安全检查、跨平台转写引导(transcribe.js) lib/ 独立可用的小工具 cache.js 输入指纹与幂等记录(供自己驱动流程的调用方使用;workflow 沙箱没有文件系统,用不到它) workflow-script.txt workflow 脚本正文(普通文本,可直接读改,不需要任何转义) tests/ 测试与验证脚本(不随 npm 包发布,仓库里才有) workflow.js workflow 的 meta 与组装逻辑(解析器内联、schema 注入)

脚本正文单独放 lib/workflow-script.txt:这个文件曾经因为「转义套转义」被改坏过两次,现在它是普通文本,读改都不需要编码步骤。

想换某个输入类型的处理方式,在插件包的 custom-parsers/ 放一个同接口的解析器即可,该目录会随 npm 包分发。也可在插件顶层 config 中指定 customParsersDir,使用自己的解析器目录;它不是 workflow options。相同类型会覆盖内置实现,也可新增 podcast 等类型。程序化注册后重新生成技能会使用最新注册表;各 profile 的专属目录相互隔离。接口为 name、types、buildPrompt(input, opts)。

解析器的 CommonJS 模块会连同字面量相对路径的 .js / .cjs / .json 依赖一起打包,保留模块级常量、helper、方法简写和循环依赖。构建时使用 Acorn 解析 JavaScript;它由 npm 自动安装,不进入 workflow 沙箱。沙箱中的解析器只负责生成提示词,不支持 Node 内置模块、外部包或动态 require / import;这些依赖会在构建时明确报错。程序化注册的函数须自包含,模块闭包请使用文件解析器。

支持平台

Windows / macOS / Linux 同等支持(0.3.9 起)。插件本身只依赖 Node(DSH 自带),各环节需要的额外工具按平台装:

- 书籍 / 论文 PDF → pdftotext(poppler):macOS brew install poppler、Windows winget install poppler、Debian/Ubuntu apt install poppler-utils
- B站字幕 / 音频 → curl:Windows 10+ 与 macOS / Linux 都自带,零安装
- YouTube 字幕 → yt-dlp:macOS brew install yt-dlp、Windows winget install yt-dlp.yt-dlp、任意平台 pip install -U yt-dlp
- 无字幕转写 → uv(脚本自举:建 Python 3.12 环境 + 装 faster-whisper):macOS brew install uv、Windows winget install astral-sh.uv,macOS / Linux 也可用官方安装脚本(curl -LsSf https://astral.sh/uv/install.sh 交给 sh)

其余说明:

- 转写是唯一需要额外工具链的环节,三平台共用同一份 Node 脚本、同一条命令:node scripts/transcribe.js --audio <音频> --out <txt>。
- 转写默认走 CPU,Apple Silicon / Intel Mac 与 Linux 都不需要 CUDA;GPU 需自备 CUDA 运行库,options.device: "auto" 会尝试并在失败时自动回退 CPU。
- 缓存目录按平台取:macOS ~/Library/Caches/deep-read-summarize、Linux $XDG_CACHE_HOME/deep-read-summarize、Windows %LOCALAPPDATA%\deep-read-summarize。
- 已在真实 macOS 上跑通一次完整的无字幕转写(0.3.12 起):uv 自举 Python 3.12 → 装 faster-whisper → 下载模型 → 输出逐字稿,退出码 0;CI 的 macos-latest 作业另外覆盖平台路径解析与整套测试。遇到报错欢迎开 issue 反馈。

安装(DSH 插件)

deep-read-summarize 是 DSH 插件,可通过 npm 或本地安装:

npm 安装(自动安装用于解析器构建的 Acorn)
npm install deep-read-summarize

或本地安装(dsh profile 目录)
pnpm add ./deep-read-summarize-0.3.10.tgz
然后在 dsh 配置的 dsh.profile.bundles 追加:
- deep-read-summarize
重启 dsh web 即可(POST /dsh-market/restart)

安装后自动注册:
- deep_read_summarize 工具(宿主提供 tools / workflowEngine 服务时);模型只传 input/type/options,插件直接提交已加载的工作流
- deep-read-summarize 工作流定义(meta + script;旧宿主保留通过 workflow 工具调用的方式)
- deep-read-summarize 技能(skills/deep-read-summarize/SKILL.md)
- 四种解析器(parsers/)与 JSON Schema(schemas/)

快速开始(约 5 分钟)

1. 安装

方式 A:npm 直接安装(无需 clone)
npm install deep-read-summarize

方式 B:从源码开发
git clone https://github.com/PensiveFei/deep-read-summarize.git
cd deep-read-summarize
npm ci # 安装锁定依赖

2. 验证安装(离线,不需要任何 API key)

node -e "console.log(require('deep-read-summarize').name)"

看到 deep-read-summarize 即包可正常加载。从源码开发时再运行 npm test 和 npm run test:node;测试不随 npm 包分发。

3. 一行命令喂入 demo 文件

node -e "const wf = require('./workflow.js'); console.log('meta:', wf.meta.name); console.log('parsers:', wf.parsers.list().map(p => p.name).join(', '));"

输出类似:

meta: deep-read-summarize
parsers: book, paper, video, web

4. 真实运行(需要 DSH)

优先把下面的 JSON 直接传给 deep_read_summarize 工具。旧宿主使用技能提供的 meta + script,通过 workflow 工具执行:

{ "input": "https://arxiv.org/abs/2307.09042", "type": "paper", "options": { "maxChunks": 4, "fastMode": true } }

工作流会返回结构化结果:{ ok, kind, title, filePath, qualityPassed, note },note 即最终 Markdown 笔记。

⚠️ 笔记由主代理落盘:DSH 的 workflow 契约规定脚本只能协调子代理(沙箱内没有文件系统),所以脚本只返回 note 正文与建议路径 filePath,不会自己写文件。插件自带的 SKILL.md 已明确要求模型在拿到结果后用 write 工具写入 filePath——自己拼 workflow 调用时也要记得这一步,否则笔记只存在于返回值里。

用法

deep_read_summarize 工具只需要以下参数;旧宿主将其作为 workflow 的 args,并使用技能中的 meta + script:

{
"input": "https://arxiv.org/abs/2307.09042", // 链接或文件路径 "type": "auto", // auto | book | paper | video | web
"options": {
"minWords": 2500,
"fastMode": false, // true 时跳过 5-7 节,速度快一些 "maxChunks": 4, // 分块上限,1-12(默认调低,控制子代理数与耗时) "transcribe": true, // 视频:无字幕时自动本地转写(faster-whisper);false 则跳过转写,见「视频」节 "whisperModel": "small", // 视频转写模型档位:small | base | medium "language": "zh", // 视频转写语言:纯英文视频可设 "en" "device": "cpu", // 转写设备:cpu(默认)| auto | cuda;auto/cuda 需自备 CUDA 运行库,失败自动回退 cpu "maxRetries": 0, // 质量校验重试次数(默认 0 = 不重试,重试会明显变慢) "frontmatter": "obsidian", // frontmatter 键集:obsidian(默认,配 Dataview)| generic(换掉 Hugo 保留键)| minimal "requireCitations": true, // 关键结论是否必须标注出处 "includeTimestamps": false, "outputDir": "./output", // 笔记输出目录(可指向 Obsidian 仓库或静态站点内容目录) "tempDir": "./.tmp" // 临时文件目录 } }
| 类型 | input |
| 论文 | https://arxiv.org/abs/2307.09042 |
| 书籍 | 本地路径,如 ~/books/xxx.pdf |
| 视频 | https://youtube.com/watch?v=xxx |
| 网页 | https://example.com/article |

笔记写到 options.outputDir 指定的目录(默认 ./output,可指向你的 Obsidian 仓库或静态站点内容目录),文件名取自内容标题。

frontmatter 三档(options.frontmatter)

默认 obsidian,键集与历史版本一致,标量和列表值使用安全引号。之所以要分档:type、aliases、url 在 Hugo 里是保留键,语义和 Obsidian 完全不同——直接丢进 Hugo 会改变渲染行为,而不是多几个无害字段。

| 键 | obsidian(默认) | generic | minimal |
| title | ✓ | ✓ | ✓ |
| aliases | ✓ | — | — |
| author / year | ✓ | ✓ | — |
| type | ✓ | — | — |
| docType | — | ✓ | — |
| url | ✓ | — | — |
| sourceUrl | — | ✓ | ✓ |
| tags | ✓ | ✓ | ✓ |
| created | ✓ | — | — |
| date | — | ✓ | ✓ |
| status | ✓ | ✓ | — |

为什么 generic 要换键:

- type 在 Hugo 里决定用哪套 layout(type: video 会让它去找 layouts/video/)
- aliases 在 Hugo 里是一组会重定向到本页的旧 URL
- url 在 Hugo 里会覆盖页面自身的路径——来源链接会变成文章的永久链接
- date 才是 Hugo/Jekyll 都认的时间键;created 只是自定义字段

非法值直接 FATAL 终止(与 type 的失败纪律一致,不静默降级)。

视频:完整逐字稿(字幕优先,无字幕自动转写)

视频取文本是统一流水线(已去掉「三档」):目标 = 拿到完整逐字稿再精读。

⚠️ 为保证精读质量,处理时间可能略长(刻意取舍,不是卡死):无字幕视频会先做一次转写(CPU 上约为视频时长的 0.5–2×)再精读,所以这类视频整体会明显比有字幕视频慢;换来的是完整逐字稿 + 真正的精读。有字幕视频仍是秒级。请勿把转写的较慢误判为卡死。

1. 有平台字幕(B站官方 API 的 AI 字幕 / YouTube CC)→ 直接用字幕(=全文,最快、零依赖)。
2. 无公开字幕 → 用插件自带转写 scripts/transcribe.js(faster-whisper small / int8 / VAD / 中文)得到全文。
3. 都不行 → 降级:提示手动提供转写文本,或退回 desc 作背景;绝不阻塞。

options.transcribe:默认 true(无字幕自动转写);设为 false 则跳过转写(只用字幕/desc 或降级)。

转写工具链:脚本用 uv 创建 Python 3.12 环境,从清华镜像安装 faster-whisper==1.2.1,通过 HF_ENDPOINT=https://hf-mirror.com 下载并缓存模型。健康的缓存环境直接运行,不要求 uv 仍在 PATH,也不再启动单独的 Python 导入探测。实际解释器和依赖版本记录在缓存目录的 runtime.json;Python 补丁版本、uv 和传递依赖未全部锁定,不能据此声称环境逐字一致。PyAV 可直接解码音频,无需单独 ffmpeg。三平台使用同一条命令 node scripts/transcribe.js --audio <音频> --out <txt>,默认 CPU;options.device: "auto" 可尝试自备的 CUDA,失败回退 CPU。缓存目录:Windows %LOCALAPPDATA%\deep-read-summarize、macOS ~/Library/Caches/deep-read-summarize、Linux $XDG_CACHE_HOME/deep-read-summarize(未设置时用 ~/.cache)。创建 Python 环境默认先用镜像,失败再直连 GitHub;DRS_UV_PYTHON_MIRROR 可覆盖镜像,空字符串表示直连。

⚠️ 首次转写会先下载模型(small 约 484MB,走 hf-mirror,非 GitHub),可能需要几分钟,请耐心等待;本机只下这一次,之后所有视频转写用缓存、秒开。只有「无字幕」视频才会触发转写(有字幕的视频直接用字幕,不触发、不下载)。

质量/速度:small + int8 量化 + VAD 静音过滤,中文质量可用且 CPU 友好。有字幕的视频不转写(快);无字幕视频转写,CPU 上约为视频时长的 0.5–2×。

失败处理:安装/下载失败则明确报错并降级(提示手动提供转写文本),不静默、不长期阻塞。此时可用 options.transcribe: false 跳过转写。

怎么知道本次用了什么来源:来源信息不写进笔记(保证笔记干净),透出在:① 运行日志的 [source] <值> -> <标签> 行;② 返回结果里的 textSource 字段(subtitle / transcription / desc / manual)。

差异与影响因素(时长与内容为何可能不同)

输出时长与内容会因「模型」和「输入」不同而有明显差异,属正常现象,请知悉:

模型

- ASR 模型档位:small(默认,中文可用)→ base(更快、质量略降)→ medium(更好、更慢)。可用 options.whisperModel 调整;下载量与速度随模型变大而增长。
- 语言/口音:中/英/混合语言、方言、口音、重音 → 转写准确度与耗时不同;纯英文视频可设 language: "en"。
- 精读 LLM:用宿主 DSH 的模型,不同上下文/推理模型 → 输出质量、篇幅、速度不同。
- 非确定性:LLM 与 ASR 均带随机性,同一输入重复跑可能得到略有差异的结果(内容/篇幅)。

输入

- 视频:
- 有无公开字幕是最大差异点——有公开字幕 = 秒级;只有登录态 AI 字幕/无字幕 = 触发转写,明显变慢。
- 时长:越长转写越久(CPU 约 0.5–2× 视频时长)。
- 音质/噪杂/低音量/纯 BGM/无人声:转写易错或结果空,此时请手动提供转写文本。
- 论文/书籍/网页:
- 格式:PDF/EPUB/MOBI/HTML/arXiv;扫描版 OCR、坏 PDF、公式/图表密集 → 提取质量与耗时不同。
- 术语密度/篇幅 → 分块数与精读深度不同。
- 分块结构:不同类型分块方式不同(章节/主题/段落),影响输出结构与覆盖。

硬件

- GPU vs CPU:GPU 转写可比 CPU 快一个数量级(device='auto' 自动选)。CPU 上无字幕视频约 0.5–2× 时长。

其他

- 首次 vs 复用:首次要下模型(约 484MB),之后缓存复用。
- Token/成本:分块数/篇幅/引证决定 token 消耗;fastMode/maxChunks 可省。
- 引用/编造:转写或 OCR 的错词可能被当作「原文」引用,关键引用请复核。
- 边界:纯 BGM、失真音频 → 转写空/差;无字幕且转写不可用 → 降级提示人工提供转写文本。

失败怎么处理

分两类:

- 配置错误(缺 input、type 非法、options 格式错):直接抛异常终止,不产出半成品。
- 内容问题(抓取失败、某块精读失败):返回 { ok: false, stage, fatal: false },由调用方决定。某一块失败时跳过它、在成稿里标注缺口,不整体中断。

保持质量的提速

- 支持的新宿主优先使用 deep_read_summarize,模型只提交参数,省去复制整份工作流脚本。旧宿主自动保留原入口。
- 精读仍完整覆盖已知原文,最多三个任务并发;空闲槽位立即领取下一块。按行数均衡工作量,避免一个超大块拖住整批。
- QC 继续独立读取原文;不再在每轮上下文中重复塞入全部 Map 笔记。缺总行数、精读失败或只有视频简介等问题不能靠改写笔记解决,不再浪费全文修订轮次。
- 视频 textSource: "desc" 明确为降级来源,不能取得完整精读的质量通过状态。B站多 P 链接按 p 选择对应 CID、分 P 标题和时长。
- 返回 timings 提供各阶段毫秒耗时,用同一资料、模型、篇幅和质量门槛比较;调度测试不能当成真实 LLM 加速比例。

本次未改小模型档位、减少字数门槛或抽样跳过原文。常驻 ASR 模型、逐字稿缓存和分层 QC 仍需单独做质量与性能基准。

成本

Token 用量取决于原文长度、分块数和成稿篇幅。原文核验会再次读取资料,每轮修订还会增加一次修订和一次核验调用。fastMode 减少输出章节;调低 maxChunks 限制代理数,同时保留全文覆盖。

使用 lib/cache 的程序化调用方请注意:URL 尾斜杠、空 query 与 fragment 可能选择不同资料,现在会保留;新版指纹自动与旧版缓存隔离,升级后可能需要重新处理一次。该工具不负责证明远程内容未更新,复用前仍须由调用方确认来源与配置。

安全与版权

- 抓取视频/网页会发起外部请求,由子代理在 DSH 的沙箱和审批策略下执行;不要让模型无人值守地跑任意脚本。
- 子代理写文件需要相应权限;如果权限不够,workflow 会把内容返回,由主代理负责落盘。
- 本地转写:视频转写(faster-whisper)在本机运行,音频/字幕不出本地;抓取视频元数据/字幕/音频时才会向对应平台发起网络请求。
- 这个仓库只有流程本身:workflow 定义、解析器代码、提示词模板、schema。不含任何受版权保护内容的提取结果。 测试用的 fixture 是自写的公共领域寓言。用本工作流处理有版权的材料时,产出物的使用责任在你。

开发

npm install
npm run lint # node --check 全部 JS
npm test # fixture 测试(35 项,全部离线)
npm run validate # 发布前验证(含安全检查)

npm publish 会自动先跑 prepublishOnly(测试 + lint + 安全检查),任何一项失败都不会发布。

改动说明见 CHANGELOG.md,贡献规范见 CONTRIBUTING.md。

兼容性

已验证的宿主:DSH 0.2.0-rc.2(Node 24)。本仓库的依赖面只有两处:

| 依赖面 | 现行契约 | 本仓库的用法 |
| workflow 脚本钩子 | agent() / pipeline() / parallel() / phase() / log() / args | 只用了 agent/parallel/phase/log/args;agent() 选项只用 label/phase/schema(引擎只接受 label/phase/schema/provider/model,其它选项会被判为 fatal) |
| JSON Schema 子集 | type / properties / required / additionalProperties / items / enum / const / oneOf + 注解键 | 两个 agent() schema 已用宿主真实的 assertObjectJsonSchema 实测通过 |

两点容易踩的契约细节:

- 脚本沙箱没有文件系统/网络/定时器/require——只能协调子代理;笔记落盘由主代理完成(见上文 ⚠️)。
- 违反上述子集不是降级而是终止:引擎抛 UNSUPPORTED_SCHEMA,整条 workflow 直接失败。仓库的 npm test 里有对应回归(含反向断言,确保校验器不是空放行)。

升级 DSH 后先跑 npm test + npm run test:node;坏了对照 CHANGELOG.md 排查。

License

MIT,见 LICENSE。
预览分享卡片长什么样 ↓PensiveFei/deep-read-summarize
分享 · DeepSeek Harness Hub
PensiveFei/deep-read-summarize

免责声明:这是非官方第三方工具,与 DeepSeek 及 DeepSeek Harness…

回到顶部