V1.0.0: 基于索引的知识检索系统

核心功能:
- 文档索引:使用LLM分析提取关键词/摘要/主题/实体
- 查询处理:LLM分析查询意图并扩展关键词
- BM25检索:基于倒排索引的相关性排序
- RAG问答:检索增强生成

技术栈:
- Flask + SQLAlchemy
- OpenAI API兼容LLM
- BM25算法

特点: 不依赖向量模型和向量库
This commit is contained in:
2026-04-07 23:48:06 +08:00
commit cdaadef10c
10 changed files with 2079 additions and 0 deletions

179
README.md Normal file
View File

@@ -0,0 +1,179 @@
# LLM Index RAG
基于索引和搜索的知识检索系统(不使用向量模型和向量库)
## 特点
- **不依赖向量模型** - 使用传统信息检索技术
- **LLM增强索引** - 使用大语言模型提取关键词、摘要、实体
- **BM25排序** - 经典相关性算法
- **智能查询处理** - LLM分析查询意图并扩展关键词
## 工作原理
### 1. 文档索引阶段
```
文档 → LLM分析 → 提取关键词/摘要/主题/实体 → 构建倒排索引
```
- 对每个文档使用LLM进行分析
- 提取:关键词、摘要、主题分类、命名实体
- 分块处理,计算词频
- 构建倒排索引term → [doc_ids]
### 2. 查询处理阶段
```
Query → LLM分析 → 提取意图/关键词 → 查询扩展 → 检索
```
- LLM分析查询意图查找/比较/解释等)
- 提取主要关键词
- 生成同义词/相关词扩展
- 使用BM25计算相关性得分
### 3. 检索与生成
- **文档检索模式**:返回相关文档列表
- **智能问答模式**RAG生成回答
## 快速开始
```bash
# 安装依赖
pip install -r requirements.txt
# 启动服务
python app.py
```
访问 http://localhost:19001
## API接口
### 文档管理
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/documents` | GET | 获取文档列表 |
| `/api/documents` | POST | 上传文档 |
| `/api/documents/<id>` | GET | 获取文档详情 |
| `/api/documents/<id>` | DELETE | 删除文档 |
### 索引管理
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/index/<id>` | POST | 索引单个文档 |
| `/api/index/batch` | POST | 批量索引 |
| `/api/index/rebuild` | POST | 重建索引 |
| `/api/stats` | GET | 获取统计信息 |
### 搜索
| 接口 | 方法 | 说明 |
|------|------|------|
| `/api/search` | POST | 文档检索 |
| `/api/rag/answer` | POST | 智能问答 |
## 使用示例
### 上传并索引文档
```python
import requests
# 上传文档
files = {'file': open('document.pdf', 'rb')}
r = requests.post('http://localhost:19001/api/documents', files=files)
doc_id = r.json()['document']['id']
# 索引文档
requests.post(f'http://localhost:19001/api/index/{doc_id}')
```
### 搜索
```python
import requests
# 文档检索
r = requests.post('http://localhost:19001/api/search', json={
'query': '机器学习的基本原理',
'top_k': 10
})
results = r.json()['results']
# 智能问答
r = requests.post('http://localhost:19001/api/rag/answer', json={
'query': '什么是深度学习?'
})
answer = r.json()['answer']
```
## 配置说明
修改 `config.py`
```python
# LLM配置
LLM_CONFIG = {
"api_base": "http://192.168.2.5:1234/v1",
"model": "qwen/qwen3.5-35b-a3b",
}
# 索引配置
INDEX_CONFIG = {
"bm25_k1": 1.5, # BM25参数
"bm25_b": 0.75,
"max_results": 20,
}
# 文档处理
DOC_CONFIG = {
"chunk_size": 2000, # 分块大小
"max_keywords": 20, # 最大关键词数
}
```
## 目录结构
```
llm-index-rag/
├── app.py # Flask应用
├── config.py # 配置文件
├── models.py # 数据模型
├── services.py # 核心服务
├── requirements.txt # 依赖
├── documents/ # 文档存储
├── indexes/ # 索引文件
├── templates/ # HTML模板
│ ├── index.html
│ ├── documents.html
│ └── search.html
└── static/ # 静态资源
```
## 对比向量RAG
| 维度 | 向量RAG | 索引RAG本系统 |
|------|---------|------------------|
| 依赖 | 向量模型、向量库 | 仅LLM |
| 精确匹配 | 较弱 | 强 |
| 语义理解 | 强 | 中等 |
| 可解释性 | 弱 | 强 |
| 部署复杂度 | 高 | 低 |
| 资源消耗 | 高 | 中等 |
## 扩展建议
1. **中文分词** - 集成jieba等专业分词
2. **同义词库** - 添加领域同义词扩展
3. **混合检索** - 结合向量检索
4. **增量索引** - 支持实时更新
5. **分布式** - 支持大规模文档
## License
MIT