154 lines
4.7 KiB
Markdown
Executable File
154 lines
4.7 KiB
Markdown
Executable File
# RAG数据入库流程分析
|
|
|
|
## 理想流程(应该是什么样的)
|
|
|
|
```
|
|
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
│ PDF文章 │ --> │ V14.2提取 │ --> │ 转换为Chunks │ --> │ RAG索引 │
|
|
│ (paper/v14) │ │ (提取器) │ │ (分块+向量化) │ │ (FAISS/Qdrant)│
|
|
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
|
|
│
|
|
v
|
|
┌─────────────┐
|
|
│ 查询使用 │
|
|
│ (API服务) │
|
|
└─────────────┘
|
|
```
|
|
|
|
## 当前实际流程(混乱)
|
|
|
|
```
|
|
┌─────────────┐
|
|
│ PDF文章 │
|
|
│ (各种位置) │
|
|
└──────┬──────┘
|
|
│
|
|
├─> MinerU解析 ──> 中间JSON ──> ? (没有后续)
|
|
│
|
|
├─> V14.2提取 ──> 提取结果 ──> ? (没有入库)
|
|
│
|
|
└─> 直接查PC数据 ──> 绕过RAG索引
|
|
|
|
┌─────────────────────────────────────────┐
|
|
│ RAG索引 (孤立) │
|
|
│ - 只加载固定文件: rag_index_final/ │
|
|
│ - 新文章不会自动加入 │
|
|
│ - 查询时有时用索引,有时绕过 │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
## 核心问题
|
|
|
|
### 问题1: 提取和索引分离
|
|
- V14.2提取器输出JSON/CSV
|
|
- 但没有自动转换为RAG chunks
|
|
- 没有自动更新索引
|
|
|
|
### 问题2: 索引固化
|
|
- RAG只加载 `data/rag_index_final/vector_index.pkl`
|
|
- 新提取的文章不会自动加入
|
|
- 需要手动重建索引
|
|
|
|
### 问题3: 查询路径不一致
|
|
- 有时查RAG索引(旧数据)
|
|
- 有时直接查PC数据(绕过索引)
|
|
- 用户无法确定数据来源
|
|
|
|
## 正确的数据入库流程(建议)
|
|
|
|
### 方案A: 全自动流程(推荐)
|
|
```python
|
|
# 1. PDF入库
|
|
pdf_path = "paper/v14/spl/xxx.pdf"
|
|
|
|
# 2. 自动提取
|
|
extractor = V14Extractor()
|
|
result = extractor.extract(pdf_path)
|
|
|
|
# 3. 自动转换为chunks
|
|
chunks = convert_to_chunks(result)
|
|
|
|
# 4. 自动更新RAG索引
|
|
rag_system.add_document(chunks)
|
|
|
|
# 5. 完成
|
|
print(f"文章已入库,索引包含 {rag_system.total_chunks} chunks")
|
|
```
|
|
|
|
### 方案B: 手动流程(当前)
|
|
```bash
|
|
# 步骤1: V14.2提取
|
|
python extract_v14.py --pdf paper/v14/spl/xxx.pdf --output xxx.json
|
|
|
|
# 步骤2: 转换为chunks
|
|
python convert_to_chunks.py --input xxx.json --output xxx_chunks.json
|
|
|
|
# 步骤3: 更新RAG索引
|
|
python update_rag_index.py --add xxx_chunks.json
|
|
|
|
# 步骤4: 重启服务
|
|
# (让新的索引生效)
|
|
```
|
|
|
|
## 需要修复的问题
|
|
|
|
### 1. 提取器输出格式不统一
|
|
| 提取器 | 输出格式 | 问题 |
|
|
|:---|:---|:---|
|
|
| V14.2 | JSON/CSV | 需要转换为chunks |
|
|
| MinerU | JSON | 需要提取关系 |
|
|
| PC | 直接查数据库 | 无法加入RAG索引 |
|
|
|
|
### 2. 缺少自动转换工具
|
|
- 没有 `convert_v14_to_chunks.py`
|
|
- 没有 `update_rag_index.py`
|
|
- 没有统一的数据格式
|
|
|
|
### 3. RAG系统不支持增量更新
|
|
- 只能全量重建索引
|
|
- 不能单篇添加
|
|
- 需要重启服务
|
|
|
|
## 建议的修复方案
|
|
|
|
### 短期(今天完成)
|
|
1. 创建 `convert_v14_to_chunks.py`
|
|
2. 修改 `rebuild_rag_index.py` 支持V14.2输出
|
|
3. 提取SPL文章并入库
|
|
|
|
### 中期(本周完成)
|
|
1. 修改V14.2提取器,直接输出chunks格式
|
|
2. 创建增量更新索引的工具
|
|
3. 统一数据格式
|
|
|
|
### 长期(下周完成)
|
|
1. 全自动入库流程
|
|
2. 单篇PDF自动提取+索引
|
|
3. 无需手动干预
|
|
|
|
## 现在该怎么办?
|
|
|
|
**选项1: 快速修复(今天可用)**
|
|
```bash
|
|
# 1. 提取SPL文章
|
|
python extract_spl_batch.py
|
|
|
|
# 2. 转换为chunks
|
|
python convert_v14_to_chunks.py --input-dir paper/v14/spl/v14_results/
|
|
|
|
# 3. 重建索引
|
|
python rebuild_rag_index.py
|
|
```
|
|
|
|
**选项2: 彻底修复(本周完成)**
|
|
- 修改V14.2提取器
|
|
- 创建增量更新工具
|
|
- 自动化整个流程
|
|
|
|
**选项3: 临时方案(现在可用)**
|
|
- 直接用PC数据层查询
|
|
- 绕过RAG索引
|
|
- 不依赖向量检索
|
|
|
|
**你选哪个?**
|