Files
llm-index-rag/README.md
coder cdaadef10c V1.0.0: 基于索引的知识检索系统
核心功能:
- 文档索引:使用LLM分析提取关键词/摘要/主题/实体
- 查询处理:LLM分析查询意图并扩展关键词
- BM25检索:基于倒排索引的相关性排序
- RAG问答:检索增强生成

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

特点: 不依赖向量模型和向量库
2026-04-07 23:48:06 +08:00

179 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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