一、项目前言当下RAG检索增强生成技术是大模型落地应用的核心方案市面上多数RAG项目依赖云端大模型API、向量服务部署复杂且存在数据隐私泄露风险。对于新手学习、个人知识库使用场景笨重的企业级RAG架构完全没必要。因此本文复现一款轻量级、纯本地部署、零API依赖的RAG知识库问答系统。项目基于Streamlit搭建可视化界面实现文档上传、本地知识存储、智能问答全流程架构规范可扩展既能作为RAG入门练手项目也可日常用于个人知识检索。项目核心优势完全本地化无需联网、无需任何大模型API Key彻底告别401认证、接口超时问题功能完整支持TXT文档上传、自动去重、知识库持久化、多轮对话问答架构规范区分基础运行模块与高阶扩展模块预留向量检索、大模型升级接口极简易部署基于Streamlit快速搭建代码简洁、无冗余依赖新手可一键运行二、项目整体架构与文件说明2.1 完整目录结构本项目采用模块化分层设计职责解耦兼顾可用性与扩展性完整目录如下chatbot/ ├── app_chat.py # 问答可视化前端界面核心运行 ├── app_upload.py # 知识库文件上传界面核心运行 ├── rag.py # RAG问答核心逻辑核心运行 ├── knowledge_base.py # 知识库管理工具类核心运行 ├── vector_stores.py # 向量库扩展模块预留高阶功能 ├── config_data.py # 全局配置文件预留高阶功能 ├── local_kb.txt # 自动生成-本地知识库存储文件 └── local_md5.txt # 自动生成-文件去重记录文件2.2 文件功能详细解析核心运行模块当前版本必需app_chat.py系统问答前端页面基于Streamlit实现多轮对话界面展示用户提问与机器回答记录对话历史调用核心RAG问答接口。app_upload.py知识库上传专属界面支持本地TXT文件上传联动知识库工具类完成文件解析与存储。knowledge_base.py知识库管理核心工具实现文件内容读取、本地持久化存储、MD5文件去重避免重复上传冗余数据。rag.pyRAG核心逻辑层负责启动加载本地知识库、关键词检索匹配、问答结果返回兼容后续LangChain链调用格式。预留扩展模块当前版本不启用保留架构config_data.py全局配置中心预留向量库参数、文本分块参数、模型路径、项目路径等通用配置。当前轻量版本无需硬编码配置后续升级向量检索、大模型功能时可直接启用规范项目代码。vector_stores.py向量数据库管理模块为高阶RAG功能预留。后续可接入Chroma、FAISS等向量库搭配Embedding模型实现语义检索替代当前关键词匹配大幅提升问答智能度。三、核心功能模块实现代码框架讲解本文仅展示各模块核心代码框架与逻辑思路剔除冗余重复代码聚焦功能实现原理方便读者理解与二次开发。3.1 知识库管理模块knowledge_base.py核心功能接收上传文件内容、写入本地知识库、MD5哈希去重保证知识库数据整洁避免重复存储相同内容。class KnowledgeBaseService: # 文件上传、内容持久化、MD5去重核心方法 def upload_by_str(self, data: str, filename): # 1. 将上传文本内容写入本地知识库文件 # 2. 计算文件MD5哈希值校验是否已存在 # 3. 新增文件记录返回上传状态提示 pass3.2 RAG核心问答模块rag.py项目核心逻辑实现知识库自动加载、关键词检索、问答应答同时预留chain属性兼容后续LangChain流式输出、大模型扩展。class RagService: def __init__(self): # 项目启动自动加载本地知识库 self.knowledge_lines self._load_knowledge_base() # 读取本地知识库文件 def _load_knowledge_base(self): # 异常捕获处理文件不存在、文件为空场景 pass # 核心问答匹配逻辑 def ask(self, question): # 1. 校验知识库是否加载成功 # 2. 关键词遍历匹配知识库内容 # 3. 返回匹配结果或无数据提示 pass # 兼容高阶扩展的链属性预留功能 property def chain(self): # 适配流式输出、模型调用的伪链对象 pass3.3 上传界面模块app_upload.py基于Streamlit实现可视化文件上传页面初始化知识库服务监听文件上传事件实时返回上传结果。import streamlit as st from knowledge_base import KnowledgeBaseService # 页面初始化与配置 st.title(知识库文件上传中心) # 初始化会话服务 if kb not in st.session_state: st.session_state.kb KnowledgeBaseService() # 监听文件上传并执行存储逻辑 uploaded_file st.file_uploader(上传TXT知识库文件, type[txt]) if uploaded_file: # 读取文件内容、调用上传方法、展示结果 pass3.4 问答对话界面模块app_chat.py系统前端交互核心实现页面渲染、对话历史记录、用户提问接收、问答结果展示界面简洁流畅支持多轮对话。import streamlit as st from rag import RagService # 页面全局配置 st.set_page_config(page_title本地RAG智能问答, page_icon) st.title( 本地知识库智能问答系统) # 初始化RAG服务与对话历史 if rag not in st.session_state: st.session_state.rag RagService() if messages not in st.session_state: st.session_state.messages [] # 渲染历史对话 for msg in st.session_state.messages: # 展示用户/助手对话记录 pass # 接收用户提问并返回答案 user_input st.chat_input(请输入你的问题...) if user_input: # 保存提问、调用RAG问答、渲染回答结果 pass四、环境部署与项目运行4.1 环境依赖安装项目依赖极简仅需安装Streamlit可视化框架推荐使用虚拟环境部署避免环境冲突。# 创建虚拟环境 conda create -n chatbot python3.10 # 激活环境 conda activate chatbot # 安装核心依赖 pip install streamlit4.2 项目启动流程项目分为上传服务和问答服务两个页面需分别启动分工明确# 启动知识库上传服务默认8501端口 streamlit run app_upload.py # 启动智能问答服务指定8502端口避免冲突 streamlit run app_chat.py --server.port 85024.3 完整使用流程启动上传服务上传自定义TXT格式知识库文件如公式、知识点、笔记文档系统自动完成内容存储与去重生成本地知识库文件启动问答服务输入相关问题系统自动检索知识库并返回对应答案支持多轮连续问答自动保存对话历史。五、项目效果展示六、项目优势与迭代扩展方向6.1 项目核心优势纯本地离线运行无任何网络请求、无API密钥依赖彻底解决接口报错、密钥失效问题优于传统文档查找区别于Word本地查找拥有完整RAG项目架构可扩展语义检索、智能问答架构高可扩展预留配置文件、向量库模块无需重构代码即可升级高阶功能轻量化易上手代码简洁、依赖极少适合新手学习RAG核心原理。6.2 后续迭代方向启用vector_stores.py模块接入Chroma向量数据库本地Embedding模型实现语义检索摆脱关键词精准匹配限制接入本地开源大模型Qwen、Llama等实现真正的大模型智能生成回答而非返回原文优化config_data.py全局配置统一管理分块大小、检索数量等参数新增多文件知识库管理、对话历史导出、知识库在线编辑功能。七、总结本次复现的轻量本地RAG知识库问答系统摒弃了传统RAG项目复杂的云端依赖与冗余配置以轻量化、实用化、可扩展为核心实现了文档上传、知识存储、智能问答的完整闭环。项目既保留了标准RAG的架构规范又适配新手学习与个人使用场景解决了云端API依赖、隐私泄露、部署复杂等痛点。同时预留了完整的高阶扩展接口可无缝升级为企业级语义问答系统是非常优质的RAG入门实战项目。
基于Streamlit的轻量本地RAG知识库问答系统(纯本地部署、无API依赖)
发布时间:2026/5/25 15:53:14
一、项目前言当下RAG检索增强生成技术是大模型落地应用的核心方案市面上多数RAG项目依赖云端大模型API、向量服务部署复杂且存在数据隐私泄露风险。对于新手学习、个人知识库使用场景笨重的企业级RAG架构完全没必要。因此本文复现一款轻量级、纯本地部署、零API依赖的RAG知识库问答系统。项目基于Streamlit搭建可视化界面实现文档上传、本地知识存储、智能问答全流程架构规范可扩展既能作为RAG入门练手项目也可日常用于个人知识检索。项目核心优势完全本地化无需联网、无需任何大模型API Key彻底告别401认证、接口超时问题功能完整支持TXT文档上传、自动去重、知识库持久化、多轮对话问答架构规范区分基础运行模块与高阶扩展模块预留向量检索、大模型升级接口极简易部署基于Streamlit快速搭建代码简洁、无冗余依赖新手可一键运行二、项目整体架构与文件说明2.1 完整目录结构本项目采用模块化分层设计职责解耦兼顾可用性与扩展性完整目录如下chatbot/ ├── app_chat.py # 问答可视化前端界面核心运行 ├── app_upload.py # 知识库文件上传界面核心运行 ├── rag.py # RAG问答核心逻辑核心运行 ├── knowledge_base.py # 知识库管理工具类核心运行 ├── vector_stores.py # 向量库扩展模块预留高阶功能 ├── config_data.py # 全局配置文件预留高阶功能 ├── local_kb.txt # 自动生成-本地知识库存储文件 └── local_md5.txt # 自动生成-文件去重记录文件2.2 文件功能详细解析核心运行模块当前版本必需app_chat.py系统问答前端页面基于Streamlit实现多轮对话界面展示用户提问与机器回答记录对话历史调用核心RAG问答接口。app_upload.py知识库上传专属界面支持本地TXT文件上传联动知识库工具类完成文件解析与存储。knowledge_base.py知识库管理核心工具实现文件内容读取、本地持久化存储、MD5文件去重避免重复上传冗余数据。rag.pyRAG核心逻辑层负责启动加载本地知识库、关键词检索匹配、问答结果返回兼容后续LangChain链调用格式。预留扩展模块当前版本不启用保留架构config_data.py全局配置中心预留向量库参数、文本分块参数、模型路径、项目路径等通用配置。当前轻量版本无需硬编码配置后续升级向量检索、大模型功能时可直接启用规范项目代码。vector_stores.py向量数据库管理模块为高阶RAG功能预留。后续可接入Chroma、FAISS等向量库搭配Embedding模型实现语义检索替代当前关键词匹配大幅提升问答智能度。三、核心功能模块实现代码框架讲解本文仅展示各模块核心代码框架与逻辑思路剔除冗余重复代码聚焦功能实现原理方便读者理解与二次开发。3.1 知识库管理模块knowledge_base.py核心功能接收上传文件内容、写入本地知识库、MD5哈希去重保证知识库数据整洁避免重复存储相同内容。class KnowledgeBaseService: # 文件上传、内容持久化、MD5去重核心方法 def upload_by_str(self, data: str, filename): # 1. 将上传文本内容写入本地知识库文件 # 2. 计算文件MD5哈希值校验是否已存在 # 3. 新增文件记录返回上传状态提示 pass3.2 RAG核心问答模块rag.py项目核心逻辑实现知识库自动加载、关键词检索、问答应答同时预留chain属性兼容后续LangChain流式输出、大模型扩展。class RagService: def __init__(self): # 项目启动自动加载本地知识库 self.knowledge_lines self._load_knowledge_base() # 读取本地知识库文件 def _load_knowledge_base(self): # 异常捕获处理文件不存在、文件为空场景 pass # 核心问答匹配逻辑 def ask(self, question): # 1. 校验知识库是否加载成功 # 2. 关键词遍历匹配知识库内容 # 3. 返回匹配结果或无数据提示 pass # 兼容高阶扩展的链属性预留功能 property def chain(self): # 适配流式输出、模型调用的伪链对象 pass3.3 上传界面模块app_upload.py基于Streamlit实现可视化文件上传页面初始化知识库服务监听文件上传事件实时返回上传结果。import streamlit as st from knowledge_base import KnowledgeBaseService # 页面初始化与配置 st.title(知识库文件上传中心) # 初始化会话服务 if kb not in st.session_state: st.session_state.kb KnowledgeBaseService() # 监听文件上传并执行存储逻辑 uploaded_file st.file_uploader(上传TXT知识库文件, type[txt]) if uploaded_file: # 读取文件内容、调用上传方法、展示结果 pass3.4 问答对话界面模块app_chat.py系统前端交互核心实现页面渲染、对话历史记录、用户提问接收、问答结果展示界面简洁流畅支持多轮对话。import streamlit as st from rag import RagService # 页面全局配置 st.set_page_config(page_title本地RAG智能问答, page_icon) st.title( 本地知识库智能问答系统) # 初始化RAG服务与对话历史 if rag not in st.session_state: st.session_state.rag RagService() if messages not in st.session_state: st.session_state.messages [] # 渲染历史对话 for msg in st.session_state.messages: # 展示用户/助手对话记录 pass # 接收用户提问并返回答案 user_input st.chat_input(请输入你的问题...) if user_input: # 保存提问、调用RAG问答、渲染回答结果 pass四、环境部署与项目运行4.1 环境依赖安装项目依赖极简仅需安装Streamlit可视化框架推荐使用虚拟环境部署避免环境冲突。# 创建虚拟环境 conda create -n chatbot python3.10 # 激活环境 conda activate chatbot # 安装核心依赖 pip install streamlit4.2 项目启动流程项目分为上传服务和问答服务两个页面需分别启动分工明确# 启动知识库上传服务默认8501端口 streamlit run app_upload.py # 启动智能问答服务指定8502端口避免冲突 streamlit run app_chat.py --server.port 85024.3 完整使用流程启动上传服务上传自定义TXT格式知识库文件如公式、知识点、笔记文档系统自动完成内容存储与去重生成本地知识库文件启动问答服务输入相关问题系统自动检索知识库并返回对应答案支持多轮连续问答自动保存对话历史。五、项目效果展示六、项目优势与迭代扩展方向6.1 项目核心优势纯本地离线运行无任何网络请求、无API密钥依赖彻底解决接口报错、密钥失效问题优于传统文档查找区别于Word本地查找拥有完整RAG项目架构可扩展语义检索、智能问答架构高可扩展预留配置文件、向量库模块无需重构代码即可升级高阶功能轻量化易上手代码简洁、依赖极少适合新手学习RAG核心原理。6.2 后续迭代方向启用vector_stores.py模块接入Chroma向量数据库本地Embedding模型实现语义检索摆脱关键词精准匹配限制接入本地开源大模型Qwen、Llama等实现真正的大模型智能生成回答而非返回原文优化config_data.py全局配置统一管理分块大小、检索数量等参数新增多文件知识库管理、对话历史导出、知识库在线编辑功能。七、总结本次复现的轻量本地RAG知识库问答系统摒弃了传统RAG项目复杂的云端依赖与冗余配置以轻量化、实用化、可扩展为核心实现了文档上传、知识存储、智能问答的完整闭环。项目既保留了标准RAG的架构规范又适配新手学习与个人使用场景解决了云端API依赖、隐私泄露、部署复杂等痛点。同时预留了完整的高阶扩展接口可无缝升级为企业级语义问答系统是非常优质的RAG入门实战项目。