epub-AI-reader · AI 伴读平台
epub-AI-reader 以 reader3项目为起点,延续轻量章节化阅读体验,在本地提供书库、默认问题缓存、AI 聊天与 QA 日志,让每次翻页都能快速获得专业总结并记录提问,并支持进一步导出为阅读笔记,真正实现“不用AI不读书”、“不做笔记不读书”。
项目目标:结合本地 EPUB 解析与 DeepSeek AI,构建可追溯、可导出的阅读流程:提供多书库、离线 AI 缓存、错误重试与笔记导出,最终成就一个贴身阅读助手。
项目概览
目录结构:library/epubs/ 存放原始 EPUB,library/data/ 存放每本书的
_data、default_ai_cache.json 与 reading_progress.db,uv run reader3.py
生成结构化数据,uv run generate_ai_cache.py 补齐默认问答。
Why
- 原始 reader3 只提供静态章节查看,缺乏 AI 语义分析。
- DeepSeek 每次调用消耗时间和配额,需缓存常见问题响应。
- 阅读回答需要保留上下文以供复习与导出。
What
- EPUB 解析+TOC 渲染(遵循 reader3 模型)并生成 book.pkl。
- FastAPI:普通阅读 / AI 阅读 / 聊天 / 书籍列表 / 状态 API。
- generate_ai_cache.py 批量生成默认问答并跳过封面、目录、短内容等。
- AI 面板:呈现缓存、记录 QA 日志、支持“重试上一个问题”。
- export_note.py 将所有答案与 QA 合并成 Markdown 笔记并请求 DeepSeek 生成总结。
系统架构
reader3.py:EPUB 解析 + 章节/图像/TOC 抽取。generate_ai_cache.py:调用 DeepSeek、跳过封面/目录、保存 default_ai_cache.json。server.py:FastAPI 提供阅读、AI、图像、书籍 & 状态接口,并按最后阅读时间排序库。deepseek_client.py:封装 DeepSeek 请求,遇到请求/解析错误会抛出以便前端显示并重试。export_note.py:导出 Markdown 读书笔记并生成 DeepSeek 总结。
技术栈与工具
核心技术
- FastAPI + Jinja2 构建阅读与 AI 界面。
- sqlite3 管理 reading_progress、book_status。
requests+ DeepSeek API,上下文内容截断到 2,000 字。- Marked.js 渲染 AI 回复,支持 Markdown/代码块。
开发工具
uv运行脚本与服务器(参考 README 用法)。sqlite3CLI 查询 library/data/reading_progress.db。- Python3 + pip,依赖 ebooklib、requests、fastapi 等。
- Git 维护,README 中记录环境与故障排查。
关键代码示例
server.py 中 /api/chat 会在成功后写入 QA 日志,出错时不会写入并触发前端重试按钮;generate_ai_cache.py 使用
should_skip_chapter 跳过封面/目录。
def append_chat_history(...):
if cached_entry.get("filtered"):
return
qa_logs.setdefault(str(chapter_index), []).append({...})
此外,export_note.py 遍历 default_ai_cache.json,调用 DeepSeek 生成整体总结并导出 Markdown 笔记。
演示与截图
界面包括 templates/library.html 的书库(显示进度与完成状态),以及 templates/reader_with_ai.html 的章节 + AI 双列布局,右侧可恢复默认回答与 QA 历史。
开发计划
- ✅ 支持 DeepSeek AI 交互与默认缓存(generate_ai_cache.py + default_ai_cache.json)。
- ✅ 添加 QA 日志导出与 DeepSeek 总结功能(export_note.py)。
- 📝 个人主页转发端口实现移动端访问。