Skip to content

rabbit-1014/rag-basic-qa-system

Repository files navigation

RAG 基础问答系统

项目简介

这是一个基于 Streamlit + LangChain + Chroma 实现的本地 RAG 基础问答系统。

项目围绕两条核心流程展开:

  1. 文件上传入库
  2. 基于知识库的问答

用户可以先上传 txt 文件,系统会对文本进行 md5 查重、切片、向量化,并写入 Chroma 向量库;随后在问答页面中输入问题,系统会结合 检索结果、历史消息和提示词模板 生成回答。

这个项目的目标,是跑通一个基础 RAG 系统从 文本入库到检索问答 的完整链路,并完成基础工程化处理。


已实现功能

1. 文件上传入库

  • 支持上传 txt 文件
  • 展示文件名、文件大小、文件类型
  • 基于 md5 判断文件是否重复入库
  • 支持空文件判断
  • 对长文本自动切片
  • 为文本块添加 metadata
  • 使用 embedding 模型将文本写入 Chroma 向量库
  • 提供成功、失败、跳过等页面提示
  • 记录入库日志和异常日志

2. 知识库问答

  • 基于本地向量库进行相似度检索
  • 将检索结果拼接为上下文
  • 将用户问题、检索内容、历史消息组装到提示词模板中
  • 调用大模型生成回答
  • 支持多轮问答
  • 支持本地历史消息持久化

3. 工程化处理

  • 独立日志配置
  • 基础异常处理
  • 页面友好提示
  • 本地持久化保存向量库、历史记录、md5 记录

技术栈

  • Python
  • Streamlit
  • LangChain
  • Chroma
  • DashScope Embeddings
  • 通义千问(Qwen)

项目结构

.
├── app_file_upload.py      # 文件上传与入库页面
├── app_qa.py               # 问答页面
├── knowledge_base.py       # 入库核心逻辑:查重、切片、metadata、入库
├── rag.py                  # 问答核心逻辑:检索、提示词、模型调用
├── vector_stores.py        # 向量检索器封装
├── file_history_store.py   # 历史消息读写
├── config_data.py          # 项目配置
├── logger_config.py        # 日志配置
├── README.md
├── requirements.txt
├── logs/                   # 日志目录(运行后生成)
├── chroma_db/              # 向量库存储目录(运行后生成)
├── chat_history/           # 历史记录目录(运行后生成)
└── md5.text                # md5 查重记录文件(运行后生成)
核心流程
一、入库流程
用户上传 txt 文件
系统读取文件内容
计算文本 md5 并检查是否已处理过
如果文本较长,则进行切片
为每个文本块添加 metadata
调用 embedding 模型进行向量化
将文本块写入 Chroma 向量库
保存 md5 记录,避免重复入库
二、问答流程
用户输入问题
系统读取历史消息
将用户问题转换为检索输入
从向量库中检索相关文本块
将检索结果、历史消息和用户问题组装进提示词模板
调用大模型生成回答
返回答案并保存历史消息
运行环境

建议环境:

Python 3.10+
Ubuntu / Linux 环境
已安装项目依赖
已配置 DashScope API Key
环境变量说明

本项目运行前需要配置环境变量:

export DASHSCOPE_API_KEY="你的_api_key"

如果你使用的是当前虚拟环境,也可以先激活环境后再执行上述命令。

启动方式
1. 进入项目目录
cd ~/rrabbit/项目一:RAG基础问答系统
2. 激活虚拟环境
source ~/rrabbit/streamlit-env/bin/activate
3. 启动文件上传页面
streamlit run app_file_upload.py --server.port 8501
4. 启动问答页面
streamlit run app_qa.py --server.port 8502
使用方式
打开文件上传页面
上传 txt 文件并完成入库
打开问答页面
输入问题并查看回答
可在 logs/app.log 中查看运行日志
测试情况

当前项目已完成以下测试:

正常文本文件上传测试
空文件测试
长文本切片测试
特殊符号文本测试
问答正确性测试
无关问题不乱编测试
编码异常文件上传失败测试
已知限制
当前仅支持 txt 文件上传
当前仅支持 UTF-8 编码的 txt 文件
pdf / doc 文件解析暂未实现
当前主要面向本地测试环境
session_id 当前为固定配置
问答页面当前采用普通输出,未使用流式输出
项目价值

这个项目帮助我完成了一个基础 RAG 系统的完整实践,覆盖了以下核心环节:

文件上传入库
文本切片与向量化
向量数据库写入
检索增强问答
多轮历史记录
基础日志与异常处理

通过这个项目,我对 RAG 系统从 文本入库 → 向量检索 → Prompt 拼接 → 模型生成 → 页面展示 的完整流程有了更清晰的理解,也完成了一个可运行、可演示、可继续扩展的本地 AI 应用项目。

后续可优化方向
支持更多文件类型(如 PDF、DOCX)
优化配置管理方式
支持更灵活的会话管理
优化检索参数与召回效果
增加更完整的前端交互体验

About

A local RAG question-answering system built with Streamlit, LangChain and Chroma.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages