把书课程化并作为「专业教师」逐课带人类学完:课前备课→详尽费曼教学→练习闸门→间隔复习→背诵作业→自进化。默认处理使用者已提供的本地书(PDF/EPUB/DJVU/MOBI/AZW/DOCX/TXT/MD/CBZ);**当使用者无本地书且明确授权时,可代为联网检索公开来源并用项目抓取工具获取**。当用户说「学这本书 <本地路径> / 把这本 PDF 课程化 / 教我这本书 / 继续学 <书> / 复习 <书> / 考考我 <书> / 帮我学 X」时调用。教学引擎已单包自包含,无需再加载其他技能。
文档
book-to-learn
试用把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。
它能做什么
把任意一本书分解成日常学习任务,每日推送一张知识点卡片。 支持中英文书籍(PDF/DOCX/HTML/EPUB/TXT),拆解为知识点后每日推送。 英文书自动联网核对术语并实时翻译;中文书无翻译环节。 四种推送模板:PDF标准卡片、PDF大字闪卡、飞书交互卡片、飞书卡片+图片补充。 提示词与数据分离,可自由变体为单词学习、诗词海报、新闻讲解等任务。
技能文档
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,不硬编码
相关技能
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 应用、纯文字摘要。