← 回到业余作品

Distill

你自己拥有的书,逐章摘要,放在一个记得你读到哪里的阅读器里。

Flask, SQLite, Claude Code, vanilla JS

已开源2026 · 网页 · Kindle访问 ↗

一个私人阅读应用,摘要都来自你自己的电子书。一组 Claude Code 智能体逐章读完整本书,阅读器提供进度同步、朗读和 Kindle 模式。

视频里用的是《国富论》,一本公版书,在我书库的一份本地副本上录制。线上应用是私人的,需要登录。

问题

值得读的书大多很长,而我读的书大多是自己已经买下的电子书。一份可信的摘要必须来自书本身:真实的章节、书里自己的例子和数字,不掺杂任何别处记来的东西。通用的摘要服务做不到这一点,也覆盖不了我自己书架上的书。

我原本就在给自己的书做逐章摘要,但它们只是一个个独立网页:在 Kindle 上很难读,不会记住读到哪里,也看不出哪些书读了一半。

一本书是怎么进来的

一切都从你自己拥有的文件开始。Distill 从不凭记忆写摘要:没有电子书,流水线就停下来要文件。

  1. 拿到真实文本。 PDF、EPUB,或者先用 Calibre 转成 EPUB 的 Kindle 格式。流水线找到真实的目录,算出印刷页码和文件页码之间的偏移,并在第二个章节上再核对一次。
  2. 映射章节。 书自己目录里的每一章,在 Distill 里都是单独的一章;书自己的分部原样保留。每章的长度都会记录下来,因为它决定了这一章的摘要该写多长。
  3. 并行阅读。 整本书切成每块 80–150 页,每块由一个 Claude Code 智能体完整读完,给每一章写摘要,最后附上要点。
  4. 用一套评分标准把关。 摘要长度随章节长度变化:取章节长度的 15%,英文控制在 600 到 1,200 词之间,中文在 950 到 1,900 字之间。摘要必须写出这一章具体的论点和证据,而不是“本章讨论了……”。书里的插图会一并带上,网上的图片需要明确开启,来自维基共享资源等来源。最后,由一个全新的独立智能体给整本书打分,并检查它读起来是否前后连贯。
  5. 导入。 在我自己的电脑上运行一条命令,就把书写进 Distill 的数据库。服务器从不运行语言模型,也从不接触电子书文件。

这些摘要始终是私人的:来自我自己拥有的书,只供我自己阅读,需要登录才能看。

阅读

技术实现

最难的部分

Kindle。它的浏览器是一个很旧的 WebKit:不支持现代 JavaScript,也不支持 WebP 和 AVIF 图片。Kindle 页面在服务器上渲染,只配一个老式的小脚本;图片存成 JPEG 或 PNG;操作用 Kindle 自己的手势;控件比电脑上大 2.5 倍,在墨水屏上才看得清。