AI reads books:逐页 PDF 知识提取与递进式摘要脚本(read_books.py)
这是一个由 echohive42 开源在 GitHub 的 Python 脚本项目,核心文件 read_books.py 会逐页读取 PDF 书籍,调用 OpenAI API 提取知识点并写入持久化知识库,按设定页数间隔生成阶段性摘要,全部处理完成后生成最终 Markdown 总结;支持断点续跑、内容过滤(跳过目录、索引页)和测试模式。
社区作者 · zZz
它解决什么问题
项目定位:AI reads books: Page-by-Page PDF Knowledge Extractor & Summarizer。read_books.py 对 PDF 书籍做智能的逐页分析,按页提取知识点,并在指定间隔上生成递进式摘要。它逐页单独处理,既保证单页内容理解的细致度,又维持整本书的上下文连贯性。
主要功能(来源列出):
- 自动化 PDF 书籍分析与知识提取;
- 由 AI 完成内容理解与摘要;
- 基于间隔(interval)的阶段进度摘要;
- 持久化知识库存储;
- Markdown 格式摘要输出;
- 终端彩色输出,便于查看;
- 借助已有知识库实现续跑(resume)能力;
- 可配置的分析间隔与测试模式;
- 智能内容过滤(跳过目录、索引页等);
- 输出目录结构化管理。
工作流程(How It Works):1) Setup:建立所需目录,并把 PDF 放到正确位置;2) Load Knowledge Base:如已有知识库则加载;3) Process Pages:逐页处理 PDF,提取知识点并更新知识库;4) Generate Summaries:根据 ANALYSIS_INTERVAL 生成间隔摘要,全部页处理完后生成最终摘要;5) Save Results:将知识库与摘要分别保存到对应文件。
代码结构(来源说明):PageContent 是一个 Pydantic 模型,表示 OpenAI API 对页面内容分析的响应结构,含 has_content(布尔,标识该页是否有相关内容)与 knowledge(该页提取出的知识点列表)两个字段。
主要函数包括:load_or_create_knowledge_base()(存在则加载,否则返回空字典)、save_knowledge_base(knowledge_base)(保存知识库并打印保存条目数)、process_page(client, page_text, current_knowledge, page_num)(把单页文本发给 OpenAI API 分析,更新知识库并写盘)、load_existing_knowledge()(加载已有知识库,否则返回空列表)、analyze_knowledge_base(client, knowledge_base)(用 OpenAI API 对整体知识库生成综合摘要,返回 Markdown)、setup_directories()(建立目录、清理先前生成的文件、确保 PDF 位于正确位置)、save_summary(summary, is_final=False)(按最终/间隔摘要命名规则写 Markdown)、print_instructions()(打印使用说明与配置项)、main()(编排整个流程)。
输出产物:book_analysis/knowledge_bases/ 下的 JSON 知识库文件;book_analysis/summaries/ 下的间隔摘要与最终 Markdown 摘要;book_analysis/pdfs/ 下的 PDF 副本。
可配置常量:PDF_NAME、BASE_DIR、PDF_DIR、KNOWLEDGE_DIR、SUMMARIES_DIR、PDF_PATH、OUTPUT_PATH、ANALYSIS_INTERVAL(每 N 页生成一次间隔分析,设为 None 则跳过)、MODEL(处理页面所用模型)、ANALYSIS_MODEL(生成分析所用模型)、TEST_PAGES(测试时处理的页数,设为 None 则处理整本书)。
适用对象:需要把长篇 PDF 书籍/资料转成结构化知识点与分级摘要的读者、研究者、内容运营与知识管理从业者,以及想学习“逐页处理 + 断点续跑 + 结构化输出”这类 LLM 文档流水线实现的开发者。
说明:来源页面未给出具体许可证、具体模型名称、依赖清单内容和 API 凭据配置方式,这些信息均需以仓库实际文件为准,本文按“待核验”标注,不做推测。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
以下步骤严格按来源 README 的 How to Use 整理。
一、准备环境
- 需要可用的 Python 环境(来源未标注具体版本,待核验)。
- 由于脚本通过 OpenAI 客户端调用模型,需具备可用的 OpenAI API 访问条件;来源未写明 API Key 的具体配置方式,待核验。
二、Setup(克隆与安装依赖)
Clone the repository
git clone [repository-url]cd [repository-name]Install requirements
pip install -r requirements.txt说明:README 中用占位符 [repository-url] 与 [repository-name] 表示仓库地址与目录名,实际使用时替换为 GitHub 仓库地址与克隆后的目录名。
三、Configure(配置)
- 把要分析的 PDF 文件放到项目根目录(Place your PDF file in the project root directory)。
- 打开 read_books.py,把常量 PDF_NAME 改成你的 PDF 文件名。
- 可选:调整其他常量,例如 ANALYSIS_INTERVAL 或 TEST_PAGES。
四、Run(运行)
python read_books.py五、Output(运行后的输出) 脚本会生成:
- book_analysis/knowledge_bases/:包含所提取知识的 JSON 文件;
- book_analysis/summaries/:包含间隔摘要与最终摘要的 Markdown 文件;
- book_analysis/pdfs/:你的 PDF 文件副本。
六、Customization Options(自定义选项)
- 将 ANALYSIS_INTERVAL 设为 None,可跳过间隔摘要;
- 将 TEST_PAGES 设为 None,可处理整本书;
- 调整 MODEL 与 ANALYSIS_MODEL,可切换不同的 AI 模型。
七、首次运行与断点续跑
- 首次运行会建立目录结构、把 PDF 复制到 book_analysis/pdfs/,并逐页处理、生成知识库与摘要。
- 脚本具备 resume 能力:存在已有知识库时会先加载(load_or_create_knowledge_base / load_existing_knowledge),可基于已保存的 JSON 知识库继续。注意 setup_directories() 会清理先前生成的文件,重新运行前请确认是否需要保留已有输出。
八、常见问题排查(依据来源可推断的要点)
- 提示找不到 PDF:确认 PDF 已放在项目根目录,且 PDF_NAME 与实际文件名完全一致(大小写、扩展名)。
- 只想先试跑少量页:设置 TEST_PAGES 为较小数字,确认流程跑通后再设为 None 处理整本书。
- 不想要中间摘要:把 ANALYSIS_INTERVAL 设为 None。
- 目录/索引页被跳过或某页没有被提取内容:这是预期的智能过滤行为,由 PageContent 的 has_content 字段决定该页是否有相关内容。
- 依赖或 API 调用失败:来源未提供具体错误处理说明,需检查 requirements.txt 是否安装成功以及 OpenAI API 访问是否正常,待核验。