AI-reads-books-page-by-page 部署教程:AI 逐页阅读 PDF 并提取知识

本教程将指导你部署 AI-reads-books-page-by-page,一个使用 AI 逐页分析 PDF 书籍,提取知识点并按指定间隔生成摘要的 Python 脚本。


📋 准备工作

1. 环境要求

  • Python 版本:3.8 或更高版本。
  • 依赖管理pip(Python 包管理器)。
  • 网络:能够访问 OpenAI API(或其他兼容 API)以进行 AI 分析。
  • API 密钥:有效的 OpenAI API Key(或兼容的 API 端点与密钥)。

2. 获取项目

从 GitHub 克隆仓库到本地:

1
2
git clone https://github.com/echohive42/AI-reads-books-page-by-page.git
cd AI-reads-books-page-by-page

🛠️ 安装与配置

1. 安装 Python 依赖

项目所需依赖都列在 requirements.txt 中。建议在虚拟环境中安装:

1
2
3
4
5
6
7
# 创建虚拟环境(可选)
python -m venv venv
source venv/bin/activate # Linux/macOS
# 或 .\venv\Scripts\activate # Windows

# 安装依赖
pip install -r requirements.txt

requirements.txt 文件内容通常包含 openaiPyPDF2pypdfpydantic 等库,具体以仓库中的文件为准。

2. 配置脚本

你需要对 read_books.py 脚本进行以下配置:

  1. 设置 PDF 文件:将你想要分析的 PDF 文件放置在项目根目录(即与 read_books.py 同级)下。

  2. 修改脚本中的常量:用文本编辑器打开 read_books.py,找到文件开头的配置区域,修改以下关键常量:

    • PDF_NAME:改为你的 PDF 文件名,例如 "my_book.pdf"
    • MODEL:指定用于页面处理的模型,例如 "gpt-4o""gpt-3.5-turbo"(需确保你的 API 密钥有权限访问)。
    • ANALYSIS_MODEL:指定用于生成摘要的模型,可以与 MODEL 相同或不同。
    • ANALYSIS_INTERVAL:间隔页数,例如 10 表示每处理 10 页生成一次阶段性摘要;设为 None 则跳过阶段性摘要。
    • TEST_PAGES:用于测试的页数,例如 5 表示只处理前 5 页;设为 None 则处理整本书。
  3. 设置 OpenAI API 密钥:脚本需要 API 密钥来调用模型。推荐通过环境变量设置,在终端中执行(替换为你的密钥):

    1
    2
    export OPENAI_API_KEY="你的OpenAI_API密钥"  # Linux/macOS
    # 或 set OPENAI_API_KEY="你的OpenAI_API密钥" # Windows (CMD)

    或者,你也可以在脚本中直接设置,但不推荐,因为有泄露风险。

3. 使用自定义 API 端点(非 OpenAI 官方)

如果你想使用兼容 OpenAI API 格式的本地或第三方服务(如 Ollama、LocalAI),需要修改 read_books.py 中初始化 OpenAI 客户端的部分,指定 base_url。找到类似以下代码并修改:

1
2
3
4
5
6
7
from openai import OpenAI

# 示例:自定义端点
client = OpenAI(
base_url="你的API端点地址", # 例如: "http://localhost:11434/v1"
api_key="你的API密钥", # 如果不需要可留空或填 "not-needed"
)

🚀 运行脚本

完成配置后,在终端中执行以下命令启动分析:

1
python read_books.py

执行过程

  1. 目录准备:脚本会自动创建 book_analysis/ 目录及其子目录:
    • knowledge_bases/:存储 JSON 格式的知识点数据。
    • summaries/:存储 Markdown 格式的阶段性摘要和最终摘要。
    • pdfs/:存放原始 PDF 的副本(可选)。
  2. 逐页处理:脚本逐页读取 PDF 内容,调用 AI 模型提取该页的知识点,并逐步积累到知识库中。进度信息会在终端显示。
  3. 生成摘要
    • 每处理 ANALYSIS_INTERVAL 页,生成一个阶段性摘要并保存为 Markdown 文件。
    • 处理完所有页面后,生成一个完整的最终摘要。
  4. 输出结果:所有结果都保存在 book_analysis/ 目录下,其中知识库会持续更新,支持断点续传(即中断后重新运行会从上次保存的状态继续)。

⚙️ 高级自定义与故障排除

自定义提示词模板

脚本中的 process_page()analyze_knowledge_base() 函数包含发送给 AI 模型的提示词(Prompt)。你可以根据需求修改这些提示词,以改变提取知识点的粒度或摘要的风格。

处理大文件或长书籍

  • 费用控制:处理整本书可能产生较高的 API 费用。建议先用 TEST_PAGES 参数(如 TEST_PAGES=5)进行小规模测试,确认效果和成本后再处理全本。
  • 速率限制:如果 API 有速率限制,脚本处理大量页面时可能需要暂停。你可以考虑在 process_page() 函数的循环中添加 time.sleep() 来避免触发限流。
  • 上下文窗口MODEL 的上下文窗口大小决定了单次能处理的最大文本量。对于页面文字极多的 PDF,可能需要更长的模型或对页面文本进行分割。

常见问题排查

  • ModuleNotFoundError: No module named 'openai':未安装依赖。执行 pip install -r requirements.txt 或单独安装 pip install openai pypdf pydantic
  • API 密钥错误或未找到:确保环境变量 OPENAI_API_KEY 已正确设置。如果使用自定义端点,检查 base_urlapi_key 是否正确。
  • PDF 无法读取或乱码:确保 PDF 文件是文本型 PDF(可选择复制文字),而不是扫描件。对于扫描版 PDF,需要先使用 OCR 工具提取文字。
  • 处理中断后如何继续:脚本在每次页面处理后都会更新 knowledge_bases/ 下的 JSON 文件。如果中断,重新运行脚本,它会加载已有的 JSON 文件并从上次中断的地方继续。
  • 输出的 Markdown 摘要格式混乱:检查用于摘要生成的提示词,可以明确要求 AI 输出格式良好的 Markdown。

通过以上步骤,你可以成功运行这个 AI 逐页阅读 PDF 的工具。它特别适用于从长文档(如书籍、报告)中系统性地提取知识和生成摘要,适合研究者、学生或任何需要高效处理大量文本的人。使用时请注意 API 费用和 PDF 的版权问题。