RAG-PDF-Streamlit-Python
hasan-py/RAG-PDF-Streamlit-Python加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
上传任意 PDF 文档,用自然语言提问,由本地运行的 DeepSeek R1 模型提供精准答案——无需联网、无需付费 API,数据全程留在本地。
想象这样一个场景:深夜赶论文 deadline,手头有一份 200 页的 PDF 文献,要找到某个实验数据的具体出处。在传统模式下,你需要一页页翻 PDF,用 Ctrl+F 反复搜索关键词,好不容易定位到段落,还要反复切换页面来回对照。
hasan-py/RAG-PDF-Streamlit-Python 解决的就是这个痛点。它将 PDF 内容全部提取、向量化,用户用自然语言提问,系统自动检索最相关的文本段落,结合大语言模型生成准确答案。整个过程在本地完成,上传哪个 PDF,答案就来自哪个 PDF。
RAG(检索增强生成)并不是新技术,但 2023-2024 年随着 LLM 爆发而大规模普及。这个项目的核心价值在于提供了一个零门槛的本地 RAG 示例——不需要 OpenAI API Key,不需要支付任何费用,一台普通电脑加 Ollama 就能跑起来。
项目采用 deepseek-r1:8b 作为默认模型(可通过修改代码切换为其他 Ollama 模型),在 pdf_rag.py 一个单文件中实现了完整的 RAG 流程:PDF 加载 → 文本分块 → 向量索引 → 语义检索 → LLM 生成。
使用 PDFPlumberLoader 从 PDF 中提取文本,然后通过 RecursiveCharacterTextSplitter 按固定规则分块(chunk_size=1000,overlap=200),为向量检索做准备。代码默认将上传的 PDF 存储在 chat-with-pdf/pdfs/ 目录。
使用 OllamaEmbeddings 将文本块转化为向量,存入 InMemoryVectorStore。每次提问时,用问题向量做相似度搜索(similarity_search),召回最相关的 top-k 文本块作为上下文。
将召回的上下文片段与用户问题拼接为 prompt,送入 Ollama LLM(默认 deepseek-r1:8b)生成回答。prompt 模板限制了回答长度(最多三句话)并要求简洁。
用户上传 PDF
↓
PDFPlumberLoader 提取文本
↓
RecursiveCharacterTextSplitter 分块
↓
OllamaEmbeddings 向量化
↓
InMemoryVectorStore 存入内存
↓
用户提问 → 语义检索 Top-K 块
↓
DeepSeek R1 + LangChain Chain 生成答案
核心依赖:LangChain(社区版)、Streamlit、Ollama(本地 LLM 推理)、PDFPlumber。
部署难度:中等。核心门槛是需要本地安装 Ollama 并下载模型,对技术用户来说是一行命令的事,对非技术用户有一点学习成本。
使用流程:
pip install -r requirements.txt)ollama run deepseek-r1:8b)streamlit run pdf_rag.pyhttp://localhost:8501,上传 PDF,提问可改进之处:
chat-with-pdf/pdfs/(相对路径),在不同工作目录运行会出错RAG 是当前企业 AI 落地最主流的架构之一。开源社区提供了大量云端 RAG 方案(需要 API Key),而本项目的价值在于证明了完全本地化的 RAG 完全可行——无需联网、数据不离开本地,对于隐私敏感场景(医疗文档、内部报告、知识产权文件)意义重大。
随着 Ollama 生态持续成熟,类似的本地 AI 应用门槛正在快速降低。从这个项目可以观察到几个趋势: