181 lines
4.2 KiB
Markdown
181 lines
4.2 KiB
Markdown
|
|
# RAG 知识库服务 (rag-python)
|
|||
|
|
|
|||
|
|
独立的 Python 知识库服务,提供文档解析、向量化和检索功能。
|
|||
|
|
|
|||
|
|
## 部署说明
|
|||
|
|
|
|||
|
|
此文件夹可以与 Java jar 包放在同级目录使用:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
部署目录/
|
|||
|
|
├── xinli-admin.jar # Java 后端 jar 包
|
|||
|
|
├── rag-python/ # Python RAG 服务
|
|||
|
|
│ ├── app.py
|
|||
|
|
│ ├── start.bat # 启动脚本
|
|||
|
|
│ ├── install.bat # 安装脚本
|
|||
|
|
│ ├── knowledge_docs/ # 知识库文档(放入文档)
|
|||
|
|
│ ├── index_data/ # 索引数据(自动生成)
|
|||
|
|
│ └── ...
|
|||
|
|
└── ...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 1. 安装依赖
|
|||
|
|
|
|||
|
|
双击运行 `install.bat`,或手动执行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python -m venv venv
|
|||
|
|
venv\Scripts\activate
|
|||
|
|
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 启动服务
|
|||
|
|
|
|||
|
|
双击运行 `start.bat`,或手动执行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
venv\Scripts\activate
|
|||
|
|
python app.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
服务启动后访问: http://localhost:5000
|
|||
|
|
|
|||
|
|
### 3. 添加文档
|
|||
|
|
|
|||
|
|
有两种方式添加文档到知识库:
|
|||
|
|
|
|||
|
|
**方式一:直接放入文件夹**
|
|||
|
|
- 将文档文件放入 `knowledge_docs` 文件夹
|
|||
|
|
- 服务会自动检测并索引新文件
|
|||
|
|
|
|||
|
|
**方式二:通过 API 上传**
|
|||
|
|
- 使用前端页面上传
|
|||
|
|
- 或调用 `/api/documents/upload` 接口
|
|||
|
|
|
|||
|
|
## 功能特点
|
|||
|
|
|
|||
|
|
- 🔄 **自动索引**: 启动时自动扫描 `knowledge_docs` 文件夹并索引所有文档
|
|||
|
|
- 📁 **文件监控**: 实时监控文件夹变化,自动处理新增/修改/删除的文件
|
|||
|
|
- 🔍 **语义搜索**: 使用多语言向量模型,支持中文语义检索
|
|||
|
|
- 📄 **多格式支持**: 支持 txt、md、pdf、docx 格式
|
|||
|
|
- 💾 **持久化存储**: 索引数据保存到磁盘,重启后自动加载
|
|||
|
|
- 🌐 **REST API**: 提供完整的 HTTP API,方便集成
|
|||
|
|
|
|||
|
|
## API 接口
|
|||
|
|
|
|||
|
|
### 健康检查
|
|||
|
|
```
|
|||
|
|
GET /api/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 文档管理
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
# 获取文档列表
|
|||
|
|
GET /api/documents
|
|||
|
|
|
|||
|
|
# 上传文档
|
|||
|
|
POST /api/documents/upload
|
|||
|
|
Content-Type: multipart/form-data
|
|||
|
|
file: <文件>
|
|||
|
|
|
|||
|
|
# 删除文档
|
|||
|
|
DELETE /api/documents/<filename>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 搜索
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/search
|
|||
|
|
Content-Type: application/json
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
"query": "搜索内容",
|
|||
|
|
"top_k": 5
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 索引管理
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
# 获取统计信息
|
|||
|
|
GET /api/stats
|
|||
|
|
|
|||
|
|
# 扫描文件夹(索引新文件)
|
|||
|
|
POST /api/scan
|
|||
|
|
|
|||
|
|
# 重建索引
|
|||
|
|
POST /api/rebuild
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
rag-python/
|
|||
|
|
├── app.py # Flask 应用入口
|
|||
|
|
├── config.py # 配置文件
|
|||
|
|
├── document_parser.py # 文档解析器
|
|||
|
|
├── text_splitter.py # 文本分块器
|
|||
|
|
├── vector_store.py # 向量存储(FAISS)
|
|||
|
|
├── knowledge_service.py # 知识库服务
|
|||
|
|
├── file_watcher.py # 文件监控
|
|||
|
|
├── requirements.txt # Python 依赖
|
|||
|
|
├── install.bat # 安装脚本
|
|||
|
|
├── start.bat # 启动脚本
|
|||
|
|
├── knowledge_docs/ # 知识库文档目录(放入文档)
|
|||
|
|
├── index_data/ # 索引数据目录(自动生成)
|
|||
|
|
└── uploads/ # 上传临时目录(自动生成)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置说明
|
|||
|
|
|
|||
|
|
编辑 `config.py` 修改配置:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# 服务端口
|
|||
|
|
PORT = 5000
|
|||
|
|
|
|||
|
|
# 文本分块大小
|
|||
|
|
CHUNK_SIZE = 500
|
|||
|
|
CHUNK_OVERLAP = 50
|
|||
|
|
|
|||
|
|
# 向量模型(支持中文)
|
|||
|
|
EMBEDDING_MODEL = "paraphrase-multilingual-MiniLM-L12-v2"
|
|||
|
|
|
|||
|
|
# 检索返回数量
|
|||
|
|
TOP_K = 5
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 与 Java 项目集成
|
|||
|
|
|
|||
|
|
Java 项目通过 HTTP 调用本服务的 API:
|
|||
|
|
|
|||
|
|
1. 确保 Python 服务已启动
|
|||
|
|
2. Java 配置文件中设置:
|
|||
|
|
```yaml
|
|||
|
|
rag:
|
|||
|
|
python:
|
|||
|
|
url: http://localhost:5000
|
|||
|
|
enabled: true
|
|||
|
|
```
|
|||
|
|
3. 前端知识库管理页面会自动检测服务状态
|
|||
|
|
|
|||
|
|
## 常见问题
|
|||
|
|
|
|||
|
|
### Q: 首次启动很慢?
|
|||
|
|
A: 首次启动需要下载向量模型(约 500MB),请耐心等待。模型会缓存到用户目录。
|
|||
|
|
|
|||
|
|
### Q: 如何更换向量模型?
|
|||
|
|
A: 修改 `config.py` 中的 `EMBEDDING_MODEL`,推荐使用支持中文的模型。
|
|||
|
|
|
|||
|
|
### Q: 索引数据在哪里?
|
|||
|
|
A: 索引保存在 `index_data` 目录,包括 FAISS 索引和文档元数据。
|
|||
|
|
|
|||
|
|
### Q: 如何清空知识库?
|
|||
|
|
A: 删除 `index_data` 目录下的文件,或调用重建索引 API。
|
|||
|
|
|
|||
|
|
### Q: 电脑重启后如何恢复?
|
|||
|
|
A: 只需再次运行 `start.bat`,服务会自动加载已有索引。
|