d54a105e550a88f7506fcdd1ca82be97e09d8341
LLM Index RAG
基于索引和搜索的知识检索系统(不使用向量模型和向量库)
特点
- 不依赖向量模型 - 使用传统信息检索技术
- LLM增强索引 - 使用大语言模型提取关键词、摘要、实体
- BM25排序 - 经典相关性算法
- 智能查询处理 - LLM分析查询意图并扩展关键词
工作原理
1. 文档索引阶段
文档 → LLM分析 → 提取关键词/摘要/主题/实体 → 构建倒排索引
- 对每个文档使用LLM进行分析
- 提取:关键词、摘要、主题分类、命名实体
- 分块处理,计算词频
- 构建倒排索引(term → [doc_ids])
2. 查询处理阶段
Query → LLM分析 → 提取意图/关键词 → 查询扩展 → 检索
- LLM分析查询意图(查找/比较/解释等)
- 提取主要关键词
- 生成同义词/相关词扩展
- 使用BM25计算相关性得分
3. 检索与生成
- 文档检索模式:返回相关文档列表
- 智能问答模式:RAG生成回答
快速开始
# 安装依赖
pip install -r requirements.txt
# 启动服务
python app.py
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 | 智能问答 |
使用示例
上传并索引文档
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}')
搜索
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:
# 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 |
| 精确匹配 | 较弱 | 强 |
| 语义理解 | 强 | 中等 |
| 可解释性 | 弱 | 强 |
| 部署复杂度 | 高 | 低 |
| 资源消耗 | 高 | 中等 |
扩展建议
- 中文分词 - 集成jieba等专业分词
- 同义词库 - 添加领域同义词扩展
- 混合检索 - 结合向量检索
- 增量索引 - 支持实时更新
- 分布式 - 支持大规模文档
License
MIT
Description
Languages
HTML
45.8%
Python
45.7%
JavaScript
8.5%