mcpField
D
deep-reader

deep-reader

github.com/tronghieu生产力8773 次安装1 周前更新
代码仓库

关于 deep-reader

deep-reader 是一项用于分阶段阅读书籍和论文的技能,适合需要深入理解长篇材料并保留可追溯笔记的研究者。它将结构浏览、逐章分析和基于笔记的综合分开,并提供概览与学习两种模式。

主要功能

  1. 01概览与学习两种阅读模式
  2. 02按章节生成分析笔记
  3. 03记录页码以追溯出处
  4. 04生成结构图与论证综合
  5. 05机械核验引文和页码

适用场景

  1. 01为研究问题筛选相关章节
  2. 02整理长篇书籍或论文的读书笔记
  3. 03基于已有笔记回答后续问题
  4. 04核对综合结论中的引文

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tronghieu/agent-skills --skill deep-reader

安装后在 Claude Code 中输入/deep-reader确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
README.vi.md
README.zh.md
references/
genre-strategies.md
note-templates.md
paper-mode.md
scripts/
build-diagram.sh
extract-structure.sh
prepare-text.sh
read-pages.sh
search-book.sh
self-test.sh
split-chapters.sh
verify-quotes.sh

详细介绍

Deep Reader

像细致的人类研究者一样阅读长篇书籍和论文:先略读以了解结构,再逐章深入阅读并随时做笔记,最后只依据笔记进行综合总结,而不是依据原文。此方法源自 Adler 的 How to Read a Book、SQ3R 的复述步骤,以及 Keshav 针对论文提出的三遍阅读法。

为什么要多遍阅读,为什么要做笔记

大模型的注意力会随着上下文变长而分散,也容易遗忘大型提示词中间的内容(“中间遗失”)。把一本 500 页的书全部载入同一个上下文,再就此提问,会导致讨论到第 12 章时,回答悄然忘记第 3 章的内容。

解决办法和人类研究者采用的方法一样:不要试图把整本书同时留在工作记忆中。分遍阅读——先了解结构,再逐章阅读内容——并随读随把所学整理到笔记文件中。笔记会成为持久记忆;只有在主动阅读某一章或核实某条具体论断时,才需要重新查看书籍原文。页码是坐标系统,可让每条论断都能追溯到来源,无论是在本次会话还是之后的会话中。

两种模式

  • overview — 仅进行 Adler 式检视阅读:绘制全书结构图,并根据读者的目的,对最相关的章节进行目标导向的总结。速度快,不做逐章笔记。
  • study — 完整流程:阅读目的 → 检视阅读结构图 → 逐章分析笔记并通过复述核验 → 按层级综合总结,回答 Adler 的四个问题 → 机械式引文核验。

用户选择一种模式(或你根据 mode_hint 和用户陈述的目的提出建议——见步骤 1)。

工作区布局

整个流程生成的所有内容都存放在工作区目录中。默认情况下,该目录与源文件位于同一父目录下,因此可在不同会话间保留:

<slug>-notes/
├── source.txt          # full text with [[page N]] markers — the coordinate system
├── chapters.tsv        # confirmed structure: chNN<TAB>from<TAB>to<TAB>title
├── chapters/           # per-chapter files cut by split-chapters.sh
│   └── ch01-<slug>.txt
├── map.md              # inspectional pass output
├── terms.md            # key-terms ledger, cross-chapter
├── notes/
│   └── ch01-<slug>.md  # one analytical note per chapter (papers: sec01-<slug>.md)
└── synthesis.md        # final synthesis + verification log

之后的会话无需重新阅读整本书,就能回答后续问题;实现这一点的是此工作区,而不是 SKILL.md 脚本(见下文“根据现有笔记作答”)。

脚本一览

全部七个脚本都位于此技能下的 scripts/ 目录中。你可以在技能目录下运行 bash ./scripts/<name>.sh ...,也可以在 claude.ai 上运行 bash /mnt/skills/user/deep-reader/scripts/<name>.sh ...——两种形式调用的是同一脚本,根据运行环境任选其一。

脚本参数用途
prepare-text.sh<input-file> [workspace-dir]将源文件转换为带页码的 source.txt,并创建工作区
extract-structure.sh<source.txt>提取启发式大纲初稿(只是起始猜测,并非准确事实)
read-pages.sh<source.txt> <from> [to]打印单页或页码范围,保留 [[page N]] 标记
search-book.sh<source.txt> <pattern> [context-lines]搜索整本书,并输出带页码标注的结果
split-chapters.sh<source.txt> <chapters.tsv>将已确认的章节拆分为独立文件
build-diagram.sh<workspace-dir> [--append]根据结构生成 Mermaid 思维导图
verify-quotes.sh<workspace-dir>检查伪造的引文和错误的页码引用

