local-LLM-with-RAG
让本地大模型化身研究助理,通过 Agentic RAG 主动检索文档回答问题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让本地大模型化身研究助理,通过 Agentic RAG 主动检索文档回答问题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有过这样的经历——花了一整周阅读几十篇论文、报告、文档,想找某个关键细节时,却死活想不起来它在哪份文件里?传统的关键词搜索无法理解语义,只能匹配字面;而把所有文档丢给大模型又太庞大,显存塞不下。这时候,一个能「真正读懂」你文档的本地 AI 助手就成了刚需。
Local LLM with RAG 正是这样一款工具。它由 Python 开发者 amscotti 构建,是一个基于本地大模型与检索增强生成(RAG)技术的实验性研究助手。与普通 RAG 流水线不同,它的特别之处在于:AI 不是被动的检索工具,而是主动决策的智能体(Agent)——它自己判断何时该查文档、查什么、查多少。这让整个问答过程更像一个经验丰富的研究助理在帮你梳理资料,而不是死板的搜索引擎。
amscotti 的背景颇有几分传奇色彩——他是一位有着深度学习研究经历的开发者,早年关注过 ChatGPT 出现前的 NLP 发展,对 Transformer 架构和注意力机制有扎实理解。随着本地大模型能力在 2024-2025 年间的快速崛起(尤其是 Ollama 生态的成熟),他开始思考:能不能不依赖云端 API,用自己电脑上的开源模型来完成学术研究辅助?
这个项目最初是一个周末的「偷懒」实验:与其手动翻阅 PDF 论文,不如让本地模型来帮忙做文献回顾。他选中了当时最新锐的 Pydantic AI 框架(由 Pydantic 团队打造,专为 Agent 设计)配合 Ollama 运行时,并使用 LanceDB 作为向量数据库。几个月的迭代后,这个实验性项目逐渐演变成了一个完整的 agentic RAG 框架,并在 GitHub 上获得了近 300 颗星。
这个项目也折射出一个更广泛的趋势:AI 工具正从「云端集中」走向「本地分散」。对于数据隐私敏感的研究者、企业来说,本地运行意味着文档永远不出自己的设备,这在医疗、法律、金融等强合规领域有巨大的实用价值。
如果用一句话概括这个项目的工作原理,就是:用 Ollama 驱动的本地大模型作为决策大脑,通过 LanceDB 向量数据库实现语义检索,让 AI 自己决定什么时候该查文档。
这个设计背后的核心理念是「Agentic」——不是预设好「先检索再生成」的固定流程,而是让 AI 像真人研究员一样思考。你可以问一个模糊的问题,比如「我之前读过的那篇关于 long context 的论文主要观点是什么」,AI 会自动判断需要先搜索文档,找到相关段落,再综合回答。这个过程可能触发多次文档检索调用,AI 会持续「思考-行动-观察」直到得到满意答案。
整个系统的技术栈非常精炼:
推理层:基于 Pydantic AI(非 LangChain!),这是一个轻量级但类型安全的 Agent 框架,由 Pydantic 团队维护。相比 LangChain 的过度封装,Pydantic AI 的设计哲学更偏向「工具即 Python 函数」,代码可读性极高。Agent 的提示词、系统指令、工具定义全部通过类型化的 Pydantic 模型表达,调试和维护都很方便。
模型层:通过 Ollama 调用本地 LLM。Ollama 屏蔽了模型加载、显存管理等底层复杂性,提供统一的 Python API。项目对模型有一个硬性要求:必须支持 tool calling(函数调用)。因为 agentic RAG 的工作方式就是让模型主动调用搜索工具——如果模型不支持此能力,问答流程就会失效。作者推荐的默认模型是 qwen3:14b(通义千问 14B),这是一款中文能力出色的开源模型,支持完整的 tool calling,同时对显存需求相对合理(约 10GB)。
向量检索层:使用 LanceDB 作为向量数据库。相比 FAISS、Pinecone 等方案,LanceDB 是完全本地化的嵌入式数据库,数据以 Parquet 格式存储在本地目录,不需要独立服务器进程,零运维成本。它通过 Ollama 的 nomic-embed-text 模型生成 768 维文本嵌入向量,支持实时增量更新文档。
文档处理层:支持 PDF、DOCX、PPTX、XLSX、Markdown、HTML、CSV、JSON 等多种格式。文档加载后通过 MarkItDown 统一转为纯文本,再由 split_text() 函数按 1000 字符切分、100 字符重叠的方式分解为语义块(chunk),每个 chunk 附带来源文件名和页码信息存入 LanceDB。这种设计确保了检索结果可以精确定位到原文位置,而不是返回一个孤零零的片段。
如果你不喜欢命令行,项目还提供了一个基于 Streamlit 的图形化 Web 界面。启动方式极为简单:
uv run streamlit run interfaces/streamlit_app.py
界面左侧是控制面板,右侧是聊天窗口。你可以在左侧选择 LLM 模型、指定文档目录、切换 embedding 模型,右侧则与 AI 对话。所有聊天记录会保存在 Streamlit 会话状态中,可以随时回溯查阅。
图1:Streamlit Web UI 界面截图,模型选择、文档路径配置与对话窗口一目了然
这个 UI 的设计思路很务实——没有任何花哨的装饰,但把核心控制选项全部暴露给用户。对于研究者来说,能够快速切换不同模型、直观看到 AI 的思考过程(通过 Streamlit 的 rerun 机制),比华丽的界面更重要。
坦诚地说,这个项目的部署有一定门槛,并非开箱即用。以下是必须满足的前提条件:
Ollama 系统依赖:Ollama 需要在系统层面安装和运行(不是 Python 包),这是最难跨越的关卡。Ollama 负责管理本地模型生命周期——下载、加载、显存分配。对于普通用户,需要先阅读 Ollama 官方文档配置 GPU 加速(NVIDIA GPU 需要安装 CUDA 驱动,macOS 需要 M 系列芯片)。
显存要求苛刻:qwen3:14b 模型本身约 8-10GB,加上 embedding 模型、LanceDB 运行开销,建议至少准备 16GB 系统内存 + 8GB 以上显存的机器。如果只有 CPU 运行,推理速度会非常慢(每个回答可能需要数分钟),基本不可用。
Python 3.13+:项目使用了一些前沿 Python 语法特性(如 PEP 695 风格的新版类型注解语法),最低要求 Python 3.13。这意味着很多现有环境无法直接运行,需要单独配置虚拟环境。
包管理器 UV:项目使用 Astral 的 UV 作为包管理器,而非传统的 pip/conda。UV 的安装和基础操作对非 Python 开发者来说也需要一个学习过程。
因此,这个项目更适合:有 AI 开发经验的工程师、研究者,而非普通终端用户。如果你只是想快速体验 RAG 而不想折腾环境,GitHub 上的 many傻了?不对——更推荐使用已经容器化或托管的方案。
值得学习的亮点:
Pydantic AI 的使用方式非常优雅。整个 Agent 的定义只需要几十行代码:create_research_agent() 工厂函数封装了模型初始化、工具注册、提示词配置,外部调用干净利落。相比 LangChain 里层层抽象的 Agent 类,Pydantic AI 的代码更像「用 Python 原生思维写 AI」,学习曲线平缓很多。
向量检索的 chunk overlap 设计(100 字符重叠)是一个容易被忽视但极其重要的细节。适当的重叠确保了跨 chunk 边界的语义不被切断——比如一句话被机械切分到两个 chunk 中,单独看都不完整,但有 overlap 就能保证关键信息不丢失。
LanceDB 的嵌入式设计也很巧妙。不需要额外部署数据库服务,数据直接存储在 storage/lancedb/ 目录下,用 get_db_connection() 单例模式管理连接,避免了多进程连接导致的文件锁定问题。
明显的局限性:
首先是性能问题。即使是 qwen3:14b 这样相对轻量的模型,在消费级 GPU 上的推理速度仍然远不及云端 API。对于需要快速响应的使用场景,本地方案的体验差距明显。
其次是缺乏持久化记忆。当前版本每次重启 Streamlit 会话,文档向量数据库需要重新加载(虽然有 reload 机制),但对话历史是存储在内存中的,没有持久化存储方案。如果需要跨会话的长期记忆功能,还需要额外的工程工作。
第三是多模态支持缺失。当前只处理纯文本内容,PDF 中的图片、表格、公式都无法理解。对于学术论文这类富格式文档,提取效果会大打折扣。
第四是中文文档处理效果存疑。项目默认针对英文场景优化,nomic-embed-text 对中文的向量化能力不如专门的中文 embedding 模型(如 BGE、 paraphrase-multilingual 等)。如果你的文档以中文为主,效果可能不理想。
Local LLM with RAG 代表了一个值得关注的技术方向:本地化 Agentic AI。随着 Ollama、llama.cpp 等工具链的成熟,本地运行 LLM 的门槛正在快速下降。这个项目展示了一种可能——在不需要任何云端依赖的情况下,获得接近云端质量的 RAG 体验。
从更宏观的角度看,它也是 Pydantic AI 生态的一个优秀案例。Pydantic AI 定位为「AI 应用的 Pydantic」,强调类型安全、代码即配置、开发体验优先——这些设计理念在这个项目中得到了充分体现。相比 LangChain 的过度工程化,Pydantic AI 走出了另一条路,更符合「Python 开发者直觉」。
展望未来,这类项目的演进方向可能包括:更强大的 embedding 模型支持(多语言、领域专用)、持久化多会话记忆、与知识图谱的结合、以及 MCP(Model Context Protocol)协议的接入。如果 amscotti 继续维护,这会是一个持续值得关注的学习样本。
目前该项目在 GitHub 上保持活跃开发(最近的更新在 2025 年中),社区反馈积极。如果你对 Agentic RAG 的工程实现感兴趣,或者正在寻找一个本地化 AI 助手的起点,这个项目值得花一个下午 clone 下来跑一跑。