V1.0.0: 基于索引的知识检索系统
核心功能: - 文档索引:使用LLM分析提取关键词/摘要/主题/实体 - 查询处理:LLM分析查询意图并扩展关键词 - BM25检索:基于倒排索引的相关性排序 - RAG问答:检索增强生成 技术栈: - Flask + SQLAlchemy - OpenAI API兼容LLM - BM25算法 特点: 不依赖向量模型和向量库
This commit is contained in:
179
README.md
Normal file
179
README.md
Normal 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
|
||||
Reference in New Issue
Block a user