步骤 0 — 准备

找到源文件,然后转换并分页:

bash ./scripts/prepare-text.sh path/to/book.pdf
# or on claude.ai:
bash /mnt/skills/user/deep-reader/scripts/prepare-text.sh path/to/book.pdf

此操作具有幂等性——在已有 source.txt 的工作区中重新运行时,会报告现有统计信息,而不会再次转换,因此每次在同一本书的工作区中开始会话时调用都是安全的。

阅读它输出的 JSON。pages 和 est_tokens 会告诉你这本书的规模;mode_hint 会给出初步建议(小型/中型/大型);如果 synthetic_pages 为 true(EPUB/DOCX/TXT/MD 源文件没有真实页码),请记住,笔记中的页码引用仍指向 source.txt 自身的分页——可以核实,只不过不是实体书读者看到的印刷页码。

继续之前,先判断以下两种情况:

  • 这本书已有笔记工作区(检查 <slug>-notes/notes/ 中是否有文件)——不要重新开始整个流程,直接跳到下文的“根据现有笔记回答”。
  • 退出码为 2(缺少 pdftotext/pandoc)——改用 Read 工具分批直接阅读 PDF/EPUB。采用这种备用方式时,无法使用 verify-quotes.sh 进行机械检查;请更频繁地手动重读引用内容作为补偿。
  • **脚本运行异常?**运行 bash ./scripts/self-test.sh——它可以区分环境问题(缺少/损坏的依赖项)和使用问题。

步骤 1 — 阅读目的

如果用户没有说明阅读这本书的目的,请问一个问题:“你希望从这本书中获得什么?”目的并非形式上的问题——它决定哪些章节需要深入阅读、哪些可以略读,也是评估步骤 4 综合结果的标准。

了解目的后,结合 mode_hint 和阅读目的提出一种模式(例如,为了一个具体问题而读一本 40k-token 的书,即使从技术上说可以读完,也可以采用概览模式;为了撰写文献综述而读一本 200k-token 的书,则无论篇幅大小都需要采用研读模式)。让用户确认或选择其他模式。

如果源文件是论文、学位论文或综述,而不是书籍,请现在阅读 references/paper-mode.md——它会说明如何将 Keshav 的三遍阅读法应用于此流程,并告诉你何时值得投入整套工作区机制的额外开销,以及何时应在对话中直接完成第 1–2 遍阅读。

步骤 2 — 检视性阅读(两种模式都要进行)

生成一个初步提纲,然后对照原书确认:

bash ./scripts/extract-structure.sh <workspace>/source.txt

将其输出视为有噪声的初步猜测,而非事实依据——请对照目录进行交叉核查。然后:

  1. 使用 read-pages.sh 阅读目录、序言/引言、结论/最后一章,以及索引(如有)。
  2. 略读抽取的 2–3 章的首段和末段。
  3. 使用 references/note-templates.md 中的模板编写 map.md。
  4. 填写完 map.md 的分类字段后,在开始分析性阅读之前,先阅读 references/genre-strategies.md 中对应的章节——实用类书籍、想象类文学、历史、科学与数学、哲学,以及教科书/参考书都需要采用不同的阅读方式;提前应用这些策略成本很低,等笔记写完后再补则代价很高。

确认结构后,将其持久保存并拆分成多个部分:

# id  from  to  title  — one line per chapter, tab-separated
printf 'ch01\t9\t34\tThe Activity of Reading\n' > <workspace>/chapters.tsv
bash ./scripts/split-chapters.sh <workspace>/source.txt <workspace>/chapters.tsv
bash ./scripts/build-diagram.sh <workspace> --append

split-chapters.sh 会为每章创建一个独立文件——这对分析性阅读很有用;如果要分派给子 Agent,则必不可少。build-diagram.sh --append 会在 map.md 的 ## Structure diagram 标题下添加一份 Mermaid mindmap,可以重复运行而不会重复添加该部分。

概览模式到此结束:只对与阅读目的最相关的 2–4 章进行深入略读(开篇、结尾、关键章节),在 map.md 中补充一份以目标为导向的摘要,呈现给用户,然后结束。不写逐章笔记,不做综合,也不进行核验。

研读模式继续执行步骤 3。

步骤 3 — 分析阶段(研读模式)

