Skip to content

Repository files navigation

BookEspresso

把一本书(Markdown 格式)喂给 AI,自动产出一整套学习材料:逐章总结、深入浅出的教案、核心知识点,乃至全书长文、有声书文稿和语音。

  • TTS(语音合成):使用目前免费的 小米 MiMo-V2.5-TTS API(OpenAI 兼容接口),将听感文稿合成为自然流畅的语音
  • OCR(图片替换为文本):默认调用 智谱 GLM-4.1v-thinking-flash 视觉模型,也可切换为 opencode.ai 网关的 mimo-v2.5-free 视觉模型(免费),自动识别并描述书中的图片内容。

每个阶段都是一个独立的命令行脚本,可以单独运行,也可以串成流水线。底层基于 Claude Agent SDK 驱动 agent 逐章读原文、写产物,并可选切换到 Codex 作为后端。

示例产出

书名 产出
西方现代思想讲义 (刘擎) examples

工作流程

原书.md
  ├─ add_ocr        处理md中的图片,插入对图片的文字性描述,没有图片会自动跳过。
  ├─ book_summarize 逐章总结        → summaries/
  ├─ book_teach     生成教案        → <书目录>/NN-章节.md
  ├─ book_keypoints 提炼核心知识点   → keypoints/ + <书目录>/00-全书核心知识点.md
  ├─ book_skeleton  抽取目录骨架      → skeleton/
  ├─ book_breakdown 拆解全书框架      → <书目录>/<书名>_breakdown.md
  ├─ book_article   生成全书长文      → <书目录>/<书名>_article.md   ⚠️ 实验中:脚本当前只把 prompt 复制到剪贴板,需手动跑 agent
  ├─ book_restyle   调整长文文风      → <书目录>/<书名>_restyled.md   ⚠️ 依赖 book_article 产出
  ├─ book_audiobook 改写为听感文稿    → audiobook/NN-章节.md(基于教案)
  ├─ book_tts       合成 .wav 语音    → audio/NN-章节.wav(基于听感稿)
  └─ book_epub      教案合集转 EPUB   → <书目录>/<书名>_教案合集.epub

summarize 是其余多数阶段的基础:它会切分章节、生成 summaries/progress.json,后续脚本据此定位每章在原文中的行号范围。

安装

需要 Python 3.10+。

pip install -r requirements.txt

可选:若需进行文档格式转换(如 HTML/DOCX/EPUB → Markdown,或教案 → EPUB),请先安装 pandoc 本体:

conda install -c conda-forge pandoc

book_epub.py 会自动查找 pandoc(优先 conda book-tutor 环境,其次系统 PATH,也可用 PANDOC_PATH 指定)。

若还需让智能体学会调用 pandoc 进行格式转换(如 HTML/DOCX → Markdown),可安装 pandoc skill:

npx -y skills add plinde/claude-plugins --skill pandoc --agent claude-code

EPUB → Markdown 预处理

本流水线只支持 .md 输入。若原始书籍是 EPUB,先用 data_process/ 下的脚本转换并清洗:

bash data_process/epub2md.sh "example1/资本论 作者:马克思.epub"
# 输出: 与 epub 同目录、同名 .md + Images/(图片自动解包)

