文档

book-to-learn

试用

把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。

它能做什么

把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。

技能文档

book-to-learn — 把书分解成日常学习任务

通用 skill:把任意一本书拆解为知识点卡片,每日推送一张。

⛔ 核心规则

  1. 两阶段:拆书(一次性)+ 推送(每次调用)。每本书先拆书生成数据,之后每日推送复用。
  2. 进度仅在成功后记录:任一环节失败都不更新 progress.json,下次重推同一张。
  3. 中英文自适应:英文书联网核对术语 + 实时翻译;中文书跳过翻译。
  4. 超链接文字化:IMA 不能点击链接,PDF 中 URL 必须纯文字显示可复制。
  5. 失败必通知:任何失败(提取/翻译/PDF/上传/飞书)都通过 webhook 通知,且不计进度。
  6. 首次配置:无 config.json 时引导用户配置(IMA 凭证/推送目标/通知 webhook/语言/粒度)。

依赖安装(首次使用前)

1. Python 依赖

sudo pip3 install weasyprint python-docx beautifulsoup4 ebooklib pypdf pdfminer.six
# weasyprint 生成 PDF;其余为多格式提取器。沙箱已预装大部分。

2. IMA skill(若用 IMA 推送)

cd /tmp && curl -sL -o ima-skills.zip "https://app-dl.ima.qq.com/skills/ima-skills-1.1.7.zip"
mkdir -p ima-skills-extracted && unzip -o ima-skills.zip -d ima-skills-extracted >/dev/null 2>&1
# 安装到你的平台对应的 skills 目录(任选一个):
cp -r ima-skills-extracted/ima-skill ~/.codebuddy/skills/ima-skill   # CodeBuddy
# 或: cp -r ima-skills-extracted/ima-skill ~/.openclaw/skills/ima-skill   # OpenClaw
# 或: cp -r ima-skills-extracted/ima-skill ~/.claude/skills/ima-skill     # Claude Code
# 或: cp -r ima-skills-extracted/ima-skill ~/.agents/skills/ima-skill     # Amp / 跨 agent

upload_ima.py 会自动在 ~/.codebuddy~/.openclaw~/.claude~/.copilot~/.agents 等路径下查找 ima-skill,也可用环境变量 IMA_SKILL_DIR 显式指定。 API Key 获取:https://ima.qq.com/agent-interface

mkdir -p ~/.config/ima
echo "" > ~/.config/ima/client_id
printf '%s' "" > ~/.config/ima/api_key

3. Node.js 注意

沙箱中 node 可能被 bun shim 劫持。所有 node 调用用 /usr/bin/node 并清除 NODE_OPTIONS。upload_ima.py 已内置。


阶段一:拆书(首次对每本书执行)

SKILL_DIR:本 skill 所在目录。各平台路径不同(CodeBuddy: ~/.codebuddy/skills/book-to-learn,OpenClaw: ~/.openclaw/skills/book-to-learn,Claude Code: ~/.claude/skills/book-to-learn 等)。脚本内已用 os.path.dirname(os.path.abspath(__file__)) 自动定位,无需手动指定。下面 $SD 代表 SKILL_DIR。

Step 1:提取文本

cd $SD && python3 book_setup.py extract <书文件路径> --slug 

slug = 书的 URL 友好标识(如 designing-data-intensive-apps)。输出 books//full_text.txt

Step 2:初始化配置

cd $SD && python3 book_setup.py init  --title "书名" --lang  --granularity 

生成 books//config.json 骨架。然后与用户确认并填写以下空字段:

  • language:zh(中文书,无翻译)/ en(英文书,需翻译)
  • pushMethod:ima(默认)/ feishu(webhook)/ feishu-api(飞书 Open API,支持图片/文件直发)
  • ima.kbName / ima.folderName:IMA 知识库名称和文件夹(用 list-kb 命令列出知识库让用户选)
  • feishu.webhook:飞书 webhook(若选 feishu)
  • feishuApi.appId / feishuApi.appSecret / feishuApi.chatId:飞书 Open API 凭证和目标会话(若选 feishu-api)
  • notifyWebhook:失败通知 webhook(必填,任何失败都发此通知)

