book-report skill
用途
输入一个书名(或书名+作者),输出两件套:
- HTML 报告(
reports/<书名>-<日期>.html)— 给你"看完了解这本书"用 - 弹药库(
reports/chat-弹药库-<书名>-v1.md)— 给你"跟人聊能现成调出"用
适用范围
擅长:
- 中文经典/中国现当代文学(《平凡的世界》《活着》《红楼梦》《三体》等)
- 维基百科 + 百度百科 + 知乎 都有条目的大众读物
- 茅盾文学奖/鲁迅文学奖/诺贝尔文学奖等获奖作品
不擅长(会降级告知用户):
- 冷门/学术/外文原版(web 抓不全)
- 用户传了 PDF 想要"逐字原文"(当前不支持 PDF 解析,仅做 web 兜底)
- 网络小说/未出版手稿(无结构化数据源)
数据源策略(保守三件套)
| 源 | 用途 | 备注 | |---|---|---| | 百度百科 | 主题/情节/人物/获奖 | 必有 | | 维基百科(zh) | 主题/情节/作者 | 必有 | | 知乎 | 评价/争议/读者金句 | 选有 |
不抓:
- 豆瓣(反爬严,2024 后不稳)
- 微信读书评论(要登录态)
- 起点/晋江/番茄等网络小说站
流程(每本书跑 5-7 步)
- 抓源数据(
lib/fetch.py)— 3 个源并行 - 结构化抽取(LLM 处理)— 从源数据中提取 9 个固定字段
- 渲染 HTML(
lib/render.py)— 套templates/report.html.j2 - 渲染弹药库(
lib/render.py)— 套templates/chat-kit.md.j2 - 浏览器自检 — 打开 HTML,看 Mermaid 渲染、字号、可读性
- 信息可信度扫一遍 — 按本 skill 的"不展示原则"清理不确定信息
- 交付 — 告知用户两个文件路径
9 个固定字段(必抽齐)
| # | 字段 | 来源 | |---|---|---| | 1 | book_title | 书名 | | 2 | book_summary | 一句话总结 | | 3 | theme | 核心主题 + 三部/章节梗概 | | 4 | characters | 主要人物(4-10 个) | | 5 | relationships | 人物关系(Mermaid flowchart) | | 6 | awards | 获奖情况 + 评语要点 | | 7 | author | 作者生平 + 创作背景 | | 8 | other_works | 作者其他作品(长/中/短/杂文) | | 9 | quotes | 5-10 句金句(必须标注"未原文核对") |
弹药库必含 4 块
- 3 句开场(反常识/代际/生活 三选一)
- 6 个故事(按"画面 > 节奏 > 共情 > 灰度 > 作者 > 销量"排序)
- 5 个反问接住("讲什么"/vs 经典书/过时吗/为什么火/作者怎样)
- 3 句收尾(记一个人 / 戳一句 / 留尾巴)
「不展示」原则(用户强偏好)
凡是"凭印象写"的细节,没有 100% 把握就:
- 改成模糊表述("几章"/"部分支线"/"经典一版")
- 或直接删除
- 绝对不展示具体集数/章数/演员名/排名/销量/未核对的"原话"
例外:维基/百度已确认的事实(生卒年、奖项年份、书名/作者名)保留具体数字。
质量自检清单(每本必走)
□ 9 个字段是否都填了?缺哪几个要在报告里标"未抓到"
□ Mermaid 关系图能否渲染?(必打开看一次)
□ 金句是否全部标"未原文核对"?
□ 是否有"凭印象写的具体数字"?有就改/删
□ 弹药库 4 块是否齐全?
□ 文件路径是否告知用户?
失败模式(必须老实告诉用户)
- 源数据缺失 → 报告里留 "未抓到" 标签,不编造
- 关系图超过 25 节点 → 拆成 2 张
- 抓取超时 → 重试 2 次后放弃,告知用户
- 维基无条目(如冷门书) → 改用百度 + 知乎 双源 + 提示用户数据稀薄
微信扫一扫