脚本依次完成:pandoc 转换 → 抽取图片 → 修正图片引用路径 → 清理 HTML/pandoc 残留([]{#...} 锚点、::: div 指令、[x]{.class} span 属性、{style=...} 等,详见 data_process/README.md)。也支持传入第二个参数指定输出路径。

手动分步执行时注意:pandoc 3.10 中 --atx-headers 已改名为 --markdown-headings=atx--extract-media 生成的图片引用可能多出一级目录或写成绝对路径,需统一修正为 Images/xxx(一键脚本已处理)。

环境变量

在运行前,需要在项目根目录创建 .env 文件,或通过环境变量配置以下 API Key:

变量名 说明 获取地址
OPENCODE_API_KEY opencode.ai OCR(mimo-v2.5-free,备选) opencode.ai
ZHIPU_API_KEY 智谱 OCR(GLM-4.1v 视觉模型,默认) GLM-4.1V-Thinking - 智谱AI开放文档
MIMO_API_KEY 小米 MiMo-V2.5-TTS 文本转语音 MiMo-TTS

可选配置(按需):

变量名 说明 默认值
ANTHROPIC_AUTH_TOKEN Claude Agent SDK 认证 Token -
ANTHROPIC_BASE_URL Claude API 代理地址 未设置时走 SDK 内置默认
BOOK_TUTOR_AGENT_PROVIDER Agent 后端:claudecodex claude
BOOK_TUTOR_CLAUDE_CLI Claude CLI 路径(不设置则用 SDK 捆绑版) -
LLM_MODEL 各阶段使用的 LLM 模型 claude-opus-4.7
BOOK_TUTOR_CODEX_BIN Codex CLI 可执行文件路径 -
BOOK_TUTOR_CODEX_SDK_PYTHON Codex SDK Python 路径 -
AGENT_MAX_RETRIES Claude Agent 调用最大重试次数 3
AGENT_RETRY_BACKOFF 重试退避间隔(秒,逗号分隔) 10,30,60

示例 .env

OPENCODE_API_KEY=your_opencode_key_here
ZHIPU_API_KEY=your_zhipu_key_here
MIMO_API_KEY=your_mimo_key_here

用法

只支持 .md 输入。一条命令跑完全流程(OCR → 总结 → 教案 → 知识点 → 教案合集 EPUB):

# 一键跑完全部阶段
python book.py path/to/book.md

# 只跑总结 + 教案(跳过 OCR 和知识点)
python book.py path/to/book.md --skip-ocr --skip-keypoints

# 只跑教案(跳过 OCR 和总结)
python book.py path/to/book.md --skip-ocr --skip-summarize

# 不生成 EPUB(其余全部阶段)
python book.py path/to/book.md --skip-epub

# 单独跑某一步
python add_ocr.py "path/to/book.md"             # 只跑 OCR(默认 zhipu,可 --ocr-provider mimo)
python book_summarize.py "path/to/book.md"       # 只跑总结
python book_teach.py "path/to/book.md"           # 只跑教案
python book_keypoints.py "path/to/book.md"       # 只跑知识点
python book_epub.py "path/to/book.md"            # 教案合集 → EPUB(需 pandoc)

book_epub.py 说明:自动拼接 NN-*.md 教案(跳过 00-全书核心知识点)为一个临时文件,一次性把中文语境的英文直引号修复为中文弯引号(英文专名如 "alone" 保留直引号),再用 pandoc 转换为 EPUB。临时文件在书目录下生成以保证图片路径解析,转换后自动清理,原教案文件不被修改。输出为 <书目录>/<书名>_教案合集.epub,可用 --output 指定路径。book.py 在知识点阶段之后也会自动执行此步骤。

常用参数(多数脚本通用):

  • --seqs 1,3,5 —— 只处理指定章节
  • --start-seq N —— 从第 N 章开始(断点续传)
  • --ratio 0.4 —— 总结压缩比:每章总结 token = 本章原文 × ratio(默认 0.4,范围 0.05~1.0)
  • --skip-ocr —— 跳过图片 OCR 描述
  • --skip-summarize / --skip-teach / --skip-keypoints / --skip-epub —— 跳过对应阶段
  • --ocr-provider zhipu|mimo —— OCR 服务商(默认 zhipu,opencode 作为备选)
  • --ocr-concurrency N —— OCR 最大并发数(默认 5)
  • --ocr-retries N —— OCR 每张图片重试次数(默认 3)

各脚本的完整参数见文件顶部 docstring 或 python <script>.py -h

参考来源

  • prompts/book_breakdown_lite.md(脚本实际加载的版本)改写自 prompts/book_breakdown.md,后者基于 lijigang/ljg-skills 中的 skill 修改而来。
  • 代码部分借鉴forestpeas/book-tutor修改而来。

About

一杯书籍的浓缩咖啡,在保持原意的情况下压缩知识类书籍的字数,让你以更少的时间体验到几乎不变的阅读感受。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages