上过学的人都懂一个道理:笔记写得再漂亮,期末考不出来等于白写。
我备考的时候花了很多时间整理笔记,但到了刷题阶段,发现自己做的题目还是太少。
市面上的题库要么跟教材不匹配,要么收费不便宜。自己动手出题?想想就知道有多累——翻几十页笔记,出一道选择题要写题干、写选项、写正确答案、还要写解析,折腾完一整套试卷,半天就过去了。
最近在 GitHub 上看到一个叫 ExamPrep AI 的项目,作者是 Suranjeet Behera,7 颗星,3 个 fork,不算热门,但做的事情挺实在的——把 PDF 笔记丢进去,它帮你自动生成摘要、选择题、闪卡、题库、复习计划这些东西。
说白了就是:让 AI 替你干出题这个体力活。
这个项目支持两种 AI 引擎,你可以自己选。
一种是本地的 Ollama。你电脑上装好 Ollama,拉一个模型下来(推荐 qwen2.5:7b),所有处理都在本地完成,断网也能用。PDF 内容不会离开你的电脑,也不用担心隐私问题。
另一种是谷歌的 Gemini,走云端。质量会高一些,但需要申请 API key。
这两种方式可以随时切换,想离线用本地模型追求隐私,想效果好切到 Gemini,一个按钮的事。
值得一提的是,Gemini 那边做了容错处理。假如你选的模型负载高了或者超配额了,程序会自动降级到下一个可用模型,链路是 gemini-2.5-flash → gemini-2.0-flash → gemini-1.5-flash,不会直接报错让你干瞪眼。
能生成哪些东西
我数了一下,一份 PDF 进去,它能产出 8 种学习材料:
摘要。包括概述、关键概念、定义、考试要点,适合第一遍快速回顾。
选择题(MCQ)。打开后可以进入测验模式,选答案、提交、看反馈、看解析。系统会记录分数,做错的题可以单独回顾复习。
问答题库。可搜索、可按难度筛选,每条题目都可以展开查看详情,也能单独复制。
闪卡。卡片可以翻转,可以上一张下一张,可以随机打乱,难的卡片还可以标记出来反复练习。
术语表。把 PDF 里的重要术语自动提取出来,按字母排列,可搜索。
学习指南。结构化的分章节学习材料。
复习资料。比摘要更详细一些,适合考前最后一轮过一遍。
学习计划。自动生成一个时间线,排好每天学什么,学了可以打勾,进度可视。
最方便的是所有这些材料都可以导出——Markdown、TXT、DOCX、PDF 四种格式都支持。你可以在应用里学,也可以导出来放到别处去。
背后是怎么实现的?
前端是 Streamlit,后端就是 Python 的模块化组织,没有用独立的 JavaScript 框架,也没有用数据库。
整个流程是:上传 PDF → 验证文件格式和安全 → 提取文字 → 根据你要生成的资源类型选对应的模板 → 发给 AI → 拿到返回后解析 JSON → 做格式标准化和字段校验 → 如果 AI 返回的格式乱了,尝试修复 → 最后渲染成交互界面。
校验这一步我觉得做得挺好。很多 AI 工具是"AI 说啥你听啥",但 AI 返回的格式经常不规范,字段名写错、少字段、数据类型不对都很常见。这个项目专门有一个 generation.py 负责做 JSON 提取、标准化、校验和修复,确保最终展示的内容结构是对的。
一些实际使用的细节
PDF 的要求:只支持可选文字的 PDF,扫描件不行(作者在 TODO 里写了 OCR 支持,但目前还没有)。上传后能看到页数、字数和预估的阅读时间。
配置要求:Python 3.10+,安装依赖后 streamlit run app.py 就能跑。没有数据库,没有迁移脚本,不需要 Docker。如果遇到 PowerShell 执行策略的问题,设一下 bypass 就行。
GitHub 地址:https://github.com/suran-jeet/ExamPrep-AI
夜雨聆风