确认推送方案:向用户说明三种方案并让其选择:

  • IMA PDF(默认):上传卡片式 PDF 到 IMA 知识库文件夹。优势:可检索、配图内嵌、离线可读。适合知识库积累。
  • 飞书 webhook(备选):发送交互式卡片消息到飞书 webhook。优势:即时通知、交互式。限制:图片需上传图床(catbox.moe)获取 URL。适合即时学习提醒。
  • 飞书 Open API(推荐多媒体):通过 App ID + App Secret 直接发送到指定飞书会话。优势:支持原生图片/文件发送(无需图床)、可发个人/群聊。需在飞书开放平台创建自建应用。适合需要发送图片卡片的场景。

Step 3:AI 分析结构并生成大纲

读取 books//full_text.txt(大书用 offset/limit 分段读,先读前 8000 字符识别标题/作者/章节/目录)。 按 config.granularity 拆解为知识点,输出大纲 JSON 供用户确认:

[{"id":"ch01-01","chapter":"第一章","topic":"主题"}, ...]

必须等用户确认或调整大纲后,再进入 Step 4。

Step 4:生成完整 items.json

确认大纲后,为每个知识点生成完整对象(读取 full_text.txt 对应章节内容):

{
  "id": "ch01-01",
  "chapter": "所属章节",
  "topic": "知识点主题",
  "coreIdea": "核心观点(原文语言)",
  "explanation": "详细解释(原文语言,含 markdown 链接 [text](url))",
  "quote": "金句(若有)",
  "application": "应用场景(若有)",
  "image": "原书配图链接(若有)",
  "relatedLinks": [{"href":"url","text":"标题"}],
  "terminology": ["核心术语"],
  "link": "来源链接"
}

写入 books//items.json

Step 5:生成卡片和索引

cd $SD && python3 book_setup.py gen-cards --slug 
cd $SD && python3 book_setup.py gen-index --slug 

Step 6:下载内嵌配图

cd $SD && python3 book_setup.py download-imgs --slug 

下载 items.json 中的图片 URL,转为 base64 data URI 内嵌。

Step 7:输出定时任务提示词

cd $SD && python3 book_setup.py prompt --slug 

输出该书的定时任务执行提示词,用户配置到定时任务软件。


阶段二:推送(每次调用执行一次)

英文书流程(需翻译)

  1. 取载荷

    cd $SD && python3 push_card.py next --book  --force > /tmp/b2l_payload.json
    

    Windows 平台 /tmp/ 不存在,改用 %TEMP% 或脚本输出建议的临时目录。 解析输出。skip=true 则结束。

  2. 联网核对术语:对 terminology 数组每个术语,使用当前环境中可用的联网搜索工具查权威中文译法,汇总 terminologyZh。必须联网核对,不可凭记忆。

    • 优先使用环境原生搜索工具(如 WebSearch、SearXNG skill 等)
    • 若环境有多个搜索工具,任选可用者
    • 若环境无搜索工具,告知用户需配置搜索能力后结束
  3. 实时翻译:coreIdea/explanation/quote/application 译为中文。explanation 按换行分段对应;术语首次出现「中文(英文)」;explanation/application 含 markdown 链接的保留 url 仅译 text;翻译 relatedLinks 标题生成 relatedLinksZh;同时翻译 topic(知识点标题)为 topicZh注意:翻译后的中文文本必须使用中文双引号「」或 ""(U+201C/U+201D),不得使用英文直引号 ""。若不确定 Unicode 输入方式,写入 JSON 时会由 normalize_quotes.py 自动修正。

  4. 写翻译 JSON 到临时目录的 b2l_zh.json(含 topicZh/coreIdeaZh/explanationZh/quoteZh/applicationZh/terminologyZh/relatedLinksZh/note)。

  5. 生成 PDF(文件名末尾带知识点中文名):

    cd $SD && python3 gen_card_pdf.py --payload  --zh  --out "<临时目录>/_$(date +%F)__.pdf" --language en
    

    PDF 标题区显示中英对照(中文在上,英文小字在下)。`` 用翻译后的中文名替换(去除文件名非法字符)。

  6. 推送(按 config.pushMethod):

    • IMA:python3 upload_ima.py --file "" --config books//config.json --book-dir books/ 退出码 0=成功;2=密钥失效(已发通知)不计进度结束;1=其他错误不更新进度结束。
    • 飞书 webhook:python3 send_feishu.py --payload /tmp/b2l_payload.json --zh /tmp/b2l_zh.json --config books//config.json --language en
    • 飞书 API:python3 send_feishu_api.py --payload /tmp/b2l_payload.json --zh /tmp/b2l_zh.json --config books//config.json --language en (如需同时发送图片卡片,追加:python3 send_feishu_api.py --image --config books//config.json
  7. 记录进度(仅成功后):python3 push_card.py mark --book success

  8. 汇报:第 X/N 张、主题、术语核对要点。