按 chapters.tsv 中的顺序逐章处理。如果一本书由许多微章节(每章 1–10 页)组成,不要为每个微章节都写一份笔记——而是按作者自己的部分/章节划分进行归组。目标是每个连贯的论证单元对应一份笔记,而不是每个标题对应一份笔记;一本有 67 章的书,完全可能合并为 16 份按部分划分的笔记。对于每个最终确定的单元:

  1. 阅读章节——内容来自 chapters/chNN-*.txt;如果跳过了拆分步骤,则使用 read-pages.sh/Read 工具分批阅读。
  2. 按照 references/note-templates.md 中的模板,编写 notes/chNN-<slug>.md:说明本章回答的问题、关键术语(也将每个术语同步录入跨章节的 terms.md 术语表)、核心命题、论证(前提 → 结论)、所提供的证据、带有 (p. N) 页码的引文、与其他章节的矛盾或关联,以及未解问题。
  3. 复述(SQ3R 的步骤):草拟笔记后,重新略读本章,逐一核对每项命题和引文是否符合原文,然后再继续。趁章节内容还记忆犹新,立即修正笔记——不要等到综合整理时再改。笔记通过核对后,就让本章退出工作记忆;从此以后,笔记就是记忆。

分工选项:如果有可用的子 Agent,且 mode_hint 将本书标记为大型图书,你可以派遣子 Agent 代替顺序逐章处理。按批次向每个子 Agent 分配章节——平衡每批的词数,而不是严格按每人一章分配——并提供各自批次的页码范围、阅读目的、笔记模板路径和脚本路径。要求每个子 Agent 在最终消息中返回其 terms.md 条目,而不是直接写入该文件,这样你(协调者)就能集中合并所有内容到 terms.md——多个并行子 Agent 直接写入同一文件会产生竞态。map.md、合并后的 terms.md 和步骤 4 的综合整理仍由你负责——不要委派这些工作。顺序阅读是默认方式,且适用于各种环境;即使子 Agent 无法并行运行,分工也依然有益,因为它能隔离上下文——每个批次都会获得一个全新的上下文窗口,而不只是提升速度。

步骤 4 — 综合整理

现在阅读笔记——不要读书。撰写 synthesis.md,回答 Adler 提出的四个问题,每项论断都要附上页码引用:

  1. 这本书整体上讲什么?
  2. 书中具体说了什么,又是如何阐述的?
  3. 这些内容全部或部分属实吗?
  4. 这有什么意义?——应结合用户明确提出的阅读目的来具体回答,而不是泛泛而谈。

除了回答这四个问题,还要手动编写一份 Mermaid graph,绘制概念与论证图,展示关键术语和命题如何共同导向各项结论,并跨章节建立联系。该图应根据 terms.md 和章节笔记构建。这是一项需要判断的分析工作,并非机械操作:它是论证层面的图,与步骤 2 中 build-diagram.sh 绘制的结构思维导图相对应;任何脚本都无法生成它,因为这需要判断各个观点之间的实际依存关系。

步骤 5 — 核验

先运行机械检查:

bash ./scripts/verify-quotes.sh <workspace>

对于每一行 FAIL 或 NEAR,使用 read-pages.sh 重新打开引用页码,并修正引文文本或页码,然后重新运行,直到退出码为 0。此检查能发现虚构引文和页码偏差,但只能检查引文——无法检查转述内容。

因此,最后还要手动核验:挑选 synthesis.md 中最关键的 5–10 项转述论断,通过针对性重读所引用的页面来逐一核验。按照模板,在 synthesis.md 底部的简短核验日志中,将每项标记为 ✓ verified。

根据现有笔记作答

在后续会话中,或完成综合后仍在当前会话时,不要重新阅读整本书来回答问题。先搜索工作区——用 grep 搜索 terms.md 和 notes/——并根据其中的内容作答。只有当笔记未涵盖相关细节时,才沿着笔记中的页码锚点,使用 read-pages.sh 或 search-book.sh 查阅 source.txt。工作区的意义就在于,后续的一个问题不该让你从头到尾重读一遍。

关键判断

Adler 对“这是真的吗”这一问题的礼仪要求是:在能够公允地重述作者的观点之前,不要作出判断——这正是第 3 步中 Recite 检查的作用。然后,要明确区分以下三种结论:

  • “作者在此处错了”——需要有引用页码的理由支持。
  • “作者的论述不完整”——这是缺漏,不是错误。
  • “我无法核实这一点”——如实说明,不要猜测。

没有引用页码的理由支撑的分歧不是批评,而是观点——不要把它说成前者。

主题式阅读

对于横跨多本书或论文的问题,每部作品都单独运行一次流程——每部作品都有自己的工作区和 synthesis.md。然后根据这些 synthesis.md 文件撰写比较综合:指出作品之间的共识与冲突,并为共同主题采用中立的术语,不偏袒任何一位作者的用语。

沟通

使用用户提问时所用的语言。交付内容是综合结果(或在概览模式下,目标导向的摘要),应直接放在对话中——工作区文件是值得提及的持久副产品,但不能代替在聊天中作答。

评论

支持 Markdown