local-assistant-examples
基于 LangChain + Ollama 的本地 RAG 示例,零 API 费用、100% 数据本
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
基于 LangChain + Ollama 的本地 RAG 示例,零 API 费用、100% 数据本
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
当你试图用 ChatPDF 或 Notion AI 处理一份内部财务报告、技术专利文档时,数据隐私问题随之而来——文件上传意味着内容经过第三方服务器,在合规要求严格的金融、医疗、法律行业,这是无法接受的硬伤。同时,GPT-4 等大模型的 API 调用成本也在持续累积:一个 200 页的 PDF 问答场景,Token 消耗可能轻松突破几美元。
vndee/local-assistant-examples(曾用名 local-rag-example,现更名为 local-assistant-examples)正是为解决这两个问题而生的开源项目:让用户在本地构建一个功能完整的 ChatPDF 应用,100% 数据不出本机,零 API 费用,同时保持良好的交互体验。
项目作者是越南开发者 Duy Huynh(GitHub @vndee),他同时维护着一个技术博客 blog.duy.dev,持续输出 LLM 应用开发教程。项目最初源于一篇详细的博客文章《Build your own RAG and run it locally: Langchain + Ollama + Streamlit》,后扩展为多示例教育仓库,将不同类型的 LLM 应用场景整合到一个统一代码库中。
目前仓库包含两个核心示例:
用户上传 PDF → PyPDFLoader 加载 → RecursiveCharacterTextSplitter 分块
→ FastEmbedEmbeddings 向量化 → Chroma 向量数据库持久化存储
ChatPDF 类的 ingest() 方法负责将 PDF 文档转化为可检索的知识库:
PyPDFLoader 读取 PDF,返回 Document 对象列表RecursiveCharacterTextSplitter 将长文档切分为 1024 字符一段、100 字符重叠的块,既保证上下文连贯,又避免单块超出 LLM 的上下文窗口filter_complex_metadata() 清理 LangChain 不支持的复杂元数据字段persist_directory 持久化,重启后无需重新向量化用户提问 → Chroma similarity search → Top-K 相关文本块 → LangChain Prompt Template
→ ChatOllama (本地 LLM) → 生成回答
ask() 方法执行的是标准 RAG Pipeline:
k=10 每次取 Top-10 相关块,score_threshold=0.0 不过滤低分结果,保证召回率qwen2.5,支持初始化时动态切换任意 Ollama 支持的模型Streamlit 提供了一个轻量级的浏览器交互界面:
streamlit-chat 实现对话气泡,区分用户消息和 AI 回复st.session_state 管理对话历史和向量存储状态,支持跨页面保留上下文这是一个典型的 LangChain LCEL(LangChain Expression Language) 链式架构:Retriever → Prompt → LLM → OutputParser,数据流清晰,组件可替换性强。
依赖栈分析:
除了核心的 RAG 示例,仓库还包含一个更复杂的智能网页爬虫:
max_pages 和 max_depth 控制范围text 策略用 BeautifulSoup 提取纯文本;vision 策略用 Playwright 截图 + 多模态 LLM 分析页面结构| 维度 | 评估 |
|---|---|
| 部署难度 | 低(poetry install + streamlit run) |
| 硬件要求 | 需要本地 GPU 或较强 CPU(qwen2.5 推荐 6GB+ VRAM) |
| 前置依赖 | Ollama 服务必须提前启动并拉取模型 |
| 进阶空间 | 高(可替换 Embedding 模型、切换 LLM、扩展多文档支持) |
对于完全没有 LLM 本地部署经验的用户,主要挑战在于 Ollama 的安装和模型拉取(Mistral-7B 约 4GB,qwen2.5 约 4-5GB)。一旦 Ollama 服务启动,运行 Streamlit 应用本身非常顺畅。
pymupdf 或 marker-pdfRAG(检索增强生成)已经成为 LLM 应用的事实标准架构。本地化 RAG 的兴起反映了一个重要趋势:在数据隐私法规日趋严格的背景下,越来越多的企业和开发者倾向于将 LLM 应用部署在私有环境中,既保证数据主权,又避免 API 依赖和成本波动。
local-assistant-examples 的价值不在于它本身有多复杂,而在于它提供了一个完整可运行的最小 RAG 系统:代码量不大(rag.py 约 100 行),但涵盖了从文档加载、向量检索、Prompt 组装到 UI 交互的完整链路,非常适合作为 LLM 应用开发的入门教材和二次开发起点。随着 Ollama 生态的成熟(现已支持 100+ 模型),本地 LLM + RAG 的组合将在个人开发者和中小团队中持续普及。
核心技术栈:Python · LangChain · Chroma · FastEmbed · Streamlit · Ollama · Playwright
适用场景:本地 LLM 应用开发学习、RAG 架构验证、私有文档问答、数据隐私敏感场景原型开发