# rag_system
**Repository Path**: joyamon/rag_system
## Basic Information
- **Project Name**: rag_system
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-16
- **Last Updated**: 2026-07-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# RAG 智能问答系统
基于 LangChain + FastAPI 的本地化 RAG 智能问答系统,支持多格式文档加载、语义检索、流式问答、多对话管理。
## 功能特性
- 📄 **多格式支持**:PDF、Word(.docx)、PPT(.pptx)、网页(URL)、Markdown、纯文本
- 🔍 **语义检索**:基于 FAISS 向量相似度的精准文档检索,支持相似度阈值过滤
- 💬 **流式问答**:SSE 流式输出实时呈现回答,支持多供应商 LLM(DashScope / DeepSeek / OpenAI)
- 🔄 **增量更新**:支持追加新文档,无需全量重建索引
- 💾 **对话持久化**:浏览器 localStorage 保存对话历史,支持新开 / 切换 / 删除对话
- ⚙️ **在线配置**:系统状态页支持在线修改 LLM 配置(模型、API Key、参数等)
- 🎨 **SPA 前端**:纯 HTML/CSS/JS 三页面单页应用,响应式设计
## 项目结构
```
rag_system/
├── config.yaml # 配置文件
├── requirements.txt # Python 依赖
├── run.py # 主启动脚本
├── docs/ # 文档存放目录(自动加载)
├── data/
│ ├── uploads/ # 上传文件临时存储
│ └── vectorstore/ # FAISS 向量索引
├── frontend/ # SPA 前端页面
│ ├── index.html # 主页面
│ ├── css/
│ │ └── style.css # 样式
│ └── js/
│ ├── api.js # API 客户端
│ ├── chat.js # 对话页逻辑
│ ├── documents.js # 文档管理 / 系统状态页逻辑
│ └── app.js # 主应用逻辑
├── src/
│ ├── __init__.py
│ ├── api.py # FastAPI REST API (12 个端点)
│ ├── config.py # YAML 配置管理
│ ├── document_loader.py # 多格式文档加载
│ ├── text_splitter.py # 文本分块
│ ├── embedding.py # 嵌入模型(DashScope API)
│ ├── vectorstore.py # FAISS 向量存储管理
│ └── rag_chain.py # RAG 问答链(流式/非流式)
```
## 快速启动
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
### 2. 配置文件
编辑 `config.yaml`,设置 LLM 和嵌入模型参数:
```yaml
llm:
provider: dashscope # 供应商: dashscope / deepseek / openai
model_name: qwen3.7-max-2026-06-08
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1
api_key: your-api-key-here
temperature: 0.7
max_tokens: 2048
embeddings:
model_name: qwen3.7-text-embedding
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1
api_key: your-api-key-here
```
也可在系统运行后,通过前端 **系统状态** 页面在线修改 LLM 配置。
### 3. 放置文档
将 PDF、Word、PPT、Markdown、TXT 文件放入 `docs/` 目录。
### 4. 启动系统
```bash
python run.py
```
默认监听 `http://localhost:8000`,可通过 `--port` 参数指定端口:
```bash
python run.py --port 8001
```
### 5. 访问
打开浏览器访问 `http://localhost:8000` 即可使用。
## 使用说明
1. **文档管理**:进入「文档管理」页面,可上传文件、添加网页 URL、重新加载文档,系统自动构建向量索引
2. **智能问答**:在「对话」页面输入问题,系统基于已加载文档检索相关内容并生成回答(流式输出)
3. **对话管理**:左侧列表面板支持新建 / 切换 / 删除对话,消息自动保存在浏览器中
4. **在线配置**:在「系统状态」页面可在线修改 LLM 供应商、模型、API Key 等参数,即时生效
## 支持的文档格式
| 格式 | 扩展名 | 依赖库 |
|------|--------|--------|
| PDF | .pdf | PyPDF2 |
| Word | .docx | python-docx |
| PowerPoint | .pptx | python-pptx |
| 网页 | URL | requests / BeautifulSoup4 |
| Markdown | .md | - |
| 纯文本 | .txt | - |
## API 端点
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /api/health | 健康检查 |
| GET | /api/status | 系统状态(向量库、文档数等) |
| GET | /api/config | 获取当前配置 |
| PUT | /api/config | 更新 LLM 配置 |
| POST | /api/query | 问答(非流式) |
| POST | /api/query/stream | 问答(SSE 流式) |
| POST | /api/documents/reload | 重新加载 docs/ 目录文档 |
| POST | /api/documents/upload | 上传文件 |
| POST | /api/documents/url | 添加网页 URL |
| GET | /api/documents | 文档列表 |
| GET | /api/knowledge | 已连接的外部知识库列表 |
| POST | /api/knowledge/connect | 连接外部知识库目录 |
| POST | /api/knowledge/disconnect | 断开外部知识库连接 |
## 技术栈
- **RAG 框架**:LangChain v0.3+
- **向量数据库**:FAISS-CPU
- **Web 框架**:FastAPI + uvicorn
- **前端**:纯 HTML/CSS/JS SPA(无框架依赖)
- **LLM 支持**:DashScope(通义千问)/ DeepSeek / OpenAI(通过 langchain-openai 兼容接口)
- **文档解析**:PyPDF2、python-docx、python-pptx、BeautifulSoup4
## 展示效果