中文书流程(无翻译)

  1. 取载荷:同上。
  2. 跳过翻译(步骤 2-4 不执行)。
  3. 生成 PDF(文件名末尾带知识点中文名):
    cd $SD && python3 gen_card_pdf.py --payload  --out "<临时目录>/_$(date +%F)__.pdf" --language zh
    
    中文书的 topic 本身即中文名,直接用于文件名。
  4. 推送:同上(飞书则 --language zh,不传 --zh)。
  5. 记录进度:同上。
  6. 汇报:第 X/N 张、主题。

飞书推送方案说明

方案一:Webhook(send_feishu.py)

构造飞书 interactive 卡片 JSON,POST 到 webhook URL。

卡片结构

  • header:蓝色标题「书名 · 主题」(禁止使用 emoji,系统不兼容)
  • elements:进度+章节 → 术语表(markdown表格) → 内容分栏(中英对照/纯中文) → 配图 → 相关链接 → 来源(note)

图片处理(飞书卡片图片需 URL 或 image_key):

  1. base64 data URI 图片 → 上传 catbox.moe(免费无需注册)→ 获取 URL → {"tag":"img","url":"..."}
  2. 图片 URL 直接用 {"tag":"img","url":"..."}
  3. 上传失败 → 文字提示「配图见来源链接」

链接处理:飞书卡片 markdown 支持可点击链接,但为兼容性仍附纯文字 URL。

方案二:Open API(send_feishu_api.py)

通过飞书开放平台 App ID + App Secret 直接发送消息到指定会话,支持原生图片和文件。

配置(config.json 中):

{
  "pushMethod": "feishu-api",
  "feishuApi": {
    "appId": "cli_xxxxx",
    "appSecret": "xxxxx",
    "chatId": "oc_xxxxx"
  }
}

也可通过环境变量配置:FEISHU_APP_IDFEISHU_APP_SECRETFEISHU_CHAT_ID

创建飞书自建应用

  1. 访问 https://open.feishu.cn/app 创建企业自建应用
  2. 获取 App ID 和 App Secret
  3. 开通权限:im:message(发消息)、im:message:send_as_bot(以机器人身份发消息)、im:resource(上传图片/文件)
  4. 将机器人添加到目标群聊,获取 chat_id(可通过 GET /im/v1/chats API 获取)

发送模式

  • 交互式卡片:--payload [--zh ](与 webhook 方式卡片结构相同)
  • 独立图片:--image (直接上传 PNG 到飞书,生成 image_key 后发送)
  • 独立文件:--file (上传 PDF 等文件到飞书,生成 file_key 后发送)

图片处理:通过 Open API 原生上传,无需第三方图床。base64 data URI 会先写入临时文件再上传。

优势:支持多媒体内容直发、不依赖第三方图床、可发个人/群聊。


推送模板系统

每本书在 config.json 的 template 字段选择推送模板。首次配置时由 AI 引导用户选择。

可用模板

