README

KnowledgeBase RAG LLM System

基于 Streamlit 的本地知识库上传与 RAG 检索增强问答系统

Python Streamlit LangChain Chroma License

中文 | English


项目简介

一个轻量级、可本地复现的 RAG(检索增强生成) 学习项目。上传 .txt 文档自动切分入库,再以聊天形式提问,由模型基于检索到的知识库内容作答。

  • 知识库上传 — 网页上传 txt 文件,切分后写入 Chroma 向量库(MD5 去重)
  • RAG 问答 — Retrieval → Prompt → LLM → Output 链式调用,支持流式输出
  • 会话管理 — 消息历史留存,支持基于历史的连续追问

适合作为 RAG 入门实践:依赖轻量、无需 GPU,替换成自己的业务文本即可使用。

效果展示

单轮知识库问答
图 1 · 单轮知识库问答

连续追问
图 2 · 结合历史消息的连续追问

示例知识库预置了衣物尺码推荐、材质洗涤养护、颜色搭配等内容(见 assets/*.txt),对标电商客服场景,可直接替换为自己的业务文本。

技术架构

flowchart LR UP["Streamlit 上传页"] -- "上传 .txt" --> KB["KnowledgeBase<br/>切分 + MD5 去重"] KB --> DB[("Chroma 向量库<br/>本地持久化")] CH["Streamlit 聊天页"] -- "用户提问" --> RC["RAG Chain<br/>检索 → 提示词 → LLM"] DB -- "相关文档" --> RC RC -- "流式输出" --> CH
模块 说明
app_upload.py 知识库上传服务(Streamlit 页面)
app_chat.py RAG 问答界面(Streamlit 页面)
knowledge_base.py 文档读取、切分、写库、MD5 去重
rag.py RAG 链组装(检索 → 提示词 → LLM → 输出)
vector_stores.py 向量库检索封装(Chroma 持久化)
file_history_store.py 会话历史存储(FileChatMessageHistory)
config_data.py 模型、路径、chunk 等核心配置

快速开始

环境要求

1. 安装依赖

git clone https://github.com/lhh737/KnowledgeBase-RAG-LLM-System.git
cd KnowledgeBase-RAG-LLM-System

pip install -r requirements.txt

2. 配置 API Key

# Linux / macOS
export DASHSCOPE_API_KEY="your-api-key"

# Windows (CMD)
set DASHSCOPE_API_KEY=your-api-key

3. 启动

# 终端 1:知识库上传服务
streamlit run app_upload.py

# 终端 2:RAG 问答服务
streamlit run app_chat.py

浏览器访问 http://localhost:8501

4. 使用流程

  1. 打开上传页面 → 上传 .txt 文件 → 文档自动切分写入向量库
  2. 打开问答页面 → 输入问题 → 系统先检索知识库,再由模型基于检索内容综合回答

配置说明

核心配置集中在 config_data.py,按需修改:

配置项 默认值 说明
embedding_model_name text-embedding-v4 Embedding 模型
chat_model_name qwen3-max 对话模型
chunk_size / chunk_overlap 1000 / 100 文本切分粒度
similarity_threshold 1 检索返回的文档数量
persist_directory ./chroma_db 向量库持久化目录

⚠️ 上传服务与问答服务必须使用相同的向量库目录和 collection_name,否则问答端检索不到数据。

常见问题

Q:上传文件后,问答仍然检索不到资料?
  • 上传服务与问答服务使用了不同的向量库持久化目录
  • collection_name 配置不一致
  • 文档未正确写入本地数据目录
Q:回答显示较慢或没有正常输出?
  • 文本切分参数(chunk)或检索参数(k)设置不合适
  • 模型接口或网络响应较慢
  • 本地向量库未正确初始化
Q:运行报路径或配置错误?

优先检查 config_data.py 中的模型与路径配置、本地数据目录是否存在、API Key 是否已配置。

扩展方向

  • 检索增强 — 引入 Rerank(如 bge-reranker)提升召回质量
  • 文件类型 — 通过 LangChain 插件支持 PDF / Markdown / Word
  • 存储引擎 — Chroma(轻量)→ FAISS / Milvus(大数据量)

License

MIT © lhh737

致谢

评论

暂无评论