Skip to main content

book-to-webpage

把书(PDF/Markdown等)拆解成本地知识库,再据用户请求(全书概述/某主题/某章)生成可交互的HTML学习页。页面全程可点可探索。当用户想让一本书的某个主题以美观交互网页呈现、或做全书概览页时使用。

Datos de origen

Repositorio
crayon-ai/book-to-webpage
Última actividad en el origen
16 de junio de 2026 a las 15:02
Idioma detectado de SKILL.md
chino
Estrellas
158
Forks
19

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
book-to-webpage
description
把书(PDF/Markdown等)拆解成本地知识库,再据用户请求(全书概述/某主题/某章)生成可交互的HTML学习页。页面全程可点可探索。当用户想让一本书的某个主题以美观交互网页呈现、或做全书概览页时使用。
# book-to-webpage 把书变成可交互的学习页。**两阶段**:先拆全书成本地知识库(`<书名>.kb/`),再据请求生成单页 HTML。 ## 哲学 - **展示层是核心差异化**:不是读书摘要,是把书中某主题做成可点击、可探索的页面。组件可交互,内容成叙事。 - **拆解逻辑复用 book-to-skill**:提取器和拆解流程整体复制,不重新发明;但产出本地知识库(`<书名>.kb/`),**不生成 skill、不安装到 ~/.claude/skills/**。 - **散布内容要全面聚合**:某主题散布全书时,用 Topic Index 定位所有相关章,全部纳入,不遗漏。 ## 两种运行入口 1. **首次处理一本书**:跑阶段 1,生成 `<书名>.kb/` 知识库。 2. **已有知识库后生成网页**:跑阶段 2,按请求产出单页 HTML。 --- ## 文件结构 本 skill 附带以下预制资产,Agent 在渲染时引用: | 文件 | 作用 | 用法 | |------|------|------| | `templates/base.html` | ①骨架层:页面壳、CSS 变量、布局、移动端断点、所有组件基础样式 | 抄,替换 `{{...}}` 槽位(含 `{{theme_style}}`/`{{theme_name}}`) | | `templates/components.md` | ②组件层:每个组件的 HTML/CSS/JS 范式 + 数据槽位 | 按 signature 挑范式,抄+填数据 | | `templates/themes/` | ③主题层:4 个 `.css`(暖纸典藏/极简学术/夜读深空/东方水墨)+ `README.md` 目录 | 选一个,整段注入 `{{theme_style}}` | | `scripts/extract.py` | 提取器入口(复制自 book-to-skill) | 阶段 1 跑 | | `scripts/extractor/` | 提取器包(复制自 book-to-skill) | 阶段 1 用 | --- ## 阶段 1:全书拆解(复制 book-to-skill 流程,改产出物) **前提:** 用户提供了书文件(PDF/Markdown/EPUB等)。 ### Step 1.0 校验输入 支持格式同 book-to-skill:`.pdf`、`.epub`、`.docx`、`.txt`、`.md`、`.html`、`.rtf`、`.mobi`、`.azw`。 无输入则提示:`book-to-webpage 需要一本书的文件路径。` ### Step 1.1 提取全文 ```bash SCRIPT="$HOME/.claude/skills/book-to-webpage/scripts/extract.py" python3 "$SCRIPT" <书文件路径> --mode text ``` 产出 `<workdir>/book_skill_work/full_text.txt` + `metadata.json`。读 `metadata.json` 确认页数、字数、token、章节数。 如果提取失败,跑 `python3 "$SCRIPT" --check` 诊断依赖,给安装建议。 ### Step 1.2 成本预估并确认 报页数/字数/预估 token 与价格,**等用户确认**再继续。 ### Step 1.3 分析结构(复制 book-to-skill Step 3) 读 full_text 前 8000 字 + metadata 章节检测,识别: - 书名、作者 - 章节结构(中文"第X章"或英文"Chapter N"、ToC) - 核心领域 ### Step 1.4 REPL 式切片拆解 **全书 >50k token 时禁止整体读入。** 用 grep 定位章节边界,sed 只切当前要写的那章: ```bash grep -n -E "^\s*(第[一二三四五六七八九十百零0-9]+[章节回]|Chapter [0-9]+)" full_text.txt | head -60 sed -n '<start>,<end>p' full_text.txt ``` ### Step 1.5 生成章节摘要(复制 book-to-skill Step 7 模板) 每章生成 `<书名>.kb/chapters/ch<NN>-<slug>.md`,字段: - **Core Idea**(1-2 句) - **Frameworks Introduced**(命名框架 + 何时用 + 怎么用,**保留作者精确命名**) - **Key Concepts**(5-10 个术语,各一句定义) - **Mental Models**("用 X 当 Y") - **Anti-patterns**(要避免什么 + 为什么失败) - **Worked Example**(重现作者亲算的一个例子) - **Key Takeaways**(3-7 条) - **Connects To**(关联其他章/外部概念) 自适应深度(默认中文社科书 = text + study = 1000-1800 token/章): | | reference | study | |---|---|---| | text | 800-1200 | 1000-1800 | | technical | 1200-1800 | 2000-3000 | ### Step 1.6 生成支撑文件(复制 book-to-skill Step 8 规范) - `glossary.md`:全部术语序排,`**术语** — 定义(第N章)`,≤1500 token - `patterns.md`:全部技术/模式,`## 模式名 / 何时用 / 怎么做 / 权衡`,≤2000 token - `cheatsheet.md`:**决策层**——决策规则(当X做Y因为Z)、决策树、权衡矩阵、阈值,≤1200 token ### Step 1.7 生成 INDEX.md(取代 book-to-skill 的 SKILL.md,不注册为 skill) **关键改动**:book-to-skill 这里生成 SKILL.md;我们生成 `INDEX.md`(知识库导航)。含: - 书名/作者/页数/章数/生成日期 - **Core Frameworks**(~2000 token:最重要命名框架) - **Chapter Index**(表:章号→标题→关键框架) - **Topic Index**(序排:术语/框架 → 出现在哪几章)★阶段 2 关键 - 支撑文件链接 ### Step 1.8 质量规则 提取结构非摘要;保留作者精确命名;密度优先于完整度;从业者口吻("用 X 当 Y");前置重要内容;章节按需加载;绝不照抄原文。 ### 产物结构 ``` <书名>.kb/ INDEX.md ← 知识库导航(常驻核心 ~4K) chapters/ch<NN>-*.md ← 章节摘要 glossary.md patterns.md cheatsheet.md full_text.md ← 原文(供阶段 2 grep) metadata.json ``` **这是本地知识库,不写到 ~/.claude/skills/,不生成 SKILL.md。** --- ## 阶段 2:请求 → 网页 ### 前提 阶段 1 已生成 `<书名>.kb/`。如果不存在,先跑阶段 1。 ### 运行模式:常驻核心 + 按需深挖 INDEX.md 是常驻小核心(~4K),含 Core Frameworks + 章节索引 + 主题索引。章节文件按需加载,不全读。这与 book-to-skill 的查询机制一致;区别仅在我们把"文字回答"换成"交互 HTML"。 ### Step 2.1 判定请求模式(三选一) | 模式 | 触发条件 | 取材来源 | 产出 | |------|---------|---------|------| | ① 全书概述 | 用户说"概述全书/讲讲这本书",无主题 | 读 INDEX.md Core Frameworks + cheatsheet | 概述页(骨架视图) | | ② 主题聚合(默认) | 用户指定主题 / 说"做一页xxx" | 查主题索引 → 两级检索(§2.2) | 主题深度页 | | ③ 单章深读(可选) | 用户指定章号 | 读该章摘要 + 该章原文 | 单章页 | 用户指定主题时,**先 grep full_text.md 验证书中确有相关内容**;命中 0 → 明确告知"本书未涉及该主题,建议尝试以下相关主题:…",绝不瞎编。 ### Step 2.1b 主题处理(无需用户选择) HTML 页面**内置全部 6 套主题**(`warm-paper`/`minimal`/`dark`/`ink-wash`/`vintage-editorial`/`paper-ink`),通过右上角下拉菜单实时切换,默认使用 `warm-paper`。用户可在浏览器里自己切换,无需 Agent 生成前询问。 **如果用户明确点名某主题**(如"用极简风格")→ 把 HTML 中 `<body data-theme="...">` 的初始值设为对应主题,`<select>` 的 `selected` 同步调整。否则默认暖纸典藏。 6 套主题的完整 CSS(`:root` 基准 + 5 个 `[data-theme="X"]` 覆盖块)直接写入 HTML 的 `<style>` 中,不依赖外部文件。主题目录见 `templates/themes/README.md`。 ### Step 2.2 主题聚合的两级检索(关键差异化) ``` 第一级(结构化):读 chapters/ 里主题索引指向的章节摘要 → 框架/概念/反模式等结构化要点 第二级(原汁原味):grep full_text.md 原文散落表述 → 具体论述/作者原话/数据 合并去重重组 → 完整主题视图 ``` **两级都要**:第一级保结构,第二级保全面。这是相对 book-to-skill(只读摘要)的强化,确保主题页囊括书中所有对该主题的论述。 ### Step 2.3 重组(散碎 → 流畅叙事) 1. **去重**:同一观点在多章重复的,合并成一处 2. **归类**:按因果/对比/演进逻辑排,不按章节顺序 3. **改写**:用自己的话重述,但**保留作者精确命名**(框架名/术语不改) 4. **补衔接**:观点间加过渡句,形成可读叙事,不是观点清单 ### Step 2.4 结构化为 JSON 内容契约 按模式产出 JSON。`meta.mode` 字段标识模式,决定后续组件挑选。 **theme 模式 JSON:** ```json { "meta": {"book": "...", "author": "...", "mode": "theme", "theme": "...", "sources": ["ch03","ch05"]}, "hero": {"eyebrow": "...", "title": "...", "lede": "...", "thesis": "..."}, "sections": [ { "id": "past", "label": "过去20年", "lead": "...", "notes": [{"title": "需求被释放", "body": "..."}], "signature": "causal_chain", "chain": [{"id": "tax", "label": "分税制", "body": "..."}] } ], "questions": [{"title": "...", "hint": "..."}] } ``` - `sections[].signature`:决定该分区用哪个特色组件(`causal_chain` / `type_selector` / `matrix` / `timeline` / `decision_tree` / `questions`) - `sections[].lead`:段首引语(衔接层,Agent 现写) **overview 模式 JSON:** ```json { "meta": {"book": "...", "author": "...", "mode": "overview"}, "hero": {"eyebrow": "...", "title": "...", "thesis": "..."}, "frameworks": [{"name": "土地财政", "oneLine": "...", "when": "..."}], "chapterMap": [{"ch": "ch01", "title": "...", "role": "..."}], "conceptMap": [{"term": "土地财政", "links": ["ch03","ch05"]}], "decisionRules": [{"when": "...", "do": "...", "because": "..."}] } ``` 每个顶层数组对应一个概述专用组件。 ### Step 2.5 挑组件(按内容性质决策,非简单映射) **先判断内容性质,再选最合适的组件。** 一套主题内容往往适配多种组件,Agent 需要根据内容的逻辑结构来挑选 1-2 个。 #### 内容性质 → 组件 决策矩阵 | 内容性质 | 判断依据 | 首选组件 | 备选 | |---------|---------|---------|------| | 因果推进 | 有明显的"A→B→C→D"链条 | `causal_chain` | accordion | | 历史演进 | 按时间顺序展开的事件 | `timeline` | story_card | | 多类别并列 | 几类事物各有特点,适合分类比较 | `type_selector` | matrix | | 多维权衡 | 需要对比选项在多个维度上的优劣 | `matrix` | before_after | | 决策分叉 | "如果X则Y,如果A则B"的条件逻辑 | `decision_tree` | accordion | | 案例叙事 | 有具体人物/事件/情境的生动故事 | `story_card` | quote_card | | 政策/制度变迁 | 同一个事物在某个节点前后的状态对比 | `before_after` | timeline | | 核心论述(分层) | "先给结论再给论证",需控制信息密度 | `accordion` | decision_tree | | 重要原话 | 需要保留作者精确表述、有冲击力的原文 | `quote_card` | story_card | | 读者自检 | 从知识到行动的转化 | `questions` | decision_tree | **挑选逻辑:** 1. 优先看内容的**主要逻辑结构**(因果/时间/分类/对比/条件),选最匹配的组件 2. 如果内容中有**特别生动的案例故事**,优先用 `story_card` 呈现 3. 如果想引用**作者原话**增加说服力,搭配 `quote_card` 4. 多数主题配 **2 个特色组件**(一主一辅,互补呈现) **theme 模式固定:** - 核心固定(每页必有):Hero + 一句话总论 + 分区导航(sticky Tab) **overview 模式固定:** - 核心固定 + 概述专用:`frameworks` 卡片网格 + `chapterMap` + `conceptMap` + `decisionRules` 从 `templates/components.md` 取对应范式,填入 JSON 数据。 ### Step 2.5b 嵌入追问入口(方案2 — 每个内容块内置深挖按钮) 每个带 `data-source` 的内容块(note / story / timeline-item / ba-col / accordion details / quote / explain / question)必须在内部末尾加上追问按钮: ```html <button class="deep-dive-btn" title="追问这个概念" onclick="openDeepDive('{{概念名}}','{{data-source值}}')">?</button> ``` - `{{概念名}}` = 该块的标题/核心概念(如 `隐性担保`、`土地财政`) - `{{data-source值}}` = 与所在元素的 `data-source` 属性相同 按钮默认 `opacity:0`,hover 父元素时浮现。点击后弹出全局遮罩层,用户输入追问内容,提交后自动将上下文 prompt 复制到剪贴板。 **base.html 已内置完整 JS**(`openDeepDive()` 函数 + overlay + toast),Agent 只需在组件内加这行 HTML。 ### Step 2.5c 标注出处来源 **每个内容块必须标注原文出处。** 这既是学术诚信,也帮助读者溯源深入阅读。 #### 出处信息格式 ``` 第X章 第Y节 · 约第N-M页 ``` 例如:`第二章 第二节 · 约第95-110页` #### 标注方法(A + B 混合方案) **A — Margin 标记(默认可见,低调):** 每个有出处的 HTML 元素加上 `data-source` 属性: ```html <article class="note" data-source="第二章 第二节 · 约第95-110页"> ``` 样式自动处理:左侧 3px 细色条(hover 变蓝)、hover 时弹出 tooltip 显示来源。 **B — 全局"显示出处"开关:** 页面右上角固定按钮 "显示出处",点击后所有内容块下方浮现灰色小字出处行。base.html 已内置此按钮和 JS 逻辑(`srcToggle` → `body.show-sources`),Agent 无需额外处理。 #### 标注规则 1. **每块内容必标**:note、story、timeline-item、question、accordion details、quote、explain、ba-col 等都要带 `data-source` 2. **页数估算方法**:从 `metadata.json` 取总页数,按章节在全文中的位置比例估算页码范围。例如 306 页的书,第 2 章从全文 13% 位置开始、26% 位置结束 → 约第 40-80 页 3. **精度要求**:标注到"节约N-M页"即可,不要求精确到具体页数 4. **同一来源合并**:同一 Panel 内多个内容块来源相同时,每块仍标注(方便读者逐条溯源) ### Step 2.6 三层渲染产出 HTML **三层叠加(关键!组件不够,还要衔接层):** | 层 | 来源 | 谁做 | 占页面比例 |
Ver en GitHub
Este SKILL.md es muy grande, por eso SkillsMP muestra aqui solo la primera seccion. Ver en GitHub