模板 ID名称脚本适用场景设计规范
pdf-standardPDF 标准卡片gen_card_pdf.py工具书、长文知识点A4,正文 18px/英文 15px,中英对照,多字小字
pdf-largePDF 大字卡片gen_card_pdf_large.py单词、术语、短知识点A4,标题 42px,正文≥18px,超大字号,适合远距离/打印
feishu-card飞书交互卡片send_feishu.py即时学习提醒飞书 interactive 卡片,markdown 排版,图床上传
feishu-card+image飞书卡片+图片补充send_feishu.py + gen_image.py知识点可视化飞书卡片 + 附带 1:1 或 1:4 图片

设计风格规范

配色(Google Material Design 色系,所有模板统一):绿(#1e8e3e) 核心观点 / 蓝(#1a73e8) 解释、标题栏 / 紫(#7b1fa2) 金句 / 橙(#f9ab00) 应用、术语 / 红(#d93025) 术语标签、错误状态

字体栈(跨平台):微软雅黑 → 苹方 → 冬青黑 → Noto CJK → 思源黑体 → 文泉驿 → 宋体

超链接:所有模板中 URL 均以纯文字显示(IMA 不能点击),格式为「标题 + 换行 + 完整 URL」

图片模板设计(gen_image.py):

  • 1:1 正方形(750×750px):精简内容,适合飞书卡片内嵌
  • 1:4 长图(750×3000px):完整知识点,适合长文滚动阅读
  • 只作为飞书卡片补充,不能单独以图片形式推送
  • 生成方式:HTML → weasyprint PDF → pdf2image PNG(依赖 pdf2image + poppler)
  • 设计参考:react-paper-memo 大字号可打印卡片理念

模板选择建议

  • 英文工具书/专业书pdf-standard(中英对照,多字详解)
  • 英语单词/术语学习pdf-large(大字号,一眼看清)
  • 日常学习提醒feishu-card(即时推送到手机)
  • 知识点可视化feishu-card+image(卡片+配图长图)

配置确认与进度文件

配置确认(summary 命令)

每本书设置完成后,运行 python3 book_setup.py summary 输出详细配置汇报,包括:书名、语言、拆解粒度、卡片转化情况(总数/配图/链接/术语)、推送模板、推送通道、IMA目标/飞书webhook、失败通知webhook、文件清单、测试推送设置。用户确认后再生成定时任务提示词。

daily-progress.md

每本书的 books//daily-progress.md 记录学习进度。每次推送成功后追加一行(不替换已有记录):

| 日期 | 序号 | 卡片ID | 主题 | 推送方式 | 状态 |
|------|------|--------|------|----------|------|
| 2026-06-30 | 1/118 | ch01-01 | 西方音乐记谱法导论 | ima | 成功 |

定时任务提示词中已包含 log-progress 步骤,推送成功后自动追加记录。


文件说明

文件作用
SKILL.md本指令
extract_text.py多格式文本提取(PDF/DOCX/HTML/EPUB/TXT/RTF,带回退链)
book_setup.py拆书编排(extract/init/gen-cards/gen-index/download-imgs/summary/log-progress/prompt)
push_card.py推送进度管理(status/next/mark/weekday/list-books,--book 参数化)
gen_card_pdf.pyPDF 标准卡片生成(中英文自适应,超链接文字化)
gen_card_pdf_large.pyPDF 大字卡片生成(A4,正文≥18px,标题42px)
gen_image.py补充图片生成(1:1/1:4,HTML→PDF→PNG)
upload_ima.pyIMA 知识库上传(动态查找 ima-skill,密钥失效检测)
send_feishu.py飞书 webhook 卡片推送(图床上传,中英文自适应)
send_feishu_api.py飞书 Open API 推送(支持原生图片/文件直发,无需图床)
notify_failure.py通用失败通知(参数化 webhook)
books//每本书独立数据(config/items/index/progress/daily-progress/cards/images/full_text)

辅助命令

  • 查看所有书:cd $SD && python3 push_card.py list-books
  • 查看进度:python3 push_card.py status --book
  • 配置确认:python3 book_setup.py summary
  • 手动重推:python3 push_card.py next --book --force
  • 重置进度:编辑 books//progress.json,置 null 清空 history
  • 输出定时提示词:python3 book_setup.py prompt
  • 记录进度到 md:python3 book_setup.py log-progress --card-id

注意事项

  • 进度是唯一凭证,勿手动误改 progress.json
  • 失败绝不计进度,确保下次重推同一张
  • PDF 文件名日期格式统一 YYYY-MM-DD
  • 英文书翻译质量优先:术语必须联网核对
  • 禁止 emoji:HTML→PDF→图片流程中禁止使用任何 emoji 或特殊符号(weasyprint 无法渲染)。所有脚本中的 emoji 已替换为纯文字标记(如 [OK][警告][未设置])。
  • 中文引号规范:所有脚本内置 normalize_quotes.py,自动将英文直引号 "" 转换为中文双引号 ""(U+201C/U+201D)。即使 AI 翻译输出的 JSON 含英文引号,PDF 和飞书卡片最终输出也会被自动修正。中文书的 items.json 中若含英文引号,同样会被自动修正。
  • 图片生成后自动验证gen_image.py 生成 PNG 后会自动检查图片尺寸和内容是否正常,验证失败时退出码为 2。
  • 假设不同用户使用:所有配置在 config.json,不硬编码

相关技能

把书课程化并作为「专业教师」逐课带人类学完:课前备课→详尽费曼教学→练习闸门→间隔复习→背诵作业→自进化。默认处理使用者已提供的本地书(PDF/EPUB/DJVU/MOBI/AZW/DOCX/TXT/MD/CBZ);**当使用者无本地书且明确授权时,可代为联网检索公开来源并用项目抓取工具获取**。当用户说「学这本书 <本地路径> / 把这本 PDF 课程化 / 教我这本书 / 继续学 <书> / 复习 <书> / 考考我 <书> / 帮我学 X」时调用。教学引擎已单包自包含,无需再加载其他技能。

1 次安装2 星标

This skill should be used when the user provides an electronic book (PDF, EPUB, TXT, MD) and wants to automatically extract knowledge, analyze structure, and...

3 次安装

AI 书童,辅助阅读、学习、考试、写作与信息收集。当用户说"书童"、"伴读"、"背书"、"考我"、"查典故"、"整理书架"、"复习"、"备考"、"誊抄"、"代写"、"找书"、"学术动态"、"读书笔记"、"阅读计划"、"知识管理"、"晒书"、"盘点笔记"、"整理知识库"、"补书"、"修补笔记"、"完善笔记"、"抄书...

15 次安装1 星标

拆书家技能。输入一本书(PDF/EPUB/TXT/Markdown/书名/链接),输出结构化拆书笔记(总概括+核心提炼+逐章拆解+行动清单),并可一键生成美观的可视化 HTML 拆书报告。适合读书笔记、知识提炼、快速掌握一本书、做课程分享、写书评等场景。触发词:拆书、读书笔记、这本书讲了什么、帮我读一本书、书摘提炼、book breakdown、读书报告。

2 次安装1 星标

Book-to-writing-material skill for Chinese content creation. Use when Codex needs to break down a book, chapter, excerpt, reading note, or book link into reu...

21 次安装1 星标

把一本书 / 一个主题做成「单文件 HTML 翻阅式卡片工具书」的硬编码工作流。 当用户要"把 XX 做成精美读书笔记 / 工具书网页、单文件 HTML、可左右翻的卡片书、 方法论口袋书、读书笔记工具书"时调用。 硬编码资产:双模板(基础/themed 深色多主题)+ 生成脚本(JSON→HTML)+ 自检脚本。 产出:米色纸感 + 衬线标题 + 书签色带 + 图书馆 hero 渐变蒙版 + 左右翻页(每主题一张卡) 的响应式单文件 HTML,无外部依赖(除可选 hero 图,离线降级)、手机不裁切。 不适用于:多页长文报告、需要后端/路由的 Web 应用、纯文字摘要。