一个轻量级、可本地复现的 RAG(检索增强生成) 学习项目。上传 .txt 文档自动切分入库,再以聊天形式提问,由模型基于检索到的知识库内容作答。
- 知识库上传 — 网页上传 txt 文件,切分后写入 Chroma 向量库(MD5 去重)
- RAG 问答 —
Retrieval → Prompt → LLM → Output链式调用,支持流式输出 - 会话管理 — 消息历史留存,支持基于历史的连续追问
适合作为 RAG 入门实践:依赖轻量、无需 GPU,替换成自己的业务文本即可使用。
示例知识库预置了衣物尺码推荐、材质洗涤养护、颜色搭配等内容(见 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 等核心配置 |
- Python ≥ 3.10
- DashScope API Key(在阿里云百炼申请)
git clone https://github.com/lhh737/KnowledgeBase-RAG-LLM-System.git
cd KnowledgeBase-RAG-LLM-System
pip install -r requirements.txt# Linux / macOS
export DASHSCOPE_API_KEY="your-api-key"
# Windows (CMD)
set DASHSCOPE_API_KEY=your-api-key# 终端 1:知识库上传服务
streamlit run app_upload.py
# 终端 2:RAG 问答服务
streamlit run app_chat.py浏览器访问 http://localhost:8501
- 打开上传页面 → 上传
.txt文件 → 文档自动切分写入向量库 - 打开问答页面 → 输入问题 → 系统先检索知识库,再由模型基于检索内容综合回答
核心配置集中在 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(大数据量)
MIT © lhh737

