把书课程化并作为「专业教师」逐课带人类学完:课前备课→详尽费曼教学→练习闸门→间隔复习→背诵作业→自进化。默认处理使用者已提供的本地书(PDF/EPUB/DJVU/MOBI/AZW/DOCX/TXT/MD/CBZ);**当使用者无本地书且明确授权时,可代为联网检索公开来源并用项目抓取工具获取**。当用户说「学这本书 <本地路径> / 把这本 PDF 课程化 / 教我这本书 / 继续学 <书> / 复习 <书> / 考考我 <书> / 帮我学 X」时调用。教学引擎已单包自包含,无需再加载其他技能。
Documents
book-to-learn
Try it把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。
What it does
把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。
The skill document
book-to-learn — 把书分解成日常学习任务
通用 skill:把任意一本书拆解为知识点卡片,每日推送一张。
⛔ 核心规则
- 两阶段:拆书(一次性)+ 推送(每次调用)。每本书先拆书生成数据,之后每日推送复用。
- 进度仅在成功后记录:任一环节失败都不更新 progress.json,下次重推同一张。
- 中英文自适应:英文书联网核对术语 + 实时翻译;中文书跳过翻译。
- 超链接文字化:IMA 不能点击链接,PDF 中 URL 必须纯文字显示可复制。
- 失败必通知:任何失败(提取/翻译/PDF/上传/飞书)都通过 webhook 通知,且不计进度。
- 首次配置:无 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
输出该书的定时任务执行提示词,用户配置到定时任务软件。
阶段二:推送(每次调用执行一次)
英文书流程(需翻译)
-
取载荷:
cd $SD && python3 push_card.py next --book --force > /tmp/b2l_payload.jsonWindows 平台
/tmp/不存在,改用%TEMP%或脚本输出建议的临时目录。 解析输出。skip=true 则结束。 -
联网核对术语:对 terminology 数组每个术语,使用当前环境中可用的联网搜索工具查权威中文译法,汇总 terminologyZh。必须联网核对,不可凭记忆。
- 优先使用环境原生搜索工具(如 WebSearch、SearXNG skill 等)
- 若环境有多个搜索工具,任选可用者
- 若环境无搜索工具,告知用户需配置搜索能力后结束
-
实时翻译:coreIdea/explanation/quote/application 译为中文。explanation 按换行分段对应;术语首次出现「中文(英文)」;explanation/application 含 markdown 链接的保留 url 仅译 text;翻译 relatedLinks 标题生成 relatedLinksZh;同时翻译 topic(知识点标题)为 topicZh。注意:翻译后的中文文本必须使用中文双引号「」或 ""(U+201C/U+201D),不得使用英文直引号 ""。若不确定 Unicode 输入方式,写入 JSON 时会由 normalize_quotes.py 自动修正。
-
写翻译 JSON 到临时目录的
b2l_zh.json(含 topicZh/coreIdeaZh/explanationZh/quoteZh/applicationZh/terminologyZh/relatedLinksZh/note)。 -
生成 PDF(文件名末尾带知识点中文名):
cd $SD && python3 gen_card_pdf.py --payload --zh --out "<临时目录>/_$(date +%F)__.pdf" --language enPDF 标题区显示中英对照(中文在上,英文小字在下)。`` 用翻译后的中文名替换(去除文件名非法字符)。
-
推送(按 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)
- IMA:
-
记录进度(仅成功后):
python3 push_card.py mark --book success -
汇报:第 X/N 张、主题、术语核对要点。
中文书流程(无翻译)
- 取载荷:同上。
- 跳过翻译(步骤 2-4 不执行)。
- 生成 PDF(文件名末尾带知识点中文名):
中文书的 topic 本身即中文名,直接用于文件名。cd $SD && python3 gen_card_pdf.py --payload --out "<临时目录>/_$(date +%F)__.pdf" --language zh - 推送:同上(飞书则
--language zh,不传 --zh)。 - 记录进度:同上。
- 汇报:第 X/N 张、主题。
飞书推送方案说明
方案一:Webhook(send_feishu.py)
构造飞书 interactive 卡片 JSON,POST 到 webhook URL。
卡片结构:
- header:蓝色标题「书名 · 主题」(禁止使用 emoji,系统不兼容)
- elements:进度+章节 → 术语表(markdown表格) → 内容分栏(中英对照/纯中文) → 配图 → 相关链接 → 来源(note)
图片处理(飞书卡片图片需 URL 或 image_key):
- base64 data URI 图片 → 上传 catbox.moe(免费无需注册)→ 获取 URL →
{"tag":"img","url":"..."} - 图片 URL 直接用
{"tag":"img","url":"..."} - 上传失败 → 文字提示「配图见来源链接」
链接处理:飞书卡片 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_ID、FEISHU_APP_SECRET、FEISHU_CHAT_ID。
创建飞书自建应用:
- 访问 https://open.feishu.cn/app 创建企业自建应用
- 获取 App ID 和 App Secret
- 开通权限:
im:message(发消息)、im:message:send_as_bot(以机器人身份发消息)、im:resource(上传图片/文件) - 将机器人添加到目标群聊,获取 chat_id(可通过
GET /im/v1/chatsAPI 获取)
发送模式:
- 交互式卡片:
--payload [--zh ](与 webhook 方式卡片结构相同) - 独立图片:
--image(直接上传 PNG 到飞书,生成 image_key 后发送) - 独立文件:
--file(上传 PDF 等文件到飞书,生成 file_key 后发送)
图片处理:通过 Open API 原生上传,无需第三方图床。base64 data URI 会先写入临时文件再上传。
优势:支持多媒体内容直发、不依赖第三方图床、可发个人/群聊。
推送模板系统
每本书在 config.json 的 template 字段选择推送模板。首次配置时由 AI 引导用户选择。
可用模板
| 模板 ID | 名称 | 脚本 | 适用场景 | 设计规范 |
|---|---|---|---|---|
pdf-standard | PDF 标准卡片 | gen_card_pdf.py | 工具书、长文知识点 | A4,正文 18px/英文 15px,中英对照,多字小字 |
pdf-large | PDF 大字卡片 | 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.py | PDF 标准卡片生成(中英文自适应,超链接文字化) |
gen_card_pdf_large.py | PDF 大字卡片生成(A4,正文≥18px,标题42px) |
gen_image.py | 补充图片生成(1:1/1:4,HTML→PDF→PNG) |
upload_ima.py | IMA 知识库上传(动态查找 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,不硬编码
Related skills
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...
AI 书童,辅助阅读、学习、考试、写作与信息收集。当用户说"书童"、"伴读"、"背书"、"考我"、"查典故"、"整理书架"、"复习"、"备考"、"誊抄"、"代写"、"找书"、"学术动态"、"读书笔记"、"阅读计划"、"知识管理"、"晒书"、"盘点笔记"、"整理知识库"、"补书"、"修补笔记"、"完善笔记"、"抄书...
拆书家技能。输入一本书(PDF/EPUB/TXT/Markdown/书名/链接),输出结构化拆书笔记(总概括+核心提炼+逐章拆解+行动清单),并可一键生成美观的可视化 HTML 拆书报告。适合读书笔记、知识提炼、快速掌握一本书、做课程分享、写书评等场景。触发词:拆书、读书笔记、这本书讲了什么、帮我读一本书、书摘提炼、book breakdown、读书报告。
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...
把一本书 / 一个主题做成「单文件 HTML 翻阅式卡片工具书」的硬编码工作流。 当用户要"把 XX 做成精美读书笔记 / 工具书网页、单文件 HTML、可左右翻的卡片书、 方法论口袋书、读书笔记工具书"时调用。 硬编码资产:双模板(基础/themed 深色多主题)+ 生成脚本(JSON→HTML)+ 自检脚本。 产出:米色纸感 + 衬线标题 + 书签色带 + 图书馆 hero 渐变蒙版 + 左右翻页(每主题一张卡) 的响应式单文件 HTML,无外部依赖(除可选 hero 图,离线降级)、手机不裁切。 不适用于:多页长文报告、需要后端/路由的 Web 应用、纯文字